4
4
ParseException ,
5
5
)
6
6
from datetime import datetime
7
- from re import sub
7
+ import re
8
8
import sys
9
9
10
10
PY3 = sys .version_info [0 ] == 3
@@ -22,8 +22,8 @@ def delimitedList(type_, delimiter=","):
22
22
23
23
class TOMLParser (object ):
24
24
def __init__ (self ):
25
- key_name = Word (sub (r"[\[\]=\"]" , "" , printables ))
26
- kgrp_name = Word (sub (r"[\[\]\.]" , "" , printables ))
25
+ key_name = Word (re . sub (r"[\[\]=\"]" , "" , printables ))
26
+ kgrp_name = Word (re . sub (r"[\[\]\.]" , "" , printables ))
27
27
basic_int = Optional ("-" ) + ("0" | Word (nums ))
28
28
29
29
types = dict (
@@ -53,7 +53,13 @@ def __init__(self):
53
53
keyvalue .setParseAction (self ._parse_keyvalue )
54
54
keygroup_namespace .setParseAction (self ._parse_keygroup_namespace )
55
55
56
- _parse_string = lambda self , tok : unescape (tok [0 ])
56
+ def _parse_string (self , src , loc , toks ):
57
+ match = re .search (r"(?<!\\)(\\[^0tnr\"\\])" , toks [0 ])
58
+ if match :
59
+ raise ParseException ("Reserved escape sequence \" %s\" " %
60
+ match .group (), loc )
61
+ return unescape (toks [0 ])
62
+
57
63
_parse_integer = lambda self , tok : int (tok [0 ])
58
64
_parse_float = lambda self , tok : float (tok [0 ])
59
65
_parse_boolean = lambda self , tok : bool (tok [0 ])
0 commit comments