aboutsummaryrefslogtreecommitdiffhomepage
path: root/python/google/protobuf
diff options
context:
space:
mode:
authorGravatar kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-12-23 01:32:45 +0000
committerGravatar kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-12-23 01:32:45 +0000
commiteef5f8396dd527c17ab7e419ca8781052031d05d (patch)
tree037edb4d4c12cc8e2c94a9c0ac765b89035ce71b /python/google/protobuf
parent35d2f017a7a685d700a8899d06d709cbffaaa885 (diff)
Same as r275 except for Python.
Diffstat (limited to 'python/google/protobuf')
-rwxr-xr-xpython/google/protobuf/internal/text_format_test.py4
-rwxr-xr-xpython/google/protobuf/text_format.py8
2 files changed, 10 insertions, 2 deletions
diff --git a/python/google/protobuf/internal/text_format_test.py b/python/google/protobuf/internal/text_format_test.py
index 0208139e..6d46f7e4 100755
--- a/python/google/protobuf/internal/text_format_test.py
+++ b/python/google/protobuf/internal/text_format_test.py
@@ -191,7 +191,8 @@ class TextFormatTest(unittest.TestCase):
'repeated_double: 1.23e+22\n'
'repeated_double: 1.23e-18\n'
'repeated_string: \n'
- '\"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\\"\"\n')
+ '\"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\\"\"\n'
+ 'repeated_string: "foo" \'corge\' "grault"')
text_format.Merge(text, message)
self.assertEqual(-9223372036854775808, message.repeated_int64[0])
@@ -201,6 +202,7 @@ class TextFormatTest(unittest.TestCase):
self.assertEqual(1.23e-18, message.repeated_double[2])
self.assertEqual(
'\000\001\a\b\f\n\r\t\v\\\'\"', message.repeated_string[0])
+ self.assertEqual('foocorgegrault', message.repeated_string[1])
def testMergeUnknownField(self):
message = unittest_pb2.TestAllTypes()
diff --git a/python/google/protobuf/text_format.py b/python/google/protobuf/text_format.py
index 889aa836..c5713b63 100755
--- a/python/google/protobuf/text_format.py
+++ b/python/google/protobuf/text_format.py
@@ -298,7 +298,7 @@ class _Tokenizer(object):
'[a-zA-Z_][0-9a-zA-Z_+-]*|' # an identifier
'[0-9+-][0-9a-zA-Z_.+-]*|' # a number
'\"([^\"\n\\\\]|\\\\.)*(\"|\\\\?$)|' # a double-quoted string
- '\'([^\"\n\\\\]|\\\\.)*(\'|\\\\?$)') # a single-quoted string
+ '\'([^\'\n\\\\]|\\\\.)*(\'|\\\\?$)') # a single-quoted string
_IDENTIFIER = re.compile('\w+')
_INTEGER_CHECKERS = [type_checkers.Uint32ValueChecker(),
type_checkers.Int32ValueChecker(),
@@ -530,6 +530,12 @@ class _Tokenizer(object):
Raises:
ParseError: If a byte array value couldn't be consumed.
"""
+ list = [self.ConsumeSingleByteString()]
+ while len(self.token) > 0 and self.token[0] in ('\'', '"'):
+ list.append(self.ConsumeSingleByteString())
+ return "".join(list)
+
+ def ConsumeSingleByteString(self):
text = self.token
if len(text) < 1 or text[0] not in ('\'', '"'):
raise self._ParseError('Exptected string.')