summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTinnet Coronam <tinnet@coronam.net>2012-10-17 01:15:09 +0200
committerTinnet Coronam <tinnet@coronam.net>2012-10-17 01:15:09 +0200
commita65c47f6c5ff7a870dcb4eab85c281b1eb4e854c (patch)
tree0ae839f1c678ab6f46c5386eeec6f2cdc6cb24ac
parent0274d7b2b9525abb3bcfe4fb81a83a7db27b5fd7 (diff)
downloadpygments-a65c47f6c5ff7a870dcb4eab85c281b1eb4e854c.tar.gz
added array handling and made some groups noncapturing
-rw-r--r--pygments/lexers/monkey.py36
1 files changed, 25 insertions, 11 deletions
diff --git a/pygments/lexers/monkey.py b/pygments/lexers/monkey.py
index efd2e40e..544686e8 100644
--- a/pygments/lexers/monkey.py
+++ b/pygments/lexers/monkey.py
@@ -34,16 +34,19 @@ class MonkeyLexer(RegexLexer):
name_module = r'[a-z0-9_]*'
keyword_type = r'(Int|Float|String|Bool|Object|Array|Void)'
+ # ? == Bool // % == Int // # == Float // $ == String
+ keyword_type_special = r'[?%#$]'
tokens = {
'root': [
#Text
- (r'\n', Text),
+ (r'\n', Text),
+ (r'\t+', Text),
(r'\s+', Text),
# Comments
(r"'.*\n", Comment),
(r'(?i)^#rem\b', Comment.Multiline, 'comment'),
- (r'^(#If\|#ElseIf|#Else|#End|#Print|#Error)\s.*?$', Comment.Preproc),
+ (r'(?i)^(?:#If|#ElseIf|#Else|#End|#EndIf|#Print|#Error)\s?.*?$', Comment.Preproc),
# String
('"', String.Double, 'string'),
# Numbers
@@ -55,31 +58,32 @@ class MonkeyLexer(RegexLexer):
# Native data types
(r'\b%s\b' % keyword_type, Keyword.Type),
# Exception handling
- (r'(?i)\b(Try|Catch|Throw)\b', Keyword.Reserved),
+ (r'(?i)\b(?:Try|Catch|Throw)\b', Keyword.Reserved),
(r'Throwable', Name.Exception),
# Builtins
- (r'(?i)\b(Null|True|False)\b', Name.Builtin),
- (r'(?i)\b(Self|Super)\b', Name.Builtin.Pseudo),
- (r'\b(HOST|LANG|TARGET|CONFIG)\b', Name.Constant),
+ (r'(?i)\b(?:Null|True|False)\b', Name.Builtin),
+ (r'(?i)\b(?:Self|Super)\b', Name.Builtin.Pseudo),
+ (r'\b(?:HOST|LANG|TARGET|CONFIG)\b', Name.Constant),
# Keywords
- (r'(?i)^(Import|Extern)\s+(.*)\n', bygroups(Keyword.Namespace, Name.Namespace)),
+ (r'(?i)^(Import)(\s+)(.*)(\n)', bygroups(Keyword.Namespace, Text, Name.Namespace, Text)),
(r'(?i)^Strict\b.*\n', Keyword.Reserved),
(r'(?i)(Const|Local|Global|Field)(\s+)', bygroups(Keyword.Declaration, Text), 'variables'),
(r'(?i)(New|Class|Interface|Extends|Implements)(\s+)', bygroups(Keyword.Reserved, Text), 'classname'),
(r'(?i)(Function|Method)(\s+)', bygroups(Keyword.Reserved, Text), 'funcname'),
- (r'(?i)(End|Return|Public|Private|Property|Final|Abstract)\b', Keyword.Reserved),
+ (r'(?i)(?:End|Return|Public|Private|Extern|Property|Final|Abstract)\b', Keyword.Reserved),
# Flow Control stuff
- (r'(?i)(If|Then|Else|ElseIf|EndIf|'
+ (r'(?i)If|Then|Else|ElseIf|EndIf|'
r'Select|Case|Default|'
r'While|Wend|'
r'Repeat|Until|Forever|'
r'For|To|Until|Step|EachIn|Next|'
- r'Exit|Continue)\s+', Keyword.Reserved),
+ r'Exit|Continue\s+', Keyword.Reserved),
# not used yet
(r'(?i)\b(Module|Inline)\b', Keyword.Reserved),
# Other
(r'<=|>=|<>|[*]=|/=|[+]=|-=|&=|~=|[|]=|[-&*/^+=<>]', Operator),
(r'Not|Mod|Shl|Shr|And|Or', Operator.Word),
+ (r'[\]]', Punctuation, "array"),
(r'[\(\){}!#,.:]', Punctuation),
# catch the rest
(r'%s\b' % name_constant, Name.Constant),
@@ -87,7 +91,7 @@ class MonkeyLexer(RegexLexer):
(r'%s\b' % name_variable, Name.Variable),
],
'funcname': [
- (r'%s\b' % name_function, Name.Function),
+ (r'(?i)%s\b' % name_function, Name.Function),
(r':', Punctuation, 'classname'),
(r'\s+', Text),
(r'\(', Punctuation, 'variables'),
@@ -100,12 +104,22 @@ class MonkeyLexer(RegexLexer):
(r'\s+(?!<)', Text,'#pop'),
(r'<', Punctuation),
(r'>', Punctuation),
+ (r'\[', Punctuation, 'array'),
(r'\n', Punctuation, '#pop'),
(r'', Text, '#pop')
],
+ 'array' : [
+ # direct access myArray[3] and size definition myArray:String[100]
+ (r'[0-9]+', Number.Integer),
+ # slicing myArray[1..2]
+ (r'\.\.', Punctuation),
+ (r'\]', Punctuation, '#pop'),
+ (r'\[', Punctuation),
+ ],
'variables': [
(r'%s\b' % name_constant, Name.Constant),
(r'%s\b' % name_variable, Name.Variable),
+ (r'%s' % keyword_type_special, Keyword.Type),
(r'\s+', Text),
(r':', Punctuation, 'classname'),
(r',', Punctuation, '#push'),