comparison pygments_lexer_pseudocode2/algpseudocode.py @ 90:2af4684c8e78

Restrict whitespace before required and optional arguments. Instead of "\s*" use explicit allowed whitespace chars (" " and "\t").
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 02 May 2026 14:46:28 +0200
parents 7414eed7b275
children feb41c8d72d2
comparison
equal deleted inserted replaced
89:7414eed7b275 90:2af4684c8e78
179 "root": [ 179 "root": [
180 (r"\n", Whitespace), 180 (r"\n", Whitespace),
181 (r"/\*", Comment.Multiline, "multiline-nested-comment"), 181 (r"/\*", Comment.Multiline, "multiline-nested-comment"),
182 (r"//.*$", Comment.Single), 182 (r"//.*$", Comment.Single),
183 include("remark"), 183 include("remark"),
184 (r"(?i)\\(block|state(?:ment)?)\s*(\{)", 184 (r"(?i)\\(block|state(?:ment)?)[ \t]*(\{)",
185 bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")), 185 bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")),
186 "block-expr"), 186 "block-expr"),
187 (r"(?i)\\(" 187 (r"(?i)\\("
188 r"(?:textstate(?:ment)?)" 188 r"(?:textstate(?:ment)?)"
189 r"|(?:tstate(?:ment)?)" 189 r"|(?:tstate(?:ment)?)"
190 r"|(?:textblock)" 190 r"|(?:textblock)"
191 r"|(?:tblock)" 191 r"|(?:tblock)"
192 r")\s*(\{)", 192 r")[ \t]*(\{)",
193 bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")), 193 bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")),
194 "text-statement"), 194 "text-statement"),
195 (r"\\\n", Text), 195 (r"\\\n", Text),
196 (r"(?i)\\(" 196 (r"(?i)\\("
197 r"(?:prog(?:ram)?)" 197 r"(?:prog(?:ram)?)"
198 r"|(?:algo(?:rithm)?)" 198 r"|(?:algo(?:rithm)?)"
199 r"|(?:proc(?:edure)?)" 199 r"|(?:proc(?:edure)?)"
200 r"|(?:func(?:tion)?|(?:fn))" 200 r"|(?:func(?:tion)?|(?:fn))"
201 r"|(?:class)" 201 r"|(?:class)"
202 r")\s*(\{)", 202 r")[ \t]*(\{)",
203 bygroups(op_translate(Keyword), 203 bygroups(op_translate(Keyword),
204 LexBase.op_fixed(Whitespace, " ")), 204 LexBase.op_fixed(Whitespace, " ")),
205 "entity-name"), 205 "entity-name"),
206 # ENDxxx keywords with optional entity name 206 # ENDxxx keywords with optional entity name
207 # with name 207 # with name
209 r"(?:prog(?:ram)?)" 209 r"(?:prog(?:ram)?)"
210 r"|(?:algo(?:rithm)?)" 210 r"|(?:algo(?:rithm)?)"
211 r"|(?:proc(?:edure)?)" 211 r"|(?:proc(?:edure)?)"
212 r"|(?:func(?:tion)?)" 212 r"|(?:func(?:tion)?)"
213 r"|(?:class)" 213 r"|(?:class)"
214 r")\s*(\{)", 214 r")(?:_|(?:[\t -]+))?(\{)",
215 bygroups(op_opt_end_translate(Keyword), 215 bygroups(op_opt_end_translate(Keyword),
216 op_opt_ignore_or_fixed(Whitespace, " ")), 216 op_opt_ignore_or_fixed(Whitespace, " ")),
217 "entity-name-end"), 217 "entity-name-end"),
218 # without name 218 # without name
219 (r"(?i)\\end(?:_|-)?(" 219 (r"(?i)\\end(?:_|-)?("
253 ], 253 ],
254 "expr": [ 254 "expr": [
255 include("punctuation"), 255 include("punctuation"),
256 include("py-strings"), 256 include("py-strings"),
257 include("py-numbers"), 257 include("py-numbers"),
258 (r"(?i)\\text\s*\{", LexBase.op_ignore, "text-in-expr"), 258 (r"(?i)\\text[ \t]*\{", LexBase.op_ignore, "text-in-expr"),
259 include("explicit-tokentype"), 259 include("explicit-tokentype"),
260 include("remark"), 260 include("remark"),
261 include("keyword-constants"), 261 include("keyword-constants"),
262 include("text-operators"), 262 include("text-operators"),
263 include("math-builtins"), 263 include("math-builtins"),
265 ], 265 ],
266 "expr-in-braces": [ 266 "expr-in-braces": [
267 include("punctuation-in-braces"), 267 include("punctuation-in-braces"),
268 include("py-strings"), 268 include("py-strings"),
269 include("py-numbers"), 269 include("py-numbers"),
270 (r"(?i)\\text\s*\{", LexBase.op_ignore, "text-in-expr"), 270 (r"(?i)\\text[ \t]*\{", LexBase.op_ignore, "text-in-expr"),
271 include("explicit-tokentype"), 271 include("explicit-tokentype"),
272 include("remark"), 272 include("remark"),
273 include("keyword-constants"), 273 include("keyword-constants"),
274 include("text-operators"), 274 include("text-operators"),
275 include("math-builtins"), 275 include("math-builtins"),
286 "text-statement": [ # like block but default to text-mode 286 "text-statement": [ # like block but default to text-mode
287 (r"[^\\}\n]+", Text), 287 (r"[^\\}\n]+", Text),
288 (r"\}", LexBase.op_ignore, "#pop"), 288 (r"\}", LexBase.op_ignore, "#pop"),
289 (r"\n", Whitespace), 289 (r"\n", Whitespace),
290 (r"\\\}", LexBase.op_fixed(Text, "}")), 290 (r"\\\}", LexBase.op_fixed(Text, "}")),
291 (r"(?i)\\expr(?:ession)?\s*\{", 291 (r"(?i)\\expr(?:ession)?[ \t]*\{",
292 LexBase.op_ignore, 292 LexBase.op_ignore,
293 "block-expr"), 293 "block-expr"),
294 include("explicit-tokentype"), 294 include("explicit-tokentype"),
295 include("remark"), 295 include("remark"),
296 (r"\\\\", LexBase.op_fixed(Text, "\\")), 296 (r"\\\\", LexBase.op_fixed(Text, "\\")),
299 "text-in-expr": [ 299 "text-in-expr": [
300 (r"[^\\}\n]+", Text), 300 (r"[^\\}\n]+", Text),
301 (r"\}", LexBase.op_ignore, "#pop"), 301 (r"\}", LexBase.op_ignore, "#pop"),
302 (r"\n", Whitespace), 302 (r"\n", Whitespace),
303 (r"\\\}", LexBase.op_fixed(Text, "}")), 303 (r"\\\}", LexBase.op_fixed(Text, "}")),
304 (r"(?:i)\\(expr(?:ession)?)\s*(\{)", 304 (r"(?:i)\\(expr(?:ession)?)[ \t]*(\{)",
305 bygroups(LexBase.op_ignore, LexBase.op_ignore), 305 bygroups(LexBase.op_ignore, LexBase.op_ignore),
306 "expr-in-braces"), 306 "expr-in-braces"),
307 include("explicit-tokentype"), 307 include("explicit-tokentype"),
308 (r"\\\\", LexBase.op_fixed(Text, "\\")), 308 (r"\\\\", LexBase.op_fixed(Text, "\\")),
309 (r"\\", LexBase.op_fixed(Text, "\\")), 309 (r"\\", LexBase.op_fixed(Text, "\\")),