codekingpro/portable-devtools
114k
1"""2 pygments.lexers.kuin3 ~~~~~~~~~~~~~~~~~~~~4 5 Lexers for the Kuin language.6 7 :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.8 :license: BSD, see LICENSE for details.9"""10 11from pygments.lexer import RegexLexer, include, using, this, bygroups, words12from pygments.token import Text, Comment, Operator, Keyword, Name, String, \13 Number, Punctuation, Whitespace14 15__all__ = ['KuinLexer']16 17 18class KuinLexer(RegexLexer):19 """20 For Kuin source code.21 """22 name = 'Kuin'23 url = 'https://github.com/kuina/Kuin'24 aliases = ['kuin']25 filenames = ['*.kn']26 version_added = '2.9'27 28 tokens = {29 'root': [30 include('statement'),31 ],32 'statement': [33 # Whitespace / Comment34 include('whitespace'),35 36 # Block-statement37 (r'(\+?)([ \t]*)(\*?)([ \t]*)(\bfunc)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)',38 bygroups(Keyword,Whitespace, Keyword, Whitespace, Keyword,39 using(this), Name.Function), 'func_'),40 (r'\b(class)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)',41 bygroups(Keyword, using(this), Name.Class), 'class_'),42 (r'\b(enum)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)',43 bygroups(Keyword, using(this), Name.Constant), 'enum_'),44 (r'\b(block)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',45 bygroups(Keyword, using(this), Name.Other), 'block_'),46 (r'\b(ifdef)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',47 bygroups(Keyword, using(this), Name.Other), 'ifdef_'),48 (r'\b(if)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',49 bygroups(Keyword, using(this), Name.Other), 'if_'),50 (r'\b(switch)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',51 bygroups(Keyword, using(this), Name.Other), 'switch_'),52 (r'\b(while)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',53 bygroups(Keyword, using(this), Name.Other), 'while_'),54 (r'\b(for)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',55 bygroups(Keyword, using(this), Name.Other), 'for_'),56 (r'\b(foreach)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',57 bygroups(Keyword, using(this), Name.Other), 'foreach_'),58 (r'\b(try)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?',59 bygroups(Keyword, using(this), Name.Other), 'try_'),60 61 # Line-statement62 (r'\b(do)\b', Keyword, 'do'),63 (r'(\+?[ \t]*\bvar)\b', Keyword, 'var'),64 (r'\b(const)\b', Keyword, 'const'),65 (r'\b(ret)\b', Keyword, 'ret'),66 (r'\b(throw)\b', Keyword, 'throw'),67 (r'\b(alias)\b', Keyword, 'alias'),68 (r'\b(assert)\b', Keyword, 'assert'),69 (r'\|', Text, 'continued_line'),70 (r'[ \t]*\n', Whitespace),71 ],72 73 # Whitespace / Comment74 'whitespace': [75 (r'^([ \t]*)(;.*)', bygroups(Comment.Single, Whitespace)),76 (r'[ \t]+(?![; \t])', Whitespace),77 (r'\{', Comment.Multiline, 'multiline_comment'),78 ],79 'multiline_comment': [80 (r'\{', Comment.Multiline, 'multiline_comment'),81 (r'(?:\s*;.*|[^{}\n]+)', Comment.Multiline),82 (r'\n', Comment.Multiline),83 (r'\}', Comment.Multiline, '#pop'),84 ],85 86 # Block-statement87 'func_': [88 include('expr'),89 (r'\n', Whitespace, 'func'),90 ],91 'func': [92 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(func)\b',93 bygroups(Keyword, using(this), Keyword), '#pop:2'),94 include('statement'),95 ],96 'class_': [97 include('expr'),98 (r'\n', Whitespace, 'class'),99 ],100 'class': [101 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(class)\b',102 bygroups(Keyword, using(this), Keyword), '#pop:2'),103 include('statement'),104 ],105 'enum_': [106 include('expr'),107 (r'\n', Whitespace, 'enum'),108 ],109 'enum': [110 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(enum)\b',111 bygroups(Keyword, using(this), Keyword), '#pop:2'),112 include('expr'),113 (r'\n', Whitespace),114 ],115 'block_': [116 include('expr'),117 (r'\n', Whitespace, 'block'),118 ],119 'block': [120 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(block)\b',121 bygroups(Keyword, using(this), Keyword), '#pop:2'),122 include('statement'),123 include('break'),124 include('skip'),125 ],126 'ifdef_': [127 include('expr'),128 (r'\n', Whitespace, 'ifdef'),129 ],130 'ifdef': [131 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(ifdef)\b',132 bygroups(Keyword, using(this), Keyword), '#pop:2'),133 (words(('rls', 'dbg'), prefix=r'\b', suffix=r'\b'),134 Keyword.Constant, 'ifdef_sp'),135 include('statement'),136 include('break'),137 include('skip'),138 ],139 'ifdef_sp': [140 include('expr'),141 (r'\n', Whitespace, '#pop'),142 ],143 'if_': [144 include('expr'),145 (r'\n', Whitespace, 'if'),146 ],147 'if': [148 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(if)\b',149 bygroups(Keyword, using(this), Keyword), '#pop:2'),150 (words(('elif', 'else'), prefix=r'\b', suffix=r'\b'), Keyword, 'if_sp'),151 include('statement'),152 include('break'),153 include('skip'),154 ],155 'if_sp': [156 include('expr'),157 (r'\n', Whitespace, '#pop'),158 ],159 'switch_': [160 include('expr'),161 (r'\n', Whitespace, 'switch'),162 ],163 'switch': [164 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(switch)\b',165 bygroups(Keyword, using(this), Keyword), '#pop:2'),166 (words(('case', 'default', 'to'), prefix=r'\b', suffix=r'\b'),167 Keyword, 'switch_sp'),168 include('statement'),169 include('break'),170 include('skip'),171 ],172 'switch_sp': [173 include('expr'),174 (r'\n', Whitespace, '#pop'),175 ],176 'while_': [177 include('expr'),178 (r'\n', Whitespace, 'while'),179 ],180 'while': [181 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(while)\b',182 bygroups(Keyword, using(this), Keyword), '#pop:2'),183 include('statement'),184 include('break'),185 include('skip'),186 ],187 'for_': [188 include('expr'),189 (r'\n', Whitespace, 'for'),190 ],191 'for': [192 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(for)\b',193 bygroups(Keyword, using(this), Keyword), '#pop:2'),194 include('statement'),195 include('break'),196 include('skip'),197 ],198 'foreach_': [199 include('expr'),200 (r'\n', Whitespace, 'foreach'),201 ],202 'foreach': [203 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(foreach)\b',204 bygroups(Keyword, using(this), Keyword), '#pop:2'),205 include('statement'),206 include('break'),207 include('skip'),208 ],209 'try_': [210 include('expr'),211 (r'\n', Whitespace, 'try'),212 ],213 'try': [214 (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(try)\b',215 bygroups(Keyword, using(this), Keyword), '#pop:2'),216 (words(('catch', 'finally', 'to'), prefix=r'\b', suffix=r'\b'),217 Keyword, 'try_sp'),218 include('statement'),219 include('break'),220 include('skip'),221 ],222 'try_sp': [223 include('expr'),224 (r'\n', Whitespace, '#pop'),225 ],226 227 # Line-statement228 'break': [229 (r'\b(break)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)',230 bygroups(Keyword, using(this), Name.Other)),231 ],232 'skip': [233 (r'\b(skip)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)',234 bygroups(Keyword, using(this), Name.Other)),235 ],236 'alias': [237 include('expr'),238 (r'\n', Whitespace, '#pop'),239 ],240 'assert': [241 include('expr'),242 (r'\n', Whitespace, '#pop'),243 ],244 'const': [245 include('expr'),246 (r'\n', Whitespace, '#pop'),247 ],248 'do': [249 include('expr'),250 (r'\n', Whitespace, '#pop'),251 ],252 'ret': [253 include('expr'),254 (r'\n', Whitespace, '#pop'),255 ],256 'throw': [257 include('expr'),258 (r'\n', Whitespace, '#pop'),259 ],260 'var': [261 include('expr'),262 (r'\n', Whitespace, '#pop'),263 ],264 'continued_line': [265 include('expr'),266 (r'\n', Whitespace, '#pop'),267 ],268 269 'expr': [270 # Whitespace / Comment271 include('whitespace'),272 273 # Punctuation274 (r'\(', Punctuation,),275 (r'\)', Punctuation,),276 (r'\[', Punctuation,),277 (r'\]', Punctuation,),278 (r',', Punctuation),279 280 # Keyword281 (words((282 'true', 'false', 'null', 'inf'283 ), prefix=r'\b', suffix=r'\b'), Keyword.Constant),284 (words((285 'me'286 ), prefix=r'\b', suffix=r'\b'), Keyword),287 (words((288 'bit16', 'bit32', 'bit64', 'bit8', 'bool',289 'char', 'class', 'dict', 'enum', 'float', 'func',290 'int', 'list', 'queue', 'stack'291 ), prefix=r'\b', suffix=r'\b'), Keyword.Type),292 293 # Number294 (r'\b[0-9]\.[0-9]+(?!\.)(:?e[\+-][0-9]+)?\b', Number.Float),295 (r'\b2#[01]+(?:b(?:8|16|32|64))?\b', Number.Bin),296 (r'\b8#[0-7]+(?:b(?:8|16|32|64))?\b', Number.Oct),297 (r'\b16#[0-9A-F]+(?:b(?:8|16|32|64))?\b', Number.Hex),298 (r'\b[0-9]+(?:b(?:8|16|32|64))?\b', Number.Decimal),299 300 # String / Char301 (r'"', String.Double, 'string'),302 (r"'(?:\\.|.)+?'", String.Char),303 304 # Operator305 (r'(?:\.|\$(?:>|<)?)', Operator),306 (r'(?:\^)', Operator),307 (r'(?:\+|-|!|##?)', Operator),308 (r'(?:\*|/|%)', Operator),309 (r'(?:~)', Operator),310 (r'(?:(?:=|<>)(?:&|\$)?|<=?|>=?)', Operator),311 (r'(?:&)', Operator),312 (r'(?:\|)', Operator),313 (r'(?:\?)', Operator),314 (r'(?::(?::|\+|-|\*|/|%|\^|~)?)', Operator),315 316 # Identifier317 (r"\b([a-zA-Z_][0-9a-zA-Z_]*)(?=@)\b", Name),318 (r"(@)?\b([a-zA-Z_][0-9a-zA-Z_]*)\b",319 bygroups(Name.Other, Name.Variable)),320 ],321 322 # String323 'string': [324 (r'(?:\\[^{\n]|[^"\\])+', String.Double),325 (r'\\\{', String.Double, 'toStrInString'),326 (r'"', String.Double, '#pop'),327 ],328 'toStrInString': [329 include('expr'),330 (r'\}', String.Double, '#pop'),331 ],332 }333 