diff --git a/crates/typst-syntax/src/lexer.rs b/crates/typst-syntax/src/lexer.rs index 8379f2dca..7d363d7b5 100644 --- a/crates/typst-syntax/src/lexer.rs +++ b/crates/typst-syntax/src/lexer.rs @@ -846,14 +846,8 @@ impl Lexer<'_> { } } - // Read the suffix. - let suffix_start = self.s.cursor(); - if !self.s.eat_if('%') { - self.s.eat_while(char::is_ascii_alphanumeric); - } - - let number = self.s.get(start..suffix_start); - let suffix = self.s.from(suffix_start); + let number = self.s.from(start); + let suffix = self.s.eat_while(|c: char| c.is_ascii_alphanumeric() || c == '%'); let mut suffix_result = match suffix { "" => Ok(None), diff --git a/tests/ref/double-percent.png b/tests/ref/double-percent.png deleted file mode 100644 index 61a0d6143..000000000 Binary files a/tests/ref/double-percent.png and /dev/null differ diff --git a/tests/suite/layout/length.typ b/tests/suite/layout/length.typ index e03401084..22b016947 100644 --- a/tests/suite/layout/length.typ +++ b/tests/suite/layout/length.typ @@ -107,7 +107,10 @@ #1.2e-0% #0.0e0deg #0.% +// Error: 2-6 invalid number suffix: in% #5in% +// Error: 2-6 invalid number suffix: %in +#5%in // Error: 2-8 invalid number suffix: hello #1hello // Error: 2-7 invalid number suffix: infr diff --git a/tests/suite/layout/relative.typ b/tests/suite/layout/relative.typ index 5a5908920..4b267cf4b 100644 --- a/tests/suite/layout/relative.typ +++ b/tests/suite/layout/relative.typ @@ -6,10 +6,11 @@ #test((100% + 2pt - 2pt).length, 0pt) #test((56% + 2pt - 56%).ratio, 0%) ---- double-percent --- +--- double-percent-embedded --- // Test for two percent signs in a row. +// Error: 2-7 invalid number suffix: %% #3.1%% ---- double-percent-error --- -// Error: 7-8 the character `%` is not valid in code +--- double-percent-parens --- +// Error: 3-8 invalid number suffix: %% #(3.1%%)