summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-10-21 00:00:29 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-10-21 00:00:29 +0000
commit74329abf2924ee592f808e1ef4cc2f0c81327aa4 (patch)
tree45e801fc1d94cfbc650746881c09640545e6cbdc
parent0afae65c8a9cb14b978d9bc5f4db1f9fcbbb90ba (diff)
parent350a5edb87c447d7ef302df08cdd993e6425e8f0 (diff)
downloadgtk+-74329abf2924ee592f808e1ef4cc2f0c81327aa4.tar.gz
Merge branch 'wip/otte/for-master' into 'master'
Better errors ftw! See merge request GNOME/gtk!4084
-rw-r--r--gtk/css/gtkcsstokenizer.c17
-rw-r--r--gtk/css/gtkcsstokenizerprivate.h3
-rw-r--r--gtk/gtkcsscalcvalue.c8
-rw-r--r--gtk/gtkcssdimensionvalue.c3
-rw-r--r--gtk/gtkcssnumbervalue.c3
5 files changed, 25 insertions, 9 deletions
diff --git a/gtk/css/gtkcsstokenizer.c b/gtk/css/gtkcsstokenizer.c
index 05fca8ed01..a6d14abc21 100644
--- a/gtk/css/gtkcsstokenizer.c
+++ b/gtk/css/gtkcsstokenizer.c
@@ -55,7 +55,8 @@ gtk_css_token_clear (GtkCssToken *token)
case GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION:
case GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION:
- case GTK_CSS_TOKEN_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNED_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNLESS_DIMENSION:
g_free (token->dimension.dimension);
break;
@@ -206,7 +207,8 @@ gtk_css_token_is_finite (const GtkCssToken *token)
case GTK_CSS_TOKEN_BAD_URL:
case GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION:
case GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION:
- case GTK_CSS_TOKEN_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNED_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNLESS_DIMENSION:
return FALSE;
}
}
@@ -281,7 +283,8 @@ gtk_css_token_is_preserved (const GtkCssToken *token,
case GTK_CSS_TOKEN_BAD_URL:
case GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION:
case GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION:
- case GTK_CSS_TOKEN_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNED_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNLESS_DIMENSION:
if (out_closing)
*out_closing = GTK_CSS_TOKEN_EOF;
return TRUE;
@@ -372,11 +375,12 @@ gtk_css_token_print (const GtkCssToken *token,
break;
case GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNED_DIMENSION:
if (token->dimension.value >= 0)
g_string_append_c (string, '+');
G_GNUC_FALLTHROUGH;
case GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION:
- case GTK_CSS_TOKEN_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNLESS_DIMENSION:
g_ascii_dtostr (buf, G_ASCII_DTOSTR_BUF_SIZE, token->dimension.value);
g_string_append (string, buf);
append_ident (string, token->dimension.dimension);
@@ -549,7 +553,8 @@ gtk_css_token_init_dimension (GtkCssToken *token,
{
case GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION:
case GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION:
- case GTK_CSS_TOKEN_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNED_DIMENSION:
+ case GTK_CSS_TOKEN_SIGNLESS_DIMENSION:
token->dimension.value = value;
token->dimension.dimension = dimension;
break;
@@ -1122,7 +1127,7 @@ gtk_css_tokenizer_read_numeric (GtkCssTokenizer *tokenizer,
if (is_int)
type = has_sign ? GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION : GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION;
else
- type = GTK_CSS_TOKEN_DIMENSION;
+ type = has_sign ? GTK_CSS_TOKEN_SIGNED_DIMENSION : GTK_CSS_TOKEN_SIGNLESS_DIMENSION;
gtk_css_token_init_dimension (token, type, value, gtk_css_tokenizer_read_name (tokenizer));
}
diff --git a/gtk/css/gtkcsstokenizerprivate.h b/gtk/css/gtkcsstokenizerprivate.h
index 40447b0b89..6211ef722f 100644
--- a/gtk/css/gtkcsstokenizerprivate.h
+++ b/gtk/css/gtkcsstokenizerprivate.h
@@ -67,7 +67,8 @@ typedef enum {
/* dimension */
GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION,
GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION,
- GTK_CSS_TOKEN_DIMENSION
+ GTK_CSS_TOKEN_SIGNED_DIMENSION,
+ GTK_CSS_TOKEN_SIGNLESS_DIMENSION
} GtkCssTokenType;
typedef union _GtkCssToken GtkCssToken;
diff --git a/gtk/gtkcsscalcvalue.c b/gtk/gtkcsscalcvalue.c
index ad7380b990..d0731b267b 100644
--- a/gtk/gtkcsscalcvalue.c
+++ b/gtk/gtkcsscalcvalue.c
@@ -166,6 +166,14 @@ gtk_css_calc_value_parse_sum (GtkCssParser *parser,
}
else
{
+ if (gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_INTEGER) ||
+ gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_NUMBER) ||
+ gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION) ||
+ gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_DIMENSION))
+ {
+ gtk_css_parser_error_syntax (parser, "Unexpected signed number, did you forget a space between sign and number?");
+ gtk_css_parser_consume_token (parser);
+ }
break;
}
diff --git a/gtk/gtkcssdimensionvalue.c b/gtk/gtkcssdimensionvalue.c
index 84a1d0e780..4bc0c32a6a 100644
--- a/gtk/gtkcssdimensionvalue.c
+++ b/gtk/gtkcssdimensionvalue.c
@@ -93,7 +93,8 @@ gtk_css_dimension_value_parse (GtkCssParser *parser,
}
else if (gtk_css_token_is (token, GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION) ||
gtk_css_token_is (token, GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION) ||
- gtk_css_token_is (token, GTK_CSS_TOKEN_DIMENSION))
+ gtk_css_token_is (token, GTK_CSS_TOKEN_SIGNED_DIMENSION) ||
+ gtk_css_token_is (token, GTK_CSS_TOKEN_SIGNLESS_DIMENSION))
{
guint i;
diff --git a/gtk/gtkcssnumbervalue.c b/gtk/gtkcssnumbervalue.c
index dacf9c4476..7b2dbeacc9 100644
--- a/gtk/gtkcssnumbervalue.c
+++ b/gtk/gtkcssnumbervalue.c
@@ -704,7 +704,8 @@ gtk_css_number_value_can_parse (GtkCssParser *parser)
|| gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_PERCENTAGE)
|| gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_INTEGER_DIMENSION)
|| gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNLESS_INTEGER_DIMENSION)
- || gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_DIMENSION)
+ || gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNED_DIMENSION)
+ || gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_SIGNLESS_DIMENSION)
|| gtk_css_parser_has_function (parser, "calc");
}