Mercurial > hgrepos > Python > libs > pygments-lexer-pseudocode2
view pygments_lexer_pseudocode2/fr_pseudocode.py @ 160:b4028838e0c8
Implement lexer option "prohibit_raiseonerror_filter".
Sphinx raises by default when an Error token is seen (by means of the
"raiseonerror" filter that is applied by default to lexers in Sphinx).
This option skips this and allows error locations to be seen and highlighted
properly.
While there convert most Generic.Error tokens to Error tokens because now
they can be handled by a lexer with "prohibit_raiseonerror_filter=True".
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 08 May 2026 17:46:28 +0200 |
| parents | 10212741b98f |
| children |
line wrap: on
line source
# -*- 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) yield match.start(), Operator, lexer.REPLACEMENTS.get(op, op) 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 }
