changeset 19:2e67c4eae6d9

Use an alternate replace algorithm with a dict
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 20 Apr 2026 15:25:45 +0200
parents 859ab8abce0a
children 3db60b64abf6
files pygments_lexer_pseudocode2/__init__.py tests/test_fr.py
diffstat 2 files changed, 43 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/__init__.py	Mon Apr 20 14:12:35 2026 +0200
+++ b/pygments_lexer_pseudocode2/__init__.py	Mon Apr 20 15:25:45 2026 +0200
@@ -36,16 +36,21 @@
     mimetypes = []
     flags = re.IGNORECASE
 
+    REPLACEMENTS = {
+        '<=': '≤',
+        '>=': '≥',
+        '<>': '≠',
+        '<-': '←',
+        '^': '↑',
+    }
+
     def op_replace(lexer, match):
         op = match.group(0)
-        
-        S = ('<=', '>=', '<>', '<-', '^')
-        R = ('≤',  '≥',  '≠',  '←',  '↑')
-
-        if op in S:
-            op = R[S.index(op)]
-
-        yield match.start(), Operator, op
+        opr = lexer.REPLACEMENTS.get(op)
+        if opr is None:
+            yield match.start(), Operator, op
+        else:
+            yield match.start(), Operator, opr
 
     def scomment(lexer, match):
         s = match.group(1).lower().strip()
--- a/tests/test_fr.py	Mon Apr 20 14:12:35 2026 +0200
+++ b/tests/test_fr.py	Mon Apr 20 15:25:45 2026 +0200
@@ -34,7 +34,7 @@
         self.assertRaises(StopIteration, next, tokens)
 
     def test_op_replace(self):
-        tokens = pygments.lex("<= >= <> <- ^", self.lexer)
+        tokens = pygments.lex("<= >= <> <- ^ < = >", self.lexer)
         self.assertEqual((Token.Operator, "≤"), next(tokens))
         self.assertEqual((Token.Text, " "), next(tokens))
         self.assertEqual((Token.Operator, "≥"), next(tokens))
@@ -44,11 +44,17 @@
         self.assertEqual((Token.Operator, "←"), next(tokens))
         self.assertEqual((Token.Text, " "), next(tokens))
         self.assertEqual((Token.Operator, "↑"), next(tokens))
+        self.assertEqual((Token.Text, " "), next(tokens))
+        self.assertEqual((Token.Operator, "<"), next(tokens))
+        self.assertEqual((Token.Text, " "), next(tokens))
+        self.assertEqual((Token.Operator, "="), next(tokens))
+        self.assertEqual((Token.Text, " "), next(tokens))
+        self.assertEqual((Token.Operator, ">"), next(tokens))
         self.assertEqual((Token.Text, "\n"), next(tokens))
         self.assertRaises(StopIteration, next, tokens)
 
     def test_op_replace_list(self):
-        tokens = pygments.lex("<= >= <> <- ^", self.lexer)
+        tokens = pygments.lex("<= >= <> <- ^ < = >", self.lexer)
         self.assertTokenStreamEqual(
             [("Token.Operator", "≤"),
              ("Token.Text", " "),
@@ -59,13 +65,19 @@
              ("Token.Operator", "←"),
              ("Token.Text", " "),
              ("Token.Operator", "↑"),
+             ("Token.Text", " "),
+             ("Token.Operator", "<"),
+             ("Token.Text", " "),
+             ("Token.Operator", "="),
+             ("Token.Text", " "),
+             ("Token.Operator", ">"),
              ("Token.Text", "\n"),
              ],
             tokens)
         self.assertRaises(StopIteration, next, tokens)
 
     def test_op_replace_list_with_short_names(self):
-        tokens = pygments.lex("<= >= <> <- ^", self.lexer)
+        tokens = pygments.lex("<= >= <> <- ^ < = > ", self.lexer)
         self.assertTokenStreamEqual(
             [("Operator", "≤"),
              ("Text", " "),
@@ -76,13 +88,19 @@
              ("Operator", "←"),
              ("Text", " "),
              ("Operator", "↑"),
-             ("Text", "\n"),
+             ("Text", " "),
+             ("Operator", "<"),
+             ("Text", " "),
+             ("Operator", "="),
+             ("Text", " "),
+             ("Operator", ">"),
+             ("Text", " \n"),
              ],
             tokens)
         self.assertRaises(StopIteration, next, tokens)
 
     def test_op_replace_complete(self):
-        tokens = pygments.lex("<= >= <> <- ^", self.lexer)
+        tokens = pygments.lex("<= >= <> <- ^ > = <  ", self.lexer)
         self.assertTokenStreamEqualComplete(
             [("Operator", "≤"),
              ("Text", " "),
@@ -93,7 +111,13 @@
              ("Operator", "←"),
              ("Text", " "),
              ("Operator", "↑"),
-             ("Text", "\n"),
+             ("Text", " "),
+             ("Operator", ">"),
+             ("Text", " "),
+             ("Operator", "="),
+             ("Text", " "),
+             ("Operator", "<"),
+             ("Text", "  \n"),
              ],
             tokens)