# HG changeset patch # User Franz Glasner # Date 1777814023 -7200 # Node ID dc17b778a52b15411b9ab8a2f4f5e4d04f792f1a # Parent 84c0f761c836bdd1740397d0f8a19175f9e8c7ae Refactor \END variants diff -r 84c0f761c836 -r dc17b778a52b pygments_lexer_pseudocode2/algpseudocode.py --- a/pygments_lexer_pseudocode2/algpseudocode.py Sun May 03 15:10:52 2026 +0200 +++ b/pygments_lexer_pseudocode2/algpseudocode.py Sun May 03 15:13:43 2026 +0200 @@ -203,20 +203,21 @@ bygroups(op_translate(Keyword), LexBase.op_fixed(Whitespace, " ")), "entity-name"), - # ENDxxx keywords with optional entity name - # with name - (r"(?i)\\end(?:_|-)?(" + # ENDxxx keywords with optional entity name in two parts: + # 1. with name + (r"(?i)\\end(?:[_\-]|(?:[ \t]+))?(" r"(?:prog(?:ram)?)" r"|(?:algo(?:rithm)?)" r"|(?:proc(?:edure)?)" r"|(?:func(?:tion)?)" r"|(?:class)" - r")(?:_|(?:[\t -]+))?(\{)", + r")(?:[_\-]|(?:[\t ]+))?(\{)", bygroups(op_opt_end_translate(Keyword), op_opt_ignore_or_fixed(Whitespace, " ")), "entity-name-end"), - # without name - (r"(?i)\\end(?:_|-)?(" + # 2. without name + # 3. AND keywords that do not allow a param (e.g. endif) + (r"(?i)\\end(?:[_\-]|(?:[ \t]+))?(" r"(?:prog(?:ram)?)" r"|(?:algo(?:rithm)?)" r"|(?:proc(?:edure)?)" diff -r 84c0f761c836 -r dc17b778a52b tests/test_algpseudo.py --- a/tests/test_algpseudo.py Sun May 03 15:10:52 2026 +0200 +++ b/tests/test_algpseudo.py Sun May 03 15:13:43 2026 +0200 @@ -182,6 +182,15 @@ ], pygments.lex("\\ENDPROCEDURE {the procedure name}", self.lexer)) + def test_endproc_with_entityname_2(self): + self.assertTokenStreamEqualComplete( + [("Keyword", "END OF PROCEDURE"), + ("Text.Whitespace", " "), + ("Name.Entity", "the procedure name"), + ("Text.Whitespace", "\n"), + ], + pygments.lex("\\END-PROC {the procedure name}", self.lexer)) + def test_proc_de(self): lexer = pygments.lexers.load_lexer_from_file( ALGLEXERFILENAME, "AlgPseudocodeLexer_DE")