Преглед изворни кода

Same as r275 except for Python.

kenton@google.com пре 16 година
родитељ
комит
eef5f8396d

+ 3 - 1
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()

+ 7 - 1
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.')