⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cssparser.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                    return true;                }                return false;            }        }        break;    case CSSPropertyWebkitPerspectiveOrigin:    case CSSPropertyWebkitPerspectiveOriginX:    case CSSPropertyWebkitPerspectiveOriginY: {        RefPtr<CSSValue> val1;        RefPtr<CSSValue> val2;        int propId1, propId2;        if (parsePerspectiveOrigin(propId, propId1, propId2, val1, val2)) {            addProperty(propId1, val1.release(), important);            if (val2)                addProperty(propId2, val2.release(), important);            return true;        }        return false;    }    case CSSPropertyWebkitAnimationDelay:    case CSSPropertyWebkitAnimationDirection:    case CSSPropertyWebkitAnimationDuration:    case CSSPropertyWebkitAnimationName:    case CSSPropertyWebkitAnimationIterationCount:    case CSSPropertyWebkitAnimationTimingFunction:    case CSSPropertyWebkitTransitionDelay:    case CSSPropertyWebkitTransitionDuration:    case CSSPropertyWebkitTransitionTimingFunction:    case CSSPropertyWebkitTransitionProperty: {        RefPtr<CSSValue> val;        if (parseAnimationProperty(propId, val)) {            addProperty(propId, val.release(), important);            return true;        }        return false;    }    case CSSPropertyWebkitMarginCollapse: {        const int properties[2] = { CSSPropertyWebkitMarginTopCollapse,            CSSPropertyWebkitMarginBottomCollapse };        if (num == 1) {            ShorthandScope scope(this, CSSPropertyWebkitMarginCollapse);            if (!parseValue(properties[0], important))                return false;            CSSValue* value = m_parsedProperties[m_numParsedProperties-1]->value();            addProperty(properties[1], value, important);            return true;        }        else if (num == 2) {            ShorthandScope scope(this, CSSPropertyWebkitMarginCollapse);            if (!parseValue(properties[0], important) || !parseValue(properties[1], important))                return false;            return true;        }        return false;    }    case CSSPropertyWebkitMarginTopCollapse:    case CSSPropertyWebkitMarginBottomCollapse:        if (id == CSSValueCollapse || id == CSSValueSeparate || id == CSSValueDiscard)            valid_primitive = true;        break;    case CSSPropertyTextLineThroughMode:    case CSSPropertyTextOverlineMode:    case CSSPropertyTextUnderlineMode:        if (id == CSSValueContinuous || id == CSSValueSkipWhiteSpace)            valid_primitive = true;        break;    case CSSPropertyTextLineThroughStyle:    case CSSPropertyTextOverlineStyle:    case CSSPropertyTextUnderlineStyle:        if (id == CSSValueNone || id == CSSValueSolid || id == CSSValueDouble ||            id == CSSValueDashed || id == CSSValueDotDash || id == CSSValueDotDotDash ||            id == CSSValueWave)            valid_primitive = true;        break;    case CSSPropertyTextLineThroughWidth:    case CSSPropertyTextOverlineWidth:    case CSSPropertyTextUnderlineWidth:        if (id == CSSValueAuto || id == CSSValueNormal || id == CSSValueThin ||            id == CSSValueMedium || id == CSSValueThick)            valid_primitive = true;        else            valid_primitive = !id && validUnit(value, FNumber|FLength|FPercent, m_strict);        break;    case CSSPropertyResize: // none | both | horizontal | vertical | auto        if (id == CSSValueNone || id == CSSValueBoth || id == CSSValueHorizontal || id == CSSValueVertical || id == CSSValueAuto)            valid_primitive = true;        break;    case CSSPropertyWebkitColumnCount:        if (id == CSSValueAuto)            valid_primitive = true;        else            valid_primitive = !id && validUnit(value, FInteger | FNonNeg, false);        break;    case CSSPropertyWebkitColumnGap:         // normal | <length>        if (id == CSSValueNormal)            valid_primitive = true;        else            valid_primitive = validUnit(value, FLength | FNonNeg, m_strict);        break;    case CSSPropertyWebkitColumnWidth:         // auto | <length>        if (id == CSSValueAuto)            valid_primitive = true;        else // Always parse this property in strict mode, since it would be ambiguous otherwise when used in the 'columns' shorthand property.            valid_primitive = validUnit(value, FLength, true);        break;    case CSSPropertyPointerEvents:        // none | visiblePainted | visibleFill | visibleStroke | visible |        // painted | fill | stroke | auto | all | inherit        if (id == CSSValueVisible || id == CSSValueNone || id == CSSValueAll || id == CSSValueAuto ||            (id >= CSSValueVisiblepainted && id <= CSSValueStroke))            valid_primitive = true;        break;                // End of CSS3 properties    // Apple specific properties.  These will never be standardized and are purely to    // support custom WebKit-based Apple applications.    case CSSPropertyWebkitLineClamp:        valid_primitive = (!id && validUnit(value, FPercent, false));        break;    case CSSPropertyWebkitTextSizeAdjust:        if (id == CSSValueAuto || id == CSSValueNone)            valid_primitive = true;        break;    case CSSPropertyWebkitRtlOrdering:        if (id == CSSValueLogical || id == CSSValueVisual)            valid_primitive = true;        break;        case CSSPropertyWebkitFontSizeDelta:           // <length>        valid_primitive = validUnit(value, FLength, m_strict);        break;    case CSSPropertyWebkitNbspMode:     // normal | space        if (id == CSSValueNormal || id == CSSValueSpace)            valid_primitive = true;        break;    case CSSPropertyWebkitLineBreak:   // normal | after-white-space        if (id == CSSValueNormal || id == CSSValueAfterWhiteSpace)            valid_primitive = true;        break;    case CSSPropertyWebkitMatchNearestMailBlockquoteColor:   // normal | match        if (id == CSSValueNormal || id == CSSValueMatch)            valid_primitive = true;        break;    case CSSPropertyWebkitHighlight:        if (id == CSSValueNone || value->unit == CSSPrimitiveValue::CSS_STRING)            valid_primitive = true;        break;        case CSSPropertyWebkitBorderFit:        if (id == CSSValueBorder || id == CSSValueLines)            valid_primitive = true;        break;            case CSSPropertyWebkitTextSecurity:        // disc | circle | square | none | inherit        if (id == CSSValueDisc || id == CSSValueCircle || id == CSSValueSquare|| id == CSSValueNone)            valid_primitive = true;        break;#if ENABLE(DASHBOARD_SUPPORT)    case CSSPropertyWebkitDashboardRegion:                 // <dashboard-region> | <dashboard-region>         if (value->unit == CSSParserValue::Function || id == CSSValueNone)            return parseDashboardRegions(propId, important);        break;#endif    // End Apple-specific properties        /* shorthand properties */    case CSSPropertyBackground: {        // Position must come before color in this array because a plain old "0" is a legal color        // in quirks mode but it's usually the X coordinate of a position.        // FIXME: Add CSSPropertyWebkitBackgroundSize to the shorthand.        const int properties[] = { CSSPropertyBackgroundImage, CSSPropertyBackgroundRepeat,                                    CSSPropertyBackgroundAttachment, CSSPropertyBackgroundPosition, CSSPropertyWebkitBackgroundClip,                                   CSSPropertyWebkitBackgroundOrigin, CSSPropertyBackgroundColor };        return parseFillShorthand(propId, properties, 7, important);    }    case CSSPropertyWebkitMask: {        const int properties[] = { CSSPropertyWebkitMaskImage, CSSPropertyWebkitMaskRepeat,                                    CSSPropertyWebkitMaskAttachment, CSSPropertyWebkitMaskPosition, CSSPropertyWebkitMaskClip,                                   CSSPropertyWebkitMaskOrigin };        return parseFillShorthand(propId, properties, 6, important);    }    case CSSPropertyBorder:        // [ 'border-width' || 'border-style' || <color> ] | inherit    {        const int properties[3] = { CSSPropertyBorderWidth, CSSPropertyBorderStyle,                                    CSSPropertyBorderColor };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyBorderTop:        // [ 'border-top-width' || 'border-style' || <color> ] | inherit    {        const int properties[3] = { CSSPropertyBorderTopWidth, CSSPropertyBorderTopStyle,                                    CSSPropertyBorderTopColor};        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyBorderRight:        // [ 'border-right-width' || 'border-style' || <color> ] | inherit    {        const int properties[3] = { CSSPropertyBorderRightWidth, CSSPropertyBorderRightStyle,                                    CSSPropertyBorderRightColor };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyBorderBottom:        // [ 'border-bottom-width' || 'border-style' || <color> ] | inherit    {        const int properties[3] = { CSSPropertyBorderBottomWidth, CSSPropertyBorderBottomStyle,                                    CSSPropertyBorderBottomColor };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyBorderLeft:        // [ 'border-left-width' || 'border-style' || <color> ] | inherit    {        const int properties[3] = { CSSPropertyBorderLeftWidth, CSSPropertyBorderLeftStyle,                                    CSSPropertyBorderLeftColor };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyOutline:        // [ 'outline-color' || 'outline-style' || 'outline-width' ] | inherit    {        const int properties[3] = { CSSPropertyOutlineWidth, CSSPropertyOutlineStyle,                                    CSSPropertyOutlineColor };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyBorderColor:        // <color>{1,4} | inherit    {        const int properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor,                                    CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor };        return parse4Values(propId, properties, important);    }    case CSSPropertyBorderWidth:        // <border-width>{1,4} | inherit    {        const int properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth,                                    CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth };        return parse4Values(propId, properties, important);    }    case CSSPropertyBorderStyle:        // <border-style>{1,4} | inherit    {        const int properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle,                                    CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle };        return parse4Values(propId, properties, important);    }    case CSSPropertyMargin:        // <margin-width>{1,4} | inherit    {        const int properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight,                                    CSSPropertyMarginBottom, CSSPropertyMarginLeft };        return parse4Values(propId, properties, important);    }    case CSSPropertyPadding:        // <padding-width>{1,4} | inherit    {        const int properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight,                                    CSSPropertyPaddingBottom, CSSPropertyPaddingLeft };        return parse4Values(propId, properties, important);    }    case CSSPropertyFont:        // [ [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]?        // 'font-family' ] | caption | icon | menu | message-box | small-caption | status-bar | inherit        if (id >= CSSValueCaption && id <= CSSValueStatusBar)            valid_primitive = true;        else            return parseFont(important);        break;    case CSSPropertyListStyle:    {        const int properties[3] = { CSSPropertyListStyleType, CSSPropertyListStylePosition,                                    CSSPropertyListStyleImage };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyWebkitColumns: {        const int properties[2] = { CSSPropertyWebkitColumnWidth, CSSPropertyWebkitColumnCount };        return parseShorthand(propId, properties, 2, important);    }    case CSSPropertyWebkitColumnRule: {        const int properties[3] = { CSSPropertyWebkitColumnRuleWidth, CSSPropertyWebkitColumnRuleStyle,                                    CSSPropertyWebkitColumnRuleColor };        return parseShorthand(propId, properties, 3, important);    }    case CSSPropertyWebkitTextStroke: {        const int properties[2] = { CSSPropertyWebkitTextStrokeWidth, CSSPropertyWebkitTextStrokeColor };        return parseShorthand(propId, properties, 2, important);    }    case CSSPropertyWebkitAnimation:        return parseAnimationShorthand(important);    case CSSPropertyWebkitTransition:        return parseTransitionShorthand(important);    case CSSPropertyInvalid:        return false;    case CSSPropertyFontStretch:    case CSSPropertyPage:    case CSSPropertyTextLineThrough:    case CSSPropertyTextOverline:    case CSSPropertyTextUnderline:        return false;#if ENABLE(SVG)    default:        return parseSVGValue(propId, important);#endif    }    if (valid_primitive) {        if (id != 0)            parsedValue = CSSPrimitiveValue::createIdentifier(id);        else if (value->unit == CSSPrimitiveValue::CSS_STRING)            parsedValue = CSSPrimitiveValue::create(value->string, (CSSPrimitiveValue::UnitTypes) value->unit);        else if (value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPrimitiveValue::CSS_KHZ)            parsedValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);        else if (value->unit >= CSSParserValue::Q_EMS)            parsedValue = CSSQuirkPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_EMS);        m_valueList->next();    }    if (parsedValue) {        if (!m_valueList->current() || inShorthand()) {            addProperty(propId, parsedValue.release(), important);            return true;        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -