# HG changeset patch # User Franz Glasner # Date 1777396457 -7200 # Node ID 206017a08ed762d768b131357b1ebd776817fa57 # Parent 2ea86269e84e6a9b1580406acf3a4ad2b4de60af Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value diff -r 2ea86269e84e -r 206017a08ed7 pygments_lexer_pseudocode2/algpseudocode.py --- a/pygments_lexer_pseudocode2/algpseudocode.py Tue Apr 28 19:03:10 2026 +0200 +++ b/pygments_lexer_pseudocode2/algpseudocode.py Tue Apr 28 19:14:17 2026 +0200 @@ -113,13 +113,17 @@ 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. + def op_opt_ignore_or_fixed(toktype, value): + """Yield a fixed given token type and value or -- if the lexer's + `no_end` setting evals to ``True`` nothing. """ - if not lexer.no_end: - yield match.start(), Whitespace, " " + + def _op_opt_ignore_or_fixed(lexer, match, ctx=None): + if not lexer.no_end: + yield match.start(), toktype, value + + return _op_opt_ignore_or_fixed def op_symbol(toktype): @@ -146,7 +150,8 @@ r"|(?:func(?:tion)?|(?:fn))" r"|(?:class)" r")\s*(\{)", - bygroups(op_translate(Keyword), LexBase.op_space), + bygroups(op_translate(Keyword), + LexBase.op_fixed(Whitespace, " ")), "entity-name"), # ENDxxx keywords with optional entity name # with name @@ -158,7 +163,7 @@ r"|(?:class)" r")\s*(\{)", bygroups(op_opt_end_translate(Keyword), - op_opt_ignore_or_space), + op_opt_ignore_or_fixed(Whitespace, " ")), "entity-name-end"), # without name (r"(?i)\\end(?:_|-)?(" @@ -197,8 +202,8 @@ ], "expr-text": [ (r"[^\\}]+", Text), - (r"\\\}", Text), - (r"\\", Text), + (r"\\\}", LexBase.op_fixed(Text, "}")), + (r"\\", LexBase.op_fixed(Text, "\\")), (r"\}", LexBase.op_ignore, "#pop"), ], } diff -r 2ea86269e84e -r 206017a08ed7 pygments_lexer_pseudocode2/bases.py --- a/pygments_lexer_pseudocode2/bases.py Tue Apr 28 19:03:10 2026 +0200 +++ b/pygments_lexer_pseudocode2/bases.py Tue Apr 28 19:14:17 2026 +0200 @@ -10,8 +10,7 @@ from pygments import unistring from pygments.lexer import RegexLexer, combined, bygroups, include -from pygments.token import (Comment, Error, Name, Number, Other, String, - Whitespace) +from pygments.token import (Comment, Error, Name, Number, Other, String) # @@ -74,9 +73,13 @@ if False: yield match.start(), Other, "" - def op_space(lexer, match, ctx=None): - """Unconditionally yield a single whitespace ' '.""" - yield match.start(), Whitespace, " " + def op_fixed(toktype, value): + """Unconditionally yield a given token type and value.""" + + def _op_fixed(lexer, match, ctx=None): + yield match.start(), toktype, value + + return _op_fixed tokens = { # diff -r 2ea86269e84e -r 206017a08ed7 tests/test_algpseudo.py --- a/tests/test_algpseudo.py Tue Apr 28 19:03:10 2026 +0200 +++ b/tests/test_algpseudo.py Tue Apr 28 19:14:17 2026 +0200 @@ -309,7 +309,7 @@ [("Name.Entity", "a"), ("Text", " "), ("Text", "multiplied by {escaped"), - ("Text", "\\}"), + ("Text", "}"), ("Text", " "), ("Text", " "), ("Name.Entity", "b"),