diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-12-01 18:16:10 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-12-01 18:16:10 +0000 |
commit | ec427fe2df89f27b9d96ce876de4f5e7a000800d (patch) | |
tree | bb4be4dfa9fbb45d063fbd79f110fba0cc5a224c /src | |
parent | 01d8d19b1219d8d917050b2896002dddebb59431 (diff) | |
download | libcss-ec427fe2df89f27b9d96ce876de4f5e7a000800d.tar.gz libcss-ec427fe2df89f27b9d96ce876de4f5e7a000800d.tar.bz2 |
Finish azimuth
svn path=/trunk/libcss/; revision=5865
Diffstat (limited to 'src')
-rw-r--r-- | src/parse/properties.c | 66 | ||||
-rw-r--r-- | src/parse/propstrings.h | 8 |
2 files changed, 72 insertions, 2 deletions
diff --git a/src/parse/properties.c b/src/parse/properties.c index 94cf4fa..339a3e8 100644 --- a/src/parse/properties.c +++ b/src/parse/properties.c @@ -484,7 +484,71 @@ css_error parse_azimuth(css_language *c, parserutils_vector_iterate(vector, ctx); value = AZIMUTH_RIGHTWARDS; } else if (token->type == CSS_TOKEN_IDENT) { - /** \todo the rest. behind on its own isn't defined afaics */ + parserutils_vector_iterate(vector, ctx); + + /* Now, we may have one of the other keywords or behind, + * potentially followed by behind or other keyword, + * respectively */ + if (token->ilower == c->strings[LEFT_SIDE]) { + value = AZIMUTH_LEFT_SIDE; + } else if (token->ilower == c->strings[FAR_LEFT]) { + value = AZIMUTH_FAR_LEFT; + } else if (token->ilower == c->strings[LEFT]) { + value = AZIMUTH_LEFT; + } else if (token->ilower == c->strings[CENTER-LEFT]) { + value = AZIMUTH_CENTER_LEFT; + } else if (token->ilower == c->strings[CENTER]) { + value = AZIMUTH_CENTER; + } else if (token->ilower == c->strings[CENTER-RIGHT]) { + value = AZIMUTH_CENTER_RIGHT; + } else if (token->ilower == c->strings[RIGHT]) { + value = AZIMUTH_RIGHT; + } else if (token->ilower == c->strings[FAR_RIGHT]) { + value = AZIMUTH_FAR_RIGHT; + } else if (token->ilower == c->strings[RIGHT_SIDE]) { + value = AZIMUTH_RIGHT_SIDE; + } else if (token->ilower == c->strings[BEHIND]) { + value = AZIMUTH_BEHIND; + } else { + return CSS_INVALID; + } + + consumeWhitespace(vector, ctx); + + /* Get potential following token */ + token = parserutils_vector_iterate(vector, ctx); + if (token != NULL && token->type != CSS_TOKEN_IDENT) + return CSS_INVALID; + + if (token != NULL && value == AZIMUTH_BEHIND) { + if (token->ilower == c->strings[LEFT_SIDE]) { + value |= AZIMUTH_LEFT_SIDE; + } else if (token->ilower == c->strings[FAR_LEFT]) { + value |= AZIMUTH_FAR_LEFT; + } else if (token->ilower == c->strings[LEFT]) { + value |= AZIMUTH_LEFT; + } else if (token->ilower == c->strings[CENTER-LEFT]) { + value |= AZIMUTH_CENTER_LEFT; + } else if (token->ilower == c->strings[CENTER]) { + value |= AZIMUTH_CENTER; + } else if (token->ilower == c->strings[CENTER-RIGHT]) { + value |= AZIMUTH_CENTER_RIGHT; + } else if (token->ilower == c->strings[RIGHT]) { + value |= AZIMUTH_RIGHT; + } else if (token->ilower == c->strings[FAR_RIGHT]) { + value |= AZIMUTH_FAR_RIGHT; + } else if (token->ilower == c->strings[RIGHT_SIDE]) { + value |= AZIMUTH_RIGHT_SIDE; + } else { + return CSS_INVALID; + } + } else if (token != NULL && value != AZIMUTH_BEHIND) { + if (token->ilower == c->strings[BEHIND]) { + value |= AZIMUTH_BEHIND; + } else { + return CSS_INVALID; + } + } } else { error = parse_unit_specifier(c, vector, ctx, &length, &unit); if (error != CSS_OK) diff --git a/src/parse/propstrings.h b/src/parse/propstrings.h index a0aad04..460c426 100644 --- a/src/parse/propstrings.h +++ b/src/parse/propstrings.h @@ -62,7 +62,8 @@ enum { SLOW, FAST, X_FAST, FASTER, SLOWER, CENTER, JUSTIFY, CAPITALIZE, UPPERCASE, LOWERCASE, EMBED, BIDI_OVERRIDE, BASELINE, SUB, SUPER, TEXT_TOP, MIDDLE, TEXT_BOTTOM, SILENT, X_SOFT, SOFT, LOUD, X_LOUD, - PRE, NOWRAP, PRE_WRAP, PRE_LINE, LEFTWARDS, RIGHTWARDS, + PRE, NOWRAP, PRE_WRAP, PRE_LINE, LEFTWARDS, RIGHTWARDS, LEFT_SIDE, + FAR_LEFT, FAR_RIGHT, RIGHT_SIDE, BEHIND, LAST_KNOWN }; @@ -306,6 +307,11 @@ static struct { { "pre-line", SLEN("pre-line") }, { "leftwards", SLEN("leftwards") }, { "rightwards", SLEN("rightwards") }, + { "left-side", SLEN("left-side") }, + { "far-left", SLEN("far-left") }, + { "far-right", SLEN("far-right") }, + { "right-side", SLEN("right-side") }, + { "behind", SLEN("behind") }, }; #endif |