summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgbrandl <devnull@localhost>2009-11-16 18:16:56 +0100
committergbrandl <devnull@localhost>2009-11-16 18:16:56 +0100
commit40c11733e545c21004d417b5db6d26f7dcd6ae00 (patch)
tree14f8e20ec977d7a73b93ac699486def550582e65
parentf1d80402a7769a1ed84809111c9796ecd84b51b2 (diff)
downloadpygments-40c11733e545c21004d417b5db6d26f7dcd6ae00.tar.gz
Add Google Go language lexer (#448).
-rw-r--r--CHANGES1
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/compiled.py69
3 files changed, 68 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 5f6ba74c..7bb666ad 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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),
+ ]
+ }