annotate pygments_lexer_pseudocode2/algpseudocode.py @ 123:4d96ace53ba1

Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings. No tests need to be skipped on Python2 now.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 06 May 2026 15:53:24 +0200
parents e39ca08b0609
children f916251d5647
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 # :-
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 # SPDX-FileCopyrightText: © 2026 Franz Glasner
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 # SPDX-License-Identifier: MIT
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5 # :-
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 r"""A pseudocode lexer along the lines of CTAN's algpseudocode or
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 algpseudocodex.
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 """
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
11 __all__ = ["AlgPseudocodeLexer",
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
12 "AlgPseudocodeLexer_DE", "AlgPseudocodeLexer_FR"]
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14
89
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
15 import logging
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 import re
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
18 import pygments.util
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
19 from pygments.lexer import bygroups, include, words
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
20 from pygments.token import (Comment, Generic, Keyword, Name, Operator,
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
21 Punctuation, Text, Whitespace)
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 #
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 # Relative imports do not work with pygments.lexers.load_lexer_from_file()
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 # in all of our supported Python releases.
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 #
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 from pygments_lexer_pseudocode2.bases import LexBase
85
ae5e741d2a9b Optimize op_explicit_tokentype(): use a pref-computed reversed pygments.token.STANDARD_TYPES
Franz Glasner <fzglas.hg@dom66.de>
parents: 84
diff changeset
28 from pygments_lexer_pseudocode2.utils import REVERSED_STANDARD_TYPES
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
29 from pygments_lexer_pseudocode2 import uniprops
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30
89
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
31 #
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
32 # As in the local imports: use an explicit name because __name__ is
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
33 # __builtins__
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
34 #
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
35 _logger = logging.getLogger("pygments_lexer_pseudocode2.algpseudocode")
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
36
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
37
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
38 class AlgPseudocodeLexer(LexBase):
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 """A pseudocode lexer along the lines of CTAN's algpseudocode or
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 algpseudocodex.
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 Some ideas (e.g. strings) are borrowed from Pygment's Python lexer.
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 """
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
47 name = "AlgPseudocode"
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
48 aliases = ["algpseudocode", "algpseudo"]
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
49 filenames = ["*.algpseudo", "*.algpseudocode"]
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 mimetypes = []
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 flags = re.MULTILINE
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
53 LANG = "en"
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
54 TRANSLATIONS = {
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
55 "PROG": "PROGRAM",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
56 "PROGRAM": "PROGRAM",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
57 "ALGO": "ALGORITHM",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
58 "ALGORITHM": "ALGORITHM",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
59 "PROC": "PROCEDURE",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
60 "PROCEDURE": "PROCEDURE",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
61 "FUNC": "FUNCTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
62 "FUNCTION": "FUNCTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
63 "FN": "FUNCTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
64 "CLASS": "CLASS",
99
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
65 "INPUT": "Input:",
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
66 "INPUTS": "Inputs:",
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
67 "OUTPUT": "Output:",
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
68 "OUTPUTS": "Outputs:",
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
69 "RETURNS": "Returns:",
106
f6b46a379aba The "\ENSURE" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 105
diff changeset
70 "ENSURE": "Ensure:",
61
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
71 "IS": "IS",
82
36a0ef76a6d7 Implement "\WITH"
Franz Glasner <fzglas.hg@dom66.de>
parents: 81
diff changeset
72 "WITH": "WITH",
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
73 "IF": "IF",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
74 "THEN": "THEN",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
75 "ELSE": "ELSE",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
76 "ELSEIF": "ELSE IF",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
77 "ELSIF": "ELSE IF",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
78 "ELIF": "ELSE IF",
111
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
79 "DO": "DO", # in WHILE ... DO
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
80 "WHILE": "WHILE",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
81 "FOR": "FOR",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
82 "FORALL": "FOR ALL",
111
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
83 "FROM": "FROM",
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
84 "TO": "TO",
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
85 "IN": "IN", # as in FOR ... IN
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
86 "STEP": "STEP",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
87 "LOOP": "LOOP",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
88 "REPEAT": "REPEAT",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
89 "UNTIL": "UNTIL",
104
ffe6ea2cf69b Allow "\RETURN" and "\RETURNS" commands.
Franz Glasner <fzglas.hg@dom66.de>
parents: 103
diff changeset
90 "RETURN": "RETURN",
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
91 "BEGIN": "BEGIN",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
92 "END": "END", # not in END_TRANSLATIONS
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
93 }
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
94 END_TRANSLATIONS = {
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
95 "PROG": "END OF PROGRAM",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
96 "PROGRAM": "END OF PROGRAM",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
97 "ALGO": "END OF ALGORITHM",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
98 "ALGORITHM": "END OF ALGORITHM",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
99 "PROC": "END OF PROCEDURE",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
100 "PROCEDURE": "END OF PROCEDURE",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
101 "FUNC": "END OF FUNCTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
102 "FUNCTION": "END OF FUNCTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
103 "FN": "END OF FUNCTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
104 "CLASS": "END OF CLASS",
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
105 "IF": "END IF",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
106 "WHILE": "END WHILE",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
107 "FOR": "END FOR",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
108 "FORALL": "END FOR ALL",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
109 "LOOP": "END LOOP",
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
110 }
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
111 DEFAULT_END_PREFIX = "END OF "
123
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
112 SYMBOL_REMARK = u"▷" # U+25B7: Unicode 1.0 (Geometric Shapes)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
113 # SYMBOL_REMARK = u"▻" # U+25BB: Unicode 1.0 (Geometric Shapes)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
114 # SYMBOL_REMARK = u"⍝" # U+235D: Unicode 1.1 (Misc. Technical, APL)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
115 SYMBOL_BLOCK = u"◆" # U+25C6: Unicode 1.0 (Geometric Shapes)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
116 # SYMBOL_BLOCK = u"┃" # U+2503: Unicode 1.0 (Bow Drawing)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
117 # SYMBOL_BLOCK = u"●" # U+25CF: Unicode 1.0 (Geometric Shapes)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
118 SYMBOL_TEXTSTATEMENT = u"▪" # U+25AA: Unicode 1.0 (Geometric Shapes)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
119 # SYMBOL_TEXTSTATEMENT = u"■" # U+25A0: Unicode 1.0 (Geometric Shapes)
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
120 SYMBOLS = {
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
121 # Group REMARK
58
be065e5c8042 Prepare symbols for a statement which defaults to token type "Text".
Franz Glasner <fzglas.hg@dom66.de>
parents: 57
diff changeset
122 "REMARK": SYMBOL_REMARK,
be065e5c8042 Prepare symbols for a statement which defaults to token type "Text".
Franz Glasner <fzglas.hg@dom66.de>
parents: 57
diff changeset
123 "REM": SYMBOL_REMARK,
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
124 # Group STATEMENT
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
125 "STATEMENT": SYMBOL_BLOCK,
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
126 "STATE": SYMBOL_BLOCK,
58
be065e5c8042 Prepare symbols for a statement which defaults to token type "Text".
Franz Glasner <fzglas.hg@dom66.de>
parents: 57
diff changeset
127 "BLOCK": SYMBOL_BLOCK,
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
128 # Group TEXTSTATEMENT
58
be065e5c8042 Prepare symbols for a statement which defaults to token type "Text".
Franz Glasner <fzglas.hg@dom66.de>
parents: 57
diff changeset
129 "TEXTSTATEMENT": SYMBOL_TEXTSTATEMENT,
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
130 "TEXTSTATE": SYMBOL_TEXTSTATEMENT,
58
be065e5c8042 Prepare symbols for a statement which defaults to token type "Text".
Franz Glasner <fzglas.hg@dom66.de>
parents: 57
diff changeset
131 "TSTATEMENT": SYMBOL_TEXTSTATEMENT,
be065e5c8042 Prepare symbols for a statement which defaults to token type "Text".
Franz Glasner <fzglas.hg@dom66.de>
parents: 57
diff changeset
132 "TSTATE": SYMBOL_TEXTSTATEMENT,
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
133 "TEXTBLOCK": SYMBOL_TEXTSTATEMENT,
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
134 "TBLOCK": SYMBOL_TEXTSTATEMENT,
123
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
135 "<-": u"⟵", # U+27F5: Unicode 3.2 (Supplemental Arrows-A)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
136 "->": u"⟶", # U+27F6: Unicode 3.2 (Supplemental Arrows-A)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
137 "<->": u"⟷", # U+27F7: Unicode 3.2 (Supplemental Arrows-A)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
138 # "=>": u"⟹", # U+27F9: Unicode 3.2 (Supplemental Arrows-A)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
139 # "<=>": u"⟺", # U+27FA: Unicode 3.2 (Supplemental Arrows-A)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
140 # "<-": u"←", # U+2190: Unicode 1.0 (Arrows)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
141 # "->": u"→", # U+2192: Unicode 1.0 (Arrows)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
142 # "<->": u"↔", # U+2194: Unicode 1.0 (Arrows)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
143 "=>": u"⇒", # U+21D2: Unicode 1.0 (Arrows)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
144 "<=>": u"⇔", # U+21D4: Unicode 1.0 (Arrows)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
145 "<=": u"≤", # U+2264: Unicode 1.0 (Mathematical Operators)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
146 ">=": u"≥", # U+2265: Unicode 1.0 (Mathematical Operators)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
147 "<>": u"≠", # U+2260: Unicode 1.0 (Mathematical Operators)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
148 "!=": u"≠", # U+2260: Unicode 1.0 (Mathematical Operators)
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
149 ":=": u"∶=", # "≔" U+2254 not recognizable in my (small) mono font
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
150 "=:": u"=∶", # "≕" U+2255 not recognizable in my (small) mono font
4d96ace53ba1 Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 122
diff changeset
151 "?=": u"≟", # U+225F: Unicode 1.0 (Mathematical Operators)
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
152 }
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
153
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
154 def op_translate(toktype):
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
155
40
df08226a6984 Names for some entities (program, algorithm, function, procedure, class).
Franz Glasner <fzglas.hg@dom66.de>
parents: 39
diff changeset
156 def _op_translate(lexer, match, ctx=None):
df08226a6984 Names for some entities (program, algorithm, function, procedure, class).
Franz Glasner <fzglas.hg@dom66.de>
parents: 39
diff changeset
157 kw = match.group().upper()
38
69522d4cafac Remove another unneeded local variable
Franz Glasner <fzglas.hg@dom66.de>
parents: 35
diff changeset
158 yield match.start(), toktype, lexer.TRANSLATIONS.get(kw, kw)
83
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
159 if ctx:
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
160 ctx.pos = match.end()
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
161
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
162 return _op_translate
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
163
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
164 def op_opt_end_translate(toktype):
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
165
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
166 def _op_end_translate(lexer, match, ctx=None):
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
167 if not lexer.no_end:
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
168 kw = match.group().upper()
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
169 yield (match.start(),
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
170 toktype,
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
171 lexer.END_TRANSLATIONS.get(
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
172 kw,
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
173 lexer.DEFAULT_END_PREFIX + kw))
83
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
174 if ctx:
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
175 ctx.pos = match.end()
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
176
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
177 return _op_end_translate
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
178
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
179 def op_opt_ignore(toktype):
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
180
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
181 def _op_opt_ignore(lexer, match, ctx=None):
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
182 if not lexer.no_end:
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
183 yield match.start(), toktype, match.group()
83
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
184 if ctx:
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
185 ctx.pos = match.end()
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
186
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
187 return _op_opt_ignore
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
188
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
189 def op_opt_ignore_or_fixed(toktype, value):
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
190 """Yield a fixed given token type and value or -- if the lexer's
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
191 `no_end` setting evals to ``True`` nothing.
65
3f4223a79d2b Normalize whitespace handling for entity names
Franz Glasner <fzglas.hg@dom66.de>
parents: 64
diff changeset
192
3f4223a79d2b Normalize whitespace handling for entity names
Franz Glasner <fzglas.hg@dom66.de>
parents: 64
diff changeset
193 """
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
194
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
195 def _op_opt_ignore_or_fixed(lexer, match, ctx=None):
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
196 if not lexer.no_end:
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
197 yield match.start(), toktype, value
83
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
198 if ctx:
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
199 ctx.pos = match.end()
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
200
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
201 return _op_opt_ignore_or_fixed
65
3f4223a79d2b Normalize whitespace handling for entity names
Franz Glasner <fzglas.hg@dom66.de>
parents: 64
diff changeset
202
113
9aea2fd5f037 The \GETS command.
Franz Glasner <fzglas.hg@dom66.de>
parents: 112
diff changeset
203 def op_gets(lexer, match, ctx=None):
9aea2fd5f037 The \GETS command.
Franz Glasner <fzglas.hg@dom66.de>
parents: 112
diff changeset
204 yield match.start(), Operator, lexer.symbol_gets
9aea2fd5f037 The \GETS command.
Franz Glasner <fzglas.hg@dom66.de>
parents: 112
diff changeset
205
117
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
206 def op_remark(lexer, match, ctx=None):
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
207 yield match.start(), Comment.Single, lexer.symbol_remark
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
208
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
209 def op_symbol(toktype):
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
210
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
211 def _op_symbol(lexer, match, ctx=None):
64
05c53e431c88 Simplify case-handling for "BLOCK" and "REMARK"
Franz Glasner <fzglas.hg@dom66.de>
parents: 62
diff changeset
212 kw = match.group().upper()
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
213 yield match.start(), toktype, lexer.SYMBOLS.get(kw, kw)
83
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
214 if ctx:
cd79d2c76347 If a Pygments callback gets a "Context" it must set the new position explicitely.
Franz Glasner <fzglas.hg@dom66.de>
parents: 82
diff changeset
215 ctx.pos = match.end()
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
216
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
217 return _op_symbol
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
218
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
219 def op_explicit_tokentype(lexer, match, ctx=None):
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
220 needed_css = match.group("type")
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
221 toktype = REVERSED_STANDARD_TYPES.get(needed_css, None)
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
222 if toktype is None:
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
223 # Be more error friendly
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
224 toktype = Generic.Error
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
225 val = match.group()
89
7414eed7b275 Introduce logging for unhandled explicit token types
Franz Glasner <fzglas.hg@dom66.de>
parents: 87
diff changeset
226 _logger.warning("Unhandled explicit token type: %s", val)
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
227 else:
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
228 val = match.group("character")
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
229 yield match.start(), toktype, val
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
230 if ctx:
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
231 ctx.pos = match.end()
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
232
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 tokens = {
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 "root": [
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235 (r"\n", Whitespace),
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
236 (r"/\*", Comment.Multiline, "multiline-nested-comment"),
115
e1663ac707b0 An alternate multiline comment syntax using "(* ... *)".
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
237 (r"\(\*", Comment.Multiline, "multiline-nested-comment-alt"),
100
7cfad325d3bb Allow also `#' to start single-line comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 99
diff changeset
238 (r"(//|#).*$", Comment.Single),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
239 include("remark"),
90
2af4684c8e78 Restrict whitespace before required and optional arguments.
Franz Glasner <fzglas.hg@dom66.de>
parents: 89
diff changeset
240 (r"(?i)\\(block|state(?:ment)?)[ \t]*(\{)",
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
241 bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
242 "block-expr"),
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
243 (r"(?i)\\("
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
244 r"(?:textstate(?:ment)?)"
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
245 r"|(?:tstate(?:ment)?)"
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
246 r"|(?:textblock)"
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
247 r"|(?:tblock)"
90
2af4684c8e78 Restrict whitespace before required and optional arguments.
Franz Glasner <fzglas.hg@dom66.de>
parents: 89
diff changeset
248 r")[ \t]*(\{)",
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
249 bygroups(op_symbol(Text), LexBase.op_fixed(Whitespace, " ")),
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
250 "text-statement"),
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
251 (r"(?i)\\("
99
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
252 r"(?:input(?:s)?)"
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
253 r"|(?:output(?:s)?)"
108
6cebd3e7bc97 Also allow \REM within a \TEXT{}
Franz Glasner <fzglas.hg@dom66.de>
parents: 106
diff changeset
254 r"|(?:ensure)"
104
ffe6ea2cf69b Allow "\RETURN" and "\RETURNS" commands.
Franz Glasner <fzglas.hg@dom66.de>
parents: 103
diff changeset
255 r"|(?:returns)"
99
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
256 r")[ \t]*(\{)",
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
257 bygroups(op_translate(Keyword),
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
258 LexBase.op_fixed(Whitespace, " ")),
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
259 "text-statement"),
857df2064831 \INPUT, \INPUTS, \OUTPUT, \OUTPUTS, \RETURN and \RETURNS as new commands (keywords)
Franz Glasner <fzglas.hg@dom66.de>
parents: 98
diff changeset
260 (r"(?i)\\("
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
261 r"(?:if)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
262 r"|(?:then)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
263 r"|(?:else)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
264 r"|(?:el(?:s(?:e)?)?if)"
111
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
265 r"|(?:do)" # as in WHILE ... DO not DO ... UNTIL
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
266 r"|(?:while)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
267 r"|(?:forall)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
268 r"|(?:for)"
111
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
269 r"|(?:from)"
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
270 r"|(?:to)"
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
271 r"|(?:step)"
111
d6f3a1d1bedd Some more keywords (\FROM, \TO, \IN)
Franz Glasner <fzglas.hg@dom66.de>
parents: 109
diff changeset
272 r"|(?:in)"
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
273 r"|(?:loop)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
274 r"|(?:repeat)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
275 r"|(?:until)"
104
ffe6ea2cf69b Allow "\RETURN" and "\RETURNS" commands.
Franz Glasner <fzglas.hg@dom66.de>
parents: 103
diff changeset
276 r"|(?:return)"
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
277 r")\b",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
278 bygroups(op_translate(Keyword))),
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279 (r"\\\n", Text),
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
280 (r"(?i)\\("
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
281 r"(?:prog(?:ram)?)"
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
282 r"|(?:algo(?:rithm)?)"
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
283 r"|(?:proc(?:edure)?)"
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
284 r"|(?:func(?:tion)?|(?:fn))"
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
285 r"|(?:class)"
90
2af4684c8e78 Restrict whitespace before required and optional arguments.
Franz Glasner <fzglas.hg@dom66.de>
parents: 89
diff changeset
286 r")[ \t]*(\{)",
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
287 bygroups(op_translate(Keyword),
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
288 LexBase.op_fixed(Whitespace, " ")),
40
df08226a6984 Names for some entities (program, algorithm, function, procedure, class).
Franz Glasner <fzglas.hg@dom66.de>
parents: 39
diff changeset
289 "entity-name"),
94
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
290 # ENDxxx keywords with optional entity name in two parts:
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
291 # 1. with name
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
292 (r"(?i)\\end(?:[_\-]|(?:[ \t]+))?("
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
293 r"(?:prog(?:ram)?)"
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
294 r"|(?:algo(?:rithm)?)"
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
295 r"|(?:proc(?:edure)?)"
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
296 r"|(?:func(?:tion)?)"
96
98cd0787f62f FIX: FN alias for function
Franz Glasner <fzglas.hg@dom66.de>
parents: 94
diff changeset
297 r"|(?:fn)"
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
298 r"|(?:class)"
94
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
299 r")(?:[_\-]|(?:[\t ]+))?(\{)",
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
300 bygroups(op_opt_end_translate(Keyword),
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
301 op_opt_ignore_or_fixed(Whitespace, " ")),
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
302 "entity-name-end"),
94
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
303 # 2. without name
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
304 # 3. AND keywords that do not allow a param (e.g. endif)
dc17b778a52b Refactor \END variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 93
diff changeset
305 (r"(?i)\\end(?:[_\-]|(?:[ \t]+))?("
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
306 r"(?:prog(?:ram)?)"
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
307 r"|(?:algo(?:rithm)?)"
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
308 r"|(?:proc(?:edure)?)"
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
309 r"|(?:func(?:tion)?)"
96
98cd0787f62f FIX: FN alias for function
Franz Glasner <fzglas.hg@dom66.de>
parents: 94
diff changeset
310 r"|(?:fn)"
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
311 r"|(?:class)"
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
312 r"|(?:if)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
313 r"|(?:while)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
314 r"|(?:for)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
315 r"|(?:forall)"
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
316 r"|(?:loop)"
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
317 r")\b",
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
318 bygroups(op_opt_end_translate(Keyword))),
97
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
319 #
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
320 # A single begin or end that is never suppressed because
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
321 # it is supposed to be paired with begin
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
322 #
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
323 (r"(?i)\\(begin|end)\b",
dd4eb937485c A couple of new keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 96
diff changeset
324 bygroups(op_translate(Keyword))),
61
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
325 # Keywords
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
326 (r"(?i)\\("
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
327 r"(?:is)"
82
36a0ef76a6d7 Implement "\WITH"
Franz Glasner <fzglas.hg@dom66.de>
parents: 81
diff changeset
328 r"|(?:with)"
61
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
329 r")\b",
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
330 bygroups(op_translate(Keyword))),
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 include("expr"),
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
332 include("unicode-separators"),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
333 include("unicode-other"),
91
feb41c8d72d2 Instead of "\s+" use "[^\S\n]+" because a \n is not wanted really in this match.
Franz Glasner <fzglas.hg@dom66.de>
parents: 90
diff changeset
334 (r"[^\S\n]+", Text),
98
c1f93e109798 More tolerance for errors: yield more Generic.Error tokens
Franz Glasner <fzglas.hg@dom66.de>
parents: 97
diff changeset
335 (r".", Generic.Error), # tolerance for errors
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
336 ],
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
337 "remark": [
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
338 (r"(?i)\\(remark|rem)\b(.*)$",
117
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
339 bygroups(op_remark, Comment.Single)),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
340 ],
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
341 "entity-name": [ # may be multiline
40
df08226a6984 Names for some entities (program, algorithm, function, procedure, class).
Franz Glasner <fzglas.hg@dom66.de>
parents: 39
diff changeset
342 (r"[^\\}]+", Name.Entity),
77
1a5e192aa950 Move popping states consistently more to the begin
Franz Glasner <fzglas.hg@dom66.de>
parents: 76
diff changeset
343 (r"\}", LexBase.op_ignore, "#pop"),
74
c1357674622d Remove an escaping backslash where appropriate
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
344 (r"\\\}", LexBase.op_fixed(Name.Entity, "}")),
76
27e12387154d FIX: Handle escape character more thoroughly: also explicitely handle "\\"
Franz Glasner <fzglas.hg@dom66.de>
parents: 75
diff changeset
345 (r"\\\\", LexBase.op_fixed(Name.Entity, "\\")),
74
c1357674622d Remove an escaping backslash where appropriate
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
346 (r"\\", LexBase.op_fixed(Name.Entity, "\\")),
62
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
347 ],
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
348 "entity-name-end": [ # may be multiline -- suppressed if no_end
7153e945a3d6 Implement ignoring of \ENDxxx including its optional name parts
Franz Glasner <fzglas.hg@dom66.de>
parents: 61
diff changeset
349 (r"[^\\}]+", op_opt_ignore(Name.Entity)),
77
1a5e192aa950 Move popping states consistently more to the begin
Franz Glasner <fzglas.hg@dom66.de>
parents: 76
diff changeset
350 (r"\}", LexBase.op_ignore, "#pop"),
74
c1357674622d Remove an escaping backslash where appropriate
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
351 (r"\\\}", op_opt_ignore_or_fixed(Name.Entity, "}")),
76
27e12387154d FIX: Handle escape character more thoroughly: also explicitely handle "\\"
Franz Glasner <fzglas.hg@dom66.de>
parents: 75
diff changeset
352 (r"\\\\", op_opt_ignore_or_fixed(Name.Entity, "\\")),
74
c1357674622d Remove an escaping backslash where appropriate
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
353 (r"\\", op_opt_ignore_or_fixed(Name.Entity, "\\")),
40
df08226a6984 Names for some entities (program, algorithm, function, procedure, class).
Franz Glasner <fzglas.hg@dom66.de>
parents: 39
diff changeset
354 ],
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
355 "expr": [
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
356 include("math-symbols"), # must be before punctuation
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
357 include("ascii-punctuation"),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
358 include("unicode-punctuation"),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
359 include("escaped-string-start"),
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
360 include("py-strings"),
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
361 include("py-numbers"),
114
be50fe0687d6 The \CALL command
Franz Glasner <fzglas.hg@dom66.de>
parents: 113
diff changeset
362 (r"(?i)\\call[ \t]*(\{)", LexBase.op_ignore, "entity-name"),
113
9aea2fd5f037 The \GETS command.
Franz Glasner <fzglas.hg@dom66.de>
parents: 112
diff changeset
363 (r"(?i)\\gets\b", op_gets),
90
2af4684c8e78 Restrict whitespace before required and optional arguments.
Franz Glasner <fzglas.hg@dom66.de>
parents: 89
diff changeset
364 (r"(?i)\\text[ \t]*\{", LexBase.op_ignore, "text-in-expr"),
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
365 include("explicit-tokentype"),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
366 include("remark"),
81
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
367 include("keyword-constants"),
93
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
368 include("word-operators"),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
369 include("math-builtins"),
52
5bfa9113d3c4 First tests with "py-name": names from the Python lexer
Franz Glasner <fzglas.hg@dom66.de>
parents: 41
diff changeset
370 include("py-name"),
70
5517b0be67f0 Basic "\TEXT" escape for expressions
Franz Glasner <fzglas.hg@dom66.de>
parents: 65
diff changeset
371 ],
80
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
372 "expr-in-braces": [
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
373 include("math-symbols"), # must be before punctuation
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
374 include("ascii-punctuation-in-braces"),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
375 include("unicode-punctuation"),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
376 include("escaped-string-start"),
80
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
377 include("py-strings"),
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
378 include("py-numbers"),
114
be50fe0687d6 The \CALL command
Franz Glasner <fzglas.hg@dom66.de>
parents: 113
diff changeset
379 (r"(?i)\\call[ \t]*(\{)", LexBase.op_ignore, "entity-name"),
113
9aea2fd5f037 The \GETS command.
Franz Glasner <fzglas.hg@dom66.de>
parents: 112
diff changeset
380 (r"(?i)\\gets\b", op_gets),
90
2af4684c8e78 Restrict whitespace before required and optional arguments.
Franz Glasner <fzglas.hg@dom66.de>
parents: 89
diff changeset
381 (r"(?i)\\text[ \t]*\{", LexBase.op_ignore, "text-in-expr"),
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
382 include("explicit-tokentype"),
80
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
383 include("remark"),
81
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
384 include("keyword-constants"),
93
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
385 include("word-operators"),
80
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
386 include("math-builtins"),
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
387 include("py-name"),
f487f0d322a5 Move "expr-in-braces" up to "expr".
Franz Glasner <fzglas.hg@dom66.de>
parents: 78
diff changeset
388 ],
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
389 "block-expr": [ # somewhat similar to "root"
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
390 (r"\}", LexBase.op_ignore, "#pop"),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
391 (r"\n", Whitespace),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
392 include("expr-in-braces"),
76
27e12387154d FIX: Handle escape character more thoroughly: also explicitely handle "\\"
Franz Glasner <fzglas.hg@dom66.de>
parents: 75
diff changeset
393 (r"\\\\", LexBase.op_fixed(Text, "\\")),
27e12387154d FIX: Handle escape character more thoroughly: also explicitely handle "\\"
Franz Glasner <fzglas.hg@dom66.de>
parents: 75
diff changeset
394 (r"\\", LexBase.op_fixed(Text, "\\")),
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
395 include("unicode-separators"),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
396 include("unicode-other"),
91
feb41c8d72d2 Instead of "\s+" use "[^\S\n]+" because a \n is not wanted really in this match.
Franz Glasner <fzglas.hg@dom66.de>
parents: 90
diff changeset
397 (r"[^\S\n]+", Text),
98
c1f93e109798 More tolerance for errors: yield more Generic.Error tokens
Franz Glasner <fzglas.hg@dom66.de>
parents: 97
diff changeset
398 (r".", Generic.Error), # tolerance for errors
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
399 ],
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
400 "text-statement": [ # like block but default to text-mode
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
401 (r"[^\\}\n]+", Text),
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
402 (r"\}", LexBase.op_ignore, "#pop"),
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
403 (r"\n", Whitespace),
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
404 (r"\\\}", LexBase.op_fixed(Text, "}")),
90
2af4684c8e78 Restrict whitespace before required and optional arguments.
Franz Glasner <fzglas.hg@dom66.de>
parents: 89
diff changeset
405 (r"(?i)\\expr(?:ession)?[ \t]*\{",
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
406 LexBase.op_ignore,
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
407 "block-expr"),
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
408 include("explicit-tokentype"),
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
409 include("remark"),
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
410 (r"\\\\", LexBase.op_fixed(Text, "\\")),
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
411 (r"\\", LexBase.op_fixed(Text, "\\")),
98
c1f93e109798 More tolerance for errors: yield more Generic.Error tokens
Franz Glasner <fzglas.hg@dom66.de>
parents: 97
diff changeset
412 (r".", Generic.Error), # tolerance for errors
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
413 ],
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
414 "text-in-expr": [
77
1a5e192aa950 Move popping states consistently more to the begin
Franz Glasner <fzglas.hg@dom66.de>
parents: 76
diff changeset
415 (r"[^\\}\n]+", Text),
1a5e192aa950 Move popping states consistently more to the begin
Franz Glasner <fzglas.hg@dom66.de>
parents: 76
diff changeset
416 (r"\}", LexBase.op_ignore, "#pop"),
1a5e192aa950 Move popping states consistently more to the begin
Franz Glasner <fzglas.hg@dom66.de>
parents: 76
diff changeset
417 (r"\n", Whitespace),
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
418 (r"\\\}", LexBase.op_fixed(Text, "}")),
92
3f37832c405d FIX: Wrong state for \TEXT command
Franz Glasner <fzglas.hg@dom66.de>
parents: 91
diff changeset
419 (r"(?i)\\expr(?:ession)?[ \t]*\{",
3f37832c405d FIX: Wrong state for \TEXT command
Franz Glasner <fzglas.hg@dom66.de>
parents: 91
diff changeset
420 LexBase.op_ignore,
3f37832c405d FIX: Wrong state for \TEXT command
Franz Glasner <fzglas.hg@dom66.de>
parents: 91
diff changeset
421 "block-expr"),
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
422 include("explicit-tokentype"),
108
6cebd3e7bc97 Also allow \REM within a \TEXT{}
Franz Glasner <fzglas.hg@dom66.de>
parents: 106
diff changeset
423 include("remark"),
78
abb2e8c65d0f Implement "TEXTSTATEMENT"
Franz Glasner <fzglas.hg@dom66.de>
parents: 77
diff changeset
424 (r"\\\\", LexBase.op_fixed(Text, "\\")),
72
206017a08ed7 Refactor: Make the "op_space()" and related methods more flexible and allow a given fixed token type and value
Franz Glasner <fzglas.hg@dom66.de>
parents: 70
diff changeset
425 (r"\\", LexBase.op_fixed(Text, "\\")),
98
c1f93e109798 More tolerance for errors: yield more Generic.Error tokens
Franz Glasner <fzglas.hg@dom66.de>
parents: 97
diff changeset
426 (r".", Generic.Error), # tolerance for errors
70
5517b0be67f0 Basic "\TEXT" escape for expressions
Franz Glasner <fzglas.hg@dom66.de>
parents: 65
diff changeset
427 ],
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
428 "math-builtins": [
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
429 (words(("sqrt", "pow", "cos", "sin", "tan", "arcos", "arcsin",
102
d8368294413a "min" and "max" as automatic mathematical operators
Franz Glasner <fzglas.hg@dom66.de>
parents: 100
diff changeset
430 "arctan", "arctan2", "mod", "exp", "ln", "log",
d8368294413a "min" and "max" as automatic mathematical operators
Franz Glasner <fzglas.hg@dom66.de>
parents: 100
diff changeset
431 "min", "max"),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
432 prefix=r"(?<!\.)",
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
433 suffix=r"\b"),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
434 Name.Builtin),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
435 ],
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
436 "math-symbols": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
437 (r"<=>|<->|<-|->|=>|<=|>=|<>|!=|:=|=:|\?=", op_symbol(Operator)),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
438 (r"[!&<>=+\-*/%|~]", Operator), # ASCII
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
439 (u"[%s]" % (uniprops.Sm,), Operator), # other Unicode
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
440 ],
93
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
441 "word-operators": [
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
442 (words(("IN", "In", "in",
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
443 "IS", "Is", "is",
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
444 "AND", "And", "and",
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
445 "OR", "Or", "or",
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
446 "XOR", "Xor", "xor",
84c0f761c836 Renamed "text-operators" to "word-operators" and allow more case-variants
Franz Glasner <fzglas.hg@dom66.de>
parents: 92
diff changeset
447 "NOT", "Not", "not"),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
448 prefix=r"(?<!\.)",
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
449 suffix=r"\b"),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
450 Operator.Word),
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
451 ],
81
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
452 "keyword-constants": [
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
453 (words(("True", "TRUE", "true", "False", "FALSE", "false",
103
af97692501ea FIX: Typo: "non" -> "none"
Franz Glasner <fzglas.hg@dom66.de>
parents: 102
diff changeset
454 "None", "NONE", "none", "Nil", "NIL", "nil",
81
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
455 "Null", "NULL", "null",
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
456 "Empty", "EMPTY", "empty"),
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
457 prefix=r"(?<!\.)",
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
458 suffix=r"\b"),
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
459 Keyword.Constant),
6d8b813fb296 Keyword constants like "True", "False", "Nil", "None", "Null" and "Empty"
Franz Glasner <fzglas.hg@dom66.de>
parents: 80
diff changeset
460 ],
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
461 "ascii-punctuation": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
462 (r"[{}:(),;[\]?@]", Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
463 ],
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
464 "ascii-punctuation-in-braces": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
465 #
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
466 # Like "punctuation" but needs an escaped curly brace for } because
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
467 # a single closing curly brace pops the current state here.
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
468 #
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
469 (r"\\\}", LexBase.op_fixed(Punctuation, "}")),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
470 (r"[{:(),;[\]?@]", Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
471 ],
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
472 "unicode-separators": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
473 (u"[%s]" % (uniprops.Zl,), Whitespace),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
474 (u"[%s]" % (uniprops.Zp,), Whitespace),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
475 (u"[%s]" % (uniprops.Zs,), Whitespace),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
476 ],
105
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
477 "unicode-punctuation": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
478 (u"[%s]" % (uniprops.Pc,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
479 (u"[%s]" % (uniprops.Pd,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
480 (u"[%s]" % (uniprops.Ps,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
481 (u"[%s]" % (uniprops.Pe,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
482 (u"[%s]" % (uniprops.Pi,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
483 (u"[%s]" % (uniprops.Pf,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
484 (u"[%s]" % (uniprops.Po,), Punctuation),
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
485 ],
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
486 "unicode-other": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
487 (u"[%s]" % (uniprops.Sc,), Text), # Currency
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
488 (u"[%s]" % (uniprops.So,), Text), # Other symbols
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
489 ],
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
490 "escaped-string-start": [
cec52d83869a Handle much more characters from the Unicode codeset in expressions.
Franz Glasner <fzglas.hg@dom66.de>
parents: 104
diff changeset
491 (r"""\\(['"])""", bygroups(Punctuation)),
75
711f8d19e27a New implementation of "STATEMENT" (also aliased to "STATE" and "BLOCK").
Franz Glasner <fzglas.hg@dom66.de>
parents: 74
diff changeset
492 ],
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
493 "explicit-tokentype": [
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
494 # All these REs are CASE-SENSITIVE!
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
495
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
496 # Multiple characters possible, but no escaping!
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
497 (r"\\ttx\-(?P<type>[a-zA-Z0-9_-]+?)(?P<sep>[/:|=*+!\$~])"
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
498 r"(?P<character>(.|\n)+?)(?P=sep)",
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
499 op_explicit_tokentype),
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
500 (r"\\ttx\-(?P<type>[a-zA-Z0-9_-]+?)\{(?P<character>[^}]+?)\}",
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
501 op_explicit_tokentype),
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
502 (r"\\ttx\-(?P<type>[a-zA-Z0-9_-]+?)\((?P<character>[^)]+?)\)",
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
503 op_explicit_tokentype),
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
504 (r"\\ttx\-(?P<type>[a-zA-Z0-9_-]+?)<(?P<character>[^>]+?)>",
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
505 op_explicit_tokentype),
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
506 (r"\\ttx\-(?P<type>[a-zA-Z0-9_-]+?)\[(?P<character>[^\]]+?)\]",
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
507 op_explicit_tokentype),
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
508
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
509 # Every character is possible: no escaping needed!
87
d8ca835c74ea FIX: Erroneous parsing of \tt-XXX and \ttx-XXX:
Franz Glasner <fzglas.hg@dom66.de>
parents: 85
diff changeset
510 (r"\\tt-(?P<type>[^/]+?)/(?P<character>(?:.|\n))",
84
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
511 op_explicit_tokentype),
3ac1c4502ad0 Implement "\tt-XXX" and "ttx-XXX" for explicit token types.
Franz Glasner <fzglas.hg@dom66.de>
parents: 83
diff changeset
512 ],
34
1f741934205e Begin a new Pseudocode lexer using numbers and strings from Python
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
513 }
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
514
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
515 def __init__(self, **options):
116
9bfd87544902 Use arrows from Supplemental Arrows-A Unicode block where appropriate: better readability
Franz Glasner <fzglas.hg@dom66.de>
parents: 115
diff changeset
516 self.no_end = pygments.util.get_bool_opt(
9bfd87544902 Use arrows from Supplemental Arrows-A Unicode block where appropriate: better readability
Franz Glasner <fzglas.hg@dom66.de>
parents: 115
diff changeset
517 options, "no_end", default=False)
9bfd87544902 Use arrows from Supplemental Arrows-A Unicode block where appropriate: better readability
Franz Glasner <fzglas.hg@dom66.de>
parents: 115
diff changeset
518 self.symbol_gets = options.get("gets", None)
9bfd87544902 Use arrows from Supplemental Arrows-A Unicode block where appropriate: better readability
Franz Glasner <fzglas.hg@dom66.de>
parents: 115
diff changeset
519 if self.symbol_gets is None:
9bfd87544902 Use arrows from Supplemental Arrows-A Unicode block where appropriate: better readability
Franz Glasner <fzglas.hg@dom66.de>
parents: 115
diff changeset
520 self.symbol_gets = self.SYMBOLS["<-"] # Default: "⟵" # U+27F5
117
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
521 self.symbol_remark = options.get("remark", None)
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
522 if self.symbol_remark is None:
d84f1fd10e64 Allow to customize the symbol for a remark
Franz Glasner <fzglas.hg@dom66.de>
parents: 116
diff changeset
523 self.symbol_remark = self.SYMBOLS["REM"] # Default: "▷" # U+25B7
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
524 LexBase.__init__(self, **options)
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
525
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
526
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
527 class AlgPseudocodeLexer_DE(AlgPseudocodeLexer):
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
528
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
529 """
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
530
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
531 .. seealso::
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
532 - https://de.wikipedia.org/wiki/Pseudocode
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
533
122
e39ca08b0609 Move some TODOs into the class docstrings
Franz Glasner <fzglas.hg@dom66.de>
parents: 117
diff changeset
534 .. todo:: Complete german translations
e39ca08b0609 Move some TODOs into the class docstrings
Franz Glasner <fzglas.hg@dom66.de>
parents: 117
diff changeset
535
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
536 """
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
537
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
538 name = "AlgPseudocodeDE"
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
539 aliases = ["algpseudocode-de", "algpseudo-de"]
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
540 filenames = ["*.algpseudo-de", "*.algpseudocode-de"]
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
541
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
542 LANG = "de"
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
543 TRANSLATIONS = AlgPseudocodeLexer.TRANSLATIONS.copy()
41
4ccf9a8d0bf2 For the german and french PseudocodeLexer: Use en translations as fallback.
Franz Glasner <fzglas.hg@dom66.de>
parents: 40
diff changeset
544 TRANSLATIONS.update({
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
545 "PROG": "PROGRAMM",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
546 "PROGRAM": "PROGRAMM",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
547 "ALGO": "ALGORITHMUS",
39
a3151d837258 Some basic keywords for programs, algorithms, procedures and functions; also comments (single and multiline) and "remarks"
Franz Glasner <fzglas.hg@dom66.de>
parents: 38
diff changeset
548 "ALGORITHM": "ALGORITHMUS",
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
549 "PROC": "PROZEDUR",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
550 "PROCEDURE": "PROZEDUR",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
551 "FUNC": "FUNKTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
552 "FUNCTION": "FUNKTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
553 "FN": "FUNKTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
554 "CLASS": "KLASSE",
61
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
555 "IS": "IST",
82
36a0ef76a6d7 Implement "\WITH"
Franz Glasner <fzglas.hg@dom66.de>
parents: 81
diff changeset
556 "WITH": "MIT",
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
557 "IF": "WENN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
558 "THEN": "DANN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
559 "ELSE": "ANDERNFALLS",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
560 "ELSEIF": "ANDERNFALLS WENN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
561 "ELSIF": "ANDERNFALLS WENN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
562 "ELIF": "ANDERNFALLS WENN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
563 # "DO": # XXX TBD # in WHILE WHILE ... DO # noqa # in WHILE ... DO
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
564 "WHILE": "SOLANGE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
565 "FOR": "FÜR",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
566 "FORALL": "FÜR ALLE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
567 "FROM": "VON",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
568 "TO": "BIS",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
569 "IN": "IN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
570 "STEP": "SCHRITTWEITE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
571 # "LOOP": XXX TBD # noqa
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
572 "REPEAT": "WIEDERHOLE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
573 "UNTIL": "BIS",
113
9aea2fd5f037 The \GETS command.
Franz Glasner <fzglas.hg@dom66.de>
parents: 112
diff changeset
574 # "RETURN": XXX TBD # noqa
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
575 "BEGIN": "START",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
576 "END": "ENDE",
41
4ccf9a8d0bf2 For the german and french PseudocodeLexer: Use en translations as fallback.
Franz Glasner <fzglas.hg@dom66.de>
parents: 40
diff changeset
577 })
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
578 END_TRANSLATIONS = AlgPseudocodeLexer.END_TRANSLATIONS.copy()
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
579 END_TRANSLATIONS.update({
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
580 "PROG": "ENDE DES PROGRAMMS",
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
581 "PROGRAM": "ENDE DES PROGRAMMS",
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
582 "ALGO": "ENDE DES ALGORITHMUS",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
583 "ALGORITHM": "ENDE DES ALGORITHMUS",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
584 "PROC": "ENDE DER PROZEDUR",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
585 "PROCEDURE": "ENDE DER PROZEDUR",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
586 "FUNC": "ENDE DER FUNKTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
587 "FUNCTION": "ENDE DER FUNKTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
588 "FN": "ENDE DER FUNKTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
589 "CLASS": "ENDE DER KLASSE",
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
590 "IF": "ENDE WENN",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
591 "WHILE": "ENDE SOLANGE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
592 "FOR": "ENDE FÜR",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
593 "FORALL": "ENDE FÜR ALLE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
594 # "LOOP": "ENDE XXX", # XXX TBD # noqa
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
595 })
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
596 DEFAULT_END_PREFIX = "ENDE VON "
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
597
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
598
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
599 class AlgPseudocodeLexer_FR(AlgPseudocodeLexer):
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
600
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
601 """
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
602
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
603 .. seealso::
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
604 - https://info.blaisepascal.fr/pseudo-code/
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
605 - https://fr.wikipedia.org/wiki/Pseudo-code
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
606 - https://fr.wikipedia.org/wiki/Structure_de_contr%C3%B4le
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
607
122
e39ca08b0609 Move some TODOs into the class docstrings
Franz Glasner <fzglas.hg@dom66.de>
parents: 117
diff changeset
608 .. todo:: Complete french translations
e39ca08b0609 Move some TODOs into the class docstrings
Franz Glasner <fzglas.hg@dom66.de>
parents: 117
diff changeset
609
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
610 """
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
611
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
612 name = "AlgPseudocodeFR"
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
613 aliases = ["algpseudocode-fr", "algpseudo-fr"]
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
614 filenames = ["*.algpseudo-fr", "*.algpseudocode-fr"]
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
615
109
49e5aa89095f FIX: LANG for the french lexer
Franz Glasner <fzglas.hg@dom66.de>
parents: 108
diff changeset
616 LANG = "fr"
53
39151225fb84 Rename the new pseudocode implementation to AlgPseudocode.
Franz Glasner <fzglas.hg@dom66.de>
parents: 52
diff changeset
617 TRANSLATIONS = AlgPseudocodeLexer.TRANSLATIONS.copy()
41
4ccf9a8d0bf2 For the german and french PseudocodeLexer: Use en translations as fallback.
Franz Glasner <fzglas.hg@dom66.de>
parents: 40
diff changeset
618 TRANSLATIONS.update({
35
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
619 "PROG": "PROGRAMME",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
620 "PROGRAM": "PROGRAMME",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
621 "ALGO": "ALGORITHME",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
622 "ALGORITHM": "ALGORITHME",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
623 "PROC": "PROCÉDURE",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
624 "PROCEDURE": "PROCÉDURE",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
625 "FUNC": "FONCTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
626 "FUNCTION": "FOUNCTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
627 "FN": "FONCTION",
d9a3551a1038 Basics of translating some keywords
Franz Glasner <fzglas.hg@dom66.de>
parents: 34
diff changeset
628 "CLASS": "CLASSE",
61
392745b66969 The "\IS" keyword expansion
Franz Glasner <fzglas.hg@dom66.de>
parents: 58
diff changeset
629 "IS": "EST",
82
36a0ef76a6d7 Implement "\WITH"
Franz Glasner <fzglas.hg@dom66.de>
parents: 81
diff changeset
630 "WITH": "AVEC",
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
631 "IF": "SI",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
632 "THEN": "ALORS",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
633 "ELSE": "SINON",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
634 "ELSEIF": "SINONSI",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
635 "ELSIF": "SINONSI",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
636 "ELIF": "SINONSI",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
637 "DO": "FAIRE", # as in in WHILE ... DO (not DO ... UNTIL)
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
638 "WHILE": "TANTQUE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
639 "FOR": "POUR",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
640 "FORALL": "POUR CHAQUE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
641 "FROM": "DE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
642 "TO": "JUSQU'À", # or just "À",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
643 "IN": "DANS", # as in FOR ... IN
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
644 "STEP": "PAR PAS DE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
645 "LOOP": "BOUCLE", # XXX FIXME???
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
646 "REPEAT": "RÉPÉTER",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
647 "UNTIL": "JUSQUACEQUE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
648 "RETURN": "RENVOYER",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
649 "BEGIN": "DÉBUT",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
650 "END": "FIN",
41
4ccf9a8d0bf2 For the german and french PseudocodeLexer: Use en translations as fallback.
Franz Glasner <fzglas.hg@dom66.de>
parents: 40
diff changeset
651 })
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
652 END_TRANSLATIONS = AlgPseudocodeLexer.END_TRANSLATIONS.copy()
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
653 END_TRANSLATIONS.update({
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
654 "PROG": "FIN DE PROGRAMME",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
655 "PROGRAM": "FIN DE PROGRAMME",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
656 "ALGO": "FIN D'ALGORITHME",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
657 "ALGORITHM": "FIN D'ALGORITHME",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
658 "PROC": "FIN DE PROCÉDURE",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
659 "PROCEDURE": "FIN DE PROCÉDURE",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
660 "FUNC": "FIN DE FONCTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
661 "FUNCTION": "FIN DE FOUNCTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
662 "FN": "FIN DE FONCTION",
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
663 "CLASS": "FIN DE CLASSE",
112
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
664 "SI": "FIN SI",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
665 "FOR": "FIN POUR",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
666 "FORALL": "FIN POUR CHAQUE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
667 "WHILE": "FIN TANTQUE",
ec8767cc5493 More translations (FR and DE)
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
668 "LOOP": "FIN BOUCLE",
57
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
669 })
e8f4af9e20a8 Some "ENDxxx" commands
Franz Glasner <fzglas.hg@dom66.de>
parents: 53
diff changeset
670 DEFAULT_END_PREFIX = "FIN DE "