Mercurial > hgrepos > Python > libs > pygments-lexer-pseudocode2
changeset 72:206017a08ed7
Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 28 Apr 2026 19:14:17 +0200 |
| parents | 2ea86269e84e |
| children | a2a56d08b860 |
| files | pygments_lexer_pseudocode2/algpseudocode.py pygments_lexer_pseudocode2/bases.py tests/test_algpseudo.py |
| diffstat | 3 files changed, 23 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- 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"), ], }
--- 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 = { #
--- 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"),
