comparison pygments_lexer_pseudocode2/lexers/fr_pseudocode.py @ 164:a4317957148b

Move all lexers into a subpackage pygments_lexer_pseudocode2.lexers. This is to prepare for a new subpackage with filters.
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 08 May 2026 21:19:54 +0200
parents pygments_lexer_pseudocode2/fr_pseudocode.py@10212741b98f
children
comparison
equal deleted inserted replaced
163:315cfe0a836f 164:a4317957148b
1 # -*- coding: utf-8 -*-
2 # :-
3 # SPDX-FileCopyrightText: © 2015 Simon Wachter
4 # SPDX-FileCopyrightText: © 2026 Franz Glasner
5 # SPDX-License-Identifier: MIT
6 # :-
7 r"""
8 :Author: Simon Wachter
9 :Author: Franz Glasner
10 :Copyright: © 2015 Simon Wachter
11 :Copyright: © 2026 Franz Glasner
12 :License: MIT License.
13 See :file:`MIT.txt` for details.
14 If you cannot find MIT.txt see
15 <http://opensource.org/licenses/MIT>.
16 """
17
18 __all__ = ["FrPseudocodeLexer"]
19
20
21 import re
22
23 from pygments.lexer import RegexLexer, include
24 from pygments.token import Punctuation, Whitespace, Comment, Operator, Keyword, Name, String, Number
25
26
27 class FrPseudocodeLexer(RegexLexer):
28 '''
29 A Pseudo code (fr) lexer
30 '''
31 name = 'FrPseudocode'
32 aliases = ['fr-pseudocode', 'fr-pseudo', 'fr-algorithm', 'fr-algo']
33 filenames = ['*.fr-algo', '*.fr-pseudocode']
34 mimetypes = []
35 flags = re.MULTILINE
36
37 REPLACEMENTS = {
38 '<=': '≤',
39 '>=': '≥',
40 '<>': '≠',
41 '!=': '≠',
42 '<-': '←',
43 '->': '→',
44 '=>': '⇒',
45 '<->': '↔',
46 '<=>': '⇔',
47 '^': '↑',
48 }
49
50 def op_replace(lexer, match):
51 op = match.group(0)
52 yield match.start(), Operator, lexer.REPLACEMENTS.get(op, op)
53
54 def scomment(lexer, match):
55 s = match.group(1).lower().strip()
56 c = Comment
57
58 directives = ['passage par copie', 'passage par valeur', 'passage par référence', 'passage par reference', 'passage par adresse', 've', 'vs', 've/s']
59
60 if s in directives:
61 c = Comment.Special
62
63 yield match.start(), c, match.group(0)
64
65 tokens = {
66 'root': [
67 (r'\/\*.*\*\/', Comment),
68 (r'(\/\/|#).*\n', Comment),
69 (r'\|', Comment),
70 (r'\{(.*)\}', scomment),
71 include('strings'),
72 include('core'),
73 (r'(?i)[a-zéàùçèÉÀÙÇÈ][a-z0-9éàùçèÉÀÙÇÈ_]*', Name.Variable),
74 include('numbers'),
75 (r'[\s]+', Whitespace)
76 ],
77 'core': [ # Statements
78 (r'(?i)\b(debut|début|fin|si|alors|sinon|fin[_ ]si|tant[ _]que|tantque|fin[ _]tantque|faire|répéter|'
79 r'repeter|type|structure|fin[ _]structure|fonction|procédure|procedure|retourner|renvoyer|'
80 r'pour|fin[ _]pour|à|déclarations?|juqsque|spécialise|specialise|comporte|super|public|privé|protégé|'
81 r'classe'
82 r')\s*\b', Keyword),
83
84 # Data Types
85 (r'(?i)\b(entiers?|chaines?|chaînes?|réels?|reels?|caractères?|caracteres?|booléens?|'
86 r'booleens?|tableaux?|rien)\s*\b',
87 Keyword.Type),
88
89 (r'(?i)\b(vrai|faux|nil)\s*\b',
90 Name.Constant),
91
92 # Operators
93 (r'(?i)(<->|<=>|<=|>=|<>|!=|<-|->|=>|\^|\*|\+|-|\/|<|>|=|\\\\|mod|←|↑|≤|≥|≠|÷|×|\.\.|\[|\]|\.|non|xou|et|ou)',
94 op_replace),
95
96 (r'(\(|\)|\,|\;|:)',
97 Punctuation),
98
99 #(r'\b(\[(VE|VS|VE/S)\])\s*\b',
100 # Keyword.Declaration),
101
102 # Intrinsics
103 (r'(?i)\b(sqrt|pow|cos|sin|tan|arccos|arcsin|arctan|arctan2|lire|ecrire|écrire|'
104 r'exp|ln|log|détruire|detruire'
105 r')\s*\b', Name.Builtin)
106 ],
107
108 'strings': [
109 (r'"([^"])*"', String.Double),
110 (r"'([^'])*'", String.Single),
111 ],
112 #
113 # This is stolen from the Pygment's Python lexer.
114 #
115 # SPDX-SnippetBegin
116 # SPDX-License-Identifier: BSD-2-Clause
117 # SPDX-SnippetCopyrightText: Copyright 2006-2023 by the Pygments team
118 'numbers': [
119 (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)'
120 r'([eE][+-]?\d(?:_?\d)*)?', Number.Float),
121 (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float),
122 (r'0[oO](?:_?[0-7])+', Number.Oct),
123 (r'0[bB](?:_?[01])+', Number.Bin),
124 (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex),
125 (r'\d(?:_?\d)*', Number.Integer),
126 ],
127 # SPDX-SnippetEnd
128 }