diff tests/test_algpseudo.py @ 285:afbca50b7dc1

Implement an alternate syntax for "Explicit Token Types". Uses a generic two-argument syntax and allows escaping of characters using the common excaping rules. For this to work the AlgPseudocodeLexer is now based on Pygment's ExtendedRegexLexer instead of RegexLexer.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 20 May 2026 20:35:37 +0200
parents ee512932d603
children 051c8877ee22
line wrap: on
line diff
--- a/tests/test_algpseudo.py	Wed May 20 20:32:42 2026 +0200
+++ b/tests/test_algpseudo.py	Wed May 20 20:35:37 2026 +0200
@@ -750,6 +750,78 @@
                 r"""\ttx-non-existing[a_Decorator]""",
                 self.lexer))
 
+    def test_extended_explicit_tokentype_empty(self):
+        self.assertTokenStreamEqualComplete(
+            [("Text.Whitespace", "\n")],
+            pygments.lex(
+                r"""\ttX{nd}{}""", self.lexer))
+
+    def test_extended_explicit_tokentype_simple(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Decorator", "simple\nline 2"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                """\\ttX{nd}{simple\nline 2}""", self.lexer))
+
+    def test_extended_explicit_tokentype_escaped_brace(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Decorator", "simple"),
+             ("Name.Decorator", "}"),
+             ("Name.Decorator", "part 2"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                """\\ttX{nd}{simple\\}part 2}""", self.lexer))
+
+    def test_extended_explicit_tokentype_escaped_backslash(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Decorator", "simple"),
+             ("Name.Decorator", "\\"),
+             ("Name.Decorator", "part 2"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                """\\ttX{nd}{simple\\\\part 2}""", self.lexer))
+
+    def test_extended_explicit_tokentype_single_backslash(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Variable", "simple"),
+             ("Generic.Error", "\\"),
+             ("Name.Variable", "part 2"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                """\\ttX{nv}{simple\\part 2}""", self.lexer))
+
+    def test_extended_explicit_tokentype_non_existing_type(self):
+        self.assertTokenStreamEqualComplete(
+            [("Generic.Error", u"\\ttX{NON_EXISTING}{"),
+             ("Generic.Error", u"∈_∌"),
+             ("Generic.Error", u"}"),
+             ("Punctuation", "("),
+             ("Name.Entity", "p1"),
+             ("Punctuation", ","),
+             ("Text", " "),
+             ("Name.Entity", "p2"),
+             ("Punctuation", ")"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                u"\\ttX{NON_EXISTING}{∈_∌}(p1, p2)", self.lexer))
+
+    def test_just_braces_in_expressions(self):
+        self.assertTokenStreamEqualComplete(
+            [("Punctuation", "{"),
+             ("Name.Entity", "foo"),
+             ("Text", " "),
+             ("Name.Entity", "bar"),
+             ("Punctuation", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                r"{foo bar}", self.lexer))
+
     def test_end_combinations(self):
         self.assertTokenStreamEqualComplete(
             [("Keyword", "BEGIN"),