diff options
author | Sebastian Geerken <devnull@localhost> | 2012-09-14 11:34:19 +0200 |
---|---|---|
committer | Sebastian Geerken <devnull@localhost> | 2012-09-14 11:34:19 +0200 |
commit | e4367b16dc131f34936bbb8fd09557b5aa5acbd7 (patch) | |
tree | 487a35941bf20bbc95a3d0b1dee420b00771f5b6 /src/cssparser.cc | |
parent | abd446c2eebe1f96764b6d95f1c6c61ae9bc40b2 (diff) | |
parent | 94e451ffa5ece79a3b071ee553650bf8bd869a46 (diff) |
Merge of <http://hg.dillo.org/dillo>.
Diffstat (limited to 'src/cssparser.cc')
-rw-r--r-- | src/cssparser.cc | 77 |
1 files changed, 41 insertions, 36 deletions
diff --git a/src/cssparser.cc b/src/cssparser.cc index f6e60731..bd065234 100644 --- a/src/cssparser.cc +++ b/src/cssparser.cc @@ -71,8 +71,8 @@ static const char *const Css_cursor_enum_vals[] = { }; static const char *const Css_display_enum_vals[] = { - "block", "inline", "list-item", "none", "table", "table-row-group", - "table-header-group", "table-footer-group", "table-row", + "block", "inline", "inline-block", "list-item", "none", "table", + "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-cell", NULL }; @@ -125,6 +125,10 @@ static const char *const Css_text_decoration_enum_vals[] = { "underline", "overline", "line-through", "blink", NULL }; +static const char *const Css_text_transform_enum_vals[] = { + "none", "capitalize", "uppercase", "lowercase", NULL +}; + static const char *const Css_vertical_align_vals[] = { "top", "bottom", "middle", "baseline", "sub", "super", "text-top", "text-bottom", NULL @@ -232,7 +236,8 @@ const CssPropertyInfo Css_property_info[CSS_PROPERTY_LAST] = { Css_text_decoration_enum_vals}, {"text-indent", {CSS_TYPE_LENGTH_PERCENTAGE, CSS_TYPE_UNUSED}, NULL}, {"text-shadow", {CSS_TYPE_UNUSED}, NULL}, - {"text-transform", {CSS_TYPE_UNUSED}, NULL}, + {"text-transform", {CSS_TYPE_ENUM, CSS_TYPE_UNUSED}, + Css_text_transform_enum_vals}, {"top", {CSS_TYPE_UNUSED}, NULL}, {"unicode-bidi", {CSS_TYPE_UNUSED}, NULL}, {"vertical-align",{CSS_TYPE_ENUM, CSS_TYPE_UNUSED},Css_vertical_align_vals}, @@ -411,7 +416,7 @@ static const CssShorthandInfo Css_shorthand_info[] = { }; #define CSS_SHORTHAND_NUM \ - (sizeof(Css_shorthand_info) / sizeof(CssShorthandInfo)) + (sizeof(Css_shorthand_info) / sizeof(Css_shorthand_info[0])) /* ---------------------------------------------------------------------- * Parsing @@ -673,7 +678,7 @@ bool CssParser::tokenMatchesProperty(CssPropertyName prop, CssValueType *type) case CSS_TYPE_ENUM: if (ttype == CSS_TK_SYMBOL) { for (i = 0; Css_property_info[prop].enum_symbols[i]; i++) - if (dStrcasecmp(tval, + if (dStrAsciiCasecmp(tval, Css_property_info[prop].enum_symbols[i]) == 0) return true; } @@ -681,11 +686,11 @@ bool CssParser::tokenMatchesProperty(CssPropertyName prop, CssValueType *type) case CSS_TYPE_MULTI_ENUM: if (ttype == CSS_TK_SYMBOL) { - if (dStrcasecmp(tval, "none") == 0) { + if (dStrAsciiCasecmp(tval, "none") == 0) { return true; } else { for (i = 0; Css_property_info[prop].enum_symbols[i]; i++) { - if (dStrcasecmp(tval, + if (dStrAsciiCasecmp(tval, Css_property_info[prop].enum_symbols[i]) == 0) return true; } @@ -702,14 +707,14 @@ bool CssParser::tokenMatchesProperty(CssPropertyName prop, CssValueType *type) case CSS_TYPE_SIGNED_LENGTH: if (ttype == CSS_TK_DECINT || ttype == CSS_TK_FLOAT || - (ttype == CSS_TK_SYMBOL && dStrcasecmp(tval, "auto") == 0)) + (ttype == CSS_TK_SYMBOL && dStrAsciiCasecmp(tval, "auto") == 0)) return true; break; case CSS_TYPE_COLOR: if ((ttype == CSS_TK_COLOR || ttype == CSS_TK_SYMBOL) && - (dStrcasecmp(tval, "rgb") == 0 || + (dStrAsciiCasecmp(tval, "rgb") == 0 || a_Color_parse(tval, -1, &err) != -1)) return true; break; @@ -837,7 +842,7 @@ bool CssParser::parseValue(CssPropertyName prop, case CSS_TYPE_ENUM: if (ttype == CSS_TK_SYMBOL) { for (i = 0; Css_property_info[prop].enum_symbols[i]; i++) - if (dStrcasecmp(tval, + if (dStrAsciiCasecmp(tval, Css_property_info[prop].enum_symbols[i]) == 0) { val->intVal = i; ret = true; @@ -852,10 +857,10 @@ bool CssParser::parseValue(CssPropertyName prop, ret = true; while (ttype == CSS_TK_SYMBOL) { - if (dStrcasecmp(tval, "none") != 0) { + if (dStrAsciiCasecmp(tval, "none") != 0) { for (i = 0, found = false; !found && Css_property_info[prop].enum_symbols[i]; i++) { - if (dStrcasecmp(tval, + if (dStrAsciiCasecmp(tval, Css_property_info[prop].enum_symbols[i]) == 0) val->intVal |= (1 << i); } @@ -876,32 +881,32 @@ bool CssParser::parseValue(CssPropertyName prop, if (!spaceSeparated && ttype == CSS_TK_SYMBOL) { ret = true; - if (dStrcasecmp(tval, "px") == 0) { + if (dStrAsciiCasecmp(tval, "px") == 0) { lentype = CSS_LENGTH_TYPE_PX; nextToken(); - } else if (dStrcasecmp(tval, "mm") == 0) { + } else if (dStrAsciiCasecmp(tval, "mm") == 0) { lentype = CSS_LENGTH_TYPE_MM; nextToken(); - } else if (dStrcasecmp(tval, "cm") == 0) { + } else if (dStrAsciiCasecmp(tval, "cm") == 0) { lentype = CSS_LENGTH_TYPE_MM; fval *= 10; nextToken(); - } else if (dStrcasecmp(tval, "in") == 0) { + } else if (dStrAsciiCasecmp(tval, "in") == 0) { lentype = CSS_LENGTH_TYPE_MM; fval *= 25.4; nextToken(); - } else if (dStrcasecmp(tval, "pt") == 0) { + } else if (dStrAsciiCasecmp(tval, "pt") == 0) { lentype = CSS_LENGTH_TYPE_MM; fval *= (25.4 / 72); nextToken(); - } else if (dStrcasecmp(tval, "pc") == 0) { + } else if (dStrAsciiCasecmp(tval, "pc") == 0) { lentype = CSS_LENGTH_TYPE_MM; fval *= (25.4 / 6); nextToken(); - } else if (dStrcasecmp(tval, "em") == 0) { + } else if (dStrAsciiCasecmp(tval, "em") == 0) { lentype = CSS_LENGTH_TYPE_EM; nextToken(); - } else if (dStrcasecmp(tval, "ex") == 0) { + } else if (dStrAsciiCasecmp(tval, "ex") == 0) { lentype = CSS_LENGTH_TYPE_EX; nextToken(); } else { @@ -926,7 +931,7 @@ bool CssParser::parseValue(CssPropertyName prop, ret = true; val->intVal = CSS_CREATE_LENGTH(fval, lentype); - } else if (ttype == CSS_TK_SYMBOL && dStrcasecmp(tval, "auto") == 0) { + } else if (ttype == CSS_TK_SYMBOL && !dStrAsciiCasecmp(tval, "auto")) { ret = true; val->intVal = CSS_LENGTH_TYPE_AUTO; nextToken(); @@ -942,7 +947,7 @@ bool CssParser::parseValue(CssPropertyName prop, ret = true; nextToken(); } else if (ttype == CSS_TK_SYMBOL) { - if (dStrcasecmp(tval, "rgb") == 0) { + if (dStrAsciiCasecmp(tval, "rgb") == 0) { nextToken(); if (parseRgbColor(&val->intVal)) ret = true; @@ -1021,7 +1026,7 @@ bool CssParser::parseWeight() if (ttype == CSS_TK_CHAR && tval[0] == '!') { nextToken(); if (ttype == CSS_TK_SYMBOL && - dStrcasecmp(tval, "important") == 0) { + dStrAsciiCasecmp(tval, "important") == 0) { nextToken(); return true; } @@ -1035,7 +1040,7 @@ bool CssParser::parseWeight() */ static int Css_property_info_cmp(const void *a, const void *b) { - return dStrcasecmp(((CssPropertyInfo *) a)->symbol, + return dStrAsciiCasecmp(((CssPropertyInfo *) a)->symbol, ((CssPropertyInfo *) b)->symbol); } @@ -1045,7 +1050,7 @@ static int Css_property_info_cmp(const void *a, const void *b) */ static int Css_shorthand_info_cmp(const void *a, const void *b) { - return dStrcasecmp(((CssShorthandInfo *) a)->symbol, + return dStrAsciiCasecmp(((CssShorthandInfo *) a)->symbol, ((CssShorthandInfo *) b)->symbol); } @@ -1291,13 +1296,13 @@ CssSelector *CssParser::parseSelector() (tval[0] == ',' || tval[0] == '{')) { break; } else if (ttype == CSS_TK_CHAR && tval[0] == '>') { - selector->addSimpleSelector (CssSelector::CHILD); + selector->addSimpleSelector (CssSelector::COMB_CHILD); nextToken(); } else if (ttype == CSS_TK_CHAR && tval[0] == '+') { - selector->addSimpleSelector (CssSelector::ADJACENT_SIBLING); + selector->addSimpleSelector (CssSelector::COMB_ADJACENT_SIBLING); nextToken(); } else if (ttype != CSS_TK_END && spaceSeparated) { - selector->addSimpleSelector (CssSelector::DESCENDANT); + selector->addSimpleSelector (CssSelector::COMB_DESCENDANT); } else { delete selector; selector = NULL; @@ -1390,7 +1395,7 @@ char * CssParser::parseUrl() Dstr *urlStr = NULL; if (ttype != CSS_TK_SYMBOL || - dStrcasecmp(tval, "url") != 0) + dStrAsciiCasecmp(tval, "url") != 0) return NULL; nextToken(); @@ -1436,7 +1441,7 @@ void CssParser::parseImport(DilloHtml *html, DilloUrl *baseUrl) nextToken(); if (ttype == CSS_TK_SYMBOL && - dStrcasecmp(tval, "url") == 0) + dStrAsciiCasecmp(tval, "url") == 0) urlStr = parseUrl(); else if (ttype == CSS_TK_STRING) urlStr = dStrdup (tval); @@ -1448,8 +1453,8 @@ void CssParser::parseImport(DilloHtml *html, DilloUrl *baseUrl) mediaSyntaxIsOK = false; mediaIsSelected = false; while (ttype == CSS_TK_SYMBOL) { - if (dStrcasecmp(tval, "all") == 0 || - dStrcasecmp(tval, "screen") == 0) + if (dStrAsciiCasecmp(tval, "all") == 0 || + dStrAsciiCasecmp(tval, "screen") == 0) mediaIsSelected = true; nextToken(); if (ttype == CSS_TK_CHAR && tval[0] == ',') { @@ -1490,8 +1495,8 @@ void CssParser::parseMedia() /* parse a comma-separated list of media */ while (ttype == CSS_TK_SYMBOL) { - if (dStrcasecmp(tval, "all") == 0 || - dStrcasecmp(tval, "screen") == 0) + if (dStrAsciiCasecmp(tval, "all") == 0 || + dStrAsciiCasecmp(tval, "screen") == 0) mediaIsSelected = true; nextToken(); if (ttype == CSS_TK_CHAR && tval[0] == ',') { @@ -1577,11 +1582,11 @@ void CssParser::parse(DilloHtml *html, DilloUrl *url, CssContext * context, parser.tval[0] == '@') { parser.nextToken(); if (parser.ttype == CSS_TK_SYMBOL) { - if (dStrcasecmp(parser.tval, "import") == 0 && + if (dStrAsciiCasecmp(parser.tval, "import") == 0 && html != NULL && importsAreAllowed) { parser.parseImport(html, url); - } else if (dStrcasecmp(parser.tval, "media") == 0) { + } else if (dStrAsciiCasecmp(parser.tval, "media") == 0) { parser.parseMedia(); } else { parser.ignoreStatement(); |