comparison pygments_lexer_pseudocode2/algpseudocode.py @ 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 5517b0be67f0
children c1357674622d
comparison
equal deleted inserted replaced
71:2ea86269e84e 72:206017a08ed7
111 if not lexer.no_end: 111 if not lexer.no_end:
112 yield match.start(), toktype, match.group() 112 yield match.start(), toktype, match.group()
113 113
114 return _op_opt_ignore 114 return _op_opt_ignore
115 115
116 def op_opt_ignore_or_space(lexer, match, ctx=None): 116 def op_opt_ignore_or_fixed(toktype, value):
117 """Yield a single whitespace ' ' or nothing -- depending on the lexer's 117 """Yield a fixed given token type and value or -- if the lexer's
118 `no_end` setting. 118 `no_end` setting evals to ``True`` nothing.
119 119
120 """ 120 """
121 if not lexer.no_end: 121
122 yield match.start(), Whitespace, " " 122 def _op_opt_ignore_or_fixed(lexer, match, ctx=None):
123 if not lexer.no_end:
124 yield match.start(), toktype, value
125
126 return _op_opt_ignore_or_fixed
123 127
124 def op_symbol(toktype): 128 def op_symbol(toktype):
125 129
126 def _op_symbol(lexer, match, ctx=None): 130 def _op_symbol(lexer, match, ctx=None):
127 kw = match.group().upper() 131 kw = match.group().upper()
144 r"|(?:algo(?:rithm)?)" 148 r"|(?:algo(?:rithm)?)"
145 r"|(?:proc(?:edure)?)" 149 r"|(?:proc(?:edure)?)"
146 r"|(?:func(?:tion)?|(?:fn))" 150 r"|(?:func(?:tion)?|(?:fn))"
147 r"|(?:class)" 151 r"|(?:class)"
148 r")\s*(\{)", 152 r")\s*(\{)",
149 bygroups(op_translate(Keyword), LexBase.op_space), 153 bygroups(op_translate(Keyword),
154 LexBase.op_fixed(Whitespace, " ")),
150 "entity-name"), 155 "entity-name"),
151 # ENDxxx keywords with optional entity name 156 # ENDxxx keywords with optional entity name
152 # with name 157 # with name
153 (r"(?i)\\end(?:_|-)?(" 158 (r"(?i)\\end(?:_|-)?("
154 r"(?:prog(?:ram)?)" 159 r"(?:prog(?:ram)?)"
156 r"|(?:proc(?:edure)?)" 161 r"|(?:proc(?:edure)?)"
157 r"|(?:func(?:tion)?)" 162 r"|(?:func(?:tion)?)"
158 r"|(?:class)" 163 r"|(?:class)"
159 r")\s*(\{)", 164 r")\s*(\{)",
160 bygroups(op_opt_end_translate(Keyword), 165 bygroups(op_opt_end_translate(Keyword),
161 op_opt_ignore_or_space), 166 op_opt_ignore_or_fixed(Whitespace, " ")),
162 "entity-name-end"), 167 "entity-name-end"),
163 # without name 168 # without name
164 (r"(?i)\\end(?:_|-)?(" 169 (r"(?i)\\end(?:_|-)?("
165 r"(?:prog(?:ram)?)" 170 r"(?:prog(?:ram)?)"
166 r"|(?:algo(?:rithm)?)" 171 r"|(?:algo(?:rithm)?)"
195 (r"(?i)\\text\s*\{", LexBase.op_ignore, "expr-text"), 200 (r"(?i)\\text\s*\{", LexBase.op_ignore, "expr-text"),
196 include("py-name"), 201 include("py-name"),
197 ], 202 ],
198 "expr-text": [ 203 "expr-text": [
199 (r"[^\\}]+", Text), 204 (r"[^\\}]+", Text),
200 (r"\\\}", Text), 205 (r"\\\}", LexBase.op_fixed(Text, "}")),
201 (r"\\", Text), 206 (r"\\", LexBase.op_fixed(Text, "\\")),
202 (r"\}", LexBase.op_ignore, "#pop"), 207 (r"\}", LexBase.op_ignore, "#pop"),
203 ], 208 ],
204 } 209 }
205 210
206 def __init__(self, **options): 211 def __init__(self, **options):