diff options
author | chriseth <c@ethdev.com> | 2015-12-11 00:31:28 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2015-12-11 00:31:28 +0800 |
commit | e7098958d00dd6e7618c2283168ddfa11ab8ded3 (patch) | |
tree | 96ec19fb68579d59721256ea6eeefeb1b05ba9d9 | |
parent | 251e7aa462110b50095a8cf2508a0167df6be55d (diff) | |
parent | c7ec85754a53230945bd2ea57519f4fd7f12479c (diff) | |
download | dexon-solidity-e7098958d00dd6e7618c2283168ddfa11ab8ded3.tar.gz dexon-solidity-e7098958d00dd6e7618c2283168ddfa11ab8ded3.tar.zst dexon-solidity-e7098958d00dd6e7618c2283168ddfa11ab8ded3.zip |
Merge pull request #296 from chriseth/solidityHighlighting
Pygments highlighting rules for Solidity.
-rw-r--r-- | docs/conf.py | 8 | ||||
-rw-r--r-- | docs/utils/SolidityLexer.py | 85 |
2 files changed, 91 insertions, 2 deletions
diff --git a/docs/conf.py b/docs/conf.py index 7f5d4514..48664344 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,11 @@ import os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) + +def setup(sphinx): + sys.path.insert(0, os.path.abspath('./utils')) + from SolidityLexer import SolidityLexer + sphinx.add_lexer('Solidity', SolidityLexer()) # -- General configuration ------------------------------------------------ @@ -88,7 +92,7 @@ exclude_patterns = ['_build'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' -highlight_language = 'javascript' +highlight_language = 'Solidity' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] diff --git a/docs/utils/SolidityLexer.py b/docs/utils/SolidityLexer.py new file mode 100644 index 00000000..d05c7b0c --- /dev/null +++ b/docs/utils/SolidityLexer.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +import re +import copy + +from pygments.lexer import RegexLexer, ExtendedRegexLexer, bygroups, using, \ + include, this +from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ + Number, Other, Punctuation, Literal + +__all__ = ['SolidityLexer'] + +class SolidityLexer(RegexLexer): + name = "Solidity" + aliases = ['sol', 'solidity'] + filenames = ['*.sol'] + mimetypes = [] + flags = re.DOTALL + tokens = { + 'commentsandwhitespace': [ + (r'\s+', Text), + (r'<!--', Comment), + (r'///', Comment.Special, 'docstringsingle'), + (r'//.*?\n', Comment.Single), + (r'/\*\*', Comment.Special, 'docstringmulti'), + (r'/\*.*?\*/', Comment.Multiline) + ], + 'natspec': [ + (r'@author|@dev|@notice|@return|@param|@why3|@title', Keyword), + (r'.[^@*\n]*?', Comment.Special) + ], + 'docstringsingle': [ + (r'\n', Comment.Special, '#pop'), + include('natspec') + ], + 'docstringmulti': [ + (r'\*/', Comment.Special, '#pop'), + include('natspec') + ], + 'slashstartsregex': [ + include('commentsandwhitespace'), + (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/' + r'([gim]+\b|\B)', String.Regex, '#pop'), + (r'(?=/)', Text, ('#pop', 'badregex')), + (r'', Text, '#pop') + ], + 'badregex': [ + (r'\n', Text, '#pop') + ], + 'root': [ + (r'^(?=\s|/|<!--)', Text, 'slashstartsregex'), + include('commentsandwhitespace'), + (r'\+\+|--|\*\*|~|&&|\?|:|\|\||\\(?=\n)|' + r'(<<|>>>?|==?|!=?|[-<>+*%&\|\^/])=?', Operator, 'slashstartsregex'), + (r'[{(\[;,]', Punctuation, 'slashstartsregex'), + (r'[})\].]', Punctuation), + (r'(for|in|while|do|break|return|continue|switch|case|default|if|else|' + r'throw|try|catch|finally|new|delete|typeof|instanceof|void|' + r'this|import|mapping|returns|private|public|external|internal|' + r'constant|memory|storage)\b', Keyword, 'slashstartsregex'), + (r'(var|let|with|function|event|modifier|struct|enum|contract)\b', Keyword.Declaration, 'slashstartsregex'), + (r'(bytes|string|address|uint|int|bool|byte|' + + '|'.join( + ['uint%d' % (i + 8) for i in range(0, 256, 8)] + + ['int%d' % (i + 8) for i in range(0, 256, 8)] + + ['bytes%d' % (i + 1) for i in range(0, 32)] + ) + r')\b', Keyword.Type, 'slashstartsregex'), + (r'(abstract|boolean|byte|char|class|const|debugger|double|enum|export|' + r'extends|final|float|goto|implements|int|interface|long|native|' + r'package|private|protected|public|short|static|super|synchronized|throws|' + r'transient|volatile)\b', Keyword.Reserved), + (r'(true|false|null|NaN|Infinity|undefined)\b', Keyword.Constant), + (r'(Array|Boolean|Date|Error|Function|Math|netscape|' + r'Number|Object|Packages|RegExp|String|sun|decodeURI|' + r'decodeURIComponent|encodeURI|encodeURIComponent|' + r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|' + r'window)\b', Name.Builtin), + (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other), + (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float), + (r'0x[0-9a-fA-F]+', Number.Hex), + (r'[0-9]+', Number.Integer), + (r'"(\\\\|\\"|[^"])*"', String.Double), + (r"'(\\\\|\\'|[^'])*'", String.Single), + ] + } |