summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-12-01 18:16:10 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-12-01 18:16:10 +0000
commitec427fe2df89f27b9d96ce876de4f5e7a000800d (patch)
treebb4be4dfa9fbb45d063fbd79f110fba0cc5a224c /src
parent01d8d19b1219d8d917050b2896002dddebb59431 (diff)
downloadlibcss-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.c66
-rw-r--r--src/parse/propstrings.h8
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