changeset 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 9ba1584d4b4a
files pygments_lexer_pseudocode2/algpseudocode.py pygments_lexer_pseudocode2/bases.py
diffstat 2 files changed, 19 insertions(+), 6 deletions(-) [+]
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(?:_|-)?("
--- a/pygments_lexer_pseudocode2/bases.py	Tue Apr 28 12:40:02 2026 +0200
+++ b/pygments_lexer_pseudocode2/bases.py	Tue Apr 28 13:05:15 2026 +0200
@@ -10,7 +10,8 @@
 
 from pygments import unistring
 from pygments.lexer import RegexLexer, combined, bygroups, include
-from pygments.token import Error, Name, Number, String, Comment, Other
+from pygments.token import (Comment, Error, Name, Number, Other, String,
+                            Whitespace)
 
 
 #
@@ -69,9 +70,14 @@
     """
 
     def op_ignore(lexer, match, ctx=None):
+        """Ignore the match."""
         if False:
             yield match.start(), Other, ""
 
+    def op_space(lexer, match, ctx=None):
+        """Unconditionally yield a single whitespace ' '."""
+        yield match.start(), Whitespace, " "
+
     tokens = {
 #
 # These states are borrowed from Pygment's Python lexer.