summaryrefslogtreecommitdiff
path: root/src/cssparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cssparser.cc')
-rw-r--r--src/cssparser.cc77
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();