Mercurial > hgrepos > Python > libs > pygments-lexer-pseudocode2
changeset 78:abb2e8c65d0f
Implement "TEXTSTATEMENT"
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 30 Apr 2026 09:28:39 +0200 |
| parents | 1a5e192aa950 |
| children | c14e5fd4d193 |
| files | pygments_lexer_pseudocode2/algpseudocode.py tests/test_algpseudo.py |
| diffstat | 2 files changed, 62 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pygments_lexer_pseudocode2/algpseudocode.py Thu Apr 30 09:24:46 2026 +0200 +++ b/pygments_lexer_pseudocode2/algpseudocode.py Thu Apr 30 09:28:39 2026 +0200 @@ -86,6 +86,7 @@ "BLOCK": SYMBOL_BLOCK, # Group TEXTSTATEMENT "TEXTSTATEMENT": SYMBOL_TEXTSTATEMENT, + "TEXTSTATE": SYMBOL_TEXTSTATEMENT, "TSTATEMENT": SYMBOL_TEXTSTATEMENT, "TSTATE": SYMBOL_TEXTSTATEMENT, "TEXTBLOCK": SYMBOL_TEXTSTATEMENT, @@ -150,6 +151,14 @@ (r"(?i)\\(block|state(?:ment)?)\s*(\{)", bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")), "block-expr"), + (r"(?i)\\(" + r"(?:textstate(?:ment)?)" + r"|(?:tstate(?:ment)?)" + r"|(?:textblock)" + r"|(?:tblock)" + r")\s*(\{)", + bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")), + "text-statement"), (r"\\\n", Text), (r"(?i)\\(" r"(?:prog(?:ram)?)" @@ -226,6 +235,18 @@ (r"\\", LexBase.op_fixed(Text, "\\")), (r"\s+", Text), ], + "text-statement": [ # like block but default to text-mode + (r"[^\\}\n]+", Text), + (r"\}", LexBase.op_ignore, "#pop"), + (r"\n", Whitespace), + (r"\\\}", LexBase.op_fixed(Text, "}")), + (r"(?i)\\expr(?:ession)?\s*\{", + LexBase.op_ignore, + "block-expr"), + include("remark"), + (r"\\\\", LexBase.op_fixed(Text, "\\")), + (r"\\", LexBase.op_fixed(Text, "\\")), + ], "expr-in-braces": [ include("punctuation-in-braces"), include("py-strings"), @@ -241,6 +262,10 @@ (r"\}", LexBase.op_ignore, "#pop"), (r"\n", Whitespace), (r"\\\}", LexBase.op_fixed(Text, "}")), + (r"(?:i)\\(expr(?:ession)?)\s*(\{)", + bygroups(LexBase.op_ignore, LexBase.op_ignore), + "expr-in-braces"), + (r"\\\\", LexBase.op_fixed(Text, "\\")), (r"\\", LexBase.op_fixed(Text, "\\")), ], "math-builtins": [
--- a/tests/test_algpseudo.py Thu Apr 30 09:24:46 2026 +0200 +++ b/tests/test_algpseudo.py Thu Apr 30 09:28:39 2026 +0200 @@ -400,6 +400,43 @@ ], pygments.lex(r"\state{a 1.2 {x in X\} c}", self.lexer)) + def test_tstate_empty(self): + self.assertTokenStreamEqualComplete( + [("Text", "▪"), + ("Text.Whitespace", " "), + ("Text.Whitespace", "\n"), + ], + pygments.lex(r"\tstate{}", self.lexer)) + + def test_tstate_with_expr(self): + self.assertTokenStreamEqualComplete( + [("Text", "▪"), + ("Text.Whitespace", " "), + ("Text", "a 1.2 "), + ("Name.Entity", "x"), + ("Text", " "), + ("Operator.Word", "in"), + ("Text", " "), + ("Name.Entity", "X"), + ("Punctuation", "}"), + ("Text", " c"), + ("Text.Whitespace", "\n"), + ], + pygments.lex(r"\tstate{a 1.2 \expr{x in X\}} c}", self.lexer)) + + def test_tstate_with_escaped_expr(self): + self.assertTokenStreamEqualComplete( + [("Text", "▪"), + ("Text.Whitespace", " "), + ("Text", "a 1.2 "), + ("Text", "\\"), + ("Text", "expr{x in X"), + ("Text", "}"), + ("Text", " c"), + ("Text.Whitespace", "\n"), + ], + pygments.lex(r"\tstate{a 1.2 \\expr{x in X\} c}", self.lexer)) + class PygmentizeCompletely(unittest.TestCase):
