Mercurial > hgrepos > Python > libs > pygments-lexer-pseudocode2
diff pygments_lexer_pseudocode2/algpseudocode.py @ 62:7153e945a3d6
Implement ignoring of \ENDxxx including its optional name parts
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 28 Apr 2026 10:09:17 +0200 |
| parents | 392745b66969 |
| children | 05c53e431c88 |
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py Mon Apr 27 19:25:45 2026 +0200 +++ b/pygments_lexer_pseudocode2/algpseudocode.py Tue Apr 28 10:09:17 2026 +0200 @@ -121,6 +121,14 @@ return _op_end_translate + def op_opt_ignore(toktype): + + def _op_opt_ignore(lexer, match, ctx=None): + if not lexer.no_end: + yield match.start(), toktype, match.group() + + return _op_opt_ignore + def op_symbol(toktype): def _op_symbol(lexer, match, ctx=None): @@ -146,7 +154,7 @@ r"|(?:func(?:tion)?|(?:fn))" r"|(?:class)" r")(\s*)(\{)", - bygroups(op_translate(Keyword), Whitespace, Name.Entity), + bygroups(op_translate(Keyword), Whitespace, LexBase.op_ignore), "entity-name"), # ENDxxx keywords with optional entity name # with name @@ -157,8 +165,10 @@ r"|(?:func(?:tion)?)" r"|(?:class)" r")(\s*)(\{)", - bygroups(op_opt_end_translate(Keyword), Whitespace, Name.Entity), - "entity-name"), + bygroups(op_opt_end_translate(Keyword), + op_opt_ignore(Whitespace), + LexBase.op_ignore), + "entity-name-end"), # without name (r"(?i)\\end(?:_|-)?(" r"(?:prog(?:ram)?)" @@ -166,7 +176,7 @@ r"|(?:proc(?:edure)?)" r"|(?:func(?:tion)?)" r"|(?:class)" - r")((\s*)(\{))?", + r")\b", bygroups(op_opt_end_translate(Keyword))), # Keywords (r"(?i)\\(" @@ -176,11 +186,17 @@ include("expr"), (r"\s+", Text), ], - "entity-name": [ # may be multiline + "entity-name": [ # may be multiline (r"[^\\}]+", Name.Entity), (r"\\\}", Name.Entity), (r"\\", Name.Entity), - (r"\}", Name.Entity, "#pop"), + (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(Name.Entity)), + (r"\\", op_opt_ignore(Name.Entity)), + (r"\}", LexBase.op_ignore, "#pop"), ], "expr": [ include("py-strings"),
