diff options
author | Georg Brandl <georg@python.org> | 2014-10-07 11:17:30 +0200 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2014-10-07 11:17:30 +0200 |
commit | 554d80c14d145050512e1c1e9c7f20aa266bca83 (patch) | |
tree | 1c67fc577562a9c0ba13ad539b25b6061a683938 | |
parent | d2aef9093d60c6965d66eed160292ee854c0a4da (diff) | |
download | pygments-554d80c14d145050512e1c1e9c7f20aa266bca83.tar.gz |
Closes #1010: recognize string interpolation in Scala lexer.
-rw-r--r-- | pygments/lexers/jvm.py | 13 | ||||
-rw-r--r-- | tests/examplefiles/Errors.scala | 5 |
2 files changed, 18 insertions, 0 deletions
diff --git a/pygments/lexers/jvm.py b/pygments/lexers/jvm.py index 19f0ded9..34198530 100644 --- a/pygments/lexers/jvm.py +++ b/pygments/lexers/jvm.py @@ -268,6 +268,8 @@ class ScalaLexer(RegexLexer): (r'""".*?"""(?!")', String), (r'"(\\\\|\\"|[^"])*"', String), (r"'\\.'|'[^\\]'|'\\u[0-9a-fA-F]{4}'", String.Char), + (r'[fs]"', String, 'interpstring'), # interpolated strings + (r'raw"(\\\\|\\"|[^"])*"', String), # raw strings # (ur'(\.)(%s|%s|`[^`]+`)' % (idrest, op), bygroups(Operator, # Name.Attribute)), (idrest, Name), @@ -320,6 +322,17 @@ class ScalaLexer(RegexLexer): 'import': [ (u'(%s|\\.)+' % idrest, Name.Namespace, '#pop') ], + 'interpstring': [ + (r'[^"$\\]', String), + (r'\$\{', String.Interpol, 'interpbrace'), + (r'\\.', String), + (r'"', String, '#pop'), + ], + 'interpbrace': [ + (r'\}', String.Interpol, '#pop'), + (r'\{', String.Interpol, '#push'), + include('root'), + ] } diff --git a/tests/examplefiles/Errors.scala b/tests/examplefiles/Errors.scala index 67198c05..7af70280 100644 --- a/tests/examplefiles/Errors.scala +++ b/tests/examplefiles/Errors.scala @@ -11,6 +11,11 @@ String val foo_+ = "foo plus" val foo_⌬⌬ = "double benzene" + // Test some interpolated strings + val mu = s"${if (true) "a:b" else "c" {with "braces"}}" + val mu2 = f"${if (true) "a:b" else "c" {with "braces"}}" + val raw = raw"a raw\nstring\"with escaped quotes" + def main(argv: Array[String]) { println(⌘.interface + " " + foo_+ + " " + foo_⌬⌬ ) } |