Mercurial > hgrepos > Python > libs > pygments-lexer-pseudocode2
comparison pygments_lexer_pseudocode2/algpseudocode.py @ 57:e8f4af9e20a8
Some "ENDxxx" commands
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 27 Apr 2026 16:56:57 +0200 |
| parents | 39151225fb84 |
| children | be065e5c8042 |
comparison
equal
deleted
inserted
replaced
| 56:661461fb4dfc | 57:e8f4af9e20a8 |
|---|---|
| 13 "AlgPseudocodeLexer_DE", "AlgPseudocodeLexer_FR"] | 13 "AlgPseudocodeLexer_DE", "AlgPseudocodeLexer_FR"] |
| 14 | 14 |
| 15 | 15 |
| 16 import re | 16 import re |
| 17 | 17 |
| 18 import pygments.util | |
| 18 from pygments.lexer import include, bygroups | 19 from pygments.lexer import include, bygroups |
| 19 from pygments.token import (Comment, Keyword, Name, Text, Whitespace) | 20 from pygments.token import (Comment, Keyword, Name, Text, Whitespace) |
| 20 | 21 |
| 21 # | 22 # |
| 22 # Relative imports do not work with pygments.lexers.load_lexer_from_file() | 23 # Relative imports do not work with pygments.lexers.load_lexer_from_file() |
| 51 "FUNC": "FUNCTION", | 52 "FUNC": "FUNCTION", |
| 52 "FUNCTION": "FUNCTION", | 53 "FUNCTION": "FUNCTION", |
| 53 "FN": "FUNCTION", | 54 "FN": "FUNCTION", |
| 54 "CLASS": "CLASS", | 55 "CLASS": "CLASS", |
| 55 } | 56 } |
| 57 END_TRANSLATIONS = { | |
| 58 "PROG": "END OF PROGRAM", | |
| 59 "PROGRAM": "END OF PROGRAM", | |
| 60 "ALGO": "END OF ALGORITHM", | |
| 61 "ALGORITHM": "END OF ALGORITHM", | |
| 62 "PROC": "END OF PROCEDURE", | |
| 63 "PROCEDURE": "END OF PROCEDURE", | |
| 64 "FUNC": "END OF FUNCTION", | |
| 65 "FUNCTION": "END OF FUNCTION", | |
| 66 "FN": "END OF FUNCTION", | |
| 67 "CLASS": "END OF CLASS", | |
| 68 } | |
| 69 DEFAULT_END_PREFIX = "END OF " | |
| 56 SYMBOLS = { | 70 SYMBOLS = { |
| 57 "REMARK": "▷", # U+25B7: Unicode 1.0 (Arrows) | 71 "REMARK": "▷", # U+25B7: Unicode 1.0 (Arrows) |
| 58 "Remark": "▷", | 72 "Remark": "▷", |
| 59 "remark": "▷", | 73 "remark": "▷", |
| 60 "REM": "▷", | 74 "REM": "▷", |
| 72 def _op_translate(lexer, match, ctx=None): | 86 def _op_translate(lexer, match, ctx=None): |
| 73 kw = match.group().upper() | 87 kw = match.group().upper() |
| 74 yield match.start(), toktype, lexer.TRANSLATIONS.get(kw, kw) | 88 yield match.start(), toktype, lexer.TRANSLATIONS.get(kw, kw) |
| 75 | 89 |
| 76 return _op_translate | 90 return _op_translate |
| 91 | |
| 92 def op_opt_end_translate(toktype): | |
| 93 | |
| 94 def _op_end_translate(lexer, match, ctx=None): | |
| 95 if not lexer.no_end: | |
| 96 kw = match.group().upper() | |
| 97 yield (match.start(), | |
| 98 toktype, | |
| 99 lexer.END_TRANSLATIONS.get( | |
| 100 kw, | |
| 101 lexer.DEFAULT_END_PREFIX + kw)) | |
| 102 | |
| 103 return _op_end_translate | |
| 77 | 104 |
| 78 def op_symbol(toktype): | 105 def op_symbol(toktype): |
| 79 | 106 |
| 80 def _op_symbol(lexer, match, ctx=None): | 107 def _op_symbol(lexer, match, ctx=None): |
| 81 kw = match.group() | 108 kw = match.group() |
| 100 r"|(?:func(?:tion)?|(?:fn))" | 127 r"|(?:func(?:tion)?|(?:fn))" |
| 101 r"|(?:class)" | 128 r"|(?:class)" |
| 102 r")(\s*)(\{)", | 129 r")(\s*)(\{)", |
| 103 bygroups(op_translate(Keyword), Whitespace, Name.Entity), | 130 bygroups(op_translate(Keyword), Whitespace, Name.Entity), |
| 104 "entity-name"), | 131 "entity-name"), |
| 132 # ENDxxx keywords with optional entity name | |
| 133 # with name | |
| 134 (r"(?i)\\end(?:_|-)?(" | |
| 135 r"(?:prog(?:ram)?)" | |
| 136 r"|(?:algo(?:rithm)?)" | |
| 137 r"|(?:proc(?:edure)?)" | |
| 138 r"|(?:func(?:tion)?)" | |
| 139 r"|(?:class)" | |
| 140 r")(\s*)(\{)", | |
| 141 bygroups(op_opt_end_translate(Keyword), Whitespace, Name.Entity), | |
| 142 "entity-name"), | |
| 143 # without name | |
| 144 (r"(?i)\\end(?:_|-)?(" | |
| 145 r"(?:prog(?:ram)?)" | |
| 146 r"|(?:algo(?:rithm)?)" | |
| 147 r"|(?:proc(?:edure)?)" | |
| 148 r"|(?:func(?:tion)?)" | |
| 149 r"|(?:class)" | |
| 150 r")((\s*)(\{))?", | |
| 151 bygroups(op_opt_end_translate(Keyword))), | |
| 105 include("expr"), | 152 include("expr"), |
| 106 (r"\s+", Text), | 153 (r"\s+", Text), |
| 107 ], | 154 ], |
| 108 "entity-name": [ # may be multiline | 155 "entity-name": [ # may be multiline |
| 109 (r"[^\\}]+", Name.Entity), | 156 (r"[^\\}]+", Name.Entity), |
| 116 include("py-numbers"), | 163 include("py-numbers"), |
| 117 include("py-name"), | 164 include("py-name"), |
| 118 ] | 165 ] |
| 119 } | 166 } |
| 120 | 167 |
| 168 def __init__(self, **options): | |
| 169 val = pygments.util.get_bool_opt(options, "no_end", default=False) | |
| 170 self.no_end = val | |
| 171 LexBase.__init__(self, **options) | |
| 172 | |
| 121 | 173 |
| 122 class AlgPseudocodeLexer_DE(AlgPseudocodeLexer): | 174 class AlgPseudocodeLexer_DE(AlgPseudocodeLexer): |
| 123 | 175 |
| 124 name = "AlgPseudocodeDE" | 176 name = "AlgPseudocodeDE" |
| 125 aliases = ["algpseudocode-de", "algpseudo-de"] | 177 aliases = ["algpseudocode-de", "algpseudo-de"] |
| 137 "FUNC": "FUNKTION", | 189 "FUNC": "FUNKTION", |
| 138 "FUNCTION": "FUNKTION", | 190 "FUNCTION": "FUNKTION", |
| 139 "FN": "FUNKTION", | 191 "FN": "FUNKTION", |
| 140 "CLASS": "KLASSE", | 192 "CLASS": "KLASSE", |
| 141 }) | 193 }) |
| 194 END_TRANSLATIONS = AlgPseudocodeLexer.END_TRANSLATIONS.copy() | |
| 195 END_TRANSLATIONS.update({ | |
| 196 "PROG": "ENDE DES PROGRAMMS", | |
| 197 "PROGRAM": "ENDE VON PROGRAMMS", | |
| 198 "ALGO": "ENDE DES ALGORITHMUS", | |
| 199 "ALGORITHM": "ENDE DES ALGORITHMUS", | |
| 200 "PROC": "ENDE DER PROZEDUR", | |
| 201 "PROCEDURE": "ENDE DER PROZEDUR", | |
| 202 "FUNC": "ENDE DER FUNKTION", | |
| 203 "FUNCTION": "ENDE DER FUNKTION", | |
| 204 "FN": "ENDE DER FUNKTION", | |
| 205 "CLASS": "ENDE DER KLASSE", | |
| 206 }) | |
| 207 DEFAULT_END_PREFIX = "ENDE VON " | |
| 142 | 208 |
| 143 | 209 |
| 144 class AlgPseudocodeLexer_FR(AlgPseudocodeLexer): | 210 class AlgPseudocodeLexer_FR(AlgPseudocodeLexer): |
| 145 | 211 |
| 146 name = "AlgPseudocodeFR" | 212 name = "AlgPseudocodeFR" |
| 159 "FUNC": "FONCTION", | 225 "FUNC": "FONCTION", |
| 160 "FUNCTION": "FOUNCTION", | 226 "FUNCTION": "FOUNCTION", |
| 161 "FN": "FONCTION", | 227 "FN": "FONCTION", |
| 162 "CLASS": "CLASSE", | 228 "CLASS": "CLASSE", |
| 163 }) | 229 }) |
| 230 END_TRANSLATIONS = AlgPseudocodeLexer.END_TRANSLATIONS.copy() | |
| 231 END_TRANSLATIONS.update({ | |
| 232 "PROG": "FIN DE PROGRAMME", | |
| 233 "PROGRAM": "FIN DE PROGRAMME", | |
| 234 "ALGO": "FIN D'ALGORITHME", | |
| 235 "ALGORITHM": "FIN D'ALGORITHME", | |
| 236 "PROC": "FIN DE PROCÉDURE", | |
| 237 "PROCEDURE": "FIN DE PROCÉDURE", | |
| 238 "FUNC": "FIN DE FONCTION", | |
| 239 "FUNCTION": "FIN DE FOUNCTION", | |
| 240 "FN": "FIN DE FONCTION", | |
| 241 "CLASS": "FIN DE CLASSE", | |
| 242 }) | |
| 243 DEFAULT_END_PREFIX = "FIN DE " |
