Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
int_fiction.py1371 linesDownload Raw Back to lexers
1"""2    pygments.lexers.int_fiction3    ~~~~~~~~~~~~~~~~~~~~~~~~~~~4 5    Lexers for interactive fiction languages.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 RegexLexer, include, bygroups, using, \14    this, default, words15from pygments.token import Text, Comment, Operator, Keyword, Name, String, \16    Number, Punctuation, Error, Generic17 18__all__ = ['Inform6Lexer', 'Inform6TemplateLexer', 'Inform7Lexer',19           'Tads3Lexer']20 21 22class Inform6Lexer(RegexLexer):23    """24    For Inform 6 source code.25    """26 27    name = 'Inform 6'28    url = 'http://inform-fiction.org/'29    aliases = ['inform6', 'i6']30    filenames = ['*.inf']31    version_added = '2.0'32 33    flags = re.MULTILINE | re.DOTALL34 35    _name = r'[a-zA-Z_]\w*'36 37    # Inform 7 maps these four character classes to their ASCII38    # equivalents. To support Inform 6 inclusions within Inform 7,39    # Inform6Lexer maps them too.40    _dash = '\\-\u2010-\u2014'41    _dquote = '"\u201c\u201d'42    _squote = "'\u2018\u2019"43    _newline = '\\n\u0085\u2028\u2029'44 45    tokens = {46        'root': [47            (rf'\A(!%[^{_newline}]*[{_newline}])+', Comment.Preproc,48             'directive'),49            default('directive')50        ],51        '_whitespace': [52            (r'\s+', Text),53            (rf'![^{_newline}]*', Comment.Single)54        ],55        'default': [56            include('_whitespace'),57            (r'\[', Punctuation, 'many-values'),  # Array initialization58            (r':|(?=;)', Punctuation, '#pop'),59            (r'<', Punctuation),  # Second angle bracket in an action statement60            default(('expression', '_expression'))61        ],62 63        # Expressions64        '_expression': [65            include('_whitespace'),66            (r'(?=sp\b)', Text, '#pop'),67            (rf'(?=[{_dquote}{_squote}$0-9#a-zA-Z_])', Text,68             ('#pop', 'value')),69            (rf'\+\+|[{_dash}]{{1,2}}(?!>)|~~?', Operator),70            (rf'(?=[()\[{_dash},?@{{:;])', Text, '#pop')71        ],72        'expression': [73            include('_whitespace'),74            (r'\(', Punctuation, ('expression', '_expression')),75            (r'\)', Punctuation, '#pop'),76            (r'\[', Punctuation, ('#pop', 'statements', 'locals')),77            (rf'>(?=(\s+|(![^{_newline}]*))*[>;])', Punctuation),78            (rf'\+\+|[{_dash}]{{2}}(?!>)', Operator),79            (r',', Punctuation, '_expression'),80            (rf'&&?|\|\|?|[=~><]?=|[{_dash}]{{1,2}}>?|\.\.?[&#]?|::|[<>+*/%]',81             Operator, '_expression'),82            (r'(has|hasnt|in|notin|ofclass|or|provides)\b', Operator.Word,83             '_expression'),84            (r'sp\b', Name),85            (r'\?~?', Name.Label, 'label?'),86            (r'[@{]', Error),87            default('#pop')88        ],89        '_assembly-expression': [90            (r'\(', Punctuation, ('#push', '_expression')),91            (r'[\[\]]', Punctuation),92            (rf'[{_dash}]>', Punctuation, '_expression'),93            (r'sp\b', Keyword.Pseudo),94            (r';', Punctuation, '#pop:3'),95            include('expression')96        ],97        '_for-expression': [98            (r'\)', Punctuation, '#pop:2'),99            (r':', Punctuation, '#pop'),100            include('expression')101        ],102        '_keyword-expression': [103            (r'(from|near|to)\b', Keyword, '_expression'),104            include('expression')105        ],106        '_list-expression': [107            (r',', Punctuation, '#pop'),108            include('expression')109        ],110        '_object-expression': [111            (r'has\b', Keyword.Declaration, '#pop'),112            include('_list-expression')113        ],114 115        # Values116        'value': [117            include('_whitespace'),118            # Strings119            (rf'[{_squote}][^@][{_squote}]', String.Char, '#pop'),120            (rf'([{_squote}])(@\{{[0-9a-fA-F]*\}})([{_squote}])',121             bygroups(String.Char, String.Escape, String.Char), '#pop'),122            (rf'([{_squote}])(@.{{2}})([{_squote}])',123             bygroups(String.Char, String.Escape, String.Char), '#pop'),124            (rf'[{_squote}]', String.Single, ('#pop', 'dictionary-word')),125            (rf'[{_dquote}]', String.Double, ('#pop', 'string')),126            # Numbers127            (rf'\$[<>]?[+{_dash}][0-9]*\.?[0-9]*([eE][+{_dash}]?[0-9]+)?',128             Number.Float, '#pop'),129            (r'\$[0-9a-fA-F]+', Number.Hex, '#pop'),130            (r'\$\$[01]+', Number.Bin, '#pop'),131            (r'[0-9]+', Number.Integer, '#pop'),132            # Values prefixed by hashes133            (rf'(##|#a\$)({_name})', bygroups(Operator, Name), '#pop'),134            (rf'(#g\$)({_name})',135             bygroups(Operator, Name.Variable.Global), '#pop'),136            (r'#[nw]\$', Operator, ('#pop', 'obsolete-dictionary-word')),137            (rf'(#r\$)({_name})', bygroups(Operator, Name.Function), '#pop'),138            (r'#', Name.Builtin, ('#pop', 'system-constant')),139            # System functions140            (words((141                'child', 'children', 'elder', 'eldest', 'glk', 'indirect', 'metaclass',142                'parent', 'random', 'sibling', 'younger', 'youngest'), suffix=r'\b'),143             Name.Builtin, '#pop'),144            # Metaclasses145            (r'(?i)(Class|Object|Routine|String)\b', Name.Builtin, '#pop'),146            # Veneer routines147            (words((148                'Box__Routine', 'CA__Pr', 'CDefArt', 'CInDefArt', 'Cl__Ms',149                'Copy__Primitive', 'CP__Tab', 'DA__Pr', 'DB__Pr', 'DefArt', 'Dynam__String',150                'EnglishNumber', 'Glk__Wrap', 'IA__Pr', 'IB__Pr', 'InDefArt', 'Main__',151                'Meta__class', 'OB__Move', 'OB__Remove', 'OC__Cl', 'OP__Pr', 'Print__Addr',152                'Print__PName', 'PrintShortName', 'RA__Pr', 'RA__Sc', 'RL__Pr', 'R_Process',153                'RT__ChG', 'RT__ChGt', 'RT__ChLDB', 'RT__ChLDW', 'RT__ChPR', 'RT__ChPrintA',154                'RT__ChPrintC', 'RT__ChPrintO', 'RT__ChPrintS', 'RT__ChPS', 'RT__ChR',155                'RT__ChSTB', 'RT__ChSTW', 'RT__ChT', 'RT__Err', 'RT__TrPS', 'RV__Pr',156                'Symb__Tab', 'Unsigned__Compare', 'WV__Pr', 'Z__Region'),157                prefix='(?i)', suffix=r'\b'),158             Name.Builtin, '#pop'),159            # Other built-in symbols160            (words((161                'call', 'copy', 'create', 'DEBUG', 'destroy', 'DICT_CHAR_SIZE',162                'DICT_ENTRY_BYTES', 'DICT_IS_UNICODE', 'DICT_WORD_SIZE', 'DOUBLE_HI_INFINITY',163                'DOUBLE_HI_NAN', 'DOUBLE_HI_NINFINITY', 'DOUBLE_LO_INFINITY', 'DOUBLE_LO_NAN',164                'DOUBLE_LO_NINFINITY', 'false', 'FLOAT_INFINITY', 'FLOAT_NAN', 'FLOAT_NINFINITY',165                'GOBJFIELD_CHAIN', 'GOBJFIELD_CHILD', 'GOBJFIELD_NAME', 'GOBJFIELD_PARENT',166                'GOBJFIELD_PROPTAB', 'GOBJFIELD_SIBLING', 'GOBJ_EXT_START',167                'GOBJ_TOTAL_LENGTH', 'Grammar__Version', 'INDIV_PROP_START', 'INFIX',168                'infix__watching', 'MODULE_MODE', 'name', 'nothing', 'NUM_ATTR_BYTES', 'print',169                'print_to_array', 'recreate', 'remaining', 'self', 'sender', 'STRICT_MODE',170                'sw__var', 'sys__glob0', 'sys__glob1', 'sys__glob2', 'sys_statusline_flag',171                'TARGET_GLULX', 'TARGET_ZCODE', 'temp__global2', 'temp__global3',172                'temp__global4', 'temp_global', 'true', 'USE_MODULES', 'WORDSIZE'),173                prefix='(?i)', suffix=r'\b'),174             Name.Builtin, '#pop'),175            # Other values176            (_name, Name, '#pop')177        ],178        'value?': [179            include('value'),180            default('#pop')181        ],182        # Strings183        'dictionary-word': [184            (rf'[~^]+|//[^{_squote}]*', String.Escape),185            (rf'[^~^/\\@({{{_squote}]+', String.Single),186            (r'[/({]', String.Single),187            (r'@\{[0-9a-fA-F]*\}', String.Escape),188            (r'@.{2}', String.Escape),189            (rf'[{_squote}]', String.Single, '#pop')190        ],191        'string': [192            (r'[~^]+', String.Escape),193            (rf'[^~^\\@({{{_dquote}]+', String.Double),194            (r'[({]', String.Double),195            (r'\\', String.Escape),196            (rf'@(\\\s*[{_newline}]\s*)*@((\\\s*[{_newline}]\s*)*[0-9])*', String.Escape),197            (rf'@(\\\s*[{_newline}]\s*)*[({{]((\\\s*[{_newline}]\s*)*[0-9a-zA-Z_])*'198             rf'(\\\s*[{_newline}]\s*)*[)}}]',199             String.Escape),200            (rf'@(\\\s*[{_newline}]\s*)*.(\\\s*[{_newline}]\s*)*.',201             String.Escape),202            (rf'[{_dquote}]', String.Double, '#pop')203        ],204        'plain-string': [205            (rf'[^~^\\({{\[\]{_dquote}]+', String.Double),206            (r'[~^({\[\]]', String.Double),207            (r'\\', String.Escape),208            (rf'[{_dquote}]', String.Double, '#pop')209        ],210        # Names211        '_constant': [212            include('_whitespace'),213            (_name, Name.Constant, '#pop'),214            include('value')215        ],216        'constant*': [217            include('_whitespace'),218            (r',', Punctuation),219            (r'=', Punctuation, 'value?'),220            (_name, Name.Constant, 'value?'),221            default('#pop')222        ],223        '_global': [224            include('_whitespace'),225            (_name, Name.Variable.Global, '#pop'),226            include('value')227        ],228        'label?': [229            include('_whitespace'),230            (_name, Name.Label, '#pop'),231            default('#pop')232        ],233        'variable?': [234            include('_whitespace'),235            (_name, Name.Variable, '#pop'),236            default('#pop')237        ],238        # Values after hashes239        'obsolete-dictionary-word': [240            (r'\S\w*', String.Other, '#pop')241        ],242        'system-constant': [243            include('_whitespace'),244            (_name, Name.Builtin, '#pop')245        ],246 247        # Directives248        'directive': [249            include('_whitespace'),250            (r'#', Punctuation),251            (r';', Punctuation, '#pop'),252            (r'\[', Punctuation,253             ('default', 'statements', 'locals', 'routine-name?')),254            (words((255                'abbreviate', 'endif', 'dictionary', 'ifdef', 'iffalse', 'ifndef', 'ifnot',256                'iftrue', 'ifv3', 'ifv5', 'release', 'serial', 'switches', 'system_file',257                'version'), prefix='(?i)', suffix=r'\b'),258             Keyword, 'default'),259            (r'(?i)(array|global)\b', Keyword,260             ('default', 'directive-keyword?', '_global')),261            (r'(?i)attribute\b', Keyword, ('default', 'alias?', '_constant')),262            (r'(?i)class\b', Keyword,263             ('object-body', 'duplicates', 'class-name')),264            (r'(?i)(constant|default)\b', Keyword,265             ('default', 'constant*')),266            (r'(?i)(end\b)(.*)', bygroups(Keyword, Text)),267            (r'(?i)(extend|verb)\b', Keyword, 'grammar'),268            (r'(?i)fake_action\b', Keyword, ('default', '_constant')),269            (r'(?i)import\b', Keyword, 'manifest'),270            (r'(?i)(include|link|origsource)\b', Keyword,271             ('default', 'before-plain-string?')),272            (r'(?i)(lowstring|undef)\b', Keyword, ('default', '_constant')),273            (r'(?i)message\b', Keyword, ('default', 'diagnostic')),274            (r'(?i)(nearby|object)\b', Keyword,275             ('object-body', '_object-head')),276            (r'(?i)property\b', Keyword,277             ('default', 'alias?', '_constant', 'property-keyword*')),278            (r'(?i)replace\b', Keyword,279             ('default', 'routine-name?', 'routine-name?')),280            (r'(?i)statusline\b', Keyword, ('default', 'directive-keyword?')),281            (r'(?i)stub\b', Keyword, ('default', 'routine-name?')),282            (r'(?i)trace\b', Keyword,283             ('default', 'trace-keyword?', 'trace-keyword?')),284            (r'(?i)zcharacter\b', Keyword,285             ('default', 'directive-keyword?', 'directive-keyword?')),286            (_name, Name.Class, ('object-body', '_object-head'))287        ],288        # [, Replace, Stub289        'routine-name?': [290            include('_whitespace'),291            (_name, Name.Function, '#pop'),292            default('#pop')293        ],294        'locals': [295            include('_whitespace'),296            (r';', Punctuation, '#pop'),297            (r'\*', Punctuation),298            (r'"', String.Double, 'plain-string'),299            (_name, Name.Variable)300        ],301        # Array302        'many-values': [303            include('_whitespace'),304            (r';', Punctuation),305            (r'\]', Punctuation, '#pop'),306            (r':', Error),307            default(('expression', '_expression'))308        ],309        # Attribute, Property310        'alias?': [311            include('_whitespace'),312            (r'alias\b', Keyword, ('#pop', '_constant')),313            default('#pop')314        ],315        # Class, Object, Nearby316        'class-name': [317            include('_whitespace'),318            (r'(?=[,;]|(class|has|private|with)\b)', Text, '#pop'),319            (_name, Name.Class, '#pop')320        ],321        'duplicates': [322            include('_whitespace'),323            (r'\(', Punctuation, ('#pop', 'expression', '_expression')),324            default('#pop')325        ],326        '_object-head': [327            (rf'[{_dash}]>', Punctuation),328            (r'(class|has|private|with)\b', Keyword.Declaration, '#pop'),329            include('_global')330        ],331        'object-body': [332            include('_whitespace'),333            (r';', Punctuation, '#pop:2'),334            (r',', Punctuation),335            (r'class\b', Keyword.Declaration, 'class-segment'),336            (r'(has|private|with)\b', Keyword.Declaration),337            (r':', Error),338            default(('_object-expression', '_expression'))339        ],340        'class-segment': [341            include('_whitespace'),342            (r'(?=[,;]|(class|has|private|with)\b)', Text, '#pop'),343            (_name, Name.Class),344            default('value')345        ],346        # Extend, Verb347        'grammar': [348            include('_whitespace'),349            (r'=', Punctuation, ('#pop', 'default')),350            (r'\*', Punctuation, ('#pop', 'grammar-line')),351            default('_directive-keyword')352        ],353        'grammar-line': [354            include('_whitespace'),355            (r';', Punctuation, '#pop'),356            (r'[/*]', Punctuation),357            (rf'[{_dash}]>', Punctuation, 'value'),358            (r'(noun|scope)\b', Keyword, '=routine'),359            default('_directive-keyword')360        ],361        '=routine': [362            include('_whitespace'),363            (r'=', Punctuation, 'routine-name?'),364            default('#pop')365        ],366        # Import367        'manifest': [368            include('_whitespace'),369            (r';', Punctuation, '#pop'),370            (r',', Punctuation),371            (r'(?i)global\b', Keyword, '_global'),372            default('_global')373        ],374        # Include, Link, Message375        'diagnostic': [376            include('_whitespace'),377            (rf'[{_dquote}]', String.Double, ('#pop', 'message-string')),378            default(('#pop', 'before-plain-string?', 'directive-keyword?'))379        ],380        'before-plain-string?': [381            include('_whitespace'),382            (rf'[{_dquote}]', String.Double, ('#pop', 'plain-string')),383            default('#pop')384        ],385        'message-string': [386            (r'[~^]+', String.Escape),387            include('plain-string')388        ],389 390        # Keywords used in directives391        '_directive-keyword!': [392            include('_whitespace'),393            (words((394                'additive', 'alias', 'buffer', 'class', 'creature', 'data', 'error', 'fatalerror',395                'first', 'has', 'held', 'individual', 'initial', 'initstr', 'last', 'long', 'meta',396                'multi', 'multiexcept', 'multiheld', 'multiinside', 'noun', 'number', 'only',397                'private', 'replace', 'reverse', 'scope', 'score', 'special', 'string', 'table',398                'terminating', 'time', 'topic', 'warning', 'with'), suffix=r'\b'),399             Keyword, '#pop'),400            (r'static\b', Keyword),401            (rf'[{_dash}]{{1,2}}>|[+=]', Punctuation, '#pop')402        ],403        '_directive-keyword': [404            include('_directive-keyword!'),405            include('value')406        ],407        'directive-keyword?': [408            include('_directive-keyword!'),409            default('#pop')410        ],411        'property-keyword*': [412            include('_whitespace'),413            (words(('additive', 'individual', 'long'),414                suffix=rf'\b(?=(\s*|(![^{_newline}]*[{_newline}]))*[_a-zA-Z])'),415             Keyword),416            default('#pop')417        ],418        'trace-keyword?': [419            include('_whitespace'),420            (words((421                'assembly', 'dictionary', 'expressions', 'lines', 'linker',422                'objects', 'off', 'on', 'symbols', 'tokens', 'verbs'), suffix=r'\b'),423             Keyword, '#pop'),424            default('#pop')425        ],426 427        # Statements428        'statements': [429            include('_whitespace'),430            (r'\]', Punctuation, '#pop'),431            (r'[;{}]', Punctuation),432            (words((433                'box', 'break', 'continue', 'default', 'give', 'inversion',434                'new_line', 'quit', 'read', 'remove', 'return', 'rfalse', 'rtrue',435                'spaces', 'string', 'until'), suffix=r'\b'),436             Keyword, 'default'),437            (r'(do|else)\b', Keyword),438            (r'(font|style)\b', Keyword,439             ('default', 'miscellaneous-keyword?')),440            (r'for\b', Keyword, ('for', '(?')),441            (r'(if|switch|while)', Keyword,442             ('expression', '_expression', '(?')),443            (r'(jump|save|restore)\b', Keyword, ('default', 'label?')),444            (r'objectloop\b', Keyword,445             ('_keyword-expression', 'variable?', '(?')),446            (rf'print(_ret)?\b|(?=[{_dquote}])', Keyword, 'print-list'),447            (r'\.', Name.Label, 'label?'),448            (r'@', Keyword, 'opcode'),449            (r'#(?![agrnw]\$|#)', Punctuation, 'directive'),450            (r'<', Punctuation, 'default'),451            (r'move\b', Keyword,452             ('default', '_keyword-expression', '_expression')),453            default(('default', '_keyword-expression', '_expression'))454        ],455        'miscellaneous-keyword?': [456            include('_whitespace'),457            (r'(bold|fixed|from|near|off|on|reverse|roman|to|underline)\b',458             Keyword, '#pop'),459            (r'(a|A|an|address|char|name|number|object|property|string|the|'460             rf'The)\b(?=(\s+|(![^{_newline}]*))*\))', Keyword.Pseudo,461             '#pop'),462            (rf'{_name}(?=(\s+|(![^{_newline}]*))*\))', Name.Function,463             '#pop'),464            default('#pop')465        ],466        '(?': [467            include('_whitespace'),468            (r'\(', Punctuation, '#pop'),469            default('#pop')470        ],471        'for': [472            include('_whitespace'),473            (r';', Punctuation, ('_for-expression', '_expression')),474            default(('_for-expression', '_expression'))475        ],476        'print-list': [477            include('_whitespace'),478            (r';', Punctuation, '#pop'),479            (r':', Error),480            default(('_list-expression', '_expression', '_list-expression', 'form'))481        ],482        'form': [483            include('_whitespace'),484            (r'\(', Punctuation, ('#pop', 'miscellaneous-keyword?')),485            default('#pop')486        ],487 488        # Assembly489        'opcode': [490            include('_whitespace'),491            (rf'[{_dquote}]', String.Double, ('operands', 'plain-string')),492            (rf'[{_dash}]{{1,2}}>', Punctuation, 'operands'),493            (_name, Keyword, 'operands')494        ],495        'operands': [496            (r':', Error),497            default(('_assembly-expression', '_expression'))498        ]499    }500 501    def get_tokens_unprocessed(self, text):502        # 'in' is either a keyword or an operator.503        # If the token two tokens after 'in' is ')', 'in' is a keyword:504        #   objectloop(a in b)505        # Otherwise, it is an operator:506        #   objectloop(a in b && true)507        objectloop_queue = []508        objectloop_token_count = -1509        previous_token = None510        for index, token, value in RegexLexer.get_tokens_unprocessed(self,511                                                                     text):512            if previous_token is Name.Variable and value == 'in':513                objectloop_queue = [[index, token, value]]514                objectloop_token_count = 2515            elif objectloop_token_count > 0:516                if token not in Comment and token not in Text:517                    objectloop_token_count -= 1518                objectloop_queue.append((index, token, value))519            else:520                if objectloop_token_count == 0:521                    if objectloop_queue[-1][2] == ')':522                        objectloop_queue[0][1] = Keyword523                    while objectloop_queue:524                        yield objectloop_queue.pop(0)525                    objectloop_token_count = -1526                yield index, token, value527            if token not in Comment and token not in Text:528                previous_token = token529        while objectloop_queue:530            yield objectloop_queue.pop(0)531 532    def analyse_text(text):533        """We try to find a keyword which seem relatively common, unfortunately534        there is a decent overlap with Smalltalk keywords otherwise here.."""535        result = 0536        if re.search('\borigsource\b', text, re.IGNORECASE):537            result += 0.05538 539        return result540 541 542class Inform7Lexer(RegexLexer):543    """544    For Inform 7 source code.545    """546 547    name = 'Inform 7'548    url = 'http://inform7.com/'549    aliases = ['inform7', 'i7']550    filenames = ['*.ni', '*.i7x']551    version_added = '2.0'552 553    flags = re.MULTILINE | re.DOTALL554 555    _dash = Inform6Lexer._dash556    _dquote = Inform6Lexer._dquote557    _newline = Inform6Lexer._newline558    _start = rf'\A|(?<=[{_newline}])'559 560    # There are three variants of Inform 7, differing in how to561    # interpret at signs and braces in I6T. In top-level inclusions, at562    # signs in the first column are inweb syntax. In phrase definitions563    # and use options, tokens in braces are treated as I7. Use options564    # also interpret "{N}".565    tokens = {}566    token_variants = ['+i6t-not-inline', '+i6t-inline', '+i6t-use-option']567 568    for level in token_variants:569        tokens[level] = {570            '+i6-root': list(Inform6Lexer.tokens['root']),571            '+i6t-root': [  # For Inform6TemplateLexer572                (rf'[^{Inform6Lexer._newline}]*', Comment.Preproc,573                 ('directive', '+p'))574            ],575            'root': [576                (r'(\|?\s)+', Text),577                (r'\[', Comment.Multiline, '+comment'),578                (rf'[{_dquote}]', Generic.Heading,579                 ('+main', '+titling', '+titling-string')),580                default(('+main', '+heading?'))581            ],582            '+titling-string': [583                (rf'[^{_dquote}]+', Generic.Heading),584                (rf'[{_dquote}]', Generic.Heading, '#pop')585            ],586            '+titling': [587                (r'\[', Comment.Multiline, '+comment'),588                (rf'[^{_dquote}.;:|{_newline}]+', Generic.Heading),589                (rf'[{_dquote}]', Generic.Heading, '+titling-string'),590                (rf'[{_newline}]{{2}}|(?<=[\s{_dquote}])\|[\s{_dquote}]',591                 Text, ('#pop', '+heading?')),592                (rf'[.;:]|(?<=[\s{_dquote}])\|', Text, '#pop'),593                (rf'[|{_newline}]', Generic.Heading)594            ],595            '+main': [596                (rf'(?i)[^{_dquote}:a\[(|{_newline}]+', Text),597                (rf'[{_dquote}]', String.Double, '+text'),598                (r':', Text, '+phrase-definition'),599                (r'(?i)\bas\b', Text, '+use-option'),600                (r'\[', Comment.Multiline, '+comment'),601                (rf'(\([{_dash}])(.*?)([{_dash}]\))',602                 bygroups(Punctuation,603                          using(this, state=('+i6-root', 'directive'),604                                i6t='+i6t-not-inline'), Punctuation)),605                (rf'({_start}|(?<=[\s;:.{_dquote}]))\|\s|[{_newline}]{{2,}}', Text, '+heading?'),606                (rf'(?i)[a(|{_newline}]', Text)607            ],608            '+phrase-definition': [609                (r'\s+', Text),610                (r'\[', Comment.Multiline, '+comment'),611                (rf'(\([{_dash}])(.*?)([{_dash}]\))',612                 bygroups(Punctuation,613                          using(this, state=('+i6-root', 'directive',614                                             'default', 'statements'),615                                i6t='+i6t-inline'), Punctuation), '#pop'),616                default('#pop')617            ],618            '+use-option': [619                (r'\s+', Text),620                (r'\[', Comment.Multiline, '+comment'),621                (rf'(\([{_dash}])(.*?)([{_dash}]\))',622                 bygroups(Punctuation,623                          using(this, state=('+i6-root', 'directive'),624                                i6t='+i6t-use-option'), Punctuation), '#pop'),625                default('#pop')626            ],627            '+comment': [628                (r'[^\[\]]+', Comment.Multiline),629                (r'\[', Comment.Multiline, '#push'),630                (r'\]', Comment.Multiline, '#pop')631            ],632            '+text': [633                (rf'[^\[{_dquote}]+', String.Double),634                (r'\[.*?\]', String.Interpol),635                (rf'[{_dquote}]', String.Double, '#pop')636            ],637            '+heading?': [638                (r'(\|?\s)+', Text),639                (r'\[', Comment.Multiline, '+comment'),640                (rf'[{_dash}]{{4}}\s+', Text, '+documentation-heading'),641                (rf'[{_dash}]{{1,3}}', Text),642                (rf'(?i)(volume|book|part|chapter|section)\b[^{_newline}]*',643                 Generic.Heading, '#pop'),644                default('#pop')645            ],646            '+documentation-heading': [647                (r'\s+', Text),648                (r'\[', Comment.Multiline, '+comment'),649                (r'(?i)documentation\s+', Text, '+documentation-heading2'),650                default('#pop')651            ],652            '+documentation-heading2': [653                (r'\s+', Text),654                (r'\[', Comment.Multiline, '+comment'),655                (rf'[{_dash}]{{4}}\s', Text, '+documentation'),656                default('#pop:2')657            ],658            '+documentation': [659                (rf'(?i)({_start})\s*(chapter|example)\s*:[^{_newline}]*', Generic.Heading),660                (rf'(?i)({_start})\s*section\s*:[^{_newline}]*',661                 Generic.Subheading),662                (rf'(({_start})\t.*?[{_newline}])+',663                 using(this, state='+main')),664                (rf'[^{_newline}\[]+|[{_newline}\[]', Text),665                (r'\[', Comment.Multiline, '+comment'),666            ],667            '+i6t-not-inline': [668                (rf'({_start})@c( .*?)?([{_newline}]|\Z)',669                 Comment.Preproc),670                (rf'({_start})@([{_dash}]+|Purpose:)[^{_newline}]*',671                 Comment.Preproc),672                (rf'({_start})@p( .*?)?([{_newline}]|\Z)',673                 Generic.Heading, '+p')674            ],675            '+i6t-use-option': [676                include('+i6t-not-inline'),677                (r'(\{)(N)(\})', bygroups(Punctuation, Text, Punctuation))678            ],679            '+i6t-inline': [680                (r'(\{)(\S[^}]*)?(\})',681                 bygroups(Punctuation, using(this, state='+main'),682                          Punctuation))683            ],684            '+i6t': [685                (rf'(\{{[{_dash}])(![^}}]*)(\}}?)',686                 bygroups(Punctuation, Comment.Single, Punctuation)),687                (rf'(\{{[{_dash}])(lines)(:)([^}}]*)(\}}?)',688                 bygroups(Punctuation, Keyword, Punctuation, Text,689                          Punctuation), '+lines'),690                (rf'(\{{[{_dash}])([^:}}]*)(:?)([^}}]*)(\}}?)',691                 bygroups(Punctuation, Keyword, Punctuation, Text,692                          Punctuation)),693                (r'(\(\+)(.*?)(\+\)|\Z)',694                 bygroups(Punctuation, using(this, state='+main'),695                          Punctuation))696            ],697            '+p': [698                (r'[^@]+', Comment.Preproc),699                (rf'({_start})@c( .*?)?([{_newline}]|\Z)',700                 Comment.Preproc, '#pop'),701                (rf'({_start})@([{_dash}]|Purpose:)', Comment.Preproc),702                (rf'({_start})@p( .*?)?([{_newline}]|\Z)',703                 Generic.Heading),704                (r'@', Comment.Preproc)705            ],706            '+lines': [707                (rf'({_start})@c( .*?)?([{_newline}]|\Z)',708                 Comment.Preproc),709                (rf'({_start})@([{_dash}]|Purpose:)[^{_newline}]*',710                 Comment.Preproc),711                (rf'({_start})@p( .*?)?([{_newline}]|\Z)',712                 Generic.Heading, '+p'),713                (rf'({_start})@\w*[ {_newline}]', Keyword),714                (rf'![^{_newline}]*', Comment.Single),715                (rf'(\{{)([{_dash}]endlines)(\}})',716                 bygroups(Punctuation, Keyword, Punctuation), '#pop'),717                (rf'[^@!{{]+?([{_newline}]|\Z)|.', Text)718            ]719        }720        # Inform 7 can include snippets of Inform 6 template language,721        # so all of Inform6Lexer's states are copied here, with722        # modifications to account for template syntax. Inform7Lexer's723        # own states begin with '+' to avoid name conflicts. Some of724        # Inform6Lexer's states begin with '_': these are not modified.725        # They deal with template syntax either by including modified726        # states, or by matching r'' then pushing to modified states.727        for token in Inform6Lexer.tokens:728            if token == 'root':729                continue730            tokens[level][token] = list(Inform6Lexer.tokens[token])731            if not token.startswith('_'):732                tokens[level][token][:0] = [include('+i6t'), include(level)]733 734    def __init__(self, **options):735        level = options.get('i6t', '+i6t-not-inline')736        if level not in self._all_tokens:737            self._tokens = self.__class__.process_tokendef(level)738        else:739            self._tokens = self._all_tokens[level]740        RegexLexer.__init__(self, **options)741 742 743class Inform6TemplateLexer(Inform7Lexer):744    """745    For Inform 6 template code.746    """747 748    name = 'Inform 6 template'749    aliases = ['i6t']750    filenames = ['*.i6t']751    version_added = '2.0'752 753    def get_tokens_unprocessed(self, text, stack=('+i6t-root',)):754        return Inform7Lexer.get_tokens_unprocessed(self, text, stack)755 756 757class Tads3Lexer(RegexLexer):758    """759    For TADS 3 source code.760    """761 762    name = 'TADS 3'763    aliases = ['tads3']764    filenames = ['*.t']765    url = 'https://www.tads.org'766    version_added = ''767 768    flags = re.DOTALL | re.MULTILINE769 770    _comment_single = r'(?://(?:[^\\\n]|\\+[\w\W])*$)'771    _comment_multiline = r'(?:/\*(?:[^*]|\*(?!/))*\*/)'772    _escape = (r'(?:\\(?:[\n\\<>"\'^v bnrt]|u[\da-fA-F]{,4}|x[\da-fA-F]{,2}|'773               r'[0-3]?[0-7]{1,2}))')774    _name = r'(?:[_a-zA-Z]\w*)'775    _no_quote = r'(?=\s|\\?>)'776    _operator = (r'(?:&&|\|\||\+\+|--|\?\?|::|[.,@\[\]~]|'777                 r'(?:[=+\-*/%!&|^]|<<?|>>?>?)=?)')778    _ws = rf'(?:\\|\s|{_comment_single}|{_comment_multiline})'779    _ws_pp = rf'(?:\\\n|[^\S\n]|{_comment_single}|{_comment_multiline})'780 781    def _make_string_state(triple, double, verbatim=None, _escape=_escape):782        if verbatim:783            verbatim = ''.join([f'(?:{re.escape(c.lower())}|{re.escape(c.upper())})'784                                for c in verbatim])785        char = r'"' if double else r"'"786        token = String.Double if double else String.Single787        escaped_quotes = rf'+|{char}(?!{char}{{2}})' if triple else r''788        prefix = '{}{}'.format('t' if triple else '', 'd' if double else 's')789        tag_state_name = f'{prefix}qt'790        state = []791        if triple:792            state += [793                (rf'{char}{{3,}}', token, '#pop'),794                (rf'\\{char}+', String.Escape),795                (char, token)796            ]797        else:798            state.append((char, token, '#pop'))799        state += [800            include('s/verbatim'),801            (rf'[^\\<&{{}}{char}]+', token)802        ]803        if verbatim:804            # This regex can't use `(?i)` because escape sequences are805            # case-sensitive. `<\XMP>` works; `<\xmp>` doesn't.806            state.append((rf'\\?<(/|\\\\|(?!{_escape})\\){verbatim}(?=[\s=>])',807                          Name.Tag, ('#pop', f'{prefix}qs', tag_state_name)))808        else:809            state += [810                (rf'\\?<!([^><\\{char}]|<(?!<)|\\{char}{escaped_quotes}|{_escape}|\\.)*>?', Comment.Multiline),811                (r'(?i)\\?<listing(?=[\s=>]|\\>)', Name.Tag,812                 ('#pop', f'{prefix}qs/listing', tag_state_name)),813                (r'(?i)\\?<xmp(?=[\s=>]|\\>)', Name.Tag,814                 ('#pop', f'{prefix}qs/xmp', tag_state_name)),815                (rf'\\?<([^\s=><\\{char}]|<(?!<)|\\{char}{escaped_quotes}|{_escape}|\\.)*', Name.Tag,816                 tag_state_name),817                include('s/entity')818            ]819        state += [820            include('s/escape'),821            (rf'\{{([^}}<\\{char}]|<(?!<)|\\{char}{escaped_quotes}|{_escape}|\\.)*\}}', String.Interpol),822            (r'[\\&{}<]', token)823        ]824        return state825 826    def _make_tag_state(triple, double, _escape=_escape):827        char = r'"' if double else r"'"828        quantifier = r'{3,}' if triple else r''829        state_name = '{}{}qt'.format('t' if triple else '', 'd' if double else 's')830        token = String.Double if double else String.Single831        escaped_quotes = rf'+|{char}(?!{char}{{2}})' if triple else r''832        return [833            (rf'{char}{quantifier}', token, '#pop:2'),834            (r'(\s|\\\n)+', Text),835            (r'(=)(\\?")', bygroups(Punctuation, String.Double),836             f'dqs/{state_name}'),837            (r"(=)(\\?')", bygroups(Punctuation, String.Single),838             f'sqs/{state_name}'),839            (r'=', Punctuation, f'uqs/{state_name}'),840            (r'\\?>', Name.Tag, '#pop'),841            (rf'\{{([^}}<\\{char}]|<(?!<)|\\{char}{escaped_quotes}|{_escape}|\\.)*\}}', String.Interpol),842            (rf'([^\s=><\\{char}]|<(?!<)|\\{char}{escaped_quotes}|{_escape}|\\.)+', Name.Attribute),843            include('s/escape'),844            include('s/verbatim'),845            include('s/entity'),846            (r'[\\{}&]', Name.Attribute)847        ]848 849    def _make_attribute_value_state(terminator, host_triple, host_double,850                                    _escape=_escape):851        token = (String.Double if terminator == r'"' else852                 String.Single if terminator == r"'" else String.Other)853        host_char = r'"' if host_double else r"'"854        host_quantifier = r'{3,}' if host_triple else r''855        host_token = String.Double if host_double else String.Single856        escaped_quotes = (rf'+|{host_char}(?!{host_char}{{2}})'857                          if host_triple else r'')858        return [859            (rf'{host_char}{host_quantifier}', host_token, '#pop:3'),860            (r'{}{}'.format(r'' if token is String.Other else r'\\?', terminator),861             token, '#pop'),862            include('s/verbatim'),863            include('s/entity'),864            (rf'\{{([^}}<\\{host_char}]|<(?!<)|\\{host_char}{escaped_quotes}|{_escape}|\\.)*\}}', String.Interpol),865            (r'([^\s"\'<%s{}\\&])+' % (r'>' if token is String.Other else r''),866             token),867            include('s/escape'),868            (r'["\'\s&{<}\\]', token)869        ]870 871    tokens = {872        'root': [873            ('\ufeff', Text),874            (r'\{', Punctuation, 'object-body'),875            (r';+', Punctuation),876            (r'(?=(argcount|break|case|catch|continue|default|definingobj|'877             r'delegated|do|else|for|foreach|finally|goto|if|inherited|'878             r'invokee|local|nil|new|operator|replaced|return|self|switch|'879             r'targetobj|targetprop|throw|true|try|while)\b)', Text, 'block'),880            (rf'({_name})({_ws}*)(\()',881             bygroups(Name.Function, using(this, state='whitespace'),882                      Punctuation),883             ('block?/root', 'more/parameters', 'main/parameters')),884            include('whitespace'),885            (r'\++', Punctuation),886            (r'[^\s!"%-(*->@-_a-z{-~]+', Error),  # Averts an infinite loop887            (r'(?!\Z)', Text, 'main/root')888        ],889        'main/root': [890            include('main/basic'),891            default(('#pop', 'object-body/no-braces', 'classes', 'class'))892        ],893        'object-body/no-braces': [894            (r';', Punctuation, '#pop'),895            (r'\{', Punctuation, ('#pop', 'object-body')),896            include('object-body')897        ],898        'object-body': [899            (r';', Punctuation),900            (r'\{', Punctuation, '#push'),901            (r'\}', Punctuation, '#pop'),902            (r':', Punctuation, ('classes', 'class')),903            (rf'({_name}?)({_ws}*)(\()',904             bygroups(Name.Function, using(this, state='whitespace'),905                      Punctuation),906             ('block?', 'more/parameters', 'main/parameters')),907            (rf'({_name})({_ws}*)(\{{)',908             bygroups(Name.Function, using(this, state='whitespace'),909                      Punctuation), 'block'),910            (rf'({_name})({_ws}*)(:)',911             bygroups(Name.Variable, using(this, state='whitespace'),912                      Punctuation),913             ('object-body/no-braces', 'classes', 'class')),914            include('whitespace'),915            (rf'->|{_operator}', Punctuation, 'main'),916            default('main/object-body')917        ],918        'main/object-body': [919            include('main/basic'),920            (rf'({_name})({_ws}*)(=?)',921             bygroups(Name.Variable, using(this, state='whitespace'),922                      Punctuation), ('#pop', 'more', 'main')),923            default('#pop:2')924        ],925        'block?/root': [926            (r'\{', Punctuation, ('#pop', 'block')),927            include('whitespace'),928            (r'(?=[\[\'"<(:])', Text,  # It might be a VerbRule macro.929             ('#pop', 'object-body/no-braces', 'grammar', 'grammar-rules')),930            # It might be a macro like DefineAction.931            default(('#pop', 'object-body/no-braces'))932        ],933        'block?': [934            (r'\{', Punctuation, ('#pop', 'block')),935            include('whitespace'),936            default('#pop')937        ],938        'block/basic': [939            (r'[;:]+', Punctuation),940            (r'\{', Punctuation, '#push'),941            (r'\}', Punctuation, '#pop'),942            (r'default\b', Keyword.Reserved),943            (rf'({_name})({_ws}*)(:)',944             bygroups(Name.Label, using(this, state='whitespace'),945                      Punctuation)),946            include('whitespace')947        ],948        'block': [949            include('block/basic'),950            (r'(?!\Z)', Text, ('more', 'main'))951        ],952        'block/embed': [953            (r'>>', String.Interpol, '#pop'),954            include('block/basic'),955            (r'(?!\Z)', Text, ('more/embed', 'main'))956        ],957        'main/basic': [958            include('whitespace'),959            (r'\(', Punctuation, ('#pop', 'more', 'main')),960            (r'\[', Punctuation, ('#pop', 'more/list', 'main')),961            (r'\{', Punctuation, ('#pop', 'more/inner', 'main/inner',962                                  'more/parameters', 'main/parameters')),963            (r'\*|\.{3}', Punctuation, '#pop'),964            (r'(?i)0x[\da-f]+', Number.Hex, '#pop'),965            (r'(\d+\.(?!\.)\d*|\.\d+)([eE][-+]?\d+)?|\d+[eE][-+]?\d+',966             Number.Float, '#pop'),967            (r'0[0-7]+', Number.Oct, '#pop'),968            (r'\d+', Number.Integer, '#pop'),969            (r'"""', String.Double, ('#pop', 'tdqs')),970            (r"'''", String.Single, ('#pop', 'tsqs')),971            (r'"', String.Double, ('#pop', 'dqs')),972            (r"'", String.Single, ('#pop', 'sqs')),973            (r'R"""', String.Regex, ('#pop', 'tdqr')),974            (r"R'''", String.Regex, ('#pop', 'tsqr')),975            (r'R"', String.Regex, ('#pop', 'dqr')),976            (r"R'", String.Regex, ('#pop', 'sqr')),977            # Two-token keywords978            (rf'(extern)({_ws}+)(object\b)',979             bygroups(Keyword.Reserved, using(this, state='whitespace'),980                      Keyword.Reserved)),981            (rf'(function|method)({_ws}*)(\()',982             bygroups(Keyword.Reserved, using(this, state='whitespace'),983                      Punctuation),984             ('#pop', 'block?', 'more/parameters', 'main/parameters')),985            (rf'(modify)({_ws}+)(grammar\b)',986             bygroups(Keyword.Reserved, using(this, state='whitespace'),987                      Keyword.Reserved),988             ('#pop', 'object-body/no-braces', ':', 'grammar')),989            (rf'(new)({_ws}+(?=(?:function|method)\b))',990             bygroups(Keyword.Reserved, using(this, state='whitespace'))),991            (rf'(object)({_ws}+)(template\b)',992             bygroups(Keyword.Reserved, using(this, state='whitespace'),993                      Keyword.Reserved), ('#pop', 'template')),994            (rf'(string)({_ws}+)(template\b)',995             bygroups(Keyword, using(this, state='whitespace'),996                      Keyword.Reserved), ('#pop', 'function-name')),997            # Keywords998            (r'(argcount|definingobj|invokee|replaced|targetobj|targetprop)\b',999             Name.Builtin, '#pop'),1000            (r'(break|continue|goto)\b', Keyword.Reserved, ('#pop', 'label')),1001            (r'(case|extern|if|intrinsic|return|static|while)\b',1002             Keyword.Reserved),1003            (r'catch\b', Keyword.Reserved, ('#pop', 'catch')),1004            (r'class\b', Keyword.Reserved,1005             ('#pop', 'object-body/no-braces', 'class')),1006            (r'(default|do|else|finally|try)\b', Keyword.Reserved, '#pop'),1007            (r'(dictionary|property)\b', Keyword.Reserved,1008             ('#pop', 'constants')),1009            (r'enum\b', Keyword.Reserved, ('#pop', 'enum')),1010            (r'export\b', Keyword.Reserved, ('#pop', 'main')),1011            (r'(for|foreach)\b', Keyword.Reserved,1012             ('#pop', 'more/inner', 'main/inner')),1013            (r'(function|method)\b', Keyword.Reserved,1014             ('#pop', 'block?', 'function-name')),1015            (r'grammar\b', Keyword.Reserved,1016             ('#pop', 'object-body/no-braces', 'grammar')),1017            (r'inherited\b', Keyword.Reserved, ('#pop', 'inherited')),1018            (r'local\b', Keyword.Reserved,1019             ('#pop', 'more/local', 'main/local')),1020            (r'(modify|replace|switch|throw|transient)\b', Keyword.Reserved,1021             '#pop'),1022            (r'new\b', Keyword.Reserved, ('#pop', 'class')),1023            (r'(nil|true)\b', Keyword.Constant, '#pop'),1024            (r'object\b', Keyword.Reserved, ('#pop', 'object-body/no-braces')),1025            (r'operator\b', Keyword.Reserved, ('#pop', 'operator')),1026            (r'propertyset\b', Keyword.Reserved,1027             ('#pop', 'propertyset', 'main')),1028            (r'self\b', Name.Builtin.Pseudo, '#pop'),1029            (r'template\b', Keyword.Reserved, ('#pop', 'template')),1030            # Operators1031            (rf'(__objref|defined)({_ws}*)(\()',1032             bygroups(Operator.Word, using(this, state='whitespace'),1033                      Operator), ('#pop', 'more/__objref', 'main')),1034            (r'delegated\b', Operator.Word),1035            # Compiler-defined macros and built-in properties1036            (r'(__DATE__|__DEBUG|__LINE__|__FILE__|'1037             r'__TADS_MACRO_FORMAT_VERSION|__TADS_SYS_\w*|__TADS_SYSTEM_NAME|'1038             r'__TADS_VERSION_MAJOR|__TADS_VERSION_MINOR|__TADS3|__TIME__|'1039             r'construct|finalize|grammarInfo|grammarTag|lexicalParent|'1040             r'miscVocab|sourceTextGroup|sourceTextGroupName|'1041             r'sourceTextGroupOrder|sourceTextOrder)\b', Name.Builtin, '#pop')1042        ],1043        'main': [1044            include('main/basic'),1045            (_name, Name, '#pop'),1046            default('#pop')1047        ],1048        'more/basic': [1049            (r'\(', Punctuation, ('more/list', 'main')),1050            (r'\[', Punctuation, ('more', 'main')),1051            (r'\.{3}', Punctuation),1052            (r'->|\.\.', Punctuation, 'main'),1053            (r'(?=;)|[:)\]]', Punctuation, '#pop'),1054            include('whitespace'),1055            (_operator, Operator, 'main'),1056            (r'\?', Operator, ('main', 'more/conditional', 'main')),1057            (rf'(is|not)({_ws}+)(in\b)',1058             bygroups(Operator.Word, using(this, state='whitespace'),1059                      Operator.Word)),1060            (r'[^\s!"%-_a-z{-~]+', Error)  # Averts an infinite loop1061        ],1062        'more': [1063            include('more/basic'),1064            default('#pop')1065        ],1066        # Then expression (conditional operator)1067        'more/conditional': [1068            (r':(?!:)', Operator, '#pop'),1069            include('more')1070        ],1071        # Embedded expressions1072        'more/embed': [1073            (r'>>', String.Interpol, '#pop:2'),1074            include('more')1075        ],1076        # For/foreach loop initializer or short-form anonymous function1077        'main/inner': [1078            (r'\(', Punctuation, ('#pop', 'more/inner', 'main/inner')),1079            (r'local\b', Keyword.Reserved, ('#pop', 'main/local')),1080            include('main')1081        ],1082        'more/inner': [1083            (r'\}', Punctuation, '#pop'),1084            (r',', Punctuation, 'main/inner'),1085            (r'(in|step)\b', Keyword, 'main/inner'),1086            include('more')1087        ],1088        # Local1089        'main/local': [1090            (_name, Name.Variable, '#pop'),1091            include('whitespace')1092        ],1093        'more/local': [1094            (r',', Punctuation, 'main/local'),1095            include('more')1096        ],1097        # List1098        'more/list': [1099            (r'[,:]', Punctuation, 'main'),1100            include('more')1101        ],1102        # Parameter list1103        'main/parameters': [1104            (rf'({_name})({_ws}*)(?=:)',1105             bygroups(Name.Variable, using(this, state='whitespace')), '#pop'),1106            (rf'({_name})({_ws}+)({_name})',1107             bygroups(Name.Class, using(this, state='whitespace'),1108                      Name.Variable), '#pop'),1109            (r'\[+', Punctuation),1110            include('main/basic'),1111            (_name, Name.Variable, '#pop'),1112            default('#pop')1113        ],1114        'more/parameters': [1115            (rf'(:)({_ws}*(?=[?=,:)]))',1116             bygroups(Punctuation, using(this, state='whitespace'))),1117            (r'[?\]]+', Punctuation),1118            (r'[:)]', Punctuation, ('#pop', 'multimethod?')),1119            (r',', Punctuation, 'main/parameters'),1120            (r'=', Punctuation, ('more/parameter', 'main')),1121            include('more')1122        ],1123        'more/parameter': [1124            (r'(?=[,)])', Text, '#pop'),1125            include('more')1126        ],1127        'multimethod?': [1128            (r'multimethod\b', Keyword, '#pop'),1129            include('whitespace'),1130            default('#pop')1131        ],1132 1133        # Statements and expressions1134        'more/__objref': [1135            (r',', Punctuation, 'mode'),1136            (r'\)', Operator, '#pop'),1137            include('more')1138        ],1139        'mode': [1140            (r'(error|warn)\b', Keyword, '#pop'),1141            include('whitespace')1142        ],1143        'catch': [1144            (r'\(+', Punctuation),1145            (_name, Name.Exception, ('#pop', 'variables')),1146            include('whitespace')1147        ],1148        'enum': [1149            include('whitespace'),1150            (r'token\b', Keyword, ('#pop', 'constants')),1151            default(('#pop', 'constants'))1152        ],1153        'grammar': [1154            (r'\)+', Punctuation),1155            (r'\(', Punctuation, 'grammar-tag'),1156            (r':', Punctuation, 'grammar-rules'),1157            (_name, Name.Class),1158            include('whitespace')1159        ],1160        'grammar-tag': [1161            include('whitespace'),1162            (r'"""([^\\"<]|""?(?!")|\\"+|\\.|<(?!<))+("{3,}|<<)|'1163             r'R"""([^\\"]|""?(?!")|\\"+|\\.)+"{3,}|'1164             r"'''([^\\'<]|''?(?!')|\\'+|\\.|<(?!<))+('{3,}|<<)|"1165             r"R'''([^\\']|''?(?!')|\\'+|\\.)+'{3,}|"1166             r'"([^\\"<]|\\.|<(?!<))+("|<<)|R"([^\\"]|\\.)+"|'1167             r"'([^\\'<]|\\.|<(?!<))+('|<<)|R'([^\\']|\\.)+'|"1168             r"([^)\s\\/]|/(?![/*]))+|\)", String.Other, '#pop')1169        ],1170        'grammar-rules': [1171            include('string'),1172            include('whitespace'),1173            (rf'(\[)({_ws}*)(badness)',1174             bygroups(Punctuation, using(this, state='whitespace'), Keyword),1175             'main'),1176            (rf'->|{_operator}|[()]', Punctuation),1177            (_name, Name.Constant),1178            default('#pop:2')1179        ],1180        ':': [1181            (r':', Punctuation, '#pop')1182        ],1183        'function-name': [1184            (r'(<<([^>]|>>>|>(?!>))*>>)+', String.Interpol),1185            (rf'(?={_name}?{_ws}*[({{])', Text, '#pop'),1186            (_name, Name.Function, '#pop'),1187            include('whitespace')1188        ],1189        'inherited': [1190            (r'<', Punctuation, ('#pop', 'classes', 'class')),1191            include('whitespace'),1192            (_name, Name.Class, '#pop'),1193            default('#pop')1194        ],1195        'operator': [1196            (r'negate\b', Operator.Word, '#pop'),1197            include('whitespace'),1198            (_operator, Operator),1199            default('#pop')1200        ],

Showing the first 1,200 of 1371 lines. Download the file for the rest.

codekingpro/portable-devtools · Team Ai