[gtk+] calc: Allow subterms with '(' ')' bracketing
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] calc: Allow subterms with '(' ')' bracketing
- Date: Sat, 13 Feb 2016 03:50:09 +0000 (UTC)
commit 0cda3ba3e8fb70d3b88b2b810ee7b988ef5f631d
Author: Benjamin Otte <otte redhat com>
Date: Sat Feb 13 04:12:45 2016 +0100
calc: Allow subterms with '(' ')' bracketing
Some more tests included.
gtk/gtkcsscalcvalue.c | 19 +++++++++++++++++++
testsuite/css/parser/calc-errors.css | 16 ++++++++++++++++
testsuite/css/parser/calc-errors.errors | 4 ++++
testsuite/css/parser/calc.css | 16 ++++++++++++++++
testsuite/css/parser/calc.ref.css | 16 ++++++++++++++++
5 files changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcsscalcvalue.c b/gtk/gtkcsscalcvalue.c
index 2bcb545..e10e790 100644
--- a/gtk/gtkcsscalcvalue.c
+++ b/gtk/gtkcsscalcvalue.c
@@ -316,6 +316,9 @@ gtk_css_calc_value_new_sum (GtkCssValue *value1,
return gtk_css_value_new_from_array (array);
}
+GtkCssValue * gtk_css_calc_value_parse_sum (GtkCssParser *parser,
+ GtkCssNumberParseFlags flags);
+
GtkCssValue *
gtk_css_calc_value_parse_value (GtkCssParser *parser,
GtkCssNumberParseFlags flags)
@@ -326,6 +329,22 @@ gtk_css_calc_value_parse_value (GtkCssParser *parser,
return NULL;
}
+ if (_gtk_css_parser_try (parser, "(", TRUE))
+ {
+ GtkCssValue *result = gtk_css_calc_value_parse_sum (parser, flags);
+ if (result == NULL)
+ return NULL;
+
+ if (!_gtk_css_parser_try (parser, ")", TRUE))
+ {
+ _gtk_css_parser_error (parser, "Missing closing ')' in calc() subterm");
+ _gtk_css_value_unref (result);
+ return NULL;
+ }
+
+ return result;
+ }
+
return _gtk_css_number_value_parse (parser, flags);
}
diff --git a/testsuite/css/parser/calc-errors.css b/testsuite/css/parser/calc-errors.css
index a109e62..b1464c3 100644
--- a/testsuite/css/parser/calc-errors.css
+++ b/testsuite/css/parser/calc-errors.css
@@ -57,3 +57,19 @@ n {
o {
margin-left: calc(1px / error);
}
+
+p {
+ margin-left: calc((((((1px))));
+}
+
+q {
+ margin-left: calc((((((1px)))))))));
+}
+
+r {
+ margin-left: calc(1px + (1));
+}
+
+s {
+ margin-left: calc(1px + (error));
+}
diff --git a/testsuite/css/parser/calc-errors.errors b/testsuite/css/parser/calc-errors.errors
index 891991d..cb8139b 100644
--- a/testsuite/css/parser/calc-errors.errors
+++ b/testsuite/css/parser/calc-errors.errors
@@ -13,3 +13,7 @@ calc-errors.css:46: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
calc-errors.css:50: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
calc-errors.css:54: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
calc-errors.css:58: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
+calc-errors.css:62: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
+calc-errors.css:66: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
+calc-errors.css:70: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
+calc-errors.css:74: error: GTK_CSS_PROVIDER_ERROR_SYNTAX
diff --git a/testsuite/css/parser/calc.css b/testsuite/css/parser/calc.css
index 5406818..cc511fa 100644
--- a/testsuite/css/parser/calc.css
+++ b/testsuite/css/parser/calc.css
@@ -21,3 +21,19 @@ e {
f {
background-size: calc(2 * 3px + 4px * 5 - 6px / 3);
}
+
+g {
+ background-size: calc((((((1px))))));
+}
+
+h {
+ background-size: calc(3 * ((4px + ((4 * (6px + 3em)) / 3)) + 5em));
+}
+
+i {
+ border-top-left-radius: calc(1px * (3 + 2)) calc(1px / ( 3 / (2 * 1.5)));
+}
+
+j {
+ border-bottom-right-radius: calc((1 + 1 + (1 + 1) + 1) * 1px) calc((1 / 1) * 1px);
+}
diff --git a/testsuite/css/parser/calc.ref.css b/testsuite/css/parser/calc.ref.css
index f0c2bbe..cc2ca59 100644
--- a/testsuite/css/parser/calc.ref.css
+++ b/testsuite/css/parser/calc.ref.css
@@ -21,3 +21,19 @@ e {
f {
background-size: 24px;
}
+
+g {
+ background-size: 1px;
+}
+
+h {
+ background-size: calc(27em + 36px);
+}
+
+i {
+ border-top-left-radius: 5px 1px;
+}
+
+j {
+ border-bottom-right-radius: 5px 1px;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]