IncludeCPP 4.6.0__py3-none-any.whl → 4.9.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. includecpp/CHANGELOG.md +241 -0
  2. includecpp/__init__.py +89 -3
  3. includecpp/__init__.pyi +2 -1
  4. includecpp/cli/commands.py +1747 -266
  5. includecpp/cli/config_parser.py +1 -1
  6. includecpp/core/build_manager.py +64 -13
  7. includecpp/core/cpp_api_extensions.pyi +43 -270
  8. includecpp/core/cssl/CSSL_DOCUMENTATION.md +1799 -1445
  9. includecpp/core/cssl/cpp/build/api.pyd +0 -0
  10. includecpp/core/cssl/cpp/build/api.pyi +274 -0
  11. includecpp/core/cssl/cpp/build/cssl_core.pyi +0 -99
  12. includecpp/core/cssl/cpp/cssl_core.cp +2 -23
  13. includecpp/core/cssl/cssl_builtins.py +2116 -171
  14. includecpp/core/cssl/cssl_builtins.pyi +1324 -104
  15. includecpp/core/cssl/cssl_compiler.py +4 -1
  16. includecpp/core/cssl/cssl_modules.py +605 -6
  17. includecpp/core/cssl/cssl_optimizer.py +12 -1
  18. includecpp/core/cssl/cssl_parser.py +1048 -52
  19. includecpp/core/cssl/cssl_runtime.py +2041 -131
  20. includecpp/core/cssl/cssl_syntax.py +405 -277
  21. includecpp/core/cssl/cssl_types.py +5891 -1655
  22. includecpp/core/cssl_bridge.py +427 -4
  23. includecpp/core/error_catalog.py +54 -10
  24. includecpp/core/homeserver.py +1037 -0
  25. includecpp/generator/parser.cpp +203 -39
  26. includecpp/generator/parser.h +15 -1
  27. includecpp/templates/cpp.proj.template +1 -1
  28. includecpp/vscode/cssl/snippets/cssl.snippets.json +163 -0
  29. includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json +87 -12
  30. {includecpp-4.6.0.dist-info → includecpp-4.9.3.dist-info}/METADATA +81 -10
  31. {includecpp-4.6.0.dist-info → includecpp-4.9.3.dist-info}/RECORD +35 -33
  32. {includecpp-4.6.0.dist-info → includecpp-4.9.3.dist-info}/WHEEL +1 -1
  33. {includecpp-4.6.0.dist-info → includecpp-4.9.3.dist-info}/entry_points.txt +0 -0
  34. {includecpp-4.6.0.dist-info → includecpp-4.9.3.dist-info}/licenses/LICENSE +0 -0
  35. {includecpp-4.6.0.dist-info → includecpp-4.9.3.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  """
2
- CSSL Syntax Highlighting
2
+ CSSL Syntax Highlighting v4.6.4
3
3
 
4
4
  Provides syntax highlighting for CSSL code.
5
5
  Can be used with:
@@ -20,17 +20,23 @@ class TokenCategory(Enum):
20
20
  BUILTIN = auto() # print, len, typeof, etc.
21
21
  OPERATOR = auto() # <==, ==>, ->, <-, +, -, etc.
22
22
  STRING = auto() # "string" or 'string'
23
- STRING_INTERP = auto() # <variable> in strings - NEW
23
+ STRING_INTERP = auto() # <variable> in strings
24
+ F_STRING = auto() # f"string" or f'string' - v4.6.3
25
+ F_STRING_INTERP = auto() # {var} in f-strings - v4.6.3
24
26
  NUMBER = auto() # 123, 45.67
25
27
  COMMENT = auto() # # comment or // comment
26
28
  MODULE_REF = auto() # @Module, @VSRAM, @Desktop
27
29
  SELF_REF = auto() # s@StructName, s@Backend.Loop
30
+ GLOBAL_REF = auto() # r@globalVar
31
+ THIS_REF = auto() # this->member
32
+ SNAPSHOT_REF = auto() # %varName - snapshot reference (v4.8.8)
28
33
  IDENTIFIER = auto() # variable names
29
34
  PROPERTY = auto() # service-name:, service-version:
30
35
  BOOLEAN = auto() # True, False, true, false
31
36
  NULL = auto() # null, None
32
- PACKAGE_KW = auto() # package, package-includes - NEW
33
- TYPE_LITERAL = auto() # list, dict - NEW
37
+ PACKAGE_KW = auto() # package, package-includes
38
+ TYPE_LITERAL = auto() # list, dict
39
+ TYPE_CONTAINER = auto() # datastruct, vector, stack, etc.
34
40
  # v4.1.0: Multi-language support
35
41
  SUPPORTS_KW = auto() # supports keyword (magenta)
36
42
  LIBINCLUDE_KW = auto() # libinclude (yellow/gold)
@@ -38,6 +44,25 @@ class TokenCategory(Enum):
38
44
  LANG_INSTANCE = auto() # Instance name after $ (orange): cpp$ClassName
39
45
  # v4.6.0: C++ execution control
40
46
  NATIVE_KW = auto() # native keyword (cyan/bright) - forces C++ execution
47
+ # v4.6.5: Python execution control (opposite of native)
48
+ UNATIVE_KW = auto() # unative keyword (orange) - forces Python execution
49
+ # v4.6.2: Dunder variables
50
+ DUNDER_VAR = auto() # __name__ style variables (aggressive magenta)
51
+ # Function categories
52
+ FUNCTION_OUTPUT = auto()
53
+ FUNCTION_TYPE = auto()
54
+ FUNCTION_STRING = auto()
55
+ FUNCTION_LIST = auto()
56
+ FUNCTION_DICT = auto()
57
+ FUNCTION_MATH = auto()
58
+ FUNCTION_TIME = auto()
59
+ FUNCTION_FILE = auto()
60
+ FUNCTION_JSON = auto()
61
+ FUNCTION_REGEX = auto()
62
+ FUNCTION_HASH = auto()
63
+ FUNCTION_UTILITY = auto()
64
+ FUNCTION_SYSTEM = auto()
65
+ FUNCTION_NAMESPACE = auto()
41
66
 
42
67
 
43
68
  @dataclass
@@ -48,20 +73,23 @@ class HighlightRule:
48
73
  group: int = 0 # Regex group to highlight
49
74
 
50
75
 
51
- # CSSL Keywords
76
+ # CSSL Keywords - Complete list
52
77
  KEYWORDS = {
78
+ # Service structure
53
79
  'service-init', 'service-run', 'service-include',
54
- 'struct', 'define', 'main',
80
+ # Definitions
81
+ 'struct', 'define', 'main', 'class', 'constr', 'extends', 'overwrites', 'new', 'super', 'enum',
82
+ # Control flow
55
83
  'if', 'else', 'elif', 'while', 'for', 'foreach', 'in', 'range',
56
84
  'switch', 'case', 'default', 'break', 'continue', 'return',
85
+ # Exception handling
57
86
  'try', 'catch', 'finally', 'throw',
87
+ # Logical operators
58
88
  'and', 'or', 'not',
59
- 'start', 'stop', 'wait_for', 'on_event', 'emit_event',
60
- 'await',
61
- # NEW: Extended keywords
62
- 'package', 'package-includes', 'exec', 'as', 'global',
63
- # v4.1.0: Multi-language support (handled separately for special colors)
64
- # 'supports', 'libinclude' - see MULTI_LANG_KEYWORDS
89
+ # Async/Event
90
+ 'start', 'stop', 'wait_for', 'on_event', 'emit_event', 'await',
91
+ # Package & Import
92
+ 'package', 'package-includes', 'exec', 'as', 'global', 'include', 'get', 'payload',
65
93
  }
66
94
 
67
95
  # v4.1.0: Multi-language keywords with special highlighting
@@ -69,52 +97,127 @@ MULTI_LANG_KEYWORDS = {'supports', 'libinclude'}
69
97
 
70
98
  # v4.6.0: C++ execution control keyword
71
99
  NATIVE_KEYWORD = {'native'} # Forces C++ execution (no Python fallback)
100
+ # v4.6.5: Python execution control keyword (opposite of native)
101
+ UNATIVE_KEYWORD = {'unative'} # Forces Python execution (no C++)
72
102
 
73
103
  # v4.1.0: Language identifiers for cross-language instance access
74
104
  LANGUAGE_IDS = {'cpp', 'py', 'python', 'java', 'csharp', 'js', 'javascript'}
75
105
 
76
- # NEW: Package-related keywords for special highlighting
106
+ # Package-related keywords for special highlighting
77
107
  PACKAGE_KEYWORDS = {'package', 'package-includes'}
78
108
 
79
- # NEW: Type literals
80
- TYPE_LITERALS = {'list', 'dict'}
81
-
82
- # CSSL Built-in Functions
83
- BUILTINS = {
84
- # Output
85
- 'print', 'println', 'debug', 'error', 'warn', 'log',
86
- # Type conversion
87
- 'int', 'float', 'str', 'bool', 'list', 'dict',
88
- # Type checking
89
- 'typeof', 'isinstance', 'isint', 'isfloat', 'isstr', 'isbool', 'islist', 'isdict', 'isnull',
90
- # String
91
- 'len', 'upper', 'lower', 'trim', 'split', 'join', 'replace', 'contains', 'startswith', 'endswith',
92
- 'substr', 'format', 'reverse', 'repeat',
93
- # List
94
- 'append', 'extend', 'insert', 'remove', 'pop', 'index', 'count', 'sort', 'sorted', 'filter', 'map',
95
- # Dict
96
- 'keys', 'values', 'items', 'get', 'set', 'has', 'merge', 'delete',
97
- # Math
98
- 'abs', 'round', 'floor', 'ceil', 'min', 'max', 'sum', 'pow', 'sqrt', 'sin', 'cos', 'tan', 'log10',
99
- 'random', 'randint', 'randrange', 'choice', 'shuffle', 'sample',
100
- # Time
101
- 'now', 'timestamp', 'sleep', 'date', 'time', 'datetime', 'strftime', 'strptime',
102
- # File I/O
103
- 'read_file', 'write_file', 'append_file', 'file_exists', 'delete_file',
104
- 'mkdir', 'rmdir', 'listdir', 'getcwd', 'chdir',
105
- # System
106
- 'exit', 'getenv', 'setenv', 'exec', 'system', 'platform', 'argv',
107
- # JSON
108
- 'json_encode', 'json_decode', 'json_load', 'json_dump',
109
- # Regex
110
- 'regex_match', 'regex_search', 'regex_replace', 'regex_split', 'regex_findall',
111
- # Hash
112
- 'md5', 'sha1', 'sha256', 'sha512', 'hash',
113
- # Other
114
- 'copy', 'deepcopy', 'assert', 'range', 'enumerate', 'zip', 'any', 'all',
115
- 'include', 'cso_root', 'createcmd', 'wait_for_booted', 'emit', 'on_event'
109
+ # Function modifiers
110
+ FUNCTION_MODIFIERS = {
111
+ 'undefined', 'open', 'meta', 'super', 'closed', 'private', 'virtual',
112
+ 'sqlbased', 'const', 'public', 'static', 'shuffled', 'embedded',
113
+ 'secure', 'callable', # v4.8.8: Constructor modifiers
116
114
  }
117
115
 
116
+ # Type keywords
117
+ TYPE_KEYWORDS = {
118
+ 'int', 'string', 'float', 'bool', 'void', 'json', 'dynamic', 'list', 'dict', 'map', 'queue',
119
+ }
120
+
121
+ # Container types
122
+ TYPE_CONTAINERS = {
123
+ 'datastruct', 'dataspace', 'shuffled', 'iterator', 'combo',
124
+ 'vector', 'stack', 'array', 'openquote', 'structure', 'bytearrayed',
125
+ # v4.8.4: C++ I/O types
126
+ 'fstream', 'ifstream', 'ofstream', 'pipe',
127
+ }
128
+
129
+ # CSSL Built-in Functions - Complete list organized by category
130
+ BUILTINS_OUTPUT = {
131
+ 'print', 'println', 'printl', 'debug', 'error', 'warn', 'log', 'input', 'encode',
132
+ # v4.8.4: C++ I/O streams
133
+ 'cout', 'cin', 'cerr', 'clog', 'endl', 'flush', 'getline',
134
+ }
135
+
136
+ BUILTINS_TYPE = {'typeof', 'isinstance', 'isint', 'isfloat', 'isstr', 'isbool', 'islist', 'isdict', 'isnull', 'isavailable'}
137
+
138
+ BUILTINS_STRING = {
139
+ 'len', 'upper', 'lower', 'trim', 'ltrim', 'rtrim', 'split', 'join', 'replace', 'substr',
140
+ 'contains', 'startswith', 'endswith', 'format', 'concat', 'repeat', 'reverse',
141
+ 'indexof', 'lastindexof', 'padleft', 'padright', 'sprintf', 'chars', 'ord', 'chr',
142
+ 'capitalize', 'title', 'swapcase', 'center', 'zfill', 'isalpha', 'isdigit', 'isalnum', 'isspace',
143
+ }
144
+
145
+ BUILTINS_LIST = {
146
+ 'push', 'pop', 'shift', 'unshift', 'slice', 'sort', 'rsort', 'unique', 'flatten',
147
+ 'filter', 'map', 'reduce', 'find', 'findindex', 'every', 'some', 'enumerate', 'zip',
148
+ 'reversed', 'sorted', 'count', 'first', 'last', 'take', 'drop', 'chunk', 'groupby', 'shuffle', 'sample',
149
+ }
150
+
151
+ BUILTINS_DICT = {'keys', 'values', 'items', 'haskey', 'getkey', 'setkey', 'delkey', 'merge', 'update', 'fromkeys', 'invert', 'pick', 'omit'}
152
+
153
+ BUILTINS_MATH = {
154
+ 'abs', 'min', 'max', 'sum', 'avg', 'round', 'floor', 'ceil', 'pow', 'sqrt', 'mod',
155
+ 'random', 'randint', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', 'exp', 'radians', 'degrees', 'log10',
156
+ }
157
+
158
+ BUILTINS_TIME = {'now', 'timestamp', 'sleep', 'date', 'time', 'datetime', 'strftime', 'delay', 'CurrentTime'}
159
+
160
+ BUILTINS_FILE = {
161
+ 'pathexists', 'isfile', 'isdir', 'basename', 'dirname', 'joinpath', 'splitpath', 'abspath', 'normpath',
162
+ 'read', 'readline', 'write', 'writeline', 'readfile', 'writefile', 'appendfile', 'readlines',
163
+ 'listdir', 'makedirs', 'removefile', 'removedir', 'copyfile', 'movefile', 'filesize',
164
+ 'Listdir', 'ReadFile', 'WriteFile',
165
+ }
166
+
167
+ BUILTINS_JSON = {'tojson', 'fromjson'}
168
+
169
+ BUILTINS_REGEX = {'match', 'search', 'findall', 'sub'}
170
+
171
+ BUILTINS_HASH = {'md5', 'sha1', 'sha256'}
172
+
173
+ BUILTINS_UTILITY = {
174
+ 'copy', 'deepcopy', 'assert', 'exit', 'env', 'setenv', 'clear', 'cls', 'color', 'pyimport', 'range',
175
+ # v4.8.4: C++ import and operations
176
+ 'cppimport', 'include', 'sizeof', 'memcpy', 'memset', 'pipe', 'contains_fast',
177
+ # C++ stream manipulators
178
+ 'setprecision', 'setw', 'setfill', 'fixed', 'scientific',
179
+ # v4.8.8: Snapshot functions
180
+ 'snapshot', 'get_snapshot', 'has_snapshot', 'clear_snapshot', 'clear_snapshots', 'list_snapshots', 'restore_snapshot',
181
+ }
182
+
183
+ BUILTINS_SYSTEM = {'createcmd', 'signal', 'appexec', 'initpy', 'initsh', 'wait_for_booted', 'emit', 'cso_root', 'isLinux', 'isWindows', 'isMac'}
184
+
185
+ # v4.6.5: Color and style functions for f-strings
186
+ BUILTINS_COLOR = {
187
+ # Named colors
188
+ 'red', 'green', 'blue', 'yellow', 'cyan', 'magenta', 'white', 'black',
189
+ # Bright variants
190
+ 'bright_red', 'bright_green', 'bright_blue', 'bright_yellow', 'bright_cyan', 'bright_magenta', 'bright_white',
191
+ # RGB custom color
192
+ 'rgb',
193
+ # Background colors
194
+ 'bg_red', 'bg_green', 'bg_blue', 'bg_yellow', 'bg_cyan', 'bg_magenta', 'bg_white', 'bg_black', 'bg_rgb',
195
+ # Style functions
196
+ 'bold', 'italic', 'cursive', 'underline', 'dim', 'blink', 'reverse', 'strikethrough', 'reset',
197
+ }
198
+
199
+ BUILTINS_CONSTRUCTOR = {
200
+ 'datastruct', 'shuffled', 'iterator', 'combo', 'dataspace', 'openquote', 'OpenFind', 'vector', 'array', 'stack',
201
+ # v4.8.4: C++ I/O constructors
202
+ 'fstream', 'ifstream', 'ofstream', 'struct',
203
+ }
204
+
205
+ # Namespace functions
206
+ NAMESPACE_JSON = {'json::read', 'json::write', 'json::parse', 'json::stringify', 'json::pretty', 'json::keys', 'json::values', 'json::get', 'json::set', 'json::has', 'json::merge'}
207
+ NAMESPACE_INSTANCE = {'instance::getMethods', 'instance::getClasses', 'instance::getVars', 'instance::getAll', 'instance::call', 'instance::has', 'instance::type', 'instance::exists'}
208
+ NAMESPACE_PYTHON = {'python::pythonize', 'python::wrap', 'python::export', 'python::csslize', 'python::import',
209
+ 'python::param_get', 'python::param_return', 'python::param_count',
210
+ 'python::param_all', 'python::param_has'}
211
+ # v4.6.5: Watcher namespace for live Python instance access
212
+ NAMESPACE_WATCHER = {'watcher::get', 'watcher::set', 'watcher::list', 'watcher::exists', 'watcher::refresh'}
213
+
214
+ # Combined builtins for backwards compatibility
215
+ BUILTINS = (
216
+ BUILTINS_OUTPUT | BUILTINS_TYPE | BUILTINS_STRING | BUILTINS_LIST | BUILTINS_DICT |
217
+ BUILTINS_MATH | BUILTINS_TIME | BUILTINS_FILE | BUILTINS_JSON | BUILTINS_REGEX |
218
+ BUILTINS_HASH | BUILTINS_UTILITY | BUILTINS_SYSTEM | BUILTINS_CONSTRUCTOR | BUILTINS_COLOR
219
+ )
220
+
118
221
 
119
222
  class CSSLSyntaxRules:
120
223
  """Collection of syntax highlighting rules for CSSL"""
@@ -125,140 +228,122 @@ class CSSLSyntaxRules:
125
228
  rules = []
126
229
 
127
230
  # Comments (highest priority - should match first)
128
- # NEW: Both # and // style comments
129
- rules.append(HighlightRule(
130
- pattern=r'#[^\n]*',
131
- category=TokenCategory.COMMENT
132
- ))
133
- rules.append(HighlightRule(
134
- pattern=r'//[^\n]*',
135
- category=TokenCategory.COMMENT
136
- ))
231
+ rules.append(HighlightRule(pattern=r'#[^\n]*', category=TokenCategory.COMMENT))
232
+ rules.append(HighlightRule(pattern=r'//[^\n]*', category=TokenCategory.COMMENT))
233
+ rules.append(HighlightRule(pattern=r'/\*[\s\S]*?\*/', category=TokenCategory.COMMENT))
137
234
 
138
- # Strings
139
- rules.append(HighlightRule(
140
- pattern=r'"(?:[^"\\]|\\.)*"',
141
- category=TokenCategory.STRING
142
- ))
143
- rules.append(HighlightRule(
144
- pattern=r"'(?:[^'\\]|\\.)*'",
145
- category=TokenCategory.STRING
146
- ))
235
+ # F-strings (must be before regular strings) - v4.6.3
236
+ rules.append(HighlightRule(pattern=r'f"(?:[^"\\]|\\.)*"', category=TokenCategory.F_STRING))
237
+ rules.append(HighlightRule(pattern=r"f'(?:[^'\\]|\\.)*'", category=TokenCategory.F_STRING))
147
238
 
148
- # NEW: String interpolation <variable> in strings
149
- rules.append(HighlightRule(
150
- pattern=r'<[A-Za-z_][A-Za-z0-9_]*>',
151
- category=TokenCategory.STRING_INTERP
152
- ))
239
+ # F-string interpolation {var} - v4.6.3
240
+ rules.append(HighlightRule(pattern=r'\{[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\}', category=TokenCategory.F_STRING_INTERP))
153
241
 
154
- # NEW: Package keywords (special highlighting)
155
- rules.append(HighlightRule(
156
- pattern=r'\b(package|package-includes)\b',
157
- category=TokenCategory.PACKAGE_KW
158
- ))
242
+ # Strings
243
+ rules.append(HighlightRule(pattern=r'"(?:[^"\\]|\\.)*"', category=TokenCategory.STRING))
244
+ rules.append(HighlightRule(pattern=r"'(?:[^'\\]|\\.)*'", category=TokenCategory.STRING))
245
+ rules.append(HighlightRule(pattern=r'`[^`]*`', category=TokenCategory.STRING)) # Raw strings
159
246
 
160
- # NEW: Type literals (list, dict)
161
- rules.append(HighlightRule(
162
- pattern=r'\b(list|dict)\b(?!\s*\()',
163
- category=TokenCategory.TYPE_LITERAL
164
- ))
247
+ # String interpolation <variable> in strings
248
+ rules.append(HighlightRule(pattern=r'<[A-Za-z_][A-Za-z0-9_]*>', category=TokenCategory.STRING_INTERP))
165
249
 
166
- # v4.1.0: Multi-language support keywords
167
- # 'supports' keyword (magenta) - must be before regular keywords
168
- rules.append(HighlightRule(
169
- pattern=r'\bsupports\b',
170
- category=TokenCategory.SUPPORTS_KW
171
- ))
250
+ # Package keywords (special highlighting)
251
+ rules.append(HighlightRule(pattern=r'\b(package|package-includes)\b', category=TokenCategory.PACKAGE_KW))
172
252
 
173
- # 'libinclude' keyword (yellow/gold)
174
- rules.append(HighlightRule(
175
- pattern=r'\blibinclude\b',
176
- category=TokenCategory.LIBINCLUDE_KW
177
- ))
253
+ # v4.1.0: Multi-language support keywords
254
+ rules.append(HighlightRule(pattern=r'\bsupports\b', category=TokenCategory.SUPPORTS_KW))
255
+ rules.append(HighlightRule(pattern=r'\blibinclude\b', category=TokenCategory.LIBINCLUDE_KW))
178
256
 
179
257
  # v4.6.0: 'native' keyword (cyan/bright) - forces C++ execution
180
- rules.append(HighlightRule(
181
- pattern=r'\bnative\b',
182
- category=TokenCategory.NATIVE_KW
183
- ))
258
+ rules.append(HighlightRule(pattern=r'\bnative\b', category=TokenCategory.NATIVE_KW))
259
+ # v4.6.5: 'unative' keyword (orange) - forces Python execution
260
+ rules.append(HighlightRule(pattern=r'\bunative\b', category=TokenCategory.UNATIVE_KW))
261
+
262
+ # v4.6.2: Dunder variables (__name__, __this_stat_s__, __s__, etc.)
263
+ rules.append(HighlightRule(pattern=r'\b__[A-Za-z_][A-Za-z0-9_]*__\b', category=TokenCategory.DUNDER_VAR))
184
264
 
185
265
  # v4.1.0: Language$Instance patterns (cpp$ClassName, py$Object)
186
- # Match language prefix before $ (cyan)
187
- rules.append(HighlightRule(
188
- pattern=r'\b(cpp|py|python|java|csharp|js|javascript)\$',
189
- category=TokenCategory.LANG_PREFIX,
190
- group=1
191
- ))
192
- # Match instance name after $ (orange)
193
- rules.append(HighlightRule(
194
- pattern=r'\b(?:cpp|py|python|java|csharp|js|javascript)\$([A-Za-z_][A-Za-z0-9_]*)',
195
- category=TokenCategory.LANG_INSTANCE,
196
- group=1
197
- ))
266
+ rules.append(HighlightRule(pattern=r'\b(cpp|py|python|java|csharp|js|javascript)\$', category=TokenCategory.LANG_PREFIX, group=1))
267
+ rules.append(HighlightRule(pattern=r'\b(?:cpp|py|python|java|csharp|js|javascript)\$([A-Za-z_][A-Za-z0-9_]*)', category=TokenCategory.LANG_INSTANCE, group=1))
268
+
269
+ # This references
270
+ rules.append(HighlightRule(pattern=r'\bthis->\w+', category=TokenCategory.THIS_REF))
271
+ rules.append(HighlightRule(pattern=r'\bthis\b', category=TokenCategory.THIS_REF))
198
272
 
199
273
  # Self-references (s@Name, s@Backend.Loop)
200
- rules.append(HighlightRule(
201
- pattern=r's@[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*',
202
- category=TokenCategory.SELF_REF
203
- ))
274
+ rules.append(HighlightRule(pattern=r's@[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*', category=TokenCategory.SELF_REF))
275
+
276
+ # Global references (r@name)
277
+ rules.append(HighlightRule(pattern=r'r@[A-Za-z_][A-Za-z0-9_]*', category=TokenCategory.GLOBAL_REF))
278
+
279
+ # v4.8.8: Snapshot references (%name) - access snapshotted values
280
+ rules.append(HighlightRule(pattern=r'%[A-Za-z_][A-Za-z0-9_]*', category=TokenCategory.SNAPSHOT_REF))
204
281
 
205
282
  # Module references (@Module, @VSRAM.Read)
206
- rules.append(HighlightRule(
207
- pattern=r'@[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*',
208
- category=TokenCategory.MODULE_REF
209
- ))
283
+ rules.append(HighlightRule(pattern=r'@[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*', category=TokenCategory.MODULE_REF))
210
284
 
211
285
  # Properties (key: value in service-init)
212
286
  rules.append(HighlightRule(
213
287
  pattern=r'\b(service-name|service-version|service-author|service-description|execution|executation)\s*:',
214
- category=TokenCategory.PROPERTY,
215
- group=1
288
+ category=TokenCategory.PROPERTY, group=1
216
289
  ))
217
290
 
291
+ # Function modifiers
292
+ modifier_pattern = r'\b(' + '|'.join(re.escape(m) for m in FUNCTION_MODIFIERS) + r')\b'
293
+ rules.append(HighlightRule(pattern=modifier_pattern, category=TokenCategory.KEYWORD))
294
+
295
+ # Type containers
296
+ container_pattern = r'\b(' + '|'.join(re.escape(t) for t in TYPE_CONTAINERS) + r')\b'
297
+ rules.append(HighlightRule(pattern=container_pattern, category=TokenCategory.TYPE_CONTAINER))
298
+
299
+ # Type keywords
300
+ type_pattern = r'\b(' + '|'.join(re.escape(t) for t in TYPE_KEYWORDS) + r')\b'
301
+ rules.append(HighlightRule(pattern=type_pattern, category=TokenCategory.TYPE_LITERAL))
302
+
218
303
  # Keywords
219
304
  keyword_pattern = r'\b(' + '|'.join(re.escape(k) for k in KEYWORDS) + r')\b'
220
- rules.append(HighlightRule(
221
- pattern=keyword_pattern,
222
- category=TokenCategory.KEYWORD
223
- ))
224
-
225
- # Builtins
226
- builtin_pattern = r'\b(' + '|'.join(re.escape(b) for b in BUILTINS) + r')\s*\('
227
- rules.append(HighlightRule(
228
- pattern=builtin_pattern,
229
- category=TokenCategory.BUILTIN,
230
- group=1
231
- ))
305
+ rules.append(HighlightRule(pattern=keyword_pattern, category=TokenCategory.KEYWORD))
306
+
307
+ # Namespace functions
308
+ rules.append(HighlightRule(pattern=r'\bjson::(read|write|parse|stringify|pretty|keys|values|get|set|has|merge)\b', category=TokenCategory.FUNCTION_NAMESPACE))
309
+ rules.append(HighlightRule(pattern=r'\binstance::(getMethods|getClasses|getVars|getAll|call|has|type|exists)\b', category=TokenCategory.FUNCTION_NAMESPACE))
310
+ rules.append(HighlightRule(pattern=r'\bpython::(pythonize|wrap|export|csslize|import|param_get|param_return|param_count|param_all|param_has)\b', category=TokenCategory.FUNCTION_NAMESPACE))
311
+
312
+ # Builtin functions by category (require parenthesis)
313
+ def add_builtin_rules(builtins, category):
314
+ pattern = r'\b(' + '|'.join(re.escape(b) for b in builtins) + r')\s*\('
315
+ rules.append(HighlightRule(pattern=pattern, category=category, group=1))
316
+
317
+ add_builtin_rules(BUILTINS_OUTPUT, TokenCategory.FUNCTION_OUTPUT)
318
+ add_builtin_rules(BUILTINS_TYPE, TokenCategory.FUNCTION_TYPE)
319
+ add_builtin_rules(BUILTINS_STRING, TokenCategory.FUNCTION_STRING)
320
+ add_builtin_rules(BUILTINS_LIST, TokenCategory.FUNCTION_LIST)
321
+ add_builtin_rules(BUILTINS_DICT, TokenCategory.FUNCTION_DICT)
322
+ add_builtin_rules(BUILTINS_MATH, TokenCategory.FUNCTION_MATH)
323
+ add_builtin_rules(BUILTINS_TIME, TokenCategory.FUNCTION_TIME)
324
+ add_builtin_rules(BUILTINS_FILE, TokenCategory.FUNCTION_FILE)
325
+ add_builtin_rules(BUILTINS_JSON, TokenCategory.FUNCTION_JSON)
326
+ add_builtin_rules(BUILTINS_REGEX, TokenCategory.FUNCTION_REGEX)
327
+ add_builtin_rules(BUILTINS_HASH, TokenCategory.FUNCTION_HASH)
328
+ add_builtin_rules(BUILTINS_UTILITY, TokenCategory.FUNCTION_UTILITY)
329
+ add_builtin_rules(BUILTINS_SYSTEM, TokenCategory.FUNCTION_SYSTEM)
330
+ add_builtin_rules(BUILTINS_CONSTRUCTOR, TokenCategory.BUILTIN)
232
331
 
233
332
  # Boolean literals
234
- rules.append(HighlightRule(
235
- pattern=r'\b(True|False|true|false)\b',
236
- category=TokenCategory.BOOLEAN
237
- ))
333
+ rules.append(HighlightRule(pattern=r'\b(True|False|true|false)\b', category=TokenCategory.BOOLEAN))
238
334
 
239
335
  # Null literals
240
- rules.append(HighlightRule(
241
- pattern=r'\b(null|None|none)\b',
242
- category=TokenCategory.NULL
243
- ))
336
+ rules.append(HighlightRule(pattern=r'\b(null|None|none|nil)\b', category=TokenCategory.NULL))
244
337
 
245
338
  # Numbers
246
- rules.append(HighlightRule(
247
- pattern=r'\b\d+\.?\d*\b',
248
- category=TokenCategory.NUMBER
249
- ))
339
+ rules.append(HighlightRule(pattern=r'\b0[xX][0-9a-fA-F]+\b', category=TokenCategory.NUMBER)) # Hex
340
+ rules.append(HighlightRule(pattern=r'\b\d+\.?\d*\b', category=TokenCategory.NUMBER))
250
341
 
251
342
  # Special operators
252
- rules.append(HighlightRule(
253
- pattern=r'<==|==>|->|<-',
254
- category=TokenCategory.OPERATOR
255
- ))
256
-
257
- # Comparison operators
258
- rules.append(HighlightRule(
259
- pattern=r'==|!=|<=|>=|<|>',
260
- category=TokenCategory.OPERATOR
261
- ))
343
+ rules.append(HighlightRule(pattern=r'\+<<=|==>>\+|-<<=|==>>-|<<=|=>>|<==|==>|->', category=TokenCategory.OPERATOR))
344
+ rules.append(HighlightRule(pattern=r'==|!=|<=|>=|<|>', category=TokenCategory.OPERATOR))
345
+ rules.append(HighlightRule(pattern=r'\+\+|--|\+=|-=|\*=|/=|%=', category=TokenCategory.OPERATOR))
346
+ rules.append(HighlightRule(pattern=r'::', category=TokenCategory.OPERATOR))
262
347
 
263
348
  return rules
264
349
 
@@ -269,54 +354,104 @@ class ColorScheme:
269
354
 
270
355
  # CSSL Theme (Orange accent, dark background)
271
356
  CSSL_THEME = {
272
- TokenCategory.KEYWORD: '#508cff', # Blue
273
- TokenCategory.BUILTIN: '#ff8c00', # Orange
274
- TokenCategory.OPERATOR: '#c8c8d2', # Light gray
275
- TokenCategory.STRING: '#50c878', # Green
276
- TokenCategory.STRING_INTERP: '#f1fa8c',# Yellow for interpolation - NEW
277
- TokenCategory.NUMBER: '#f0c040', # Yellow
278
- TokenCategory.COMMENT: '#707080', # Gray
279
- TokenCategory.MODULE_REF: '#ff8c00', # Orange
280
- TokenCategory.SELF_REF: '#60c8dc', # Cyan
281
- TokenCategory.IDENTIFIER: '#f0f0f5', # White
282
- TokenCategory.PROPERTY: '#c8a8ff', # Purple
283
- TokenCategory.BOOLEAN: '#ff8c00', # Orange
284
- TokenCategory.NULL: '#ff6464', # Red
285
- TokenCategory.PACKAGE_KW: '#bd93f9', # Purple for package - NEW
286
- TokenCategory.TYPE_LITERAL: '#8be9fd', # Cyan for type literals - NEW
357
+ TokenCategory.KEYWORD: '#508cff', # Blue
358
+ TokenCategory.BUILTIN: '#ff8c00', # Orange
359
+ TokenCategory.OPERATOR: '#c8c8d2', # Light gray
360
+ TokenCategory.STRING: '#50c878', # Green
361
+ TokenCategory.STRING_INTERP: '#f1fa8c', # Yellow for interpolation
362
+ TokenCategory.F_STRING: '#98c379', # Bright green for f-strings
363
+ TokenCategory.F_STRING_INTERP: '#e5c07b', # Gold for {var} in f-strings
364
+ TokenCategory.NUMBER: '#f0c040', # Yellow
365
+ TokenCategory.COMMENT: '#707080', # Gray
366
+ TokenCategory.MODULE_REF: '#ff8c00', # Orange
367
+ TokenCategory.SELF_REF: '#60c8dc', # Cyan
368
+ TokenCategory.GLOBAL_REF: '#ff79c6', # Pink
369
+ TokenCategory.THIS_REF: '#bd93f9', # Purple
370
+ TokenCategory.SNAPSHOT_REF: '#ffd700', # Gold - for %snapshot refs (v4.8.8)
371
+ TokenCategory.IDENTIFIER: '#f0f0f5', # White
372
+ TokenCategory.PROPERTY: '#c8a8ff', # Purple
373
+ TokenCategory.BOOLEAN: '#ff8c00', # Orange
374
+ TokenCategory.NULL: '#ff6464', # Red
375
+ TokenCategory.PACKAGE_KW: '#bd93f9', # Purple for package
376
+ TokenCategory.TYPE_LITERAL: '#8be9fd', # Cyan for type literals
377
+ TokenCategory.TYPE_CONTAINER: '#50fa7b', # Green for containers
287
378
  # v4.1.0: Multi-language support colors
288
- TokenCategory.SUPPORTS_KW: '#ff79c6', # Magenta/Pink for 'supports'
289
- TokenCategory.LIBINCLUDE_KW: '#f1fa8c',# Yellow/Gold for 'libinclude'
290
- TokenCategory.LANG_PREFIX: '#8be9fd', # Cyan for language prefix (cpp$)
291
- TokenCategory.LANG_INSTANCE: '#ffb86c',# Orange for instance name ($ClassName)
379
+ TokenCategory.SUPPORTS_KW: '#ff79c6', # Magenta/Pink for 'supports'
380
+ TokenCategory.LIBINCLUDE_KW: '#f1fa8c', # Yellow/Gold for 'libinclude'
381
+ TokenCategory.LANG_PREFIX: '#8be9fd', # Cyan for language prefix (cpp$)
382
+ TokenCategory.LANG_INSTANCE: '#ffb86c', # Orange for instance name ($ClassName)
292
383
  # v4.6.0: C++ execution control
293
- TokenCategory.NATIVE_KW: '#50fa7b', # Green/Cyan for 'native' (C++ forced)
384
+ TokenCategory.NATIVE_KW: '#50fa7b', # Green for 'native' (C++ forced)
385
+ # v4.6.5: Python execution control
386
+ TokenCategory.UNATIVE_KW: '#ff8c00', # Orange for 'unative' (Python forced)
387
+ # v4.6.2: Dunder variables
388
+ TokenCategory.DUNDER_VAR: '#ff00ff', # Aggressive magenta for __name__ vars
389
+ # Function categories
390
+ TokenCategory.FUNCTION_OUTPUT: '#ff8c00', # Orange
391
+ TokenCategory.FUNCTION_TYPE: '#8be9fd', # Cyan
392
+ TokenCategory.FUNCTION_STRING: '#50c878', # Green
393
+ TokenCategory.FUNCTION_LIST: '#ff8c00', # Orange
394
+ TokenCategory.FUNCTION_DICT: '#ffb86c', # Light orange
395
+ TokenCategory.FUNCTION_MATH: '#f0c040', # Yellow
396
+ TokenCategory.FUNCTION_TIME: '#bd93f9', # Purple
397
+ TokenCategory.FUNCTION_FILE: '#ff79c6', # Pink
398
+ TokenCategory.FUNCTION_JSON: '#8be9fd', # Cyan
399
+ TokenCategory.FUNCTION_REGEX: '#50fa7b', # Green
400
+ TokenCategory.FUNCTION_HASH: '#ff6464', # Red
401
+ TokenCategory.FUNCTION_UTILITY: '#f0f0f5', # White
402
+ TokenCategory.FUNCTION_SYSTEM: '#ff8c00', # Orange
403
+ TokenCategory.FUNCTION_NAMESPACE: '#bd93f9', # Purple
294
404
  }
295
405
 
296
406
  # Light theme variant
297
407
  LIGHT_THEME = {
298
- TokenCategory.KEYWORD: '#0000ff', # Blue
299
- TokenCategory.BUILTIN: '#c65d00', # Dark orange
300
- TokenCategory.OPERATOR: '#444444', # Dark gray
301
- TokenCategory.STRING: '#008000', # Green
302
- TokenCategory.STRING_INTERP: '#b8860b',# DarkGoldenrod for interpolation - NEW
303
- TokenCategory.NUMBER: '#a06000', # Brown
304
- TokenCategory.COMMENT: '#808080', # Gray
305
- TokenCategory.MODULE_REF: '#c65d00', # Dark orange
306
- TokenCategory.SELF_REF: '#008b8b', # Dark cyan
307
- TokenCategory.IDENTIFIER: '#000000', # Black
308
- TokenCategory.PROPERTY: '#800080', # Purple
309
- TokenCategory.BOOLEAN: '#c65d00', # Dark orange
310
- TokenCategory.NULL: '#ff0000', # Red
311
- TokenCategory.PACKAGE_KW: '#8b008b', # DarkMagenta for package - NEW
312
- TokenCategory.TYPE_LITERAL: '#008b8b', # Dark cyan for type literals - NEW
408
+ TokenCategory.KEYWORD: '#0000ff', # Blue
409
+ TokenCategory.BUILTIN: '#c65d00', # Dark orange
410
+ TokenCategory.OPERATOR: '#444444', # Dark gray
411
+ TokenCategory.STRING: '#008000', # Green
412
+ TokenCategory.STRING_INTERP: '#b8860b', # DarkGoldenrod
413
+ TokenCategory.F_STRING: '#2e7d32', # Dark green for f-strings
414
+ TokenCategory.F_STRING_INTERP: '#bf8c00', # Dark gold for {var} in f-strings
415
+ TokenCategory.NUMBER: '#a06000', # Brown
416
+ TokenCategory.COMMENT: '#808080', # Gray
417
+ TokenCategory.MODULE_REF: '#c65d00', # Dark orange
418
+ TokenCategory.SELF_REF: '#008b8b', # Dark cyan
419
+ TokenCategory.GLOBAL_REF: '#d63384', # Dark pink
420
+ TokenCategory.THIS_REF: '#800080', # Purple
421
+ TokenCategory.SNAPSHOT_REF: '#b8860b', # DarkGoldenrod - for %snapshot refs (v4.8.8)
422
+ TokenCategory.IDENTIFIER: '#000000', # Black
423
+ TokenCategory.PROPERTY: '#800080', # Purple
424
+ TokenCategory.BOOLEAN: '#c65d00', # Dark orange
425
+ TokenCategory.NULL: '#ff0000', # Red
426
+ TokenCategory.PACKAGE_KW: '#8b008b', # DarkMagenta
427
+ TokenCategory.TYPE_LITERAL: '#008b8b', # Dark cyan
428
+ TokenCategory.TYPE_CONTAINER: '#198754', # Green
313
429
  # v4.1.0: Multi-language support colors
314
- TokenCategory.SUPPORTS_KW: '#d63384', # Dark Magenta for 'supports'
315
- TokenCategory.LIBINCLUDE_KW: '#b8860b',# DarkGoldenrod for 'libinclude'
316
- TokenCategory.LANG_PREFIX: '#0d6efd', # Blue for language prefix (cpp$)
317
- TokenCategory.LANG_INSTANCE: '#fd7e14',# Orange for instance name ($ClassName)
430
+ TokenCategory.SUPPORTS_KW: '#d63384', # Dark Magenta
431
+ TokenCategory.LIBINCLUDE_KW: '#b8860b', # DarkGoldenrod
432
+ TokenCategory.LANG_PREFIX: '#0d6efd', # Blue
433
+ TokenCategory.LANG_INSTANCE: '#fd7e14', # Orange
318
434
  # v4.6.0: C++ execution control
319
- TokenCategory.NATIVE_KW: '#198754', # Green for 'native' (C++ forced)
435
+ TokenCategory.NATIVE_KW: '#198754', # Green
436
+ # v4.6.5: Python execution control
437
+ TokenCategory.UNATIVE_KW: '#c65d00', # Dark Orange for 'unative'
438
+ # v4.6.2: Dunder variables
439
+ TokenCategory.DUNDER_VAR: '#c71585', # MediumVioletRed for __name__ vars
440
+ # Function categories (simplified for light theme)
441
+ TokenCategory.FUNCTION_OUTPUT: '#c65d00',
442
+ TokenCategory.FUNCTION_TYPE: '#008b8b',
443
+ TokenCategory.FUNCTION_STRING: '#008000',
444
+ TokenCategory.FUNCTION_LIST: '#c65d00',
445
+ TokenCategory.FUNCTION_DICT: '#fd7e14',
446
+ TokenCategory.FUNCTION_MATH: '#a06000',
447
+ TokenCategory.FUNCTION_TIME: '#800080',
448
+ TokenCategory.FUNCTION_FILE: '#d63384',
449
+ TokenCategory.FUNCTION_JSON: '#008b8b',
450
+ TokenCategory.FUNCTION_REGEX: '#198754',
451
+ TokenCategory.FUNCTION_HASH: '#ff0000',
452
+ TokenCategory.FUNCTION_UTILITY: '#000000',
453
+ TokenCategory.FUNCTION_SYSTEM: '#c65d00',
454
+ TokenCategory.FUNCTION_NAMESPACE: '#800080',
320
455
  }
321
456
 
322
457
 
@@ -384,28 +519,52 @@ def highlight_cssl_ansi(source: str) -> str:
384
519
  """
385
520
  # ANSI color codes
386
521
  ANSI_COLORS = {
387
- TokenCategory.KEYWORD: '\033[94m', # Blue
388
- TokenCategory.BUILTIN: '\033[33m', # Yellow/Orange
389
- TokenCategory.OPERATOR: '\033[37m', # White
390
- TokenCategory.STRING: '\033[92m', # Green
391
- TokenCategory.STRING_INTERP: '\033[93m',# Yellow for interpolation - NEW
392
- TokenCategory.NUMBER: '\033[93m', # Yellow
393
- TokenCategory.COMMENT: '\033[90m', # Gray
394
- TokenCategory.MODULE_REF: '\033[33m', # Yellow/Orange
395
- TokenCategory.SELF_REF: '\033[96m', # Cyan
396
- TokenCategory.IDENTIFIER: '\033[0m', # Default
397
- TokenCategory.PROPERTY: '\033[95m', # Magenta
398
- TokenCategory.BOOLEAN: '\033[33m', # Yellow/Orange
399
- TokenCategory.NULL: '\033[91m', # Red
400
- TokenCategory.PACKAGE_KW: '\033[95m', # Magenta for package - NEW
401
- TokenCategory.TYPE_LITERAL: '\033[96m', # Cyan for type literals - NEW
522
+ TokenCategory.KEYWORD: '\033[94m', # Blue
523
+ TokenCategory.BUILTIN: '\033[33m', # Yellow/Orange
524
+ TokenCategory.OPERATOR: '\033[37m', # White
525
+ TokenCategory.STRING: '\033[92m', # Green
526
+ TokenCategory.STRING_INTERP: '\033[93m', # Yellow
527
+ TokenCategory.F_STRING: '\033[92;1m', # Bright Green for f-strings
528
+ TokenCategory.F_STRING_INTERP: '\033[93;1m',# Bright Yellow for {var}
529
+ TokenCategory.NUMBER: '\033[93m', # Yellow
530
+ TokenCategory.COMMENT: '\033[90m', # Gray
531
+ TokenCategory.MODULE_REF: '\033[33m', # Yellow/Orange
532
+ TokenCategory.SELF_REF: '\033[96m', # Cyan
533
+ TokenCategory.GLOBAL_REF: '\033[95m', # Magenta
534
+ TokenCategory.THIS_REF: '\033[95m', # Magenta
535
+ TokenCategory.IDENTIFIER: '\033[0m', # Default
536
+ TokenCategory.PROPERTY: '\033[95m', # Magenta
537
+ TokenCategory.BOOLEAN: '\033[33m', # Yellow/Orange
538
+ TokenCategory.NULL: '\033[91m', # Red
539
+ TokenCategory.PACKAGE_KW: '\033[95m', # Magenta
540
+ TokenCategory.TYPE_LITERAL: '\033[96m', # Cyan
541
+ TokenCategory.TYPE_CONTAINER: '\033[92m', # Green
402
542
  # v4.1.0: Multi-language support colors
403
- TokenCategory.SUPPORTS_KW: '\033[95m', # Magenta for 'supports'
404
- TokenCategory.LIBINCLUDE_KW: '\033[93m',# Yellow for 'libinclude'
405
- TokenCategory.LANG_PREFIX: '\033[96m', # Cyan for language prefix (cpp$)
406
- TokenCategory.LANG_INSTANCE: '\033[33m',# Orange/Yellow for instance name
543
+ TokenCategory.SUPPORTS_KW: '\033[95m', # Magenta
544
+ TokenCategory.LIBINCLUDE_KW: '\033[93m', # Yellow
545
+ TokenCategory.LANG_PREFIX: '\033[96m', # Cyan
546
+ TokenCategory.LANG_INSTANCE: '\033[33m', # Orange/Yellow
407
547
  # v4.6.0: C++ execution control
408
- TokenCategory.NATIVE_KW: '\033[92m', # Bright Green for 'native'
548
+ TokenCategory.NATIVE_KW: '\033[92m', # Bright Green
549
+ # v4.6.5: Python execution control
550
+ TokenCategory.UNATIVE_KW: '\033[33m', # Orange (Python forced)
551
+ # v4.6.2: Dunder variables
552
+ TokenCategory.DUNDER_VAR: '\033[95;1m', # Bright Magenta (bold)
553
+ # Function categories
554
+ TokenCategory.FUNCTION_OUTPUT: '\033[33m',
555
+ TokenCategory.FUNCTION_TYPE: '\033[96m',
556
+ TokenCategory.FUNCTION_STRING: '\033[92m',
557
+ TokenCategory.FUNCTION_LIST: '\033[33m',
558
+ TokenCategory.FUNCTION_DICT: '\033[33m',
559
+ TokenCategory.FUNCTION_MATH: '\033[93m',
560
+ TokenCategory.FUNCTION_TIME: '\033[95m',
561
+ TokenCategory.FUNCTION_FILE: '\033[95m',
562
+ TokenCategory.FUNCTION_JSON: '\033[96m',
563
+ TokenCategory.FUNCTION_REGEX: '\033[92m',
564
+ TokenCategory.FUNCTION_HASH: '\033[91m',
565
+ TokenCategory.FUNCTION_UTILITY: '\033[0m',
566
+ TokenCategory.FUNCTION_SYSTEM: '\033[33m',
567
+ TokenCategory.FUNCTION_NAMESPACE: '\033[95m',
409
568
  }
410
569
  RESET = '\033[0m'
411
570
 
@@ -507,31 +666,15 @@ def export_textmate_grammar() -> dict:
507
666
  "name": "CSSL",
508
667
  "fileTypes": ["cssl", "service"],
509
668
  "patterns": [
510
- {
511
- "name": "comment.line.cssl",
512
- "match": "#.*$"
513
- },
514
- {
515
- "name": "comment.line.double-slash.cssl",
516
- "match": "//.*$"
517
- },
518
- {
519
- "name": "string.quoted.double.cssl",
520
- "match": '"(?:[^"\\\\]|\\\\.)*"'
521
- },
522
- {
523
- "name": "string.quoted.single.cssl",
524
- "match": "'(?:[^'\\\\]|\\\\.)*'"
525
- },
526
- # v4.1.0: Multi-language support
527
- {
528
- "name": "keyword.control.supports.cssl",
529
- "match": "\\bsupports\\b"
530
- },
531
- {
532
- "name": "support.function.libinclude.cssl",
533
- "match": "\\blibinclude\\b"
534
- },
669
+ {"name": "comment.line.cssl", "match": "#.*$"},
670
+ {"name": "comment.line.double-slash.cssl", "match": "//.*$"},
671
+ {"name": "comment.block.cssl", "begin": "/\\*", "end": "\\*/"},
672
+ {"name": "string.quoted.double.cssl", "match": '"(?:[^"\\\\]|\\\\.)*"'},
673
+ {"name": "string.quoted.single.cssl", "match": "'(?:[^'\\\\]|\\\\.)*'"},
674
+ {"name": "string.quoted.raw.cssl", "begin": "`", "end": "`"},
675
+ {"name": "keyword.control.supports.cssl", "match": "\\bsupports\\b"},
676
+ {"name": "support.function.libinclude.cssl", "match": "\\blibinclude\\b"},
677
+ {"name": "keyword.control.native.cssl", "match": "\\bnative\\b"},
535
678
  {
536
679
  "name": "variable.language.lang-instance.cssl",
537
680
  "match": "\\b(cpp|py|python|java|csharp|js|javascript)\\$([A-Za-z_][A-Za-z0-9_]*)",
@@ -540,42 +683,22 @@ def export_textmate_grammar() -> dict:
540
683
  "2": {"name": "variable.other.instance.cssl"}
541
684
  }
542
685
  },
543
- {
544
- "name": "variable.other.self-reference.cssl",
545
- "match": "s@[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*"
546
- },
547
- {
548
- "name": "variable.other.module-reference.cssl",
549
- "match": "@[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*"
550
- },
551
- {
552
- "name": "keyword.other.package.cssl",
553
- "match": "\\b(package|package-includes)\\b"
554
- },
555
- {
556
- "name": "keyword.control.cssl",
557
- "match": "\\b(service-init|service-run|service-include|struct|define|class|constr|if|else|elif|while|for|foreach|in|switch|case|default|break|continue|return|try|catch|finally|throw|await|extends|overwrites|global|as|exec)\\b"
558
- },
559
- {
560
- "name": "keyword.operator.cssl",
561
- "match": "\\b(and|or|not)\\b"
562
- },
563
- {
564
- "name": "constant.language.cssl",
565
- "match": "\\b(True|False|true|false|null|None|none)\\b"
566
- },
567
- {
568
- "name": "constant.numeric.cssl",
569
- "match": "\\b\\d+\\.?\\d*\\b"
570
- },
571
- {
572
- "name": "keyword.operator.assignment.cssl",
573
- "match": "<==|==>|->|<-|::"
574
- },
575
- {
576
- "name": "support.type.cssl",
577
- "match": "\\b(list|dict)\\b(?!\\s*\\()"
578
- }
686
+ {"name": "variable.language.this.cssl", "match": "\\bthis->\\w+|\\bthis\\b"},
687
+ {"name": "variable.other.self-reference.cssl", "match": "s@[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*"},
688
+ {"name": "variable.other.global-reference.cssl", "match": "r@[A-Za-z_][A-Za-z0-9_]*"},
689
+ {"name": "variable.other.snapshot.cssl", "match": "%[A-Za-z_][A-Za-z0-9_]*"},
690
+ {"name": "variable.other.module-reference.cssl", "match": "@[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*"},
691
+ {"name": "keyword.other.package.cssl", "match": "\\b(package|package-includes)\\b"},
692
+ {"name": "storage.modifier.cssl", "match": "\\b(undefined|open|meta|super|closed|private|virtual|sqlbased|const|public|static|shuffled|embedded)\\b"},
693
+ {"name": "storage.type.container.cssl", "match": "\\b(datastruct|dataspace|shuffled|iterator|combo|vector|stack|array|openquote|structure|bytearrayed)\\b"},
694
+ {"name": "storage.type.cssl", "match": "\\b(int|string|float|bool|void|json|dynamic|list|dict|map|queue)\\b"},
695
+ {"name": "keyword.control.cssl", "match": "\\b(service-init|service-run|service-include|struct|define|class|constr|if|else|elif|while|for|foreach|in|switch|case|default|break|continue|return|try|catch|finally|throw|await|extends|overwrites|global|as|exec|new|super|enum|main|start|stop|wait_for|on_event|emit_event|include|get|payload)\\b"},
696
+ {"name": "keyword.operator.cssl", "match": "\\b(and|or|not)\\b"},
697
+ {"name": "constant.language.cssl", "match": "\\b(True|False|true|false|null|None|none|nil)\\b"},
698
+ {"name": "constant.numeric.hex.cssl", "match": "\\b0[xX][0-9a-fA-F]+\\b"},
699
+ {"name": "constant.numeric.cssl", "match": "\\b\\d+\\.?\\d*\\b"},
700
+ {"name": "keyword.operator.assignment.cssl", "match": "<==|==>|->|<-|::"},
701
+ {"name": "support.function.namespace.cssl", "match": "\\b(json|instance|python)::\\w+\\b"},
579
702
  ]
580
703
  }
581
704
 
@@ -584,6 +707,11 @@ def export_textmate_grammar() -> dict:
584
707
  __all__ = [
585
708
  'TokenCategory', 'HighlightRule', 'CSSLSyntaxRules', 'ColorScheme',
586
709
  'highlight_cssl', 'highlight_cssl_ansi', 'get_pyqt_highlighter',
587
- 'export_textmate_grammar', 'KEYWORDS', 'BUILTINS',
588
- 'PACKAGE_KEYWORDS', 'TYPE_LITERALS' # NEW
710
+ 'export_textmate_grammar',
711
+ 'KEYWORDS', 'BUILTINS', 'FUNCTION_MODIFIERS', 'TYPE_KEYWORDS', 'TYPE_CONTAINERS',
712
+ 'PACKAGE_KEYWORDS', 'MULTI_LANG_KEYWORDS', 'NATIVE_KEYWORD',
713
+ 'BUILTINS_OUTPUT', 'BUILTINS_TYPE', 'BUILTINS_STRING', 'BUILTINS_LIST',
714
+ 'BUILTINS_DICT', 'BUILTINS_MATH', 'BUILTINS_TIME', 'BUILTINS_FILE',
715
+ 'BUILTINS_JSON', 'BUILTINS_REGEX', 'BUILTINS_HASH', 'BUILTINS_UTILITY',
716
+ 'BUILTINS_SYSTEM', 'BUILTINS_CONSTRUCTOR',
589
717
  ]