changeset 76:27e12387154d

FIX: Handle escape character more thoroughly: also explicitely handle "\\"
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 30 Apr 2026 09:20:35 +0200
parents 711f8d19e27a
children 1a5e192aa950
files pygments_lexer_pseudocode2/algpseudocode.py tests/test_algpseudo.py
diffstat 2 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py	Wed Apr 29 12:43:28 2026 +0200
+++ b/pygments_lexer_pseudocode2/algpseudocode.py	Thu Apr 30 09:20:35 2026 +0200
@@ -197,12 +197,14 @@
         "entity-name": [      # may be multiline
             (r"[^\\}]+", Name.Entity),
             (r"\\\}", LexBase.op_fixed(Name.Entity, "}")),
+            (r"\\\\", LexBase.op_fixed(Name.Entity, "\\")),
             (r"\\", LexBase.op_fixed(Name.Entity, "\\")),
             (r"\}", LexBase.op_ignore, "#pop"),
         ],
         "entity-name-end": [  # may be multiline -- suppressed if no_end
             (r"[^\\}]+", op_opt_ignore(Name.Entity)),
             (r"\\\}", op_opt_ignore_or_fixed(Name.Entity, "}")),
+            (r"\\\\", op_opt_ignore_or_fixed(Name.Entity, "\\")),
             (r"\\", op_opt_ignore_or_fixed(Name.Entity, "\\")),
             (r"\}", LexBase.op_ignore, "#pop"),
         ],
@@ -220,6 +222,8 @@
             (r"\}", LexBase.op_ignore, "#pop"),
             (r"\n", Whitespace),
             include("expr-in-braces"),
+            (r"\\\\", LexBase.op_fixed(Text, "\\")),
+            (r"\\", LexBase.op_fixed(Text, "\\")),
             (r"\s+", Text),
         ],
         "expr-in-braces": [
--- a/tests/test_algpseudo.py	Wed Apr 29 12:43:28 2026 +0200
+++ b/tests/test_algpseudo.py	Thu Apr 30 09:20:35 2026 +0200
@@ -362,6 +362,23 @@
              ],
             pygments.lex(r"\block{\text{a b c}}", self.lexer))
 
+    def test_block_with_escaped_text(self):
+        self.assertTokenStreamEqualComplete(
+            [("Text", "◆"),
+             ("Text.Whitespace", " "),
+             ("Text", "\\"),
+             ("Name.Entity", "text"),
+             ("Punctuation", "{"),
+             ("Name.Entity", "a"),
+             ("Text", " "),
+             ("Name.Entity", "b"),
+             ("Text", " "),
+             ("Name.Entity", "c"),
+             ("Punctuation", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(r"\block{\\text{a b c\}}", self.lexer))
+
     def test_block(self):
         self.assertTokenStreamEqualComplete(
             [("Text", "◆"),