aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/css.hh1
-rw-r--r--src/cssparser.cc13
2 files changed, 10 insertions, 4 deletions
diff --git a/src/css.hh b/src/css.hh
index 4c43b313..c5f755a6 100644
--- a/src/css.hh
+++ b/src/css.hh
@@ -35,6 +35,7 @@ typedef enum {
only because Dw cannot handle percentages
in this particular case (e.g.
'margin-*-width'). */
+ CSS_TYPE_SIGNED_LENGTH, /* As CSS_TYPE_LENGTH but may be negative. */
CSS_TYPE_COLOR, /* Represented as integer. */
CSS_TYPE_FONT_WEIGHT, /* this very special and only used by
'font-weight' */
diff --git a/src/cssparser.cc b/src/cssparser.cc
index 830a0475..a924816c 100644
--- a/src/cssparser.cc
+++ b/src/cssparser.cc
@@ -148,10 +148,10 @@ const CssPropertyInfo Css_property_info[CSS_PROPERTY_LAST] = {
{"list-style-image", {CSS_TYPE_UNUSED}, NULL},
{"list-style-position", {CSS_TYPE_UNUSED}, NULL},
{"list-style-type", {CSS_TYPE_ENUM, CSS_TYPE_UNUSED}, Css_list_style_type_enum_vals},
- {"margin-bottom", {CSS_TYPE_LENGTH, CSS_TYPE_UNUSED}, NULL},
- {"margin-left", {CSS_TYPE_LENGTH, CSS_TYPE_UNUSED}, NULL},
- {"margin-right", {CSS_TYPE_LENGTH, CSS_TYPE_UNUSED}, NULL},
- {"margin-top", {CSS_TYPE_LENGTH, CSS_TYPE_UNUSED}, NULL},
+ {"margin-bottom", {CSS_TYPE_SIGNED_LENGTH, CSS_TYPE_UNUSED}, NULL},
+ {"margin-left", {CSS_TYPE_SIGNED_LENGTH, CSS_TYPE_UNUSED}, NULL},
+ {"margin-right", {CSS_TYPE_SIGNED_LENGTH, CSS_TYPE_UNUSED}, NULL},
+ {"margin-top", {CSS_TYPE_SIGNED_LENGTH, CSS_TYPE_UNUSED}, NULL},
{"marker-offset", {CSS_TYPE_UNUSED}, NULL},
{"marks", {CSS_TYPE_UNUSED}, NULL},
{"max-height", {CSS_TYPE_UNUSED}, NULL},
@@ -622,6 +622,10 @@ bool CssParser::tokenMatchesProperty(CssPropertyName prop, CssValueType * type)
case CSS_TYPE_LENGTH_PERCENTAGE:
case CSS_TYPE_LENGTH:
+ if (tval[0] == '-')
+ return false;
+ // Fall Through
+ case CSS_TYPE_SIGNED_LENGTH:
if (ttype == CSS_TK_DECINT ||
ttype == CSS_TK_FLOAT ||
(ttype == CSS_TK_SYMBOL && dStrcasecmp(tval, "auto") == 0))
@@ -709,6 +713,7 @@ bool CssParser::parseValue(CssPropertyName prop,
case CSS_TYPE_LENGTH_PERCENTAGE:
case CSS_TYPE_LENGTH:
+ case CSS_TYPE_SIGNED_LENGTH:
if (ttype == CSS_TK_DECINT || ttype == CSS_TK_FLOAT) {
fval = atof(tval);
lentype = CSS_LENGTH_TYPE_PX; /* Actually, there must be a unit,