Mercurial > hgrepos > Python > libs > pygments-lexer-pseudocode2
diff pygments_lexer_pseudocode2/fr_pseudocode.py @ 28:de1f67eff9d5
Move the original French pseudocode lexter into a sub-module.
This is to prepare for a new implementation along the lines of
CTAN's "algpseudocode" or "algpseudocodex".
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 21 Apr 2026 10:31:28 +0200 |
| parents | pygments_lexer_pseudocode2/__init__.py@bf13850f21fb |
| children | 9004ff039497 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pygments_lexer_pseudocode2/fr_pseudocode.py Tue Apr 21 10:31:28 2026 +0200 @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# :- +# SPDX-FileCopyrightText: © 2015 Simon Wachter +# SPDX-FileCopyrightText: © 2026 Franz Glasner +# SPDX-License-Identifier: MIT +# :- +r""" +:Author: Simon Wachter +:Author: Franz Glasner +:Copyright: © 2015 Simon Wachter +:Copyright: © 2026 Franz Glasner +:License: MIT License. + See :file:`MIT.txt` for details. + If you cannot find MIT.txt see + <http://opensource.org/licenses/MIT>. +""" + +__all__ = ["FrPseudocodeLexer"] + + +import re + +from pygments.lexer import RegexLexer, include +from pygments.token import Punctuation, Whitespace, Comment, Operator, Keyword, Name, String, Number + + +class FrPseudocodeLexer(RegexLexer): + ''' + A Pseudo code (fr) lexer + ''' + name = 'FrPseudocode' + aliases = ['fr-pseudocode', 'fr-pseudo', 'fr-algorithm', 'fr-algo'] + filenames = ['*.fr-algo', '*.fr-pseudocode'] + mimetypes = [] + flags = re.MULTILINE + + REPLACEMENTS = { + '<=': '≤', + '>=': '≥', + '<>': '≠', + '!=': '≠', + '<-': '←', + '->': '→', + '=>': '⇒', + '<->': '↔', + '<=>': '⇔', + '^': '↑', + } + + def op_replace(lexer, match): + op = match.group(0) + opr = lexer.REPLACEMENTS.get(op) + if opr is None: + yield match.start(), Operator, op + else: + yield match.start(), Operator, opr + + def scomment(lexer, match): + s = match.group(1).lower().strip() + c = Comment + + directives = ['passage par copie', 'passage par valeur', 'passage par référence', 'passage par reference', 'passage par adresse', 've', 'vs', 've/s'] + + if s in directives: + c = Comment.Special + + yield match.start(), c, match.group(0) + + tokens = { + 'root': [ + (r'\/\*.*\*\/', Comment), + (r'(\/\/|#).*\n', Comment), + (r'\|', Comment), + (r'\{(.*)\}', scomment), + include('strings'), + include('core'), + (r'(?i)[a-zéàùçèÉÀÙÇÈ][a-z0-9éàùçèÉÀÙÇÈ_]*', Name.Variable), + include('numbers'), + (r'[\s]+', Whitespace) + ], + 'core': [ # Statements + (r'(?i)\b(debut|début|fin|si|alors|sinon|fin[_ ]si|tant[ _]que|tantque|fin[ _]tantque|faire|répéter' + r'repeter|type|structure|fin[ _]structure|fonction|procédure|procedure|retourner|renvoyer|' + r'pour|fin[ _]pour|à|déclarations?|juqsque|spécialise|specialise|comporte|super|public|privé|protégé|' + r'classe' + r')\s*\b', Keyword), + + # Data Types + (r'(?i)\b(entiers?|chaines?|chaînes?|réels?|reels?|caractères?|caracteres?|booléens?|' + r'booleens?|tableaux?|rien)\s*\b', + Keyword.Type), + + (r'(?i)\b(vrai|faux|nil)\s*\b', + Name.Constant), + + # Operators + (r'(?i)(<->|<=>|<=|>=|<>|!=|<-|->|=>|\^|\*|\+|-|\/|<|>|=|\\\\|mod|←|↑|≤|≥|≠|÷|×|\.\.|\[|\]|\.|non|xou|et|ou)', + op_replace), + + (r'(\(|\)|\,|\;|:)', + Punctuation), + + #(r'\b(\[(VE|VS|VE/S)\])\s*\b', + # Keyword.Declaration), + + # Intrinsics + (r'(?i)\b(sqrt|pow|cos|sin|tan|arccos|arcsin|arctan|arctan2|lire|ecrire|écrire|' + r'exp|ln|log|détruire|detruire' + r')\s*\b', Name.Builtin) + ], + + 'strings': [ + (r'"([^"])*"', String.Double), + (r"'([^'])*'", String.Single), + ], +# +# This is stolen from the Pygment's Python lexer. +# +# SPDX-SnippetBegin +# SPDX-License-Identifier: BSD-2-Clause +# SPDX-SnippetCopyrightText: Copyright 2006-2023 by the Pygments team + 'numbers': [ + (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)' + r'([eE][+-]?\d(?:_?\d)*)?', Number.Float), + (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float), + (r'0[oO](?:_?[0-7])+', Number.Oct), + (r'0[bB](?:_?[01])+', Number.Bin), + (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex), + (r'\d(?:_?\d)*', Number.Integer), + ], +# SPDX-SnippetEnd + }
