summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pygments/lexers/shell.py7
-rw-r--r--tests/test_shell.py19
2 files changed, 19 insertions, 7 deletions
diff --git a/pygments/lexers/shell.py b/pygments/lexers/shell.py
index 097ca624..e65fbcb5 100644
--- a/pygments/lexers/shell.py
+++ b/pygments/lexers/shell.py
@@ -40,8 +40,8 @@ class BashLexer(RegexLexer):
'root': [
include('basic'),
(r'`', String.Backtick, 'backticks'),
- include('interp'),
include('data'),
+ include('interp'),
],
'interp': [
(r'\$\(\(', Keyword, 'math'),
@@ -71,7 +71,8 @@ class BashLexer(RegexLexer):
'data': [
(r'(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\$])*"', String.Double),
(r'"', String.Double, 'string'),
- (r"(?s)\$?'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
+ (r"(?s)\$'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
+ (r"(?s)'.*?'", String.Single),
(r';', Punctuation),
(r'&', Punctuation),
(r'\|', Punctuation),
@@ -82,7 +83,7 @@ class BashLexer(RegexLexer):
],
'string': [
(r'"', String.Double, '#pop'),
- (r'(\\\\|\\[0-7]+|\\[\w\W]|[^"\\$])+', String.Double),
+ (r'(?s)(\\\\|\\[0-7]+|\\.|[^"\\$])+', String.Double),
include('interp'),
],
'curly': [
diff --git a/tests/test_shell.py b/tests/test_shell.py
index ffcf2a69..eb09e8d1 100644
--- a/tests/test_shell.py
+++ b/tests/test_shell.py
@@ -25,12 +25,12 @@ class BashTest(unittest.TestCase):
(Token.Name.Builtin, u'echo'),
(Token.Text, u' '),
(Token.Literal.String.Double, u'"'),
- (Token.Keyword, u'${'),
+ (Token.String.Interpol, u'${'),
(Token.Name.Variable, u'a'),
(Token.Punctuation, u'//['),
(Token.Literal.String.Double, u'"b"'),
(Token.Punctuation, u']/'),
- (Token.Keyword, u'}'),
+ (Token.String.Interpol, u'}'),
(Token.Literal.String.Double, u'"'),
(Token.Text, u'\n'),
]
@@ -41,12 +41,23 @@ class BashTest(unittest.TestCase):
tokens = [
(Token.Name.Builtin, u'echo'),
(Token.Text, u' '),
- (Token.Keyword, u'${'),
+ (Token.String.Interpol, u'${'),
(Token.Name.Variable, u'a'),
(Token.Punctuation, u'//['),
(Token.Literal.String.Escape, u'\\"'),
(Token.Punctuation, u']/'),
- (Token.Keyword, u'}'),
+ (Token.String.Interpol, u'}'),
(Token.Text, u'\n'),
]
self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
+
+ def testParsedSingle(self):
+ fragment = u"a=$'abc\\''\n"
+ tokens = [
+ (Token.Name.Variable, u'a'),
+ (Token.Operator, u'='),
+ (Token.Literal.String.Single, u"$'abc\\''"),
+ (Token.Text, u'\n'),
+ ]
+ self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
+