diff pygments_lexer_pseudocode2/algpseudocode.py @ 72:206017a08ed7

Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 28 Apr 2026 19:14:17 +0200
parents 5517b0be67f0
children c1357674622d
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Tue Apr 28 19:03:10 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Tue Apr 28 19:14:17 2026 +0200
@@ -113,13 +113,17 @@
 
         return _op_opt_ignore
 
-    def op_opt_ignore_or_space(lexer, match, ctx=None):
-        """Yield a single whitespace ' ' or nothing -- depending on the lexer's
-        `no_end` setting.
+    def op_opt_ignore_or_fixed(toktype, value):
+        """Yield a fixed given token type and value or -- if the lexer's
+        `no_end` setting evals to ``True`` nothing.
 
         """
-        if not lexer.no_end:
-            yield match.start(), Whitespace, " "
+
+        def _op_opt_ignore_or_fixed(lexer, match, ctx=None):
+            if not lexer.no_end:
+                yield match.start(), toktype, value
+
+        return _op_opt_ignore_or_fixed
 
     def op_symbol(toktype):
 
@@ -146,7 +150,8 @@
              r"|(?:func(?:tion)?|(?:fn))"
              r"|(?:class)"
              r")\s*(\{)",
-             bygroups(op_translate(Keyword), LexBase.op_space),
+             bygroups(op_translate(Keyword),
+                      LexBase.op_fixed(Whitespace, " ")),
              "entity-name"),
             # ENDxxx keywords with optional entity name
             #   with name
@@ -158,7 +163,7 @@
              r"|(?:class)"
              r")\s*(\{)",
              bygroups(op_opt_end_translate(Keyword),
-                      op_opt_ignore_or_space),
+                      op_opt_ignore_or_fixed(Whitespace, " ")),
              "entity-name-end"),
             #   without name
             (r"(?i)\\end(?:_|-)?("
@@ -197,8 +202,8 @@
         ],
         "expr-text": [
             (r"[^\\}]+", Text),
-            (r"\\\}", Text),
-            (r"\\", Text),
+            (r"\\\}", LexBase.op_fixed(Text, "}")),
+            (r"\\", LexBase.op_fixed(Text, "\\")),
             (r"\}", LexBase.op_ignore, "#pop"),
         ],
     }