Changeset 331 for pyyaml/trunk/ext/_yaml.pyx
- Timestamp:
- 12/29/08 18:21:43 (4 years ago)
- File:
-
- 1 edited
-
pyyaml/trunk/ext/_yaml.pyx (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pyyaml/trunk/ext/_yaml.pyx
r310 r331 252 252 253 253 def __init__(self, stream): 254 cdef is_readable 254 255 if yaml_parser_initialize(&self.parser) == 0: 255 256 raise MemoryError 256 257 self.parsed_event.type = YAML_NO_EVENT 257 if hasattr(stream, 'read'): 258 is_readable = 1 259 try: 260 stream.read 261 except AttributeError: 262 is_readable = 0 263 if is_readable: 258 264 self.stream = stream 259 265 try: … … 358 364 encoding = None 359 365 if token.data.stream_start.encoding == YAML_UTF8_ENCODING: 360 encoding = "utf-8"366 encoding = u"utf-8" 361 367 elif token.data.stream_start.encoding == YAML_UTF16LE_ENCODING: 362 encoding = "utf-16-le"368 encoding = u"utf-16-le" 363 369 elif token.data.stream_start.encoding == YAML_UTF16BE_ENCODING: 364 encoding = "utf-16-be"370 encoding = u"utf-16-be" 365 371 return StreamStartToken(start_mark, end_mark, encoding) 366 372 elif token.type == YAML_STREAM_END_TOKEN: 367 373 return StreamEndToken(start_mark, end_mark) 368 374 elif token.type == YAML_VERSION_DIRECTIVE_TOKEN: 369 return DirectiveToken( "YAML",375 return DirectiveToken(u"YAML", 370 376 (token.data.version_directive.major, 371 377 token.data.version_directive.minor), 372 378 start_mark, end_mark) 373 379 elif token.type == YAML_TAG_DIRECTIVE_TOKEN: 374 return DirectiveToken("TAG", 375 (token.data.tag_directive.handle, 376 token.data.tag_directive.prefix), 380 handle = PyUnicode_DecodeUTF8(token.data.tag_directive.handle, 381 strlen(token.data.tag_directive.handle), 'strict') 382 prefix = PyUnicode_DecodeUTF8(token.data.tag_directive.prefix, 383 strlen(token.data.tag_directive.prefix), 'strict') 384 return DirectiveToken(u"TAG", (handle, prefix), 377 385 start_mark, end_mark) 378 386 elif token.type == YAML_DOCUMENT_START_TOKEN: … … 871 879 parser = <CParser>data 872 880 value = parser.stream.read(size) 881 if PyUnicode_CheckExact(value) != 0: 882 value = PyUnicode_AsUTF8String(value) 873 883 if PyString_CheckExact(value) == 0: 874 884 raise TypeError("a string value is expected") … … 895 905 cdef int last_alias_id 896 906 cdef int closed 907 cdef int decode_output 897 908 898 909 def __init__(self, stream, canonical=None, indent=None, width=None, … … 902 913 raise MemoryError 903 914 self.stream = stream 915 self.decode_output = 1 916 try: 917 stream.encoding 918 except AttributeError: 919 self.decode_output = 0 904 920 yaml_emitter_set_output(&self.emitter, output_handler, <void *>self) 905 921 if canonical is not None: … … 1217 1233 if self.anchors[node] is None: 1218 1234 self.last_alias_id = self.last_alias_id+1 1219 self.anchors[node] = "id%03d" % self.last_alias_id1235 self.anchors[node] = u"id%03d" % self.last_alias_id 1220 1236 else: 1221 1237 self.anchors[node] = None … … 1246 1262 anchor = NULL 1247 1263 if anchor_object is not None: 1248 anchor = PyString_AS_STRING( anchor_object)1264 anchor = PyString_AS_STRING(PyUnicode_AsUTF8String(anchor_object)) 1249 1265 if node in self.serialized_nodes: 1250 1266 if yaml_alias_event_initialize(&event, anchor) == 0: … … 1358 1374 cdef CEmitter emitter 1359 1375 emitter = <CEmitter>data 1360 value = PyString_FromStringAndSize(buffer, size) 1376 if emitter.decode_output == 0: 1377 value = PyString_FromStringAndSize(buffer, size) 1378 else: 1379 value = PyUnicode_DecodeUTF8(buffer, size, 'strict') 1361 1380 emitter.stream.write(value) 1362 1381 return 1
Note: See TracChangeset
for help on using the changeset viewer.
