changeset 113:9aea2fd5f037

The \GETS command. Its output is customizable with the lexer's "gets" option. It defaults to `←'.
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 05 May 2026 20:51:20 +0200
parents ec8767cc5493
children be50fe0687d6
files pygments_lexer_pseudocode2/algpseudocode.py tests/test_algpseudo.py
diffstat 2 files changed, 31 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Tue May 05 17:38:49 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Tue May 05 20:51:20 2026 +0200
@@ -194,6 +194,9 @@
 
         return _op_opt_ignore_or_fixed
 
+    def op_gets(lexer, match, ctx=None):
+        yield match.start(), Operator, lexer.symbol_gets
+
     def op_symbol(toktype):
 
         def _op_symbol(lexer, match, ctx=None):
@@ -346,6 +349,7 @@
             include("escaped-string-start"),
             include("py-strings"),
             include("py-numbers"),
+            (r"(?i)\\gets\b", op_gets),
             (r"(?i)\\text[ \t]*\{", LexBase.op_ignore, "text-in-expr"),
             include("explicit-tokentype"),
             include("remark"),
@@ -361,6 +365,7 @@
             include("escaped-string-start"),
             include("py-strings"),
             include("py-numbers"),
+            (r"(?i)\\gets\b", op_gets),
             (r"(?i)\\text[ \t]*\{", LexBase.op_ignore, "text-in-expr"),
             include("explicit-tokentype"),
             include("remark"),
@@ -498,6 +503,7 @@
     def __init__(self, **options):
         val = pygments.util.get_bool_opt(options, "no_end", default=False)
         self.no_end = val
+        self.symbol_gets = options.get("gets", "←")
         LexBase.__init__(self, **options)
 
 
@@ -546,7 +552,7 @@
 #       "LOOP": XXX TBD        # noqa
         "REPEAT": "WIEDERHOLE",
         "UNTIL": "BIS",
-#       "RETURN": XXX TBD      # noqa        
+#       "RETURN": XXX TBD      # noqa
         "BEGIN": "START",
         "END": "ENDE",
     })
--- a/tests/test_algpseudo.py	Tue May 05 17:38:49 2026 +0200
+++ b/tests/test_algpseudo.py	Tue May 05 20:51:20 2026 +0200
@@ -875,6 +875,30 @@
              ],
             pygments.lex(r'\TEXT{flow \expr{f\"}}', self.lexer))
 
+    def test_gets_default(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Entity", "a"),
+             ("Text", " "),
+             ("Operator", "←"),
+             ("Text", " "),
+             ("Number.Integer", "2"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(r"a \gets 2", self.lexer))
+
+    def test_gets_custom(self):
+        lexer = pygments.lexers.load_lexer_from_file(
+            ALGLEXERFILENAME, ALGLEXERCLASS, gets="::=")
+        self.assertTokenStreamEqualComplete(
+            [("Name.Entity", "a"),
+             ("Text", " "),
+             ("Operator", "::="),
+             ("Text", " "),
+             ("Number.Float", "2.7"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(r"a \gets 2.7", lexer))
+
 
 class PygmentizeCompletely(unittest.TestCase):