diff options
author | gbrandl <devnull@localhost> | 2009-11-16 18:16:56 +0100 |
---|---|---|
committer | gbrandl <devnull@localhost> | 2009-11-16 18:16:56 +0100 |
commit | 40c11733e545c21004d417b5db6d26f7dcd6ae00 (patch) | |
tree | 14f8e20ec977d7a73b93ac699486def550582e65 | |
parent | f1d80402a7769a1ed84809111c9796ecd84b51b2 (diff) | |
download | pygments-40c11733e545c21004d417b5db6d26f7dcd6ae00.tar.gz |
Add Google Go language lexer (#448).
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | pygments/lexers/_mapping.py | 1 | ||||
-rw-r--r-- | pygments/lexers/compiled.py | 69 |
3 files changed, 68 insertions, 3 deletions
@@ -9,6 +9,7 @@ Version 1.2 - Lexers added: + * Go * CMake * OOC diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index 338c69da..2f2ddad0 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -77,6 +77,7 @@ LEXERS = { 'GenshiTextLexer': ('pygments.lexers.templates', 'Genshi Text', ('genshitext',), (), ('application/x-genshi-text', 'text/x-genshi')), 'GettextLexer': ('pygments.lexers.text', 'Gettext Catalog', ('pot', 'po'), ('*.pot', '*.po'), ('application/x-gettext', 'text/x-gettext', 'text/gettext')), 'GnuplotLexer': ('pygments.lexers.other', 'Gnuplot', ('gnuplot',), ('*.plot', '*.plt'), ('text/x-gnuplot',)), + 'GoLexer': ('pygments.lexers.compiled', 'Go', ('go',), ('*.go',), ('text/x-gosrc',)), 'GroffLexer': ('pygments.lexers.text', 'Groff', ('groff', 'nroff', 'man'), ('*.[1234567]', '*.man'), ('application/x-troff', 'text/troff')), 'HaskellLexer': ('pygments.lexers.functional', 'Haskell', ('haskell', 'hs'), ('*.hs',), ('text/x-haskell',)), 'HtmlDjangoLexer': ('pygments.lexers.templates', 'HTML+Django/Jinja', ('html+django', 'html+jinja'), (), ('text/html+django', 'text/html+jinja')), diff --git a/pygments/lexers/compiled.py b/pygments/lexers/compiled.py index 6fbe04e5..2f257c84 100644 --- a/pygments/lexers/compiled.py +++ b/pygments/lexers/compiled.py @@ -29,7 +29,7 @@ from pygments.lexers.functional import OcamlLexer __all__ = ['CLexer', 'CppLexer', 'DLexer', 'DelphiLexer', 'JavaLexer', 'ScalaLexer', 'DylanLexer', 'OcamlLexer', 'ObjectiveCLexer', 'FortranLexer', 'GLShaderLexer', 'PrologLexer', 'CythonLexer', - 'ValaLexer', 'OocLexer'] + 'ValaLexer', 'OocLexer', 'GoLexer'] class CLexer(RegexLexer): @@ -241,6 +241,8 @@ class CppLexer(RegexLexer): class DLexer(RegexLexer): """ For D source. + + *New in Pygments 1.2.* """ name = 'D' filenames = ['*.d', '*.di'] @@ -304,8 +306,8 @@ class DLexer(RegexLexer): # -- DoubleQuotedString (r'"(\\\\|\\"|[^"])*"[cwd]?', String), # -- EscapeSequence - (r"""\\(['"?\\abfnrtv]|x[0-9a-fA-F]{2}|[0-7]{1,3}""" - r"""|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|&\w+;)""", + (r"\\(['\"?\\abfnrtv]|x[0-9a-fA-F]{2}|[0-7]{1,3}" + r"|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|&\w+;)", String ), # -- HexString @@ -1727,3 +1729,64 @@ class OocLexer(RegexLexer): (r'[;\n]', Text, '#pop'), ], } + + +class GoLexer(RegexLexer): + """ + For `Go <http://golang.org>`_ source. + """ + name = 'Go' + filenames = ['*.go'] + aliases = ['go'] + mimetypes = ['text/x-gosrc'] + + tokens = { + 'root': [ + (r'\n', Text), + (r'\s+', Text), + (r'\\\n', Text), # line continuations + (r'//(.*?)\n', Comment.Single), + (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline), + (r'(break|default|func|interface|select' + r'|case|defer|go|map|struct' + r'|chan|else|goto|package|switch' + r'|const|fallthrough|if|range|type' + r'|continue|for|import|return|var)\b', Keyword + ), + # It seems the builtin types aren't actually keywords. + (r'(uint8|uint16|uint32|uint64' + r'|int8|int16|int32|int64' + r'|float32|float64|byte' + r'|uint|int|float|uintptr' + r'|string|close|closed|len|cap|new|make)\b', Name.Builtin + ), + # float_lit + (r'\d+(\.\d+[eE][+\-]?\d+|' + r'\.\d*|[eE][+\-]?\d+)', Number.Float), + (r'\.\d+([eE][+\-]?\d+)?', Number.Float), + # int_lit + # -- octal_lit + (r'0[0-7]+', Number.Oct), + # -- hex_lit + (r'0[xX][0-9a-fA-F]+', Number.Hex), + # -- decimal_lit + (r'(0|[1-9][0-9]*)', Number.Integer), + # char_lit + (r"""'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}""" + r"""|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'""", + String.Char + ), + # StringLiteral + # -- raw_string_lit + (r'`[^`]*`', String), + # -- interpreted_string_lit + (r'"(\\\\|\\"|[^"])*"', String), + # Tokens + (r'(<<=|>>=|<<|>>|<=|>=|&\^=|&\^|\+=|-=|\*=|/=|%=|&=|\|=|&&|\|\|' + r'|<-|\+\+|--|==|!=|:=|\.\.\.)|[+\-*/%&|^<>=!()\[\]{}.,;:]', + Punctuation + ), + # identifier + (r'[a-zA-Z_]\w*', Name), + ] + } |