Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
haxe.py942 linesDownload Raw Back to lexers
1"""2    pygments.lexers.haxe3    ~~~~~~~~~~~~~~~~~~~~4 5    Lexers for Haxe and related stuff.6 7    :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.8    :license: BSD, see LICENSE for details.9"""10 11import re12 13from pygments.lexer import ExtendedRegexLexer, RegexLexer, include, bygroups, \14    default15from pygments.token import Text, Comment, Operator, Keyword, Name, String, \16    Number, Punctuation, Generic, Whitespace17 18__all__ = ['HaxeLexer', 'HxmlLexer']19 20 21class HaxeLexer(ExtendedRegexLexer):22    """23    For Haxe source code.24    """25 26    name = 'Haxe'27    url = 'http://haxe.org/'28    aliases = ['haxe', 'hxsl', 'hx']29    filenames = ['*.hx', '*.hxsl']30    mimetypes = ['text/haxe', 'text/x-haxe', 'text/x-hx']31    version_added = '1.3'32 33    # keywords extracted from lexer.mll in the haxe compiler source34    keyword = (r'(?:function|class|static|var|if|else|while|do|for|'35               r'break|return|continue|extends|implements|import|'36               r'switch|case|default|public|private|try|untyped|'37               r'catch|new|this|throw|extern|enum|in|interface|'38               r'cast|override|dynamic|typedef|package|'39               r'inline|using|null|true|false|abstract)\b')40 41    # idtype in lexer.mll42    typeid = r'_*[A-Z]\w*'43 44    # combined ident and dollar and idtype45    ident = r'(?:_*[a-z]\w*|_+[0-9]\w*|' + typeid + r'|_+|\$\w+)'46 47    binop = (r'(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|'48             r'!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|'49             r'/|\-|=>|=)')50 51    # ident except keywords52    ident_no_keyword = r'(?!' + keyword + ')' + ident53 54    flags = re.DOTALL | re.MULTILINE55 56    preproc_stack = []57 58    def preproc_callback(self, match, ctx):59        proc = match.group(2)60 61        if proc == 'if':62            # store the current stack63            self.preproc_stack.append(ctx.stack[:])64        elif proc in ['else', 'elseif']:65            # restore the stack back to right before #if66            if self.preproc_stack:67                ctx.stack = self.preproc_stack[-1][:]68        elif proc == 'end':69            # remove the saved stack of previous #if70            if self.preproc_stack:71                self.preproc_stack.pop()72 73        # #if and #elseif should follow by an expr74        if proc in ['if', 'elseif']:75            ctx.stack.append('preproc-expr')76 77        # #error can be optionally follow by the error msg78        if proc in ['error']:79            ctx.stack.append('preproc-error')80 81        yield match.start(), Comment.Preproc, '#' + proc82        ctx.pos = match.end()83 84    tokens = {85        'root': [86            include('spaces'),87            include('meta'),88            (r'(?:package)\b', Keyword.Namespace, ('semicolon', 'package')),89            (r'(?:import)\b', Keyword.Namespace, ('semicolon', 'import')),90            (r'(?:using)\b', Keyword.Namespace, ('semicolon', 'using')),91            (r'(?:extern|private)\b', Keyword.Declaration),92            (r'(?:abstract)\b', Keyword.Declaration, 'abstract'),93            (r'(?:class|interface)\b', Keyword.Declaration, 'class'),94            (r'(?:enum)\b', Keyword.Declaration, 'enum'),95            (r'(?:typedef)\b', Keyword.Declaration, 'typedef'),96 97            # top-level expression98            # although it is not supported in haxe, but it is common to write99            # expression in web pages the positive lookahead here is to prevent100            # an infinite loop at the EOF101            (r'(?=.)', Text, 'expr-statement'),102        ],103 104        # space/tab/comment/preproc105        'spaces': [106            (r'\s+', Whitespace),107            (r'//[^\n\r]*', Comment.Single),108            (r'/\*.*?\*/', Comment.Multiline),109            (r'(#)(if|elseif|else|end|error)\b', preproc_callback),110        ],111 112        'string-single-interpol': [113            (r'\$\{', String.Interpol, ('string-interpol-close', 'expr')),114            (r'\$\$', String.Escape),115            (r'\$(?=' + ident + ')', String.Interpol, 'ident'),116            include('string-single'),117        ],118 119        'string-single': [120            (r"'", String.Single, '#pop'),121            (r'\\.', String.Escape),122            (r'.', String.Single),123        ],124 125        'string-double': [126            (r'"', String.Double, '#pop'),127            (r'\\.', String.Escape),128            (r'.', String.Double),129        ],130 131        'string-interpol-close': [132            (r'\$'+ident, String.Interpol),133            (r'\}', String.Interpol, '#pop'),134        ],135 136        'package': [137            include('spaces'),138            (ident, Name.Namespace),139            (r'\.', Punctuation, 'import-ident'),140            default('#pop'),141        ],142 143        'import': [144            include('spaces'),145            (ident, Name.Namespace),146            (r'\*', Keyword),  # wildcard import147            (r'\.', Punctuation, 'import-ident'),148            (r'in', Keyword.Namespace, 'ident'),149            default('#pop'),150        ],151 152        'import-ident': [153            include('spaces'),154            (r'\*', Keyword, '#pop'),  # wildcard import155            (ident, Name.Namespace, '#pop'),156        ],157 158        'using': [159            include('spaces'),160            (ident, Name.Namespace),161            (r'\.', Punctuation, 'import-ident'),162            default('#pop'),163        ],164 165        'preproc-error': [166            (r'\s+', Whitespace),167            (r"'", String.Single, ('#pop', 'string-single')),168            (r'"', String.Double, ('#pop', 'string-double')),169            default('#pop'),170        ],171 172        'preproc-expr': [173            (r'\s+', Whitespace),174            (r'\!', Comment.Preproc),175            (r'\(', Comment.Preproc, ('#pop', 'preproc-parenthesis')),176 177            (ident, Comment.Preproc, '#pop'),178 179            # Float180            (r'\.[0-9]+', Number.Float),181            (r'[0-9]+[eE][+\-]?[0-9]+', Number.Float),182            (r'[0-9]+\.[0-9]*[eE][+\-]?[0-9]+', Number.Float),183            (r'[0-9]+\.[0-9]+', Number.Float),184            (r'[0-9]+\.(?!' + ident + r'|\.\.)', Number.Float),185 186            # Int187            (r'0x[0-9a-fA-F]+', Number.Hex),188            (r'[0-9]+', Number.Integer),189 190            # String191            (r"'", String.Single, ('#pop', 'string-single')),192            (r'"', String.Double, ('#pop', 'string-double')),193        ],194 195        'preproc-parenthesis': [196            (r'\s+', Whitespace),197            (r'\)', Comment.Preproc, '#pop'),198            default('preproc-expr-in-parenthesis'),199        ],200 201        'preproc-expr-chain': [202            (r'\s+', Whitespace),203            (binop, Comment.Preproc, ('#pop', 'preproc-expr-in-parenthesis')),204            default('#pop'),205        ],206 207        # same as 'preproc-expr' but able to chain 'preproc-expr-chain'208        'preproc-expr-in-parenthesis': [209            (r'\s+', Whitespace),210            (r'\!', Comment.Preproc),211            (r'\(', Comment.Preproc,212             ('#pop', 'preproc-expr-chain', 'preproc-parenthesis')),213 214            (ident, Comment.Preproc, ('#pop', 'preproc-expr-chain')),215 216            # Float217            (r'\.[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),218            (r'[0-9]+[eE][+\-]?[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),219            (r'[0-9]+\.[0-9]*[eE][+\-]?[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),220            (r'[0-9]+\.[0-9]+', Number.Float, ('#pop', 'preproc-expr-chain')),221            (r'[0-9]+\.(?!' + ident + r'|\.\.)', Number.Float, ('#pop', 'preproc-expr-chain')),222 223            # Int224            (r'0x[0-9a-fA-F]+', Number.Hex, ('#pop', 'preproc-expr-chain')),225            (r'[0-9]+', Number.Integer, ('#pop', 'preproc-expr-chain')),226 227            # String228            (r"'", String.Single,229             ('#pop', 'preproc-expr-chain', 'string-single')),230            (r'"', String.Double,231             ('#pop', 'preproc-expr-chain', 'string-double')),232        ],233 234        'abstract': [235            include('spaces'),236            default(('#pop', 'abstract-body', 'abstract-relation',237                    'abstract-opaque', 'type-param-constraint', 'type-name')),238        ],239 240        'abstract-body': [241            include('spaces'),242            (r'\{', Punctuation, ('#pop', 'class-body')),243        ],244 245        'abstract-opaque': [246            include('spaces'),247            (r'\(', Punctuation, ('#pop', 'parenthesis-close', 'type')),248            default('#pop'),249        ],250 251        'abstract-relation': [252            include('spaces'),253            (r'(?:to|from)', Keyword.Declaration, 'type'),254            (r',', Punctuation),255            default('#pop'),256        ],257 258        'meta': [259            include('spaces'),260            (r'@', Name.Decorator, ('meta-body', 'meta-ident', 'meta-colon')),261        ],262 263        # optional colon264        'meta-colon': [265            include('spaces'),266            (r':', Name.Decorator, '#pop'),267            default('#pop'),268        ],269 270        # same as 'ident' but set token as Name.Decorator instead of Name271        'meta-ident': [272            include('spaces'),273            (ident, Name.Decorator, '#pop'),274        ],275 276        'meta-body': [277            include('spaces'),278            (r'\(', Name.Decorator, ('#pop', 'meta-call')),279            default('#pop'),280        ],281 282        'meta-call': [283            include('spaces'),284            (r'\)', Name.Decorator, '#pop'),285            default(('#pop', 'meta-call-sep', 'expr')),286        ],287 288        'meta-call-sep': [289            include('spaces'),290            (r'\)', Name.Decorator, '#pop'),291            (r',', Punctuation, ('#pop', 'meta-call')),292        ],293 294        'typedef': [295            include('spaces'),296            default(('#pop', 'typedef-body', 'type-param-constraint',297                     'type-name')),298        ],299 300        'typedef-body': [301            include('spaces'),302            (r'=', Operator, ('#pop', 'optional-semicolon', 'type')),303        ],304 305        'enum': [306            include('spaces'),307            default(('#pop', 'enum-body', 'bracket-open',308                     'type-param-constraint', 'type-name')),309        ],310 311        'enum-body': [312            include('spaces'),313            include('meta'),314            (r'\}', Punctuation, '#pop'),315            (ident_no_keyword, Name, ('enum-member', 'type-param-constraint')),316        ],317 318        'enum-member': [319            include('spaces'),320            (r'\(', Punctuation,321             ('#pop', 'semicolon', 'flag', 'function-param')),322            default(('#pop', 'semicolon', 'flag')),323        ],324 325        'class': [326            include('spaces'),327            default(('#pop', 'class-body', 'bracket-open', 'extends',328                     'type-param-constraint', 'type-name')),329        ],330 331        'extends': [332            include('spaces'),333            (r'(?:extends|implements)\b', Keyword.Declaration, 'type'),334            (r',', Punctuation),  # the comma is made optional here, since haxe2335                                  # requires the comma but haxe3 does not allow it336            default('#pop'),337        ],338 339        'bracket-open': [340            include('spaces'),341            (r'\{', Punctuation, '#pop'),342        ],343 344        'bracket-close': [345            include('spaces'),346            (r'\}', Punctuation, '#pop'),347        ],348 349        'class-body': [350            include('spaces'),351            include('meta'),352            (r'\}', Punctuation, '#pop'),353            (r'(?:static|public|private|override|dynamic|inline|macro)\b',354             Keyword.Declaration),355            default('class-member'),356        ],357 358        'class-member': [359            include('spaces'),360            (r'(var)\b', Keyword.Declaration,361             ('#pop', 'optional-semicolon', 'var')),362            (r'(function)\b', Keyword.Declaration,363             ('#pop', 'optional-semicolon', 'class-method')),364        ],365 366        # local function, anonymous or not367        'function-local': [368            include('spaces'),369            (ident_no_keyword, Name.Function,370             ('#pop', 'optional-expr', 'flag', 'function-param',371              'parenthesis-open', 'type-param-constraint')),372            default(('#pop', 'optional-expr', 'flag', 'function-param',373                     'parenthesis-open', 'type-param-constraint')),374        ],375 376        'optional-expr': [377            include('spaces'),378            include('expr'),379            default('#pop'),380        ],381 382        'class-method': [383            include('spaces'),384            (ident, Name.Function, ('#pop', 'optional-expr', 'flag',385                                    'function-param', 'parenthesis-open',386                                    'type-param-constraint')),387        ],388 389        # function arguments390        'function-param': [391            include('spaces'),392            (r'\)', Punctuation, '#pop'),393            (r'\?', Punctuation),394            (ident_no_keyword, Name,395             ('#pop', 'function-param-sep', 'assign', 'flag')),396        ],397 398        'function-param-sep': [399            include('spaces'),400            (r'\)', Punctuation, '#pop'),401            (r',', Punctuation, ('#pop', 'function-param')),402        ],403 404        'prop-get-set': [405            include('spaces'),406            (r'\(', Punctuation, ('#pop', 'parenthesis-close',407                                  'prop-get-set-opt', 'comma', 'prop-get-set-opt')),408            default('#pop'),409        ],410 411        'prop-get-set-opt': [412            include('spaces'),413            (r'(?:default|null|never|dynamic|get|set)\b', Keyword, '#pop'),414            (ident_no_keyword, Text, '#pop'),  # custom getter/setter415        ],416 417        'expr-statement': [418            include('spaces'),419            # makes semicolon optional here, just to avoid checking the last420            # one is bracket or not.421            default(('#pop', 'optional-semicolon', 'expr')),422        ],423 424        'expr': [425            include('spaces'),426            (r'@', Name.Decorator, ('#pop', 'optional-expr', 'meta-body',427                                    'meta-ident', 'meta-colon')),428            (r'(?:\+\+|\-\-|~(?!/)|!|\-)', Operator),429            (r'\(', Punctuation, ('#pop', 'expr-chain', 'parenthesis')),430            (r'(?:static|public|private|override|dynamic|inline)\b',431             Keyword.Declaration),432            (r'(?:function)\b', Keyword.Declaration, ('#pop', 'expr-chain',433                                                      'function-local')),434            (r'\{', Punctuation, ('#pop', 'expr-chain', 'bracket')),435            (r'(?:true|false|null)\b', Keyword.Constant, ('#pop', 'expr-chain')),436            (r'(?:this)\b', Keyword, ('#pop', 'expr-chain')),437            (r'(?:cast)\b', Keyword, ('#pop', 'expr-chain', 'cast')),438            (r'(?:try)\b', Keyword, ('#pop', 'catch', 'expr')),439            (r'(?:var)\b', Keyword.Declaration, ('#pop', 'var')),440            (r'(?:new)\b', Keyword, ('#pop', 'expr-chain', 'new')),441            (r'(?:switch)\b', Keyword, ('#pop', 'switch')),442            (r'(?:if)\b', Keyword, ('#pop', 'if')),443            (r'(?:do)\b', Keyword, ('#pop', 'do')),444            (r'(?:while)\b', Keyword, ('#pop', 'while')),445            (r'(?:for)\b', Keyword, ('#pop', 'for')),446            (r'(?:untyped|throw)\b', Keyword),447            (r'(?:return)\b', Keyword, ('#pop', 'optional-expr')),448            (r'(?:macro)\b', Keyword, ('#pop', 'macro')),449            (r'(?:continue|break)\b', Keyword, '#pop'),450            (r'(?:\$\s*[a-z]\b|\$(?!'+ident+'))', Name, ('#pop', 'dollar')),451            (ident_no_keyword, Name, ('#pop', 'expr-chain')),452 453            # Float454            (r'\.[0-9]+', Number.Float, ('#pop', 'expr-chain')),455            (r'[0-9]+[eE][+\-]?[0-9]+', Number.Float, ('#pop', 'expr-chain')),456            (r'[0-9]+\.[0-9]*[eE][+\-]?[0-9]+', Number.Float, ('#pop', 'expr-chain')),457            (r'[0-9]+\.[0-9]+', Number.Float, ('#pop', 'expr-chain')),458            (r'[0-9]+\.(?!' + ident + r'|\.\.)', Number.Float, ('#pop', 'expr-chain')),459 460            # Int461            (r'0x[0-9a-fA-F]+', Number.Hex, ('#pop', 'expr-chain')),462            (r'[0-9]+', Number.Integer, ('#pop', 'expr-chain')),463 464            # String465            (r"'", String.Single, ('#pop', 'expr-chain', 'string-single-interpol')),466            (r'"', String.Double, ('#pop', 'expr-chain', 'string-double')),467 468            # EReg469            (r'~/(\\\\|\\[^\\]|[^/\\\n])*/[gimsu]*', String.Regex, ('#pop', 'expr-chain')),470 471            # Array472            (r'\[', Punctuation, ('#pop', 'expr-chain', 'array-decl')),473        ],474 475        'expr-chain': [476            include('spaces'),477            (r'(?:\+\+|\-\-)', Operator),478            (binop, Operator, ('#pop', 'expr')),479            (r'(?:in)\b', Keyword, ('#pop', 'expr')),480            (r'\?', Operator, ('#pop', 'expr', 'ternary', 'expr')),481            (r'(\.)(' + ident_no_keyword + ')', bygroups(Punctuation, Name)),482            (r'\[', Punctuation, 'array-access'),483            (r'\(', Punctuation, 'call'),484            default('#pop'),485        ],486 487        # macro reification488        'macro': [489            include('spaces'),490            include('meta'),491            (r':', Punctuation, ('#pop', 'type')),492 493            (r'(?:extern|private)\b', Keyword.Declaration),494            (r'(?:abstract)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'abstract')),495            (r'(?:class|interface)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'macro-class')),496            (r'(?:enum)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'enum')),497            (r'(?:typedef)\b', Keyword.Declaration, ('#pop', 'optional-semicolon', 'typedef')),498 499            default(('#pop', 'expr')),500        ],501 502        'macro-class': [503            (r'\{', Punctuation, ('#pop', 'class-body')),504            include('class')505        ],506 507        # cast can be written as "cast expr" or "cast(expr, type)"508        'cast': [509            include('spaces'),510            (r'\(', Punctuation, ('#pop', 'parenthesis-close',511                                  'cast-type', 'expr')),512            default(('#pop', 'expr')),513        ],514 515        # optionally give a type as the 2nd argument of cast()516        'cast-type': [517            include('spaces'),518            (r',', Punctuation, ('#pop', 'type')),519            default('#pop'),520        ],521 522        'catch': [523            include('spaces'),524            (r'(?:catch)\b', Keyword, ('expr', 'function-param',525                                       'parenthesis-open')),526            default('#pop'),527        ],528 529        # do-while loop530        'do': [531            include('spaces'),532            default(('#pop', 'do-while', 'expr')),533        ],534 535        # the while after do536        'do-while': [537            include('spaces'),538            (r'(?:while)\b', Keyword, ('#pop', 'parenthesis',539                                       'parenthesis-open')),540        ],541 542        'while': [543            include('spaces'),544            (r'\(', Punctuation, ('#pop', 'expr', 'parenthesis')),545        ],546 547        'for': [548            include('spaces'),549            (r'\(', Punctuation, ('#pop', 'expr', 'parenthesis')),550        ],551 552        'if': [553            include('spaces'),554            (r'\(', Punctuation, ('#pop', 'else', 'optional-semicolon', 'expr',555                                  'parenthesis')),556        ],557 558        'else': [559            include('spaces'),560            (r'(?:else)\b', Keyword, ('#pop', 'expr')),561            default('#pop'),562        ],563 564        'switch': [565            include('spaces'),566            default(('#pop', 'switch-body', 'bracket-open', 'expr')),567        ],568 569        'switch-body': [570            include('spaces'),571            (r'(?:case|default)\b', Keyword, ('case-block', 'case')),572            (r'\}', Punctuation, '#pop'),573        ],574 575        'case': [576            include('spaces'),577            (r':', Punctuation, '#pop'),578            default(('#pop', 'case-sep', 'case-guard', 'expr')),579        ],580 581        'case-sep': [582            include('spaces'),583            (r':', Punctuation, '#pop'),584            (r',', Punctuation, ('#pop', 'case')),585        ],586 587        'case-guard': [588            include('spaces'),589            (r'(?:if)\b', Keyword, ('#pop', 'parenthesis', 'parenthesis-open')),590            default('#pop'),591        ],592 593        # optional multiple expr under a case594        'case-block': [595            include('spaces'),596            (r'(?!(?:case|default)\b|\})', Keyword, 'expr-statement'),597            default('#pop'),598        ],599 600        'new': [601            include('spaces'),602            default(('#pop', 'call', 'parenthesis-open', 'type')),603        ],604 605        'array-decl': [606            include('spaces'),607            (r'\]', Punctuation, '#pop'),608            default(('#pop', 'array-decl-sep', 'expr')),609        ],610 611        'array-decl-sep': [612            include('spaces'),613            (r'\]', Punctuation, '#pop'),614            (r',', Punctuation, ('#pop', 'array-decl')),615        ],616 617        'array-access': [618            include('spaces'),619            default(('#pop', 'array-access-close', 'expr')),620        ],621 622        'array-access-close': [623            include('spaces'),624            (r'\]', Punctuation, '#pop'),625        ],626 627        'comma': [628            include('spaces'),629            (r',', Punctuation, '#pop'),630        ],631 632        'colon': [633            include('spaces'),634            (r':', Punctuation, '#pop'),635        ],636 637        'semicolon': [638            include('spaces'),639            (r';', Punctuation, '#pop'),640        ],641 642        'optional-semicolon': [643            include('spaces'),644            (r';', Punctuation, '#pop'),645            default('#pop'),646        ],647 648        # identity that CAN be a Haxe keyword649        'ident': [650            include('spaces'),651            (ident, Name, '#pop'),652        ],653 654        'dollar': [655            include('spaces'),656            (r'\{', Punctuation, ('#pop', 'expr-chain', 'bracket-close', 'expr')),657            default(('#pop', 'expr-chain')),658        ],659 660        'type-name': [661            include('spaces'),662            (typeid, Name, '#pop'),663        ],664 665        'type-full-name': [666            include('spaces'),667            (r'\.', Punctuation, 'ident'),668            default('#pop'),669        ],670 671        'type': [672            include('spaces'),673            (r'\?', Punctuation),674            (ident, Name, ('#pop', 'type-check', 'type-full-name')),675            (r'\{', Punctuation, ('#pop', 'type-check', 'type-struct')),676            (r'\(', Punctuation, ('#pop', 'type-check', 'type-parenthesis')),677        ],678 679        'type-parenthesis': [680            include('spaces'),681            default(('#pop', 'parenthesis-close', 'type')),682        ],683 684        'type-check': [685            include('spaces'),686            (r'->', Punctuation, ('#pop', 'type')),687            (r'<(?!=)', Punctuation, 'type-param'),688            default('#pop'),689        ],690 691        'type-struct': [692            include('spaces'),693            (r'\}', Punctuation, '#pop'),694            (r'\?', Punctuation),695            (r'>', Punctuation, ('comma', 'type')),696            (ident_no_keyword, Name, ('#pop', 'type-struct-sep', 'type', 'colon')),697            include('class-body'),698        ],699 700        'type-struct-sep': [701            include('spaces'),702            (r'\}', Punctuation, '#pop'),703            (r',', Punctuation, ('#pop', 'type-struct')),704        ],705 706        # type-param can be a normal type or a constant literal...707        'type-param-type': [708            # Float709            (r'\.[0-9]+', Number.Float, '#pop'),710            (r'[0-9]+[eE][+\-]?[0-9]+', Number.Float, '#pop'),711            (r'[0-9]+\.[0-9]*[eE][+\-]?[0-9]+', Number.Float, '#pop'),712            (r'[0-9]+\.[0-9]+', Number.Float, '#pop'),713            (r'[0-9]+\.(?!' + ident + r'|\.\.)', Number.Float, '#pop'),714 715            # Int716            (r'0x[0-9a-fA-F]+', Number.Hex, '#pop'),717            (r'[0-9]+', Number.Integer, '#pop'),718 719            # String720            (r"'", String.Single, ('#pop', 'string-single')),721            (r'"', String.Double, ('#pop', 'string-double')),722 723            # EReg724            (r'~/(\\\\|\\[^\\]|[^/\\\n])*/[gim]*', String.Regex, '#pop'),725 726            # Array727            (r'\[', Operator, ('#pop', 'array-decl')),728 729            include('type'),730        ],731 732        # type-param part of a type733        # ie. the <A,B> path in Map<A,B>734        'type-param': [735            include('spaces'),736            default(('#pop', 'type-param-sep', 'type-param-type')),737        ],738 739        'type-param-sep': [740            include('spaces'),741            (r'>', Punctuation, '#pop'),742            (r',', Punctuation, ('#pop', 'type-param')),743        ],744 745        # optional type-param that may include constraint746        # ie. <T:Constraint, T2:(ConstraintA,ConstraintB)>747        'type-param-constraint': [748            include('spaces'),749            (r'<(?!=)', Punctuation, ('#pop', 'type-param-constraint-sep',750                                      'type-param-constraint-flag', 'type-name')),751            default('#pop'),752        ],753 754        'type-param-constraint-sep': [755            include('spaces'),756            (r'>', Punctuation, '#pop'),757            (r',', Punctuation, ('#pop', 'type-param-constraint-sep',758                                 'type-param-constraint-flag', 'type-name')),759        ],760 761        # the optional constraint inside type-param762        'type-param-constraint-flag': [763            include('spaces'),764            (r':', Punctuation, ('#pop', 'type-param-constraint-flag-type')),765            default('#pop'),766        ],767 768        'type-param-constraint-flag-type': [769            include('spaces'),770            (r'\(', Punctuation, ('#pop', 'type-param-constraint-flag-type-sep',771                                  'type')),772            default(('#pop', 'type')),773        ],774 775        'type-param-constraint-flag-type-sep': [776            include('spaces'),777            (r'\)', Punctuation, '#pop'),778            (r',', Punctuation, 'type'),779        ],780 781        # a parenthesis expr that contain exactly one expr782        'parenthesis': [783            include('spaces'),784            default(('#pop', 'parenthesis-close', 'flag', 'expr')),785        ],786 787        'parenthesis-open': [788            include('spaces'),789            (r'\(', Punctuation, '#pop'),790        ],791 792        'parenthesis-close': [793            include('spaces'),794            (r'\)', Punctuation, '#pop'),795        ],796 797        'var': [798            include('spaces'),799            (ident_no_keyword, Text, ('#pop', 'var-sep', 'assign', 'flag', 'prop-get-set')),800        ],801 802        # optional more var decl.803        'var-sep': [804            include('spaces'),805            (r',', Punctuation, ('#pop', 'var')),806            default('#pop'),807        ],808 809        # optional assignment810        'assign': [811            include('spaces'),812            (r'=', Operator, ('#pop', 'expr')),813            default('#pop'),814        ],815 816        # optional type flag817        'flag': [818            include('spaces'),819            (r':', Punctuation, ('#pop', 'type')),820            default('#pop'),821        ],822 823        # colon as part of a ternary operator (?:)824        'ternary': [825            include('spaces'),826            (r':', Operator, '#pop'),827        ],828 829        # function call830        'call': [831            include('spaces'),832            (r'\)', Punctuation, '#pop'),833            default(('#pop', 'call-sep', 'expr')),834        ],835 836        # after a call param837        'call-sep': [838            include('spaces'),839            (r'\)', Punctuation, '#pop'),840            (r',', Punctuation, ('#pop', 'call')),841        ],842 843        # bracket can be block or object844        'bracket': [845            include('spaces'),846            (r'(?!(?:\$\s*[a-z]\b|\$(?!'+ident+')))' + ident_no_keyword, Name,847             ('#pop', 'bracket-check')),848            (r"'", String.Single, ('#pop', 'bracket-check', 'string-single')),849            (r'"', String.Double, ('#pop', 'bracket-check', 'string-double')),850            default(('#pop', 'block')),851        ],852 853        'bracket-check': [854            include('spaces'),855            (r':', Punctuation, ('#pop', 'object-sep', 'expr')),  # is object856            default(('#pop', 'block', 'optional-semicolon', 'expr-chain')),  # is block857        ],858 859        # code block860        'block': [861            include('spaces'),862            (r'\}', Punctuation, '#pop'),863            default('expr-statement'),864        ],865 866        # object in key-value pairs867        'object': [868            include('spaces'),869            (r'\}', Punctuation, '#pop'),870            default(('#pop', 'object-sep', 'expr', 'colon', 'ident-or-string'))871        ],872 873        # a key of an object874        'ident-or-string': [875            include('spaces'),876            (ident_no_keyword, Name, '#pop'),877            (r"'", String.Single, ('#pop', 'string-single')),878            (r'"', String.Double, ('#pop', 'string-double')),879        ],880 881        # after a key-value pair in object882        'object-sep': [883            include('spaces'),884            (r'\}', Punctuation, '#pop'),885            (r',', Punctuation, ('#pop', 'object')),886        ],887 888 889 890    }891 892    def analyse_text(text):893        rv = 0894        if re.search(r'\bimport\s+haxe\.', text):895            rv = max(rv, 0.2)896        if re.search(r'\bStd\.', text):897            rv = max(rv, 0.1)898        if re.search(r'\btrace\s*\(', text):899            rv = max(rv, 0.05)900        return rv901 902 903class HxmlLexer(RegexLexer):904    """905    Lexer for haXe build files.906    """907    name = 'Hxml'908    url = 'https://haxe.org/manual/compiler-usage-hxml.html'909    aliases = ['haxeml', 'hxml']910    filenames = ['*.hxml']911    version_added = '1.6'912 913    tokens = {914        'root': [915            # Separator916            (r'(--)(next)', bygroups(Punctuation, Generic.Heading)),917            # Compiler switches with one dash918            (r'(-)(prompt|debug|v)', bygroups(Punctuation, Keyword.Keyword)),919            # Compilerswitches with two dashes920            (r'(--)(neko-source|flash-strict|flash-use-stage|no-opt|no-traces|'921             r'no-inline|times|no-output)', bygroups(Punctuation, Keyword)),922            # Targets and other options that take an argument923            (r'(-)(cpp|js|neko|x|as3|swf9?|swf-lib|php|xml|main|lib|D|resource|'924             r'cp|cmd)( +)(.+)',925             bygroups(Punctuation, Keyword, Whitespace, String)),926            # Options that take only numerical arguments927            (r'(-)(swf-version)( +)(\d+)',928             bygroups(Punctuation, Keyword, Whitespace, Number.Integer)),929            # An Option that defines the size, the fps and the background930            # color of an flash movie931            (r'(-)(swf-header)( +)(\d+)(:)(\d+)(:)(\d+)(:)([A-Fa-f0-9]{6})',932             bygroups(Punctuation, Keyword, Whitespace, Number.Integer,933                      Punctuation, Number.Integer, Punctuation, Number.Integer,934                      Punctuation, Number.Hex)),935            # options with two dashes that takes arguments936            (r'(--)(js-namespace|php-front|php-lib|remap|gen-hx-classes)( +)'937             r'(.+)', bygroups(Punctuation, Keyword, Whitespace, String)),938            # Single line comment, multiline ones are not allowed.939            (r'#.*', Comment.Single)940        ]941    }942 
codekingpro/portable-devtools · Team Ai