diff options
author | Georg Brandl <georg@python.org> | 2020-12-17 07:35:48 +0100 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2020-12-17 07:39:37 +0100 |
commit | 7958cd6c53215ac2caeb6812aaeab5e8029a43ad (patch) | |
tree | d47a0a2f5cf93890659db4bc254112bdedbe6caf /pygments/lexers/javascript.py | |
parent | a50791866169e94bb891c9e069c79f69a5189116 (diff) | |
download | pygments-git-7958cd6c53215ac2caeb6812aaeab5e8029a43ad.tar.gz |
Fix backtracking string regexes in JavascriptLexer und TypescriptLexer.
fixes #1637
Diffstat (limited to 'pygments/lexers/javascript.py')
-rw-r--r-- | pygments/lexers/javascript.py | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/pygments/lexers/javascript.py b/pygments/lexers/javascript.py index 49bf6d24..d2467ce1 100644 --- a/pygments/lexers/javascript.py +++ b/pygments/lexers/javascript.py @@ -95,10 +95,20 @@ class JavascriptLexer(RegexLexer): r'Error|eval|isFinite|isNaN|isSafeInteger|parseFloat|parseInt|' r'document|this|window)\b', Name.Builtin), (JS_IDENT, Name.Other), - (r'"(\\\\|\\"|[^"])*"', String.Double), - (r"'(\\\\|\\'|[^'])*'", String.Single), + (r'"', String.Double, 'string-double'), + (r"'", String.Single, 'string-single'), (r'`', String.Backtick, 'interp'), ], + 'string-double': [ + (r'\\.', String.Double), + (r'[^\\"]+', String.Double), + (r'"', String.Double, '#pop'), + ], + 'string-single': [ + (r'\\.', String.Single), + (r"[^\\']+", String.Single), + (r"'", String.Single, '#pop'), + ], 'interp': [ (r'`', String.Backtick, '#pop'), (r'\\\\', String.Backtick), @@ -112,7 +122,6 @@ class JavascriptLexer(RegexLexer): (r'\}', String.Interpol, '#pop'), include('root'), ], - # (\\\\|\\`|[^`])*`', String.Backtick), } @@ -522,12 +531,22 @@ class TypeScriptLexer(RegexLexer): (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float), (r'0x[0-9a-fA-F]+', Number.Hex), (r'[0-9]+', Number.Integer), - (r'"(\\\\|\\"|[^"])*"', String.Double), - (r"'(\\\\|\\'|[^'])*'", String.Single), + (r'"', String.Double, 'string-double'), + (r"'", String.Single, 'string-single'), (r'`', String.Backtick, 'interp'), # Match stuff like: Decorators (r'@\w+', Keyword.Declaration), ], + 'string-double': [ + (r'\\.', String.Double), + (r'[^\\"]+', String.Double), + (r'"', String.Double, '#pop'), + ], + 'string-single': [ + (r'\\.', String.Single), + (r"[^\\']+", String.Single), + (r"'", String.Single, '#pop'), + ], # The 'interp*' rules match those in JavascriptLexer. Changes made # there should be reflected here as well. |