Gitweb links:
...log
http://git.netsurf-browser.org/libcss.git/shortlog/f1d2dfec8a0ffe90171c547b912613388538f273
...commit
http://git.netsurf-browser.org/libcss.git/commit/f1d2dfec8a0ffe90171c547b912613388538f273
...tree
http://git.netsurf-browser.org/libcss.git/tree/f1d2dfec8a0ffe90171c547b912613388538f273
The branch, tlsa/jmb/mq has been updated
via f1d2dfec8a0ffe90171c547b912613388538f273 (commit)
from 84d60a9fd17a4192924fd11040a310737e850438 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/libcss.git/commit/?id=f1d2dfec8a0ffe90171c547b912613388538f273
commit f1d2dfec8a0ffe90171c547b912613388538f273
Author: Michael Drake <[email protected]>
Commit: Michael Drake <[email protected]>
Media Queries: Implement parsing <general-enclosed>.
diff --git a/src/parse/mq.c b/src/parse/mq.c
index 719e129..172b618 100644
--- a/src/parse/mq.c
+++ b/src/parse/mq.c
@@ -433,14 +433,118 @@ static css_error mq_parse_media_feature(css_language *c,
return CSS_OK;
}
+/*
+ * Consume any value
+ *
+ * CSS Syntax Module Level 3: 8.2
+ */
+static css_error mq_parse_consume_any_value(css_language *c,
+ const parserutils_vector *vector, int *ctx,
+ const char *until_char)
+{
+ const css_token *token;
+ css_error error;
+
+ while (true) {
+ consumeWhitespace(vector, ctx);
+
+ token = parserutils_vector_iterate(vector, ctx);
+ if (token == NULL) {
+ return CSS_INVALID;
+ }
+
+ switch (token->type) {
+ case CSS_TOKEN_INVALID_STRING:
+ return CSS_INVALID;
+
+ case CSS_TOKEN_CHAR:
+ if (until_char != NULL) {
+ if (tokenIsChar(token, *until_char)) {
+ /* Found matching close bracket */
+ return CSS_OK;
+
+ } else if (tokenIsChar(token, ')') ||
+ tokenIsChar(token, ']') ||
+ tokenIsChar(token, '}')) {
+ /* Non-matching close bracket */
+ return CSS_INVALID;
+ } else if (tokenIsChar(token, ';')) {
+ /* Non-top-level semi-colon */
+ return CSS_INVALID;
+ }
+ }
+ if (tokenIsChar(token, '(')) {
+ /* Need to consume until matching bracket. */
+ error = mq_parse_consume_any_value(
+ c, vector, ctx, ")");
+ if (error != CSS_OK) {
+ return error;
+ }
+ } else if (tokenIsChar(token, '[')) {
+ /* Need to consume until matching bracket. */
+ error = mq_parse_consume_any_value(
+ c, vector, ctx, "]");
+ if (error != CSS_OK) {
+ return error;
+ }
+ } else if (tokenIsChar(token, '{')) {
+ /* Need to consume until matching bracket. */
+ error = mq_parse_consume_any_value(
+ c, vector, ctx, "}");
+ if (error != CSS_OK) {
+ return error;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return CSS_OK;
+}
+
static css_error mq_parse_general_enclosed(css_language *c,
const parserutils_vector *vector, int *ctx)
{
+ const css_token *token;
+ css_error error;
+
/* <general-enclosed> = [ <function-token> <any-value> ) ]
* | ( <ident> <any-value> )
*/
- /* TODO: implement */
+ token = parserutils_vector_iterate(vector, ctx);
+ if (token == NULL) {
+ return CSS_INVALID;
+ }
+
+ switch (token->type) {
+ case CSS_TOKEN_FUNCTION:
+ error = mq_parse_consume_any_value(c, vector, ctx, NULL);
+ if (error != CSS_OK) {
+ return error;
+ }
+
+ consumeWhitespace(vector, ctx);
+
+ token = parserutils_vector_iterate(vector, ctx);
+ if (!tokenIsChar(token, ')')) {
+ return CSS_INVALID;
+ }
+ break;
+
+ case CSS_TOKEN_IDENT:
+ error = mq_parse_consume_any_value(c, vector, ctx, NULL);
+ if (error != CSS_OK) {
+ return error;
+ }
+ break;
+
+ default:
+ return CSS_INVALID;
+ }
return CSS_OK;
}
-----------------------------------------------------------------------
Summary of changes:
src/parse/mq.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 105 insertions(+), 1 deletion(-)
diff --git a/src/parse/mq.c b/src/parse/mq.c
index 719e129..172b618 100644
--- a/src/parse/mq.c
+++ b/src/parse/mq.c
@@ -433,14 +433,118 @@ static css_error mq_parse_media_feature(css_language *c,
return CSS_OK;
}
+/*
+ * Consume any value
+ *
+ * CSS Syntax Module Level 3: 8.2
+ */
+static css_error mq_parse_consume_any_value(css_language *c,
+ const parserutils_vector *vector, int *ctx,
+ const char *until_char)
+{
+ const css_token *token;
+ css_error error;
+
+ while (true) {
+ consumeWhitespace(vector, ctx);
+
+ token = parserutils_vector_iterate(vector, ctx);
+ if (token == NULL) {
+ return CSS_INVALID;
+ }
+
+ switch (token->type) {
+ case CSS_TOKEN_INVALID_STRING:
+ return CSS_INVALID;
+
+ case CSS_TOKEN_CHAR:
+ if (until_char != NULL) {
+ if (tokenIsChar(token, *until_char)) {
+ /* Found matching close bracket */
+ return CSS_OK;
+
+ } else if (tokenIsChar(token, ')') ||
+ tokenIsChar(token, ']') ||
+ tokenIsChar(token, '}')) {
+ /* Non-matching close bracket */
+ return CSS_INVALID;
+ } else if (tokenIsChar(token, ';')) {
+ /* Non-top-level semi-colon */
+ return CSS_INVALID;
+ }
+ }
+ if (tokenIsChar(token, '(')) {
+ /* Need to consume until matching bracket. */
+ error = mq_parse_consume_any_value(
+ c, vector, ctx, ")");
+ if (error != CSS_OK) {
+ return error;
+ }
+ } else if (tokenIsChar(token, '[')) {
+ /* Need to consume until matching bracket. */
+ error = mq_parse_consume_any_value(
+ c, vector, ctx, "]");
+ if (error != CSS_OK) {
+ return error;
+ }
+ } else if (tokenIsChar(token, '{')) {
+ /* Need to consume until matching bracket. */
+ error = mq_parse_consume_any_value(
+ c, vector, ctx, "}");
+ if (error != CSS_OK) {
+ return error;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return CSS_OK;
+}
+
static css_error mq_parse_general_enclosed(css_language *c,
const parserutils_vector *vector, int *ctx)
{
+ const css_token *token;
+ css_error error;
+
/* <general-enclosed> = [ <function-token> <any-value> ) ]
* | ( <ident> <any-value> )
*/
- /* TODO: implement */
+ token = parserutils_vector_iterate(vector, ctx);
+ if (token == NULL) {
+ return CSS_INVALID;
+ }
+
+ switch (token->type) {
+ case CSS_TOKEN_FUNCTION:
+ error = mq_parse_consume_any_value(c, vector, ctx, NULL);
+ if (error != CSS_OK) {
+ return error;
+ }
+
+ consumeWhitespace(vector, ctx);
+
+ token = parserutils_vector_iterate(vector, ctx);
+ if (!tokenIsChar(token, ')')) {
+ return CSS_INVALID;
+ }
+ break;
+
+ case CSS_TOKEN_IDENT:
+ error = mq_parse_consume_any_value(c, vector, ctx, NULL);
+ if (error != CSS_OK) {
+ return error;
+ }
+ break;
+
+ default:
+ return CSS_INVALID;
+ }
return CSS_OK;
}
--
Cascading Style Sheets library
_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org