Ignore:
Timestamp:
04/10/06 20:34:16 (8 years ago)
Author:
xi
Message:

Implement yaml.dump().

File:
1 edited

Legend:

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

    r132 r133  
    11 
    2 __all__ = ['BaseResolver', 'Resolver', 'ResolverError'] 
     2__all__ = ['Resolver', 'ResolverError'] 
    33 
    44from error import MarkedYAMLError 
     5from detector import Detector 
    56from nodes import * 
    67 
     
    1112    pass 
    1213 
    13 class BaseResolver: 
     14class Resolver(Detector): 
    1415 
    1516    DEFAULT_SCALAR_TAG = u'tag:yaml.org,2002:str' 
     
    5859    def resolve_scalar(self, path, node): 
    5960        if node.tag is None and node.implicit: 
    60             node.tag = self.detect_scalar(node.value) 
     61            node.tag = self.detect(node.value) 
    6162        if node.tag is None or node.tag == u'!': 
    6263            node.tag = self.DEFAULT_SCALAR_TAG 
     
    7071            node.tag = self.DEFAULT_MAPPING_TAG 
    7172 
    72     def detect_scalar(self, value): 
    73         if value == u'': 
    74             detectors = self.yaml_detectors.get(u'', []) 
    75         else: 
    76             detectors = self.yaml_detectors.get(value[0], []) 
    77         detectors += self.yaml_detectors.get(None, []) 
    78         for tag, regexp in detectors: 
    79             if regexp.match(value): 
    80                 return tag 
    81  
    82     def add_detector(cls, tag, regexp, first): 
    83         if not 'yaml_detectors' in cls.__dict__: 
    84             cls.yaml_detectors = cls.yaml_detectors.copy() 
    85         for ch in first: 
    86             cls.yaml_detectors.setdefault(ch, []).append((tag, regexp)) 
    87     add_detector = classmethod(add_detector) 
    88  
    89     yaml_detectors = {} 
    90  
    91 class Resolver(BaseResolver): 
    92     pass 
    93  
    94 Resolver.add_detector( 
    95         u'tag:yaml.org,2002:bool', 
    96         re.compile(ur'''^(?:yes|Yes|YES|n|N|no|No|NO 
    97                     |true|True|TRUE|false|False|FALSE 
    98                     |on|On|ON|off|Off|OFF)$''', re.X), 
    99         list(u'yYnNtTfFoO')) 
    100  
    101 Resolver.add_detector( 
    102         u'tag:yaml.org,2002:float', 
    103         re.compile(ur'''^(?:[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*(?:[eE][-+][0-9]+)? 
    104                     |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]* 
    105                     |[-+]?\.(?:inf|Inf|INF) 
    106                     |\.(?:nan|NaN|NAN))$''', re.X), 
    107         list(u'-+0123456789.')) 
    108  
    109 Resolver.add_detector( 
    110         u'tag:yaml.org,2002:int', 
    111         re.compile(ur'''^(?:[-+]?0b[0-1_]+ 
    112                     |[-+]?0[0-7_]+ 
    113                     |[-+]?(?:0|[1-9][0-9_]*) 
    114                     |[-+]?0x[0-9a-fA-F_]+ 
    115                     |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X), 
    116         list(u'-+0123456789')) 
    117  
    118 Resolver.add_detector( 
    119         u'tag:yaml.org,2002:merge', 
    120         re.compile(ur'^(?:<<)$'), 
    121         ['<']) 
    122  
    123 Resolver.add_detector( 
    124         u'tag:yaml.org,2002:null', 
    125         re.compile(ur'''^(?: ~ 
    126                     |null|Null|NULL 
    127                     | )$''', re.X), 
    128         [u'~', u'n', u'N', u'']) 
    129  
    130 Resolver.add_detector( 
    131         u'tag:yaml.org,2002:timestamp', 
    132         re.compile(ur'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] 
    133                     |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]? 
    134                      (?:[Tt]|[ \t]+)[0-9][0-9]? 
    135                      :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)? 
    136                      (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X), 
    137         list(u'0123456789')) 
    138  
    139 Resolver.add_detector( 
    140         u'tag:yaml.org,2002:value', 
    141         re.compile(ur'^(?:=)$'), 
    142         ['=']) 
    143  
    144 # The following detector is only for documentation purposes. It cannot work 
    145 # because plain scalars cannot start with '!', '&', or '*'. 
    146 Resolver.add_detector( 
    147         u'tag:yaml.org,2002:yaml', 
    148         re.compile(ur'^(?:!|&|\*)$'), 
    149         list(u'!&*')) 
    150  
Note: See TracChangeset for help on using the changeset viewer.