📄 cssparser.cpp
字号:
case CSS_PROP_OUTLINE_WIDTH: // <border-width> | inherit
case CSS_PROP_BORDER_TOP_WIDTH: //// <border-width> | inherit
case CSS_PROP_BORDER_RIGHT_WIDTH: // Which is defined as
case CSS_PROP_BORDER_BOTTOM_WIDTH: // thin | medium | thick | <length>
case CSS_PROP_BORDER_LEFT_WIDTH: ////
if (id == CSS_VAL_THIN || id == CSS_VAL_MEDIUM || id == CSS_VAL_THICK)
valid_primitive = true;
else
valid_primitive = ( validUnit( value, FLength, strict ) );
break;
case CSS_PROP_LETTER_SPACING: // normal | <length> | inherit
case CSS_PROP_WORD_SPACING: // normal | <length> | inherit
if ( id == CSS_VAL_NORMAL )
valid_primitive = true;
else
valid_primitive = validUnit( value, FLength, strict );
break;
case CSS_PROP_WORD_WRAP: // normal | break-word
if (id == CSS_VAL_NORMAL || id == CSS_VAL_BREAK_WORD)
valid_primitive = true;
break;
case CSS_PROP__KHTML_FONT_SIZE_DELTA: // <length>
valid_primitive = validUnit( value, FLength, strict );
break;
case CSS_PROP__KHTML_NBSP_MODE: // normal | space
if (id == CSS_VAL_NORMAL || id == CSS_VAL_SPACE)
valid_primitive = true;
break;
case CSS_PROP__KHTML_LINE_BREAK: // normal | after-white-space
if (id == CSS_VAL_NORMAL || id == CSS_VAL_AFTER_WHITE_SPACE)
valid_primitive = true;
break;
case CSS_PROP__KHTML_MATCH_NEAREST_MAIL_BLOCKQUOTE_COLOR: // normal | match
if (id == CSS_VAL_NORMAL || id == CSS_VAL_MATCH)
valid_primitive = true;
break;
case CSS_PROP_TEXT_INDENT: // <length> | <percentage> | inherit
case CSS_PROP_PADDING_TOP: //// <padding-width> | inherit
case CSS_PROP_PADDING_RIGHT: // Which is defined as
case CSS_PROP_PADDING_BOTTOM: // <length> | <percentage>
case CSS_PROP_PADDING_LEFT: ////
case CSS_PROP__KHTML_PADDING_START:
valid_primitive = ( !id && validUnit( value, FLength|FPercent, strict ) );
break;
case CSS_PROP_MAX_HEIGHT: // <length> | <percentage> | none | inherit
case CSS_PROP_MAX_WIDTH: // <length> | <percentage> | none | inherit
if (id == CSS_VAL_NONE || id == CSS_VAL_INTRINSIC || id == CSS_VAL_MIN_INTRINSIC) {
valid_primitive = true;
break;
}
/* nobreak */
case CSS_PROP_MIN_HEIGHT: // <length> | <percentage> | inherit
case CSS_PROP_MIN_WIDTH: // <length> | <percentage> | inherit
if (id == CSS_VAL_INTRINSIC || id == CSS_VAL_MIN_INTRINSIC)
valid_primitive = true;
else
valid_primitive = ( !id && validUnit( value, FLength|FPercent|FNonNeg, strict ) );
break;
case CSS_PROP_FONT_SIZE:
// <absolute-size> | <relative-size> | <length> | <percentage> | inherit
if (id >= CSS_VAL_XX_SMALL && id <= CSS_VAL_LARGER)
valid_primitive = true;
else
valid_primitive = ( validUnit( value, FLength|FPercent, strict ) );
break;
case CSS_PROP_FONT_STYLE: // normal | italic | oblique | inherit
if ( id == CSS_VAL_NORMAL || id == CSS_VAL_ITALIC || id == CSS_VAL_OBLIQUE)
valid_primitive = true;
break;
case CSS_PROP_FONT_VARIANT: // normal | small-caps | inherit
if ( id == CSS_VAL_NORMAL || id == CSS_VAL_SMALL_CAPS)
valid_primitive = true;
break;
case CSS_PROP_VERTICAL_ALIGN:
// baseline | sub | super | top | text-top | middle | bottom | text-bottom |
// <percentage> | <length> | inherit
if ( id >= CSS_VAL_BASELINE && id <= CSS_VAL__KHTML_BASELINE_MIDDLE )
valid_primitive = true;
else
valid_primitive = ( !id && validUnit( value, FLength|FPercent, strict ) );
break;
case CSS_PROP_HEIGHT: // <length> | <percentage> | auto | inherit
case CSS_PROP_WIDTH: // <length> | <percentage> | auto | inherit
if (id == CSS_VAL_AUTO || id == CSS_VAL_INTRINSIC || id == CSS_VAL_MIN_INTRINSIC)
valid_primitive = true;
else
// ### handle multilength case where we allow relative units
valid_primitive = ( !id && validUnit( value, FLength|FPercent|FNonNeg, strict ) );
break;
case CSS_PROP_BOTTOM: // <length> | <percentage> | auto | inherit
case CSS_PROP_LEFT: // <length> | <percentage> | auto | inherit
case CSS_PROP_RIGHT: // <length> | <percentage> | auto | inherit
case CSS_PROP_TOP: // <length> | <percentage> | auto | inherit
case CSS_PROP_MARGIN_TOP: //// <margin-width> | inherit
case CSS_PROP_MARGIN_RIGHT: // Which is defined as
case CSS_PROP_MARGIN_BOTTOM: // <length> | <percentage> | auto | inherit
case CSS_PROP_MARGIN_LEFT: ////
case CSS_PROP__KHTML_MARGIN_START:
if ( id == CSS_VAL_AUTO )
valid_primitive = true;
else
valid_primitive = ( !id && validUnit( value, FLength|FPercent, strict ) );
break;
case CSS_PROP_Z_INDEX: // auto | <integer> | inherit
// qDebug("parsing z-index: id=%d, fValue=%f", id, value->fValue );
if ( id == CSS_VAL_AUTO ) {
valid_primitive = true;
break;
}
/* nobreak */
case CSS_PROP_ORPHANS: // <integer> | inherit
case CSS_PROP_WIDOWS: // <integer> | inherit
// ### not supported later on
valid_primitive = ( !id && validUnit( value, FInteger, false ) );
break;
case CSS_PROP_LINE_HEIGHT: // normal | <number> | <length> | <percentage> | inherit
if ( id == CSS_VAL_NORMAL )
valid_primitive = true;
else
valid_primitive = ( !id && validUnit( value, FNumber|FLength|FPercent, strict ) );
break;
#if 0
// removed from CSS 2.1
case CSS_PROP_COUNTER_INCREMENT: // [ <identifier> <integer>? ]+ | none | inherit
case CSS_PROP_COUNTER_RESET: // [ <identifier> <integer>? ]+ | none | inherit
if ( id == CSS_VAL_NONE )
valid_primitive = true;
else {
CSSValueListImpl *list = new CSSValueListImpl;
int pos=0, pos2;
while( 1 )
{
pos2 = value.find(',', pos);
QString face = value.mid(pos, pos2-pos);
face = face.stripWhiteSpace();
if(face.length() == 0) break;
// ### single quoted is missing...
if(face[0] == '\"') face.remove(0, 1);
if(face[face.length()-1] == '\"') face = face.left(face.length()-1);
//kdDebug( 6080 ) << "found face '" << face << "'" << endl;
list->append(new CSSPrimitiveValueImpl(DOMString(face), CSSPrimitiveValue::CSS_STRING));
pos = pos2 + 1;
if(pos2 == -1) break;
}
//kdDebug( 6080 ) << "got " << list->length() << " faces" << endl;
if(list->length()) {
parsedValue = list;
valueList->next();
} else
delete list;
break;
}
#endif
case CSS_PROP_FONT_FAMILY:
// [[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inherit
{
parsedValue = parseFontFamily();
break;
}
case CSS_PROP_TEXT_DECORATION:
case CSS_PROP__KHTML_TEXT_DECORATIONS_IN_EFFECT:
// none | [ underline || overline || line-through || blink ] | inherit
if (id == CSS_VAL_NONE) {
valid_primitive = true;
} else {
CSSValueListImpl *list = new CSSValueListImpl;
bool is_valid = true;
while( is_valid && value ) {
switch ( value->id ) {
case CSS_VAL_BLINK:
break;
case CSS_VAL_UNDERLINE:
case CSS_VAL_OVERLINE:
case CSS_VAL_LINE_THROUGH:
list->append( new CSSPrimitiveValueImpl( value->id ) );
break;
default:
is_valid = false;
}
value = valueList->next();
}
//kdDebug( 6080 ) << "got " << list->length() << "d decorations" << endl;
if(list->length() && is_valid) {
parsedValue = list;
valueList->next();
} else {
delete list;
}
}
break;
case CSS_PROP_TABLE_LAYOUT: // auto | fixed | inherit
if ( id == CSS_VAL_AUTO || id == CSS_VAL_FIXED )
valid_primitive = true;
break;
/* CSS3 properties */
case CSS_PROP__KHTML_BINDING:
#ifndef KHTML_NO_XBL
if (id == CSS_VAL_NONE)
valid_primitive = true;
else {
CSSValueListImpl* values = new CSSValueListImpl();
Value* val;
CSSValueImpl* parsedValue = 0;
while ((val = valueList->current())) {
if (val->unit == CSSPrimitiveValue::CSS_URI) {
DOMString value = khtml::parseURL(domString(val->string));
parsedValue = new CSSPrimitiveValueImpl(
DOMString(KURL(styleElement->baseURL().string(), value.string()).url()),
CSSPrimitiveValue::CSS_URI);
}
if (parsedValue)
values->append(parsedValue);
else
break;
valueList->next();
}
if ( values->length() ) {
addProperty( propId, values, important );
valueList->next();
return true;
}
delete values;
return false;
}
#endif
break;
case CSS_PROP_OUTLINE_OFFSET:
valid_primitive = validUnit(value, FLength, strict);
break;
case CSS_PROP_TEXT_SHADOW: // CSS2 property, dropped in CSS2.1, back in CSS3, so treat as CSS3
if (id == CSS_VAL_NONE)
valid_primitive = true;
else
return parseShadow(propId, important);
break;
case CSS_PROP_OPACITY:
valid_primitive = validUnit(value, FNumber, strict);
break;
case CSS_PROP__KHTML_BOX_ALIGN:
if (id == CSS_VAL_STRETCH || id == CSS_VAL_START || id == CSS_VAL_END ||
id == CSS_VAL_CENTER || id == CSS_VAL_BASELINE)
valid_primitive = true;
break;
case CSS_PROP__KHTML_BOX_DIRECTION:
if (id == CSS_VAL_NORMAL || id == CSS_VAL_REVERSE)
valid_primitive = true;
break;
case CSS_PROP__KHTML_BOX_LINES:
if (id == CSS_VAL_SINGLE || id == CSS_VAL_MULTIPLE)
valid_primitive = true;
break;
case CSS_PROP__KHTML_BOX_ORIENT:
if (id == CSS_VAL_HORIZONTAL || id == CSS_VAL_VERTICAL ||
id == CSS_VAL_INLINE_AXIS || id == CSS_VAL_BLOCK_AXIS)
valid_primitive = true;
break;
case CSS_PROP__KHTML_BOX_PACK:
if (id == CSS_VAL_START || id == CSS_VAL_END ||
id == CSS_VAL_CENTER || id == CSS_VAL_JUSTIFY)
valid_primitive = true;
break;
case CSS_PROP__KHTML_BOX_FLEX:
valid_primitive = validUnit(value, FNumber, strict);
break;
case CSS_PROP__KHTML_BOX_FLEX_GROUP:
case CSS_PROP__KHTML_BOX_ORDINAL_GROUP:
valid_primitive = validUnit(value, FInteger|FNonNeg, true);
break;
case CSS_PROP__KHTML_MARQUEE: {
const int properties[5] = { CSS_PROP__KHTML_MARQUEE_DIRECTION, CSS_PROP__KHTML_MARQUEE_INCREMENT,
CSS_PROP__KHTML_MARQUEE_REPETITION,
CSS_PROP__KHTML_MARQUEE_STYLE, CSS_PROP__KHTML_MARQUEE_SPEED };
return parseShortHand(properties, 5, important);
}
case CSS_PROP__KHTML_MARQUEE_DIRECTION:
if (id == CSS_VAL_FORWARDS || id == CSS_VAL_BACKWARDS || id == CSS_VAL_AHEAD ||
id == CSS_VAL_REVERSE || id == CSS_VAL_LEFT || id == CSS_VAL_RIGHT || id == CSS_VAL_DOWN ||
id == CSS_VAL_UP || id == CSS_VAL_AUTO)
valid_primitive = true;
break;
case CSS_PROP__KHTML_MARQUEE_INCREMENT:
if (id == CSS_VAL_SMALL || id == CSS_VAL_LARGE || id == CSS_VAL_MEDIUM)
valid_primitive = true;
else
valid_primitive = validUnit(value, FLength|FPercent, strict);
break;
case CSS_PROP__KHTML_MARQUEE_STYLE:
if (id == CSS_VAL_NONE || id == CSS_VAL_SLIDE || id == CSS_VAL_SCROLL || id == CSS_VAL_ALTERNATE ||
id == CSS_VAL_UNFURL)
valid_primitive = true;
break;
case CSS_PROP__KHTML_MARQUEE_REPETITION:
if (id == CSS_VAL_INFINITE)
valid_primitive = true;
else
valid_primitive = validUnit(value, FInteger|FNonNeg, strict);
break;
case CSS_PROP__KHTML_MARQUEE_SPEED:
if (id == CSS_VAL_NORMAL || id == CSS_VAL_SLOW || id == CSS_VAL_FAST)
valid_primitive = true;
else
valid_primitive = validUnit(value, FTime|FInteger|FNonNeg, strict);
break;
case CSS_PROP__KHTML_USER_DRAG: // auto | none | element
if (id == CSS_VAL_AUTO || id == CSS_VAL_NONE || id == CSS_VAL_ELEMENT)
valid_primitive = true;
break;
case CSS_PROP__KHTML_USER_MODIFY: // read-only | read-write
if (id == CSS_VAL_READ_ONLY || id == CSS_VAL_READ_WRITE)
valid_primitive = true;
break;
case CSS_PROP__KHTML_USER_SELECT: // auto | none | text
if (id == CSS_VAL_AUTO || id == CSS_VAL_NONE || id == CSS_VAL_TEXT)
valid_primitive = true;
break;
case CSS_PROP_TEXT_OVERFLOW: // clip | ellipsis
if (id == CSS_VAL_CLIP || id == CSS_VAL_ELLIPSIS)
valid_primitive = true;
break;
case CSS_PROP__KHTML_MARGIN_COLLAPSE: {
const int properties[2] = { CSS_PROP__KHTML_MARGIN_TOP_COLLAPSE,
CSS_PROP__KHTML_MARGIN_BOTTOM_COLLAPSE };
int num = valueList->numValues;
if (num == 1) {
if (!parseValue(properties[0], important)) return false;
CSSValueImpl* value = parsedProperties[numParsedProperties-1]->value();
addProperty(properties[1], value, important);
return true;
}
else if (num == 2) {
if (!parseValue(properties[0], important)) return false;
if (!parseValue(properties[1], important)) return false;
return true;
}
return false;
}
case CSS_PROP__KHTML_MARGIN_TOP_COLLAPSE:
case CSS_PROP__KHTML_MARGIN_BOTTOM_COLLAPSE:
if (id == CSS_VAL_COLLAPSE || id == CSS_VAL_SEPARATE || id == CSS_VAL_DISCARD)
valid_primitive = true;
break;
case CSS_PROP_TEXT_LINE_THROUGH_MODE:
case CSS_PROP_TEXT_OVERLINE_MODE:
case CSS_PROP_TEXT_UNDERLINE_MODE:
if (id == CSS_VAL_CONTINUOUS || id == CSS_VAL_SKIP_WHITE_SPACE)
valid_primitive = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -