Changeset 209148 in webkit


Ignore:
Timestamp:
Nov 30, 2016 12:38:46 PM (7 years ago)
Author:
hyatt@apple.com
Message:

[CSS Parser] Fix columns shorthand parsing
https://bugs.webkit.org/show_bug.cgi?id=165210

Reviewed by Zalan Bujtas.

  • css/parser/CSSPropertyParser.cpp:

(WebCore::CSSPropertyParser::consumeColumns):
(WebCore::consumeColumnWidthOrCount): Deleted.
Bring over the old parser code, since it was actually better at creating implicit values for auto.

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r209147 r209148  
     12016-11-30  Dave Hyatt  <hyatt@apple.com>
     2
     3        [CSS Parser] Fix columns shorthand parsing
     4        https://bugs.webkit.org/show_bug.cgi?id=165210
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        * css/parser/CSSPropertyParser.cpp:
     9        (WebCore::CSSPropertyParser::consumeColumns):
     10        (WebCore::consumeColumnWidthOrCount): Deleted.
     11        Bring over the old parser code, since it was actually better at creating implicit values for auto.
     12
    1132016-11-30  Andy Estes  <aestes@apple.com>
    214
  • trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp

    r209142 r209148  
    42864286#endif
    42874287
    4288 static bool consumeColumnWidthOrCount(CSSParserTokenRange& range, RefPtr<CSSValue>& columnWidth, RefPtr<CSSValue>& columnCount)
    4289 {
    4290     if (range.peek().id() == CSSValueAuto) {
    4291         consumeIdent(range);
    4292         return true;
    4293     }
    4294     if (!columnWidth) {
    4295         columnWidth = consumeColumnWidth(range);
    4296         if (columnWidth)
    4297             return true;
    4298     }
    4299     if (!columnCount)
    4300         columnCount = consumeColumnCount(range);
    4301     return columnCount;
    4302 }
    4303 
    43044288bool CSSPropertyParser::consumeColumns(bool important)
    43054289{
    43064290    RefPtr<CSSValue> columnWidth;
    43074291    RefPtr<CSSValue> columnCount;
    4308     if (!consumeColumnWidthOrCount(m_range, columnWidth, columnCount))
    4309         return false;
    4310     consumeColumnWidthOrCount(m_range, columnWidth, columnCount);
     4292    bool hasPendingExplicitAuto = false;
     4293   
     4294    for (unsigned propertiesParsed = 0; propertiesParsed < 2 && !m_range.atEnd(); ++propertiesParsed) {
     4295        if (!propertiesParsed && m_range.peek().id() == CSSValueAuto) {
     4296            // 'auto' is a valid value for any of the two longhands, and at this point
     4297            // we don't know which one(s) it is meant for. We need to see if there are other values first.
     4298            consumeIdent(m_range);
     4299            hasPendingExplicitAuto = true;
     4300        } else {
     4301            if (!columnWidth) {
     4302                if ((columnWidth = consumeColumnWidth(m_range)))
     4303                    continue;
     4304            }
     4305            if (!columnCount) {
     4306                if ((columnCount = consumeColumnCount(m_range)))
     4307                    continue;
     4308            }
     4309            // If we didn't find at least one match, this is an invalid shorthand and we have to ignore it.
     4310            return false;
     4311        }
     4312    }
     4313   
    43114314    if (!m_range.atEnd())
    43124315        return false;
    4313     if (!columnWidth)
    4314         columnWidth = CSSValuePool::singleton().createIdentifierValue(CSSValueAuto);
    4315     if (!columnCount)
    4316         columnCount = CSSValuePool::singleton().createIdentifierValue(CSSValueAuto);
    4317     addProperty(CSSPropertyColumnWidth, CSSPropertyInvalid, columnWidth.releaseNonNull(), important);
    4318     addProperty(CSSPropertyColumnCount, CSSPropertyInvalid, columnCount.releaseNonNull(), important);
     4316   
     4317    // Any unassigned property at this point will become implicit 'auto'.
     4318    if (columnWidth)
     4319        addProperty(CSSPropertyColumnWidth, CSSPropertyInvalid, columnWidth.releaseNonNull(), important);
     4320    else {
     4321        addProperty(CSSPropertyColumnWidth, CSSPropertyInvalid, CSSValuePool::singleton().createIdentifierValue(CSSValueAuto), important, !hasPendingExplicitAuto /* implicit */);
     4322        hasPendingExplicitAuto = false;
     4323    }
     4324   
     4325    if (columnCount)
     4326        addProperty(CSSPropertyColumnCount, CSSPropertyInvalid, columnCount.releaseNonNull(), important);
     4327    else
     4328        addProperty(CSSPropertyColumnCount, CSSPropertyInvalid, CSSValuePool::singleton().createIdentifierValue(CSSValueAuto), important, !hasPendingExplicitAuto /* implicit */);
     4329   
    43194330    return true;
    43204331}
Note: See TracChangeset for help on using the changeset viewer.