Gitweb links:
...log
http://git.netsurf-browser.org/libcss.git/shortlog/4c6f9d0ee83cfe66bbb715...
...commit
http://git.netsurf-browser.org/libcss.git/commit/4c6f9d0ee83cfe66bbb71564...
...tree
http://git.netsurf-browser.org/libcss.git/tree/4c6f9d0ee83cfe66bbb7156492...
The branch, tlsa/jmb/mq has been updated
discards 48305a59c08588afd9f454e2bcfdb10048d4cb65 (commit)
discards 6bb6567ddf70c4c185c87983d05bb390fb3c035c (commit)
discards 91448ea87125739ed39d9e4124ee407fa191299c (commit)
via 4c6f9d0ee83cfe66bbb7156492aa7cb5f00e5a64 (commit)
via 3809273bb81e49304d84a0927f0ba619ecef1f8b (commit)
via 4508b6727458892f50e3d61a364fc44c8680036a (commit)
via ce50203db282ba649442a562e774e879a5f3744c (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (48305a59c08588afd9f454e2bcfdb10048d4cb65)
\
N -- N -- N (4c6f9d0ee83cfe66bbb7156492aa7cb5f00e5a64)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
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=4c6f9d0ee83cfe66bbb7...
commit 4c6f9d0ee83cfe66bbb7156492aa7cb5f00e5a64
Author: Michael Drake <michael.drake(a)codethink.co.uk>
Commit: Michael Drake <michael.drake(a)codethink.co.uk>
Media Queries: Parse only needs propstrings out of css_language.
diff --git a/src/parse/language.c b/src/parse/language.c
index c3b523d..faafcfd 100644
--- a/src/parse/language.c
+++ b/src/parse/language.c
@@ -426,7 +426,8 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector
*vector)
consumeWhitespace(vector, &ctx);
/* Parse media list */
- error = css__mq_parse_media_list(c, vector, &ctx, &media);
+ error = css__mq_parse_media_list(
+ c->strings, vector, &ctx, &media);
if (error != CSS_OK)
return error;
@@ -532,7 +533,8 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector
*vector)
/* any0 = media query */
- error = css__mq_parse_media_list(c, vector, &ctx, &media);
+ error = css__mq_parse_media_list(
+ c->strings, vector, &ctx, &media);
if (error != CSS_OK)
return error;
diff --git a/src/parse/mq.c b/src/parse/mq.c
index f7b8b6e..2b2164f 100644
--- a/src/parse/mq.c
+++ b/src/parse/mq.c
@@ -74,7 +74,7 @@ void css__mq_query_destroy(css_mq_query *media)
}
}
-static css_error mq_parse_condition(css_language *c,
+static css_error mq_parse_condition(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
bool permit_or, css_mq_cond **cond);
@@ -197,7 +197,7 @@ static css_error mq_parse_op(const css_token *token,
return CSS_OK;
}
-static css_error mq_parse_range(css_language *c,
+static css_error mq_parse_range(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
const css_token *name_or_value,
css_mq_feature **feature)
@@ -237,7 +237,7 @@ static css_error mq_parse_range(css_language *c,
value_is_ratio = true;
} else if (name_or_value->type == CSS_TOKEN_IDENT &&
lwc_string_caseless_isequal(name_or_value->idata,
- c->strings[INFINITE], &match) == lwc_error_ok &&
+ strings[INFINITE], &match) == lwc_error_ok &&
match == false) {
/* The only ident permitted for mf-value is 'infinite', thus must have name */
name = name_or_value;
@@ -380,7 +380,7 @@ static css_error mq_parse_range(css_language *c,
return CSS_OK;
}
-static css_error mq_parse_media_feature(css_language *c,
+static css_error mq_parse_media_feature(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_feature **feature)
{
@@ -461,7 +461,8 @@ static css_error mq_parse_media_feature(css_language *c,
consumeWhitespace(vector, ctx);
} else {
/* mf-range */
- error = mq_parse_range(c, vector, ctx, name_or_value, &result);
+ error = mq_parse_range(strings, vector, ctx,
+ name_or_value, &result);
if (error != CSS_OK) {
return error;
}
@@ -470,7 +471,8 @@ static css_error mq_parse_media_feature(css_language *c,
}
} else {
/* mf-range */
- error = mq_parse_range(c, vector, ctx, name_or_value, &result);
+ error = mq_parse_range(strings, vector, ctx,
+ name_or_value, &result);
if (error != CSS_OK) {
return error;
}
@@ -494,7 +496,7 @@ static css_error mq_parse_media_feature(css_language *c,
*
* CSS Syntax Module Level 3: 8.2
*/
-static css_error mq_parse_consume_any_value(css_language *c,
+static css_error mq_parse_consume_any_value(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
bool until, const char until_char)
{
@@ -526,22 +528,22 @@ static css_error mq_parse_consume_any_value(css_language *c,
}
if (tokenIsChar(token, '(')) {
/* Need to consume until matching bracket. */
- error = mq_parse_consume_any_value(
- c, vector, ctx, true, ')');
+ error = mq_parse_consume_any_value(strings,
+ vector, ctx, true, ')');
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, true, ']');
+ error = mq_parse_consume_any_value(strings,
+ vector, ctx, true, ']');
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, true, '}');
+ error = mq_parse_consume_any_value(strings,
+ vector, ctx, true, '}');
if (error != CSS_OK) {
return error;
}
@@ -556,7 +558,7 @@ static css_error mq_parse_consume_any_value(css_language *c,
return CSS_OK;
}
-static css_error mq_parse_general_enclosed(css_language *c,
+static css_error mq_parse_general_enclosed(lwc_string **strings,
const parserutils_vector *vector, int *ctx)
{
const css_token *token;
@@ -573,7 +575,8 @@ static css_error mq_parse_general_enclosed(css_language *c,
switch (token->type) {
case CSS_TOKEN_FUNCTION:
- error = mq_parse_consume_any_value(c, vector, ctx, true, ')');
+ error = mq_parse_consume_any_value(strings, vector, ctx,
+ true, ')');
if (error != CSS_OK) {
return error;
}
@@ -585,7 +588,8 @@ static css_error mq_parse_general_enclosed(css_language *c,
break;
case CSS_TOKEN_IDENT:
- error = mq_parse_consume_any_value(c, vector, ctx, false, '\0');
+ error = mq_parse_consume_any_value(strings, vector, ctx,
+ false, '\0');
if (error != CSS_OK) {
return error;
}
@@ -598,7 +602,7 @@ static css_error mq_parse_general_enclosed(css_language *c,
return CSS_OK;
}
-static css_error mq_parse_media_in_parens(css_language *c,
+static css_error mq_parse_media_in_parens(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_cond_or_feature **cond_or_feature)
{
@@ -631,10 +635,10 @@ static css_error mq_parse_media_in_parens(css_language *c,
if (tokenIsChar(token, '(') || (token->type == CSS_TOKEN_IDENT &&
lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) == lwc_error_ok &&
+ strings[NOT], &match) == lwc_error_ok &&
match)) {
css_mq_cond *cond;
- error = mq_parse_condition(c, vector, ctx, true, &cond);
+ error = mq_parse_condition(strings, vector, ctx, true, &cond);
if (error == CSS_OK) {
token = parserutils_vector_iterate(vector, ctx);
if (tokenIsChar(token, ')') == false) {
@@ -656,7 +660,7 @@ static css_error mq_parse_media_in_parens(css_language *c,
token->type == CSS_TOKEN_NUMBER ||
token->type == CSS_TOKEN_DIMENSION) {
css_mq_feature *feature;
- error = mq_parse_media_feature(c, vector, ctx, &feature);
+ error = mq_parse_media_feature(strings, vector, ctx, &feature);
if (error == CSS_OK) {
result = malloc(sizeof(*result));
if (result == NULL) {
@@ -672,12 +676,12 @@ static css_error mq_parse_media_in_parens(css_language *c,
}
*ctx = old_ctx;
- error = mq_parse_general_enclosed(c, vector, ctx);
+ error = mq_parse_general_enclosed(strings, vector, ctx);
return error;
}
-static css_error mq_parse_condition(css_language *c,
+static css_error mq_parse_condition(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
bool permit_or, css_mq_cond **cond)
{
@@ -699,7 +703,7 @@ static css_error mq_parse_condition(css_language *c,
if (token == NULL || tokenIsChar(token, '(') == false ||
token->type != CSS_TOKEN_IDENT ||
lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) != lwc_error_ok ||
+ strings[NOT], &match) != lwc_error_ok ||
match == false) {
return CSS_INVALID;
}
@@ -721,7 +725,8 @@ static css_error mq_parse_condition(css_language *c,
parserutils_vector_iterate(vector, ctx);
consumeWhitespace(vector, ctx);
- error = mq_parse_media_in_parens(c, vector, ctx, &cond_or_feature);
+ error = mq_parse_media_in_parens(strings,
+ vector, ctx, &cond_or_feature);
if (error != CSS_OK) {
css__mq_cond_destroy(result);
return CSS_INVALID;
@@ -745,7 +750,8 @@ static css_error mq_parse_condition(css_language *c,
/* FOLLOW(media-condition) := RPAREN | COMMA | EOF */
while (token != NULL && tokenIsChar(token, ')') == false &&
tokenIsChar(token, ',') == false) {
- error = mq_parse_media_in_parens(c, vector, ctx, &cond_or_feature);
+ error = mq_parse_media_in_parens(strings, vector, ctx,
+ &cond_or_feature);
if (error != CSS_OK) {
css__mq_cond_destroy(result);
return CSS_INVALID;
@@ -771,7 +777,7 @@ static css_error mq_parse_condition(css_language *c,
css__mq_cond_destroy(result);
return CSS_INVALID;
} else if (lwc_string_caseless_isequal(token->idata,
- c->strings[AND], &match) == lwc_error_ok &&
+ strings[AND], &match) == lwc_error_ok &&
match) {
if (op != 0 && op != AND) {
css__mq_cond_destroy(result);
@@ -779,7 +785,7 @@ static css_error mq_parse_condition(css_language *c,
}
op = AND;
} else if (lwc_string_caseless_isequal(token->idata,
- c->strings[OR], &match) == lwc_error_ok &&
+ strings[OR], &match) == lwc_error_ok &&
match) {
if (permit_or == false || (op != 0 && op != OR)) {
css__mq_cond_destroy(result);
@@ -809,54 +815,54 @@ static css_error mq_parse_condition(css_language *c,
/**
* Parse a media query type.
*/
-static uint64_t mq_parse_type(css_language *c, lwc_string *type)
+static uint64_t mq_parse_type(lwc_string **strings, lwc_string *type)
{
bool match;
if (type == NULL) {
return CSS_MEDIA_ALL;
} else if (lwc_string_caseless_isequal(
- type, c->strings[AURAL],
+ type, strings[AURAL],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_AURAL;
} else if (lwc_string_caseless_isequal(
- type, c->strings[BRAILLE],
+ type, strings[BRAILLE],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_BRAILLE;
} else if (lwc_string_caseless_isequal(
- type, c->strings[EMBOSSED],
+ type, strings[EMBOSSED],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_EMBOSSED;
} else if (lwc_string_caseless_isequal(
- type, c->strings[HANDHELD],
+ type, strings[HANDHELD],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_HANDHELD;
} else if (lwc_string_caseless_isequal(
- type, c->strings[PRINT],
+ type, strings[PRINT],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_PRINT;
} else if (lwc_string_caseless_isequal(
- type, c->strings[PROJECTION],
+ type, strings[PROJECTION],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_PROJECTION;
} else if (lwc_string_caseless_isequal(
- type, c->strings[SCREEN],
+ type, strings[SCREEN],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_SCREEN;
} else if (lwc_string_caseless_isequal(
- type, c->strings[SPEECH],
+ type, strings[SPEECH],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_SPEECH;
} else if (lwc_string_caseless_isequal(
- type, c->strings[TTY],
+ type, strings[TTY],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_TTY;
} else if (lwc_string_caseless_isequal(
- type, c->strings[TV],
+ type, strings[TV],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_TV;
} else if (lwc_string_caseless_isequal(
- type, c->strings[ALL],
+ type, strings[ALL],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_ALL;
}
@@ -864,7 +870,7 @@ static uint64_t mq_parse_type(css_language *c, lwc_string *type)
return 0;
}
-static css_error mq_parse_media_query(css_language *c,
+static css_error mq_parse_media_query(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_query **query)
{
@@ -888,7 +894,7 @@ static css_error mq_parse_media_query(css_language *c,
is_condition = true;
} else if (token->type == CSS_TOKEN_IDENT &&
lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) == lwc_error_ok &&
+ strings[NOT], &match) == lwc_error_ok &&
match) {
int old_ctx = *ctx;
@@ -911,7 +917,8 @@ static css_error mq_parse_media_query(css_language *c,
if (is_condition) {
/* media-condition */
- error = mq_parse_condition(c, vector, ctx, true, &result->cond);
+ error = mq_parse_condition(strings, vector, ctx, true,
+ &result->cond);
if (error != CSS_OK) {
free(result);
return error;
@@ -928,14 +935,12 @@ static css_error mq_parse_media_query(css_language *c,
}
if (lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) == lwc_error_ok &&
- match) {
+ strings[NOT], &match) == lwc_error_ok && match) {
result->negate_type = 1;
consumeWhitespace(vector, ctx);
token = parserutils_vector_iterate(vector, ctx);
} else if (lwc_string_caseless_isequal(token->idata,
- c->strings[ONLY], &match) == lwc_error_ok &&
- match) {
+ strings[ONLY], &match) == lwc_error_ok && match) {
consumeWhitespace(vector, ctx);
token = parserutils_vector_iterate(vector, ctx);
}
@@ -945,7 +950,7 @@ static css_error mq_parse_media_query(css_language *c,
return CSS_INVALID;
}
- result->type = mq_parse_type(c, token->idata);
+ result->type = mq_parse_type(strings, token->idata);
consumeWhitespace(vector, ctx);
@@ -953,7 +958,7 @@ static css_error mq_parse_media_query(css_language *c,
if (token != NULL) {
if (token->type != CSS_TOKEN_IDENT ||
lwc_string_caseless_isequal(token->idata,
- c->strings[AND], &match) != lwc_error_ok ||
+ strings[AND], &match) != lwc_error_ok ||
match == false) {
free(result);
return CSS_INVALID;
@@ -961,7 +966,8 @@ static css_error mq_parse_media_query(css_language *c,
consumeWhitespace(vector, ctx);
- error = mq_parse_condition(c, vector, ctx, false, &result->cond);
+ error = mq_parse_condition(strings, vector, ctx, false,
+ &result->cond);
if (error != CSS_OK) {
free(result);
return error;
@@ -972,7 +978,7 @@ static css_error mq_parse_media_query(css_language *c,
return CSS_OK;
}
-css_error css__mq_parse_media_list(css_language *c,
+css_error css__mq_parse_media_list(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_query **media)
{
@@ -993,7 +999,7 @@ css_error css__mq_parse_media_list(css_language *c,
while (token != NULL) {
css_mq_query *query;
- error = mq_parse_media_query(c, vector, ctx, &query);
+ error = mq_parse_media_query(strings, vector, ctx, &query);
if (error != CSS_OK) {
/* TODO: error recovery (see above) */
css__mq_query_destroy(result);
diff --git a/src/parse/mq.h b/src/parse/mq.h
index 381e0f9..2940032 100644
--- a/src/parse/mq.h
+++ b/src/parse/mq.h
@@ -87,7 +87,7 @@ typedef struct css_mq_query {
css_mq_cond *cond;
} css_mq_query;
-css_error css__mq_parse_media_list(css_language *c,
+css_error css__mq_parse_media_list(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_query **media);
commitdiff
http://git.netsurf-browser.org/libcss.git/commit/?id=3809273bb81e49304d84...
commit 3809273bb81e49304d84a0927f0ba619ecef1f8b
Author: Michael Drake <michael.drake(a)codethink.co.uk>
Commit: Michael Drake <michael.drake(a)codethink.co.uk>
Media Queries: API for stylesheet import doesn't take media now.
diff --git a/test/css21.c b/test/css21.c
index a29fae1..cdd66f7 100644
--- a/test/css21.c
+++ b/test/css21.c
@@ -99,10 +99,8 @@ int main(int argc, char **argv)
while (error == CSS_IMPORTS_PENDING) {
lwc_string *url;
- uint64_t media;
- error = css_stylesheet_next_pending_import(sheet,
- &url, &media);
+ error = css_stylesheet_next_pending_import(sheet, &url);
assert(error == CSS_OK || error == CSS_INVALID);
if (error == CSS_OK) {
diff --git a/test/parse-auto.c b/test/parse-auto.c
index 58ccf9a..5f926e3 100644
--- a/test/parse-auto.c
+++ b/test/parse-auto.c
@@ -395,10 +395,8 @@ void run_test(const uint8_t *data, size_t len, exp_entry *exp, size_t
explen)
while (error == CSS_IMPORTS_PENDING) {
lwc_string *url;
- uint64_t media;
- error = css_stylesheet_next_pending_import(sheet,
- &url, &media);
+ error = css_stylesheet_next_pending_import(sheet, &url);
assert(error == CSS_OK || error == CSS_INVALID);
if (error == CSS_OK) {
commitdiff
http://git.netsurf-browser.org/libcss.git/commit/?id=4508b6727458892f50e3...
commit 4508b6727458892f50e3d61a364fc44c8680036a
Author: Michael Drake <michael.drake(a)codethink.co.uk>
Commit: Michael Drake <michael.drake(a)codethink.co.uk>
Media Queries: Update stylesheet import for media query lists.
diff --git a/src/select/select.c b/src/select/select.c
index 644369a..480b9f5 100644
--- a/src/select/select.c
+++ b/src/select/select.c
@@ -1847,7 +1847,8 @@ css_error select_from_sheet(css_select_ctx *ctx, const
css_stylesheet *sheet,
(const css_rule_import *) rule;
if (import->sheet != NULL &&
- (import->media & state->media) != 0) {
+ mq__list_match(import->media,
+ state->media)) {
/* It's applicable, so process it */
if (sp >= IMPORT_STACK_SIZE)
return CSS_NOMEM;
@@ -1954,7 +1955,8 @@ static css_error select_font_faces_from_sheet(
(const css_rule_import *) rule;
if (import->sheet != NULL &&
- (import->media & state->media) != 0) {
+ mq__list_match(import->media,
+ state->media)) {
/* It's applicable, so process it */
if (sp >= IMPORT_STACK_SIZE)
return CSS_NOMEM;
commitdiff
http://git.netsurf-browser.org/libcss.git/commit/?id=ce50203db282ba649442...
commit ce50203db282ba649442a562e774e879a5f3744c
Author: Michael Drake <michael.drake(a)codethink.co.uk>
Commit: Michael Drake <michael.drake(a)codethink.co.uk>
Media Queries: Update rule_good_for_media for new mq struct.
Doesn't currently match media query conditions, only the
media type.
diff --git a/src/select/mq.h b/src/select/mq.h
index a0a9f6d..5aa1404 100644
--- a/src/select/mq.h
+++ b/src/select/mq.h
@@ -10,10 +10,47 @@
#define css_select_mq_h_
/**
+ * Match media query conditions.
+ *
+ * \param[in] cond Condition to match.
+ * \return true if condition matches, otherwise false.
+ */
+static inline bool mq_match_condition(css_mq_cond *cond)
+{
+ /* TODO: Implement this. */
+ return cond == NULL;
+}
+
+/**
+ * Test whether media query list matches current media.
+ *
+ * If anything in the list matches, it the list matches. If none match
+ * it doesn't match.
+ *
+ * \param m Media query list.
+ * \meaid media Current media spec, to check against m.
+ * \return true if media query list matches media
+ */
+static inline bool mq__list_match(const css_mq_query *m, uint64_t media)
+{
+ for (; m != NULL; m = m->next) {
+ /* Check type */
+ if (!!(m->type & media) != m->negate_type) {
+ if (mq_match_condition(m->cond)) {
+ /* We have a match, no need to look further. */
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
* Test whether the rule applies for current media.
*
- * \param rule Rule to test
- * \meaid media Current media type(s)
+ * \param rule Rule to test
+ * \param media Current media type(s)
* \return true iff chain's rule applies for media
*/
static inline bool mq_rule_good_for_media(const css_rule *rule, uint64_t media)
@@ -24,10 +61,11 @@ static inline bool mq_rule_good_for_media(const css_rule *rule,
uint64_t media)
while (ancestor != NULL) {
const css_rule_media *m = (const css_rule_media *) ancestor;
- if (ancestor->type == CSS_RULE_MEDIA &&
- (m->media & media) == 0) {
- applies = false;
- break;
+ if (ancestor->type == CSS_RULE_MEDIA) {
+ applies = mq__list_match(m->media, media);
+ if (applies == false) {
+ break;
+ }
}
if (ancestor->ptype != CSS_RULE_PARENT_STYLESHEET) {
-----------------------------------------------------------------------
Summary of changes:
src/parse/language.c | 6 ++-
src/parse/mq.c | 108 ++++++++++++++++++++++++++------------------------
src/parse/mq.h | 2 +-
src/select/mq.h | 2 +-
4 files changed, 63 insertions(+), 55 deletions(-)
diff --git a/src/parse/language.c b/src/parse/language.c
index c3b523d..faafcfd 100644
--- a/src/parse/language.c
+++ b/src/parse/language.c
@@ -426,7 +426,8 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector
*vector)
consumeWhitespace(vector, &ctx);
/* Parse media list */
- error = css__mq_parse_media_list(c, vector, &ctx, &media);
+ error = css__mq_parse_media_list(
+ c->strings, vector, &ctx, &media);
if (error != CSS_OK)
return error;
@@ -532,7 +533,8 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector
*vector)
/* any0 = media query */
- error = css__mq_parse_media_list(c, vector, &ctx, &media);
+ error = css__mq_parse_media_list(
+ c->strings, vector, &ctx, &media);
if (error != CSS_OK)
return error;
diff --git a/src/parse/mq.c b/src/parse/mq.c
index f7b8b6e..2b2164f 100644
--- a/src/parse/mq.c
+++ b/src/parse/mq.c
@@ -74,7 +74,7 @@ void css__mq_query_destroy(css_mq_query *media)
}
}
-static css_error mq_parse_condition(css_language *c,
+static css_error mq_parse_condition(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
bool permit_or, css_mq_cond **cond);
@@ -197,7 +197,7 @@ static css_error mq_parse_op(const css_token *token,
return CSS_OK;
}
-static css_error mq_parse_range(css_language *c,
+static css_error mq_parse_range(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
const css_token *name_or_value,
css_mq_feature **feature)
@@ -237,7 +237,7 @@ static css_error mq_parse_range(css_language *c,
value_is_ratio = true;
} else if (name_or_value->type == CSS_TOKEN_IDENT &&
lwc_string_caseless_isequal(name_or_value->idata,
- c->strings[INFINITE], &match) == lwc_error_ok &&
+ strings[INFINITE], &match) == lwc_error_ok &&
match == false) {
/* The only ident permitted for mf-value is 'infinite', thus must have name */
name = name_or_value;
@@ -380,7 +380,7 @@ static css_error mq_parse_range(css_language *c,
return CSS_OK;
}
-static css_error mq_parse_media_feature(css_language *c,
+static css_error mq_parse_media_feature(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_feature **feature)
{
@@ -461,7 +461,8 @@ static css_error mq_parse_media_feature(css_language *c,
consumeWhitespace(vector, ctx);
} else {
/* mf-range */
- error = mq_parse_range(c, vector, ctx, name_or_value, &result);
+ error = mq_parse_range(strings, vector, ctx,
+ name_or_value, &result);
if (error != CSS_OK) {
return error;
}
@@ -470,7 +471,8 @@ static css_error mq_parse_media_feature(css_language *c,
}
} else {
/* mf-range */
- error = mq_parse_range(c, vector, ctx, name_or_value, &result);
+ error = mq_parse_range(strings, vector, ctx,
+ name_or_value, &result);
if (error != CSS_OK) {
return error;
}
@@ -494,7 +496,7 @@ static css_error mq_parse_media_feature(css_language *c,
*
* CSS Syntax Module Level 3: 8.2
*/
-static css_error mq_parse_consume_any_value(css_language *c,
+static css_error mq_parse_consume_any_value(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
bool until, const char until_char)
{
@@ -526,22 +528,22 @@ static css_error mq_parse_consume_any_value(css_language *c,
}
if (tokenIsChar(token, '(')) {
/* Need to consume until matching bracket. */
- error = mq_parse_consume_any_value(
- c, vector, ctx, true, ')');
+ error = mq_parse_consume_any_value(strings,
+ vector, ctx, true, ')');
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, true, ']');
+ error = mq_parse_consume_any_value(strings,
+ vector, ctx, true, ']');
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, true, '}');
+ error = mq_parse_consume_any_value(strings,
+ vector, ctx, true, '}');
if (error != CSS_OK) {
return error;
}
@@ -556,7 +558,7 @@ static css_error mq_parse_consume_any_value(css_language *c,
return CSS_OK;
}
-static css_error mq_parse_general_enclosed(css_language *c,
+static css_error mq_parse_general_enclosed(lwc_string **strings,
const parserutils_vector *vector, int *ctx)
{
const css_token *token;
@@ -573,7 +575,8 @@ static css_error mq_parse_general_enclosed(css_language *c,
switch (token->type) {
case CSS_TOKEN_FUNCTION:
- error = mq_parse_consume_any_value(c, vector, ctx, true, ')');
+ error = mq_parse_consume_any_value(strings, vector, ctx,
+ true, ')');
if (error != CSS_OK) {
return error;
}
@@ -585,7 +588,8 @@ static css_error mq_parse_general_enclosed(css_language *c,
break;
case CSS_TOKEN_IDENT:
- error = mq_parse_consume_any_value(c, vector, ctx, false, '\0');
+ error = mq_parse_consume_any_value(strings, vector, ctx,
+ false, '\0');
if (error != CSS_OK) {
return error;
}
@@ -598,7 +602,7 @@ static css_error mq_parse_general_enclosed(css_language *c,
return CSS_OK;
}
-static css_error mq_parse_media_in_parens(css_language *c,
+static css_error mq_parse_media_in_parens(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_cond_or_feature **cond_or_feature)
{
@@ -631,10 +635,10 @@ static css_error mq_parse_media_in_parens(css_language *c,
if (tokenIsChar(token, '(') || (token->type == CSS_TOKEN_IDENT &&
lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) == lwc_error_ok &&
+ strings[NOT], &match) == lwc_error_ok &&
match)) {
css_mq_cond *cond;
- error = mq_parse_condition(c, vector, ctx, true, &cond);
+ error = mq_parse_condition(strings, vector, ctx, true, &cond);
if (error == CSS_OK) {
token = parserutils_vector_iterate(vector, ctx);
if (tokenIsChar(token, ')') == false) {
@@ -656,7 +660,7 @@ static css_error mq_parse_media_in_parens(css_language *c,
token->type == CSS_TOKEN_NUMBER ||
token->type == CSS_TOKEN_DIMENSION) {
css_mq_feature *feature;
- error = mq_parse_media_feature(c, vector, ctx, &feature);
+ error = mq_parse_media_feature(strings, vector, ctx, &feature);
if (error == CSS_OK) {
result = malloc(sizeof(*result));
if (result == NULL) {
@@ -672,12 +676,12 @@ static css_error mq_parse_media_in_parens(css_language *c,
}
*ctx = old_ctx;
- error = mq_parse_general_enclosed(c, vector, ctx);
+ error = mq_parse_general_enclosed(strings, vector, ctx);
return error;
}
-static css_error mq_parse_condition(css_language *c,
+static css_error mq_parse_condition(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
bool permit_or, css_mq_cond **cond)
{
@@ -699,7 +703,7 @@ static css_error mq_parse_condition(css_language *c,
if (token == NULL || tokenIsChar(token, '(') == false ||
token->type != CSS_TOKEN_IDENT ||
lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) != lwc_error_ok ||
+ strings[NOT], &match) != lwc_error_ok ||
match == false) {
return CSS_INVALID;
}
@@ -721,7 +725,8 @@ static css_error mq_parse_condition(css_language *c,
parserutils_vector_iterate(vector, ctx);
consumeWhitespace(vector, ctx);
- error = mq_parse_media_in_parens(c, vector, ctx, &cond_or_feature);
+ error = mq_parse_media_in_parens(strings,
+ vector, ctx, &cond_or_feature);
if (error != CSS_OK) {
css__mq_cond_destroy(result);
return CSS_INVALID;
@@ -745,7 +750,8 @@ static css_error mq_parse_condition(css_language *c,
/* FOLLOW(media-condition) := RPAREN | COMMA | EOF */
while (token != NULL && tokenIsChar(token, ')') == false &&
tokenIsChar(token, ',') == false) {
- error = mq_parse_media_in_parens(c, vector, ctx, &cond_or_feature);
+ error = mq_parse_media_in_parens(strings, vector, ctx,
+ &cond_or_feature);
if (error != CSS_OK) {
css__mq_cond_destroy(result);
return CSS_INVALID;
@@ -771,7 +777,7 @@ static css_error mq_parse_condition(css_language *c,
css__mq_cond_destroy(result);
return CSS_INVALID;
} else if (lwc_string_caseless_isequal(token->idata,
- c->strings[AND], &match) == lwc_error_ok &&
+ strings[AND], &match) == lwc_error_ok &&
match) {
if (op != 0 && op != AND) {
css__mq_cond_destroy(result);
@@ -779,7 +785,7 @@ static css_error mq_parse_condition(css_language *c,
}
op = AND;
} else if (lwc_string_caseless_isequal(token->idata,
- c->strings[OR], &match) == lwc_error_ok &&
+ strings[OR], &match) == lwc_error_ok &&
match) {
if (permit_or == false || (op != 0 && op != OR)) {
css__mq_cond_destroy(result);
@@ -809,54 +815,54 @@ static css_error mq_parse_condition(css_language *c,
/**
* Parse a media query type.
*/
-static uint64_t mq_parse_type(css_language *c, lwc_string *type)
+static uint64_t mq_parse_type(lwc_string **strings, lwc_string *type)
{
bool match;
if (type == NULL) {
return CSS_MEDIA_ALL;
} else if (lwc_string_caseless_isequal(
- type, c->strings[AURAL],
+ type, strings[AURAL],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_AURAL;
} else if (lwc_string_caseless_isequal(
- type, c->strings[BRAILLE],
+ type, strings[BRAILLE],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_BRAILLE;
} else if (lwc_string_caseless_isequal(
- type, c->strings[EMBOSSED],
+ type, strings[EMBOSSED],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_EMBOSSED;
} else if (lwc_string_caseless_isequal(
- type, c->strings[HANDHELD],
+ type, strings[HANDHELD],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_HANDHELD;
} else if (lwc_string_caseless_isequal(
- type, c->strings[PRINT],
+ type, strings[PRINT],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_PRINT;
} else if (lwc_string_caseless_isequal(
- type, c->strings[PROJECTION],
+ type, strings[PROJECTION],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_PROJECTION;
} else if (lwc_string_caseless_isequal(
- type, c->strings[SCREEN],
+ type, strings[SCREEN],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_SCREEN;
} else if (lwc_string_caseless_isequal(
- type, c->strings[SPEECH],
+ type, strings[SPEECH],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_SPEECH;
} else if (lwc_string_caseless_isequal(
- type, c->strings[TTY],
+ type, strings[TTY],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_TTY;
} else if (lwc_string_caseless_isequal(
- type, c->strings[TV],
+ type, strings[TV],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_TV;
} else if (lwc_string_caseless_isequal(
- type, c->strings[ALL],
+ type, strings[ALL],
&match) == lwc_error_ok && match) {
return CSS_MEDIA_ALL;
}
@@ -864,7 +870,7 @@ static uint64_t mq_parse_type(css_language *c, lwc_string *type)
return 0;
}
-static css_error mq_parse_media_query(css_language *c,
+static css_error mq_parse_media_query(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_query **query)
{
@@ -888,7 +894,7 @@ static css_error mq_parse_media_query(css_language *c,
is_condition = true;
} else if (token->type == CSS_TOKEN_IDENT &&
lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) == lwc_error_ok &&
+ strings[NOT], &match) == lwc_error_ok &&
match) {
int old_ctx = *ctx;
@@ -911,7 +917,8 @@ static css_error mq_parse_media_query(css_language *c,
if (is_condition) {
/* media-condition */
- error = mq_parse_condition(c, vector, ctx, true, &result->cond);
+ error = mq_parse_condition(strings, vector, ctx, true,
+ &result->cond);
if (error != CSS_OK) {
free(result);
return error;
@@ -928,14 +935,12 @@ static css_error mq_parse_media_query(css_language *c,
}
if (lwc_string_caseless_isequal(token->idata,
- c->strings[NOT], &match) == lwc_error_ok &&
- match) {
+ strings[NOT], &match) == lwc_error_ok && match) {
result->negate_type = 1;
consumeWhitespace(vector, ctx);
token = parserutils_vector_iterate(vector, ctx);
} else if (lwc_string_caseless_isequal(token->idata,
- c->strings[ONLY], &match) == lwc_error_ok &&
- match) {
+ strings[ONLY], &match) == lwc_error_ok && match) {
consumeWhitespace(vector, ctx);
token = parserutils_vector_iterate(vector, ctx);
}
@@ -945,7 +950,7 @@ static css_error mq_parse_media_query(css_language *c,
return CSS_INVALID;
}
- result->type = mq_parse_type(c, token->idata);
+ result->type = mq_parse_type(strings, token->idata);
consumeWhitespace(vector, ctx);
@@ -953,7 +958,7 @@ static css_error mq_parse_media_query(css_language *c,
if (token != NULL) {
if (token->type != CSS_TOKEN_IDENT ||
lwc_string_caseless_isequal(token->idata,
- c->strings[AND], &match) != lwc_error_ok ||
+ strings[AND], &match) != lwc_error_ok ||
match == false) {
free(result);
return CSS_INVALID;
@@ -961,7 +966,8 @@ static css_error mq_parse_media_query(css_language *c,
consumeWhitespace(vector, ctx);
- error = mq_parse_condition(c, vector, ctx, false, &result->cond);
+ error = mq_parse_condition(strings, vector, ctx, false,
+ &result->cond);
if (error != CSS_OK) {
free(result);
return error;
@@ -972,7 +978,7 @@ static css_error mq_parse_media_query(css_language *c,
return CSS_OK;
}
-css_error css__mq_parse_media_list(css_language *c,
+css_error css__mq_parse_media_list(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_query **media)
{
@@ -993,7 +999,7 @@ css_error css__mq_parse_media_list(css_language *c,
while (token != NULL) {
css_mq_query *query;
- error = mq_parse_media_query(c, vector, ctx, &query);
+ error = mq_parse_media_query(strings, vector, ctx, &query);
if (error != CSS_OK) {
/* TODO: error recovery (see above) */
css__mq_query_destroy(result);
diff --git a/src/parse/mq.h b/src/parse/mq.h
index 381e0f9..2940032 100644
--- a/src/parse/mq.h
+++ b/src/parse/mq.h
@@ -87,7 +87,7 @@ typedef struct css_mq_query {
css_mq_cond *cond;
} css_mq_query;
-css_error css__mq_parse_media_list(css_language *c,
+css_error css__mq_parse_media_list(lwc_string **strings,
const parserutils_vector *vector, int *ctx,
css_mq_query **media);
diff --git a/src/select/mq.h b/src/select/mq.h
index 3ae987d..5aa1404 100644
--- a/src/select/mq.h
+++ b/src/select/mq.h
@@ -50,7 +50,7 @@ static inline bool mq__list_match(const css_mq_query *m, uint64_t
media)
* Test whether the rule applies for current media.
*
* \param rule Rule to test
- * \meaid media Current media type(s)
+ * \param media Current media type(s)
* \return true iff chain's rule applies for media
*/
static inline bool mq_rule_good_for_media(const css_rule *rule, uint64_t media)
--
Cascading Style Sheets library