changeset 70:5517b0be67f0

Basic "\TEXT" escape for expressions
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 28 Apr 2026 18:33:27 +0200
parents b3dd247b27a5
children 2ea86269e84e
files pygments_lexer_pseudocode2/algpseudocode.py tests/test_algpseudo.py
diffstat 2 files changed, 55 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Tue Apr 28 15:25:10 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Tue Apr 28 18:33:27 2026 +0200
@@ -192,8 +192,15 @@
         "expr": [
             include("py-strings"),
             include("py-numbers"),
+            (r"(?i)\\text\s*\{", LexBase.op_ignore, "expr-text"),
             include("py-name"),
-        ]
+        ],
+        "expr-text": [
+            (r"[^\\}]+", Text),
+            (r"\\\}", Text),
+            (r"\\", Text),
+            (r"\}", LexBase.op_ignore, "#pop"),
+        ],
     }
 
     def __init__(self, **options):
--- a/tests/test_algpseudo.py	Tue Apr 28 15:25:10 2026 +0200
+++ b/tests/test_algpseudo.py	Tue Apr 28 18:33:27 2026 +0200
@@ -283,6 +283,53 @@
 \\Rem  the remark 2
 """, self.lexer))
 
+    def test_expr_and_text(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Entity", "a"),
+             ("Text", " "),
+             ("Text", "multiplied by"),
+             ("Text", " "),
+             ("Name.Entity", "b"),
+             ("Text", " "),
+             ("Text", "is"),
+             ("Text", " "),
+             ("Number.Integer", "0"),
+             ("Text", "  "),
+             ("Text", "mod"),
+             ("Text", " "),
+             ("Name.Entity", "p"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                r"""a \TEXT{multiplied by} b \text{is} 0  \text{mod} p""",
+                self.lexer))
+
+    def test_expr_and_text_with_escaped_characters(self):
+        self.assertTokenStreamEqualComplete(
+            [("Name.Entity", "a"),
+             ("Text", " "),
+             ("Text", "multiplied by {escaped"),
+             ("Text", "\\}"),
+             ("Text", " "),
+             ("Text", " "),
+             ("Name.Entity", "b"),
+             ("Text", " "),
+             ("Text", "is "),
+             ("Text", "\\"),
+             ("Text", " not"),
+             ("Text", " "),
+             ("Number.Integer", "0"),
+             ("Text", "  "),
+             ("Text", "mod"),
+             ("Text", " "),
+             ("Name.Entity", "p"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                r"""a \TEXT{multiplied by {escaped\} } b \text{is \ not} 0"""
+                r"  \text{mod} p""",
+                self.lexer))
+
 
 class PygmentizeCompletely(unittest.TestCase):