diff pygments_lexer_pseudocode2/algpseudocode.py @ 65:3f4223a79d2b

Normalize whitespace handling for entity names
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 28 Apr 2026 13:05:15 +0200
parents 05c53e431c88
children 5517b0be67f0
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Tue Apr 28 12:40:02 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Tue Apr 28 13:05:15 2026 +0200
@@ -113,6 +113,14 @@
 
         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.
+
+        """
+        if not lexer.no_end:
+            yield match.start(), Whitespace, " "
+
     def op_symbol(toktype):
 
         def _op_symbol(lexer, match, ctx=None):
@@ -137,8 +145,8 @@
              r"|(?:proc(?:edure)?)"
              r"|(?:func(?:tion)?|(?:fn))"
              r"|(?:class)"
-             r")(\s*)(\{)",
-             bygroups(op_translate(Keyword), Whitespace, LexBase.op_ignore),
+             r")\s*(\{)",
+             bygroups(op_translate(Keyword), LexBase.op_space),
              "entity-name"),
             # ENDxxx keywords with optional entity name
             #   with name
@@ -148,10 +156,9 @@
              r"|(?:proc(?:edure)?)"
              r"|(?:func(?:tion)?)"
              r"|(?:class)"
-             r")(\s*)(\{)",
+             r")\s*(\{)",
              bygroups(op_opt_end_translate(Keyword),
-                      op_opt_ignore(Whitespace),
-                      LexBase.op_ignore),
+                      op_opt_ignore_or_space),
              "entity-name-end"),
             #   without name
             (r"(?i)\\end(?:_|-)?("