From 4140475302ea088e5ad74ebf24c98700cf13b0fa Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Mon, 23 Mar 2009 10:13:53 +0100 Subject: allow negative values for specific CSS properties only This needs to be done at parser level, so that alternative settings can overrule a faulty negative one. Testcase:
should be green and have 10px padding
--- src/cssparser.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/cssparser.cc') 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, -- cgit v1.2.3