diff --git a/crates/typst-syntax/src/ast.rs b/crates/typst-syntax/src/ast.rs index 547d53cd8..c51eaeec8 100644 --- a/crates/typst-syntax/src/ast.rs +++ b/crates/typst-syntax/src/ast.rs @@ -595,6 +595,7 @@ impl Shorthand<'_> { ("--", '\u{2013}'), ("---", '\u{2014}'), ("-?", '\u{00AD}'), + ("-!", '\u{2011}'), ]; /// Get the shorthanded character. diff --git a/crates/typst-syntax/src/lexer.rs b/crates/typst-syntax/src/lexer.rs index 82f65cd36..59a89d138 100644 --- a/crates/typst-syntax/src/lexer.rs +++ b/crates/typst-syntax/src/lexer.rs @@ -191,6 +191,7 @@ impl Lexer<'_> { '-' if self.s.eat_if("--") => SyntaxKind::Shorthand, '-' if self.s.eat_if('-') => SyntaxKind::Shorthand, '-' if self.s.eat_if('?') => SyntaxKind::Shorthand, + '-' if self.s.eat_if('!') => SyntaxKind::Shorthand, '-' if self.s.at(char::is_numeric) => SyntaxKind::Shorthand, '*' if !self.in_word() => SyntaxKind::Star, '_' if !self.in_word() => SyntaxKind::Underscore, @@ -528,7 +529,7 @@ impl Lexer<'_> { match s.eat() { Some(' ') if s.at(char::is_alphanumeric) => {} Some('/') if !s.at(['/', '*']) => {} - Some('-') if !s.at(['-', '?']) => {} + Some('-') if !s.at(['-', '?', '!']) => {} Some('.') if !s.at("..") => {} Some('h') if !s.at("ttp://") && !s.at("ttps://") => {} Some('@') if !s.at(is_valid_in_label_literal) => {} diff --git a/tests/ref/shorthand-nbsp-and-shy-hyphen.png b/tests/ref/shorthand-nbsp-and-shy-hyphen.png index e6984bb79..ad5a92a13 100644 Binary files a/tests/ref/shorthand-nbsp-and-shy-hyphen.png and b/tests/ref/shorthand-nbsp-and-shy-hyphen.png differ diff --git a/tests/suite/layout/inline/linebreak.typ b/tests/suite/layout/inline/linebreak.typ index 86a900252..7de01490a 100644 --- a/tests/suite/layout/inline/linebreak.typ +++ b/tests/suite/layout/inline/linebreak.typ @@ -10,7 +10,7 @@ Supercalifragilisticexpialidocious Expialigoricmetrioxidation. --- linebreak-hyphen-nbsp --- // Test for non-breaking space and hyphen. -There are non\u{2011}breaking~characters. +There are non-!breaking~characters. --- linebreak-narrow-nbsp --- // Test for narrow non-breaking space. diff --git a/tests/suite/syntax/shorthand.typ b/tests/suite/syntax/shorthand.typ index 7d1782b9f..696a794e0 100644 --- a/tests/suite/syntax/shorthand.typ +++ b/tests/suite/syntax/shorthand.typ @@ -1,7 +1,7 @@ // Test shorthands for unicode codepoints. --- shorthand-nbsp-and-shy-hyphen --- -The non-breaking space~does work, soft-?hyphen also does. +The non-breaking space~does work, soft-?hyphen does, and non-!breaking hyphen also does. --- shorthand-nbsp-width --- // Make sure non-breaking and normal space always diff --git a/tools/support/typst.tmLanguage.json b/tools/support/typst.tmLanguage.json index 104df060e..a8e85bc91 100644 --- a/tools/support/typst.tmLanguage.json +++ b/tools/support/typst.tmLanguage.json @@ -42,6 +42,10 @@ "name": "punctuation.definition.nonbreaking-space.typst", "match": "~" }, + { + "name": "punctuation.definition.nonbreaking-hyphen.typst", + "match": "-!" + }, { "name": "punctuation.definition.shy.typst", "match": "-\\?"