summaryrefslogtreecommitdiff
path: root/pygments/lexers/javascript.py
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2020-12-17 07:35:48 +0100
committerGeorg Brandl <georg@python.org>2020-12-17 07:39:37 +0100
commit7958cd6c53215ac2caeb6812aaeab5e8029a43ad (patch)
treed47a0a2f5cf93890659db4bc254112bdedbe6caf /pygments/lexers/javascript.py
parenta50791866169e94bb891c9e069c79f69a5189116 (diff)
downloadpygments-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.py29
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.