Blame docs/sphinxext/cython_highlighting.py

Packit Service 99d393
import re
Packit Service 99d393
Packit Service 99d393
from pygments.lexer import Lexer, RegexLexer, ExtendedRegexLexer, \
Packit Service 99d393
     LexerContext, include, combined, do_insertions, bygroups, using
Packit Service 99d393
from pygments.token import Error, Text, \
Packit Service 99d393
     Comment, Operator, Keyword, Name, String, Number, Generic, Punctuation
Packit Service 99d393
from pygments.util import get_bool_opt, get_list_opt, shebang_matches
Packit Service 99d393
from pygments import unistring as uni
Packit Service 99d393
Packit Service 99d393
from sphinx import highlighting
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
line_re  = re.compile('.*?\n')
Packit Service 99d393
Packit Service 99d393
class CythonLexer(RegexLexer):
Packit Service 99d393
    """
Packit Service 99d393
    For `Cython <http://cython.org>`_ source code.
Packit Service 99d393
    """
Packit Service 99d393
Packit Service 99d393
    name = 'Cython'
Packit Service 99d393
    aliases = ['cython', 'pyx']
Packit Service 99d393
    filenames = ['*.pyx', '*.pxd', '*.pxi']
Packit Service 99d393
    mimetypes = ['text/x-cython', 'application/x-cython']
Packit Service 99d393
Packit Service 99d393
    tokens = {
Packit Service 99d393
        'root': [
Packit Service 99d393
            (r'\n', Text),
Packit Service 99d393
            (r'^(\s*)("""(?:.|\n)*?""")', bygroups(Text, String.Doc)),
Packit Service 99d393
            (r"^(\s*)('''(?:.|\n)*?''')", bygroups(Text, String.Doc)),
Packit Service 99d393
            (r'[^\S\n]+', Text),
Packit Service 99d393
            (r'#.*$', Comment),
Packit Service 99d393
            (r'[]{}:(),;[]', Punctuation),
Packit Service 99d393
            (r'\\\n', Text),
Packit Service 99d393
            (r'\\', Text),
Packit Service 99d393
            (r'(in|is|and|or|not)\b', Operator.Word),
Packit Service 99d393
            (r'(<)([a-zA-Z0-9.?]+)(>)',
Packit Service 99d393
             bygroups(Punctuation, Keyword.Type, Punctuation)),
Packit Service 99d393
            (r'!=|==|<<|>>|[-~+/*%=<>&^|.?]', Operator),
Packit Service 99d393
            (r'(from)(\d+)(<=)(\s+)(<)(\d+)(:)',
Packit Service 99d393
             bygroups(Keyword, Number.Integer, Operator, Name, Operator,
Packit Service 99d393
                      Name, Punctuation)),
Packit Service 99d393
            include('keywords'),
Packit Service 99d393
            (r'(def|property)(\s+)', bygroups(Keyword, Text), 'funcname'),
Packit Service 99d393
            (r'(cp?def)(\s+)', bygroups(Keyword, Text), 'cdef'),
Packit Service 99d393
            (r'(class|struct)(\s+)', bygroups(Keyword, Text), 'classname'),
Packit Service 99d393
            (r'(from)(\s+)', bygroups(Keyword, Text), 'fromimport'),
Packit Service 99d393
            (r'(c?import)(\s+)', bygroups(Keyword, Text), 'import'),
Packit Service 99d393
            include('builtins'),
Packit Service 99d393
            include('backtick'),
Packit Service 99d393
            ('(?:[rR]|[uU][rR]|[rR][uU])"""', String, 'tdqs'),
Packit Service 99d393
            ("(?:[rR]|[uU][rR]|[rR][uU])'''", String, 'tsqs'),
Packit Service 99d393
            ('(?:[rR]|[uU][rR]|[rR][uU])"', String, 'dqs'),
Packit Service 99d393
            ("(?:[rR]|[uU][rR]|[rR][uU])'", String, 'sqs'),
Packit Service 99d393
            ('[uU]?"""', String, combined('stringescape', 'tdqs')),
Packit Service 99d393
            ("[uU]?'''", String, combined('stringescape', 'tsqs')),
Packit Service 99d393
            ('[uU]?"', String, combined('stringescape', 'dqs')),
Packit Service 99d393
            ("[uU]?'", String, combined('stringescape', 'sqs')),
Packit Service 99d393
            include('name'),
Packit Service 99d393
            include('numbers'),
Packit Service 99d393
        ],
Packit Service 99d393
        'keywords': [
Packit Service 99d393
            (r'(assert|break|by|continue|ctypedef|del|elif|else|except\??|exec|'
Packit Service 99d393
             r'finally|for|gil|global|if|include|lambda|nogil|pass|print|raise|'
Packit Service 99d393
             r'return|try|while|yield|as|with)\b', Keyword),
Packit Service 99d393
            (r'(DEF|IF|ELIF|ELSE)\b', Comment.Preproc),
Packit Service 99d393
        ],
Packit Service 99d393
        'builtins': [
Packit Service 99d393
            (r'(?
Packit Service 99d393
             r'bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|'
Packit Service 99d393
             r'complex|delattr|dict|dir|divmod|enumerate|eval|execfile|exit|'
Packit Service 99d393
             r'file|filter|float|frozenset|getattr|globals|hasattr|hash|hex|id|'
Packit Service 99d393
             r'input|int|intern|isinstance|issubclass|iter|len|list|locals|'
Packit Service 99d393
             r'long|map|max|min|next|object|oct|open|ord|pow|property|range|'
Packit Service 99d393
             r'raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|'
Packit Service 99d393
             r'sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|'
Packit Service 99d393
             r'vars|xrange|zip)\b', Name.Builtin),
Packit Service 99d393
            (r'(?
Packit Service 99d393
             r')\b', Name.Builtin.Pseudo),
Packit Service 99d393
            (r'(?
Packit Service 99d393
             r'BaseException|DeprecationWarning|EOFError|EnvironmentError|'
Packit Service 99d393
             r'Exception|FloatingPointError|FutureWarning|GeneratorExit|IOError|'
Packit Service 99d393
             r'ImportError|ImportWarning|IndentationError|IndexError|KeyError|'
Packit Service 99d393
             r'KeyboardInterrupt|LookupError|MemoryError|NameError|'
Packit Service 99d393
             r'NotImplemented|NotImplementedError|OSError|OverflowError|'
Packit Service 99d393
             r'OverflowWarning|PendingDeprecationWarning|ReferenceError|'
Packit Service 99d393
             r'RuntimeError|RuntimeWarning|StandardError|StopIteration|'
Packit Service 99d393
             r'SyntaxError|SyntaxWarning|SystemError|SystemExit|TabError|'
Packit Service 99d393
             r'TypeError|UnboundLocalError|UnicodeDecodeError|'
Packit Service 99d393
             r'UnicodeEncodeError|UnicodeError|UnicodeTranslateError|'
Packit Service 99d393
             r'UnicodeWarning|UserWarning|ValueError|Warning|ZeroDivisionError'
Packit Service 99d393
             r')\b', Name.Exception),
Packit Service 99d393
        ],
Packit Service 99d393
        'numbers': [
Packit Service 99d393
            (r'(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),
Packit Service 99d393
            (r'0\d+', Number.Oct),
Packit Service 99d393
            (r'0[xX][a-fA-F0-9]+', Number.Hex),
Packit Service 99d393
            (r'\d+L', Number.Integer.Long),
Packit Service 99d393
            (r'\d+', Number.Integer)
Packit Service 99d393
        ],
Packit Service 99d393
        'backtick': [
Packit Service 99d393
            ('`.*?`', String.Backtick),
Packit Service 99d393
        ],
Packit Service 99d393
        'name': [
Packit Service 99d393
            (r'@[a-zA-Z0-9_]+', Name.Decorator),
Packit Service 99d393
            ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
Packit Service 99d393
        ],
Packit Service 99d393
        'funcname': [
Packit Service 99d393
            ('[a-zA-Z_][a-zA-Z0-9_]*', Name.Function, '#pop')
Packit Service 99d393
        ],
Packit Service 99d393
        'cdef': [
Packit Service 99d393
            (r'(public|readonly|extern|api|inline)\b', Keyword.Reserved),
Packit Service 99d393
            (r'(struct|enum|union|class)\b', Keyword),
Packit Service 99d393
            (r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*)(?=[(:#=]|$)',
Packit Service 99d393
             bygroups(Name.Function, Text), '#pop'),
Packit Service 99d393
            (r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*)(,)',
Packit Service 99d393
             bygroups(Name.Function, Text, Punctuation)),
Packit Service 99d393
            (r'from\b', Keyword, '#pop'),
Packit Service 99d393
            (r'as\b', Keyword),
Packit Service 99d393
            (r':', Punctuation, '#pop'),
Packit Service 99d393
            (r'(?=["\'])', Text, '#pop'),
Packit Service 99d393
            (r'[a-zA-Z_][a-zA-Z0-9_]*', Keyword.Type),
Packit Service 99d393
            (r'.', Text),
Packit Service 99d393
        ],
Packit Service 99d393
        'classname': [
Packit Service 99d393
            ('[a-zA-Z_][a-zA-Z0-9_]*', Name.Class, '#pop')
Packit Service 99d393
        ],
Packit Service 99d393
        'import': [
Packit Service 99d393
            (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
Packit Service 99d393
            (r'[a-zA-Z_][a-zA-Z0-9_.]*', Name.Namespace),
Packit Service 99d393
            (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
Packit Service 99d393
            (r'', Text, '#pop') # all else: go back
Packit Service 99d393
        ],
Packit Service 99d393
        'fromimport': [
Packit Service 99d393
            (r'(\s+)(c?import)\b', bygroups(Text, Keyword), '#pop'),
Packit Service 99d393
            (r'[a-zA-Z_.][a-zA-Z0-9_.]*', Name.Namespace),
Packit Service 99d393
            # ``cdef foo from "header"``, or ``for foo from 0 < i < 10``
Packit Service 99d393
            (r'', Text, '#pop'),
Packit Service 99d393
        ],
Packit Service 99d393
        'stringescape': [
Packit Service 99d393
            (r'\\([\\abfnrtv"\']|\n|N{.*?}|u[a-fA-F0-9]{4}|'
Packit Service 99d393
             r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
Packit Service 99d393
        ],
Packit Service 99d393
        'strings': [
Packit Service 99d393
            (r'%(\([a-zA-Z0-9]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
Packit Service 99d393
             '[hlL]?[diouxXeEfFgGcrs%]', String.Interpol),
Packit Service 99d393
            (r'[^\\\'"%\n]+', String),
Packit Service 99d393
            # quotes, percents and backslashes must be parsed one at a time
Packit Service 99d393
            (r'[\'"\\]', String),
Packit Service 99d393
            # unhandled string formatting sign
Packit Service 99d393
            (r'%', String)
Packit Service 99d393
            # newlines are an error (use "nl" state)
Packit Service 99d393
        ],
Packit Service 99d393
        'nl': [
Packit Service 99d393
            (r'\n', String)
Packit Service 99d393
        ],
Packit Service 99d393
        'dqs': [
Packit Service 99d393
            (r'"', String, '#pop'),
Packit Service 99d393
            (r'\\\\|\\"|\\\n', String.Escape), # included here again for raw strings
Packit Service 99d393
            include('strings')
Packit Service 99d393
        ],
Packit Service 99d393
        'sqs': [
Packit Service 99d393
            (r"'", String, '#pop'),
Packit Service 99d393
            (r"\\\\|\\'|\\\n", String.Escape), # included here again for raw strings
Packit Service 99d393
            include('strings')
Packit Service 99d393
        ],
Packit Service 99d393
        'tdqs': [
Packit Service 99d393
            (r'"""', String, '#pop'),
Packit Service 99d393
            include('strings'),
Packit Service 99d393
            include('nl')
Packit Service 99d393
        ],
Packit Service 99d393
        'tsqs': [
Packit Service 99d393
            (r"'''", String, '#pop'),
Packit Service 99d393
            include('strings'),
Packit Service 99d393
            include('nl')
Packit Service 99d393
        ],
Packit Service 99d393
    }
Packit Service 99d393
Packit Service 99d393
    ##TODO: fix this, as shebang lines don't make sense for cython.
Packit Service 99d393
    def analyse_text(text):
Packit Service 99d393
        return shebang_matches(text, r'pythonw?(2\.\d)?')
Packit Service 99d393
Packit Service 99d393
def setup(app):
Packit Service 99d393
    app.add_lexer('cython', CythonLexer())