aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2015-12-11 00:30:23 +0800
committerchriseth <c@ethdev.com>2015-12-11 00:30:33 +0800
commitc7ec85754a53230945bd2ea57519f4fd7f12479c (patch)
tree96ec19fb68579d59721256ea6eeefeb1b05ba9d9
parent251e7aa462110b50095a8cf2508a0167df6be55d (diff)
downloaddexon-solidity-c7ec85754a53230945bd2ea57519f4fd7f12479c.tar.gz
dexon-solidity-c7ec85754a53230945bd2ea57519f4fd7f12479c.tar.zst
dexon-solidity-c7ec85754a53230945bd2ea57519f4fd7f12479c.zip
Pygments highlighting rules for Solidity.
-rw-r--r--docs/conf.py8
-rw-r--r--docs/utils/SolidityLexer.py85
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),
+ ]
+ }