Skip to content

Commit 2dad7c0

Browse files
committed
Fix quoted string containing comment character
The comment character ('#' or ';') included in a quoted value does not be interpreted as beginning of comment but as a character of the quoted value.
1 parent 2b915b9 commit 2dad7c0

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

pygments/lexers/configs.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class IniLexer(RegexLexer):
4444
(r'\s+', Whitespace),
4545
(r'[;#].*', Comment.Single),
4646
(r'(\[.*?\])([ \t]*)$', bygroups(Keyword, Whitespace)),
47+
(r'''(.*?)([  \t]*)([=:])([ \t]*)(["'])''',
48+
bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String),
49+
"quoted_value"),
4750
(r'(.*?)([  \t]*)([=:])([ \t]*)([^;#\n]*)(\\)(\s+)',
4851
bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String,
4952
Text, Whitespace),
@@ -53,6 +56,12 @@ class IniLexer(RegexLexer):
5356
# standalone option, supported by some INI parsers
5457
(r'(.+?)$', Name.Attribute),
5558
],
59+
'quoted_value': [
60+
(r'''([^"'\n]*)(["'])(\s*)''',
61+
bygroups(String, String, Whitespace)),
62+
(r'[;#].*', Comment.Single),
63+
(r'$', String, "#pop"),
64+
],
5665
'value': [ # line continuation
5766
(r'\s+', Whitespace),
5867
(r'(\s*)(.*)(\\)([ \t]*)',
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---input---
2+
[section]
3+
key 1 = "value1"
4+
key 2 = "value2" # comment
5+
key 3 = "value3 ; value 3bis" ; comment
6+
7+
---tokens---
8+
'[section]' Keyword
9+
'\n ' Text.Whitespace
10+
'key 1' Name.Attribute
11+
' ' Text.Whitespace
12+
'=' Operator
13+
' ' Text.Whitespace
14+
'"' Literal.String
15+
'value1' Literal.String
16+
'"' Literal.String
17+
'\n ' Text.Whitespace
18+
'key 2 = ' Literal.String
19+
'"' Literal.String
20+
'value2' Literal.String
21+
'"' Literal.String
22+
' ' Text.Whitespace
23+
'# comment' Comment.Single
24+
'' Literal.String
25+
'\n ' Text.Whitespace
26+
'key 3' Name.Attribute
27+
' ' Text.Whitespace
28+
'=' Operator
29+
' ' Text.Whitespace
30+
'"' Literal.String
31+
'value3 ; value 3bis' Literal.String
32+
'"' Literal.String
33+
' ' Text.Whitespace
34+
'; comment' Comment.Single
35+
'' Literal.String
36+
'\n' Text.Whitespace

0 commit comments

Comments
 (0)