Ignore:
Timestamp:
04/16/06 19:45:21 (9 years ago)
Author:
xi
Message:

Refactor resolver.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pyyaml/trunk/lib/yaml/serializer.py

    r136 r137  
    5252            version=self.use_version, tags=self.use_tags)) 
    5353        self.anchor_node(node) 
    54         self.serialize_node(node) 
     54        self.serialize_node(node, None, None) 
    5555        self.emit(DocumentEndEvent(explicit=self.use_explicit_end)) 
    5656        self.serialized_nodes = {} 
     
    7676        return self.ANCHOR_TEMPLATE % self.last_anchor_id 
    7777 
    78     def serialize_node(self, node): 
     78    def serialize_node(self, node, parent, index): 
    7979        alias = self.anchors[node] 
    8080        if node in self.serialized_nodes: 
     
    8282        else: 
    8383            self.serialized_nodes[node] = True 
     84            self.descend_resolver(parent, index) 
    8485            if isinstance(node, ScalarNode): 
    85                 detected_tag = self.detect(node.value) 
    86                 implicit = (node.tag == self.detect(node.value) 
    87                         or (node.tag == self.DEFAULT_SCALAR_TAG 
    88                             and detected_tag is None)) 
     86                detected_tag = self.resolve(ScalarNode, node.value, (True, False)) 
     87                default_tag = self.resolve(ScalarNode, node.value, (False, True)) 
     88                implicit = (node.tag == detected_tag), (node.tag == default_tag) 
    8989                self.emit(ScalarEvent(alias, node.tag, implicit, node.value, 
    9090                    style=node.style)) 
    9191            elif isinstance(node, SequenceNode): 
    92                 # TODO: 
    93                 # 1) Check the current path in the Resolver. 
    94                 # 2) Add the implicit flag to the SequenceStartEvent and 
    95                 # MappingStartEvent. 
    96                 tag = node.tag 
    97                 if tag == self.DEFAULT_SEQUENCE_TAG and not self.canonical: 
    98                     tag = None 
    99                 self.emit(SequenceStartEvent(alias, tag, 
     92                implicit = (node.tag 
     93                            == self.resolve(SequenceNode, node.value, True)) 
     94                self.emit(SequenceStartEvent(alias, node.tag, implicit, 
    10095                    flow_style=node.flow_style)) 
     96                index = 0 
    10197                for item in node.value: 
    102                     self.serialize_node(item) 
     98                    self.serialize_node(item, node, index) 
     99                    index += 1 
    103100                self.emit(SequenceEndEvent()) 
    104101            elif isinstance(node, MappingNode): 
    105                 tag = node.tag 
    106                 if tag == self.DEFAULT_MAPPING_TAG and not self.canonical: 
    107                     tag = None 
    108                 self.emit(MappingStartEvent(alias, tag, 
     102                implicit = (node.tag 
     103                            == self.resolve(MappingNode, node.value, True)) 
     104                self.emit(MappingStartEvent(alias, node.tag, implicit, 
    109105                    flow_style=node.flow_style)) 
    110106                if hasattr(node.value, 'keys'): 
    111107                    for key in node.value.keys(): 
    112                         self.serialize_node(key) 
    113                         self.serialize_node(node.value[key]) 
     108                        self.serialize_node(key, node, None) 
     109                        self.serialize_node(node.value[key], node, key) 
    114110                else: 
    115111                    for key, value in node.value: 
    116                         self.serialize_node(key) 
    117                         self.serialize_node(value) 
     112                        self.serialize_node(key, node, None) 
     113                        self.serialize_node(value, node, key) 
    118114                self.emit(MappingEndEvent()) 
     115            self.ascend_resolver() 
    119116 
Note: See TracChangeset for help on using the changeset viewer.