css: Emit a special error for a common error
authorBenjamin Otte <otte@redhat.com>
Wed, 20 Oct 2021 22:05:56 +0000 (00:05 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 20 Oct 2021 22:16:20 +0000 (00:16 +0200)
This CSS:
  calc(5px+3px)
is wrong because it gets broken to:
  calc(  5px  +3px  )
which is 2 numbers inside the calc, and what you want is:
  calc(  5px  +  3px  )
but you need to add a space to get this, like so:
  calc(5px + 3px)
which is the recommended way to write calc() statements.

So whenever we encounter an error, check if the next token is a signed
number and if so, include it in the error message.

gtk/gtkcsscalcvalue.c

index ad7380b99021e14ce016c5cd17fb511845832886..d0731b267b01a028cfe09dda006f3506e73d2a1e 100644 (file)
@@ -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;
         }