summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormitsuhiko <devnull@localhost>2007-09-23 21:57:30 +0200
committermitsuhiko <devnull@localhost>2007-09-23 21:57:30 +0200
commit1ca6a76098797c7ab2f14cb549f2465162be45fd (patch)
tree5dce5569dd54f1b016acf9f27d35f3de6da6e989
parent41aa1a9c42999238ff470c79bb11a2d85515d15c (diff)
parent869633b3ea5053e1b12b428c7191ef5605d6ed76 (diff)
downloadpygments-1ca6a76098797c7ab2f14cb549f2465162be45fd.tar.gz
merged
-rw-r--r--pygments/lexers/agile.py13
-rw-r--r--tests/examplefiles/ruby_func_def.rb11
2 files changed, 22 insertions, 2 deletions
diff --git a/pygments/lexers/agile.py b/pygments/lexers/agile.py
index 798d6f8c..a7f428c0 100644
--- a/pygments/lexers/agile.py
+++ b/pygments/lexers/agile.py
@@ -535,14 +535,23 @@ class RubyLexer(ExtendedRegexLexer):
(r'\s+', Text)
],
'funcname': [
+ (r'\(', Punctuation, 'defexpr'),
(r'(?:([a-zA-Z_][a-zA-Z0-9_]*)(\.))?'
r'([a-zA-Z_][\w_]*[\!\?]?|\*\*?|[-+]@?|'
r'[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)',
- bygroups(Name.Class, Operator, Name.Function), '#pop')
+ bygroups(Name.Class, Operator, Name.Function), '#pop'),
+ (r'(?:)', Text, '#pop')
],
'classname': [
+ (r'\(', Punctuation, 'defexpr'),
(r'<<', Operator, '#pop'),
- (r'[a-zA-Z_][\w_]*', Name.Class, '#pop')
+ (r'[A-Z_][\w_]*', Name.Class, '#pop'),
+ (r'(?:)', Text, '#pop')
+ ],
+ 'defexpr': [
+ (r'(\))(\.|::)?', bygroups(Punctuation, Operator), '#pop'),
+ (r'\(', Operator, '#push'),
+ include('root')
],
'in-intp': [
('}', String.Interpol, '#pop'),
diff --git a/tests/examplefiles/ruby_func_def.rb b/tests/examplefiles/ruby_func_def.rb
new file mode 100644
index 00000000..a820c68f
--- /dev/null
+++ b/tests/examplefiles/ruby_func_def.rb
@@ -0,0 +1,11 @@
+class (get_foo("blub"))::Foo
+ def (foo("bar") + bar("baz")).something argh, aaahaa
+ 42
+ end
+end
+
+class get_the_fuck("out")::Of::My
+ def parser_definition
+ ruby!
+ end
+end