# HG changeset patch # User Franz Glasner # Date 1777020480 -7200 # Node ID df08226a69845c07bfadf19554b818b616d4d2e2 # Parent a3151d837258f484d6e851d543be9a1938569b57 Names for some entities (program, algorithm, function, procedure, class). Also test for "class". diff -r a3151d837258 -r df08226a6984 pygments_lexer_pseudocode2/pseudocode.py --- a/pygments_lexer_pseudocode2/pseudocode.py Fri Apr 24 09:44:34 2026 +0200 +++ b/pygments_lexer_pseudocode2/pseudocode.py Fri Apr 24 10:48:00 2026 +0200 @@ -14,7 +14,7 @@ import re from pygments.lexer import include, bygroups -from pygments.token import (Comment, Keyword, Text, Whitespace) +from pygments.token import (Comment, Keyword, Name, Text, Whitespace) # # Relative imports do not work with pygments.lexers.load_lexer_from_file() @@ -67,8 +67,8 @@ def op_translate(toktype): - def _op_translate(lexer, match): - kw = match.group(1).upper() + def _op_translate(lexer, match, ctx=None): + kw = match.group().upper() yield match.start(), toktype, lexer.TRANSLATIONS.get(kw, kw) return _op_translate @@ -97,10 +97,17 @@ r"|(?:proc(?:edure)?)" r"|(?:func(?:tion)?|(?:fn))" r"|(?:class)" - r")\b", - op_translate(Keyword)), + r")(\s*)(\{)", + bygroups(op_translate(Keyword), Whitespace, Name.Entity), + "entity-name"), include("expr"), ], + "entity-name": [ # may be multiline + (r"[^\\}]+", Name.Entity), + (r"\\\}", Name.Entity), + (r"\\", Name.Entity), + (r"\}", Name.Entity, "#pop"), + ], "expr": [ include("py-strings"), include("py-numbers"), diff -r a3151d837258 -r df08226a6984 tests/test_pseudo.py --- a/tests/test_pseudo.py Fri Apr 24 09:44:34 2026 +0200 +++ b/tests/test_pseudo.py Fri Apr 24 10:48:00 2026 +0200 @@ -146,39 +146,74 @@ def test_proc(self): self.assertTokenStreamEqualComplete( [("Keyword", "PROCEDURE"), + ("Text.Whitespace", " "), + ("Name.Entity", "{"), + ("Name.Entity", "the name"), + ("Name.Entity", "}"), ("Text.Whitespace", "\n"), ], - pygments.lex("\\PROC", self.lexer)) + pygments.lex("\\PROC {the name}", self.lexer)) def test_proc_de(self): lexer = pygments.lexers.load_lexer_from_file( LEXERFILENAME, "PseudocodeLexer_DE") self.assertTokenStreamEqualComplete( [("Keyword", "PROZEDUR"), + ("Text.Whitespace", " "), + ("Name.Entity", "{"), + ("Name.Entity", " also {nichtxs"), + ("Name.Entity", "\\}"), + ("Name.Entity", " hier"), + ("Name.Entity", "}"), ("Text.Whitespace", "\n"), ], - pygments.lex("\\PROC", lexer)) + pygments.lex("\\PROC { also {nichtxs\\} hier}", lexer)) def test_function_1(self): self.assertTokenStreamEqualComplete( [("Keyword", "FUNCTION"), + ("Name.Entity", "{"), + ("Name.Entity", "1"), + ("Name.Entity", "}"), ("Text.Whitespace", "\n"), ], - pygments.lex("\\FUNC", self.lexer)) + pygments.lex("\\FUNC{1}", self.lexer)) def test_function_2(self): self.assertTokenStreamEqualComplete( [("Keyword", "FUNCTION"), + ("Name.Entity", "{"), + ("Name.Entity", "line 1\nline 2\n"), + ("Name.Entity", "}"), ("Text.Whitespace", "\n"), ], - pygments.lex("\\FUNCTION", self.lexer)) + pygments.lex("\\FUNCTION{line 1\nline 2\n}", self.lexer)) def test_function_3(self): self.assertTokenStreamEqualComplete( [("Keyword", "FUNCTION"), + ("Text.Whitespace", " "), + ("Name.Entity", "{"), + ("Name.Entity", "\\"), + ("Name.Entity", "n"), + ("Name.Entity", "\\}"), + ("Name.Entity", "}"), ("Text.Whitespace", "\n"), ], - pygments.lex("\\FN", self.lexer)) + pygments.lex("\\FN {\\n\\}}", self.lexer)) + + def test_class(self): + self.assertTokenStreamEqualComplete( + [("Keyword", "CLASS"), + ("Text.Whitespace", " "), + ("Name.Entity", "{"), + ("Name.Entity", "\\"), + ("Name.Entity", "n"), + ("Name.Entity", "\\}"), + ("Name.Entity", "}"), + ("Text.Whitespace", "\n"), + ], + pygments.lex("\\CLASS {\\n\\}}", self.lexer)) def test_remark_1(self): self.assertTokenStreamEqualComplete(