Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
tcl.py149 linesDownload Raw Back to lexers
1"""2    pygments.lexers.tcl3    ~~~~~~~~~~~~~~~~~~~4 5    Lexers for Tcl and related languages.6 7    :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.8    :license: BSD, see LICENSE for details.9"""10 11from pygments.lexer import RegexLexer, include, words12from pygments.token import Text, Comment, Operator, Keyword, Name, String, \13    Number, Whitespace14from pygments.util import shebang_matches15 16__all__ = ['TclLexer']17 18 19class TclLexer(RegexLexer):20    """21    For Tcl source code.22    """23 24    keyword_cmds_re = words((25        'after', 'apply', 'array', 'break', 'catch', 'continue', 'elseif',26        'else', 'error', 'eval', 'expr', 'for', 'foreach', 'global', 'if',27        'namespace', 'proc', 'rename', 'return', 'set', 'switch', 'then',28        'trace', 'unset', 'update', 'uplevel', 'upvar', 'variable', 'vwait',29        'while'), prefix=r'\b', suffix=r'\b')30 31    builtin_cmds_re = words((32        'append', 'bgerror', 'binary', 'cd', 'chan', 'clock', 'close',33        'concat', 'dde', 'dict', 'encoding', 'eof', 'exec', 'exit', 'fblocked',34        'fconfigure', 'fcopy', 'file', 'fileevent', 'flush', 'format', 'gets',35        'glob', 'history', 'http', 'incr', 'info', 'interp', 'join', 'lappend',36        'lassign', 'lindex', 'linsert', 'list', 'llength', 'load', 'loadTk',37        'lrange', 'lrepeat', 'lreplace', 'lreverse', 'lsearch', 'lset', 'lsort',38        'mathfunc', 'mathop', 'memory', 'msgcat', 'open', 'package', 'pid',39        'pkg::create', 'pkg_mkIndex', 'platform', 'platform::shell', 'puts',40        'pwd', 're_syntax', 'read', 'refchan', 'regexp', 'registry', 'regsub',41        'scan', 'seek', 'socket', 'source', 'split', 'string', 'subst', 'tell',42        'time', 'tm', 'unknown', 'unload'), prefix=r'\b', suffix=r'\b')43 44    name = 'Tcl'45    url = 'https://www.tcl.tk/about/language.html'46    aliases = ['tcl']47    filenames = ['*.tcl', '*.rvt']48    mimetypes = ['text/x-tcl', 'text/x-script.tcl', 'application/x-tcl']49    version_added = '0.10'50 51    def _gen_command_rules(keyword_cmds_re, builtin_cmds_re, context=""):52        return [53            (keyword_cmds_re, Keyword, 'params' + context),54            (builtin_cmds_re, Name.Builtin, 'params' + context),55            (r'([\w.-]+)', Name.Variable, 'params' + context),56            (r'#', Comment, 'comment'),57        ]58 59    tokens = {60        'root': [61            include('command'),62            include('basic'),63            include('data'),64            (r'\}', Keyword),  # HACK: somehow we miscounted our braces65        ],66        'command': _gen_command_rules(keyword_cmds_re, builtin_cmds_re),67        'command-in-brace': _gen_command_rules(keyword_cmds_re,68                                               builtin_cmds_re,69                                               "-in-brace"),70        'command-in-bracket': _gen_command_rules(keyword_cmds_re,71                                                 builtin_cmds_re,72                                                 "-in-bracket"),73        'command-in-paren': _gen_command_rules(keyword_cmds_re,74                                               builtin_cmds_re,75                                               "-in-paren"),76        'basic': [77            (r'\(', Keyword, 'paren'),78            (r'\[', Keyword, 'bracket'),79            (r'\{', Keyword, 'brace'),80            (r'"', String.Double, 'string'),81            (r'(eq|ne|in|ni)\b', Operator.Word),82            (r'!=|==|<<|>>|<=|>=|&&|\|\||\*\*|[-+~!*/%<>&^|?:]', Operator),83        ],84        'data': [85            (r'\s+', Whitespace),86            (r'0x[a-fA-F0-9]+', Number.Hex),87            (r'0[0-7]+', Number.Oct),88            (r'\d+\.\d+', Number.Float),89            (r'\d+', Number.Integer),90            (r'\$[\w.:-]+', Name.Variable),91            (r'\$\{[\w.:-]+\}', Name.Variable),92            (r'[\w.,@:-]+', Text),93        ],94        'params': [95            (r';', Keyword, '#pop'),96            (r'\n', Text, '#pop'),97            (r'(else|elseif|then)\b', Keyword),98            include('basic'),99            include('data'),100        ],101        'params-in-brace': [102            (r'\}', Keyword, ('#pop', '#pop')),103            include('params')104        ],105        'params-in-paren': [106            (r'\)', Keyword, ('#pop', '#pop')),107            include('params')108        ],109        'params-in-bracket': [110            (r'\]', Keyword, ('#pop', '#pop')),111            include('params')112        ],113        'string': [114            (r'\[', String.Double, 'string-square'),115            (r'(?s)(\\\\|\\[0-7]+|\\.|[^"\\])', String.Double),116            (r'"', String.Double, '#pop')117        ],118        'string-square': [119            (r'\[', String.Double, 'string-square'),120            (r'(?s)(\\\\|\\[0-7]+|\\.|\\\n|[^\]\\])', String.Double),121            (r'\]', String.Double, '#pop')122        ],123        'brace': [124            (r'\}', Keyword, '#pop'),125            include('command-in-brace'),126            include('basic'),127            include('data'),128        ],129        'paren': [130            (r'\)', Keyword, '#pop'),131            include('command-in-paren'),132            include('basic'),133            include('data'),134        ],135        'bracket': [136            (r'\]', Keyword, '#pop'),137            include('command-in-bracket'),138            include('basic'),139            include('data'),140        ],141        'comment': [142            (r'.*[^\\]\n', Comment, '#pop'),143            (r'.*\\\n', Comment),144        ],145    }146 147    def analyse_text(text):148        return shebang_matches(text, r'(tcl)')149 
codekingpro/portable-devtools · Team Ai