Ignore:
Timestamp:
02/22/06 19:18:34 (9 years ago)
Author:
xi
Message:

Working on Constructor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pyyaml3000/lib/yaml/resolver.py

    r54 r55  
    11 
    22from nodes import * 
     3 
     4import re 
    35 
    46class BaseResolver: 
     
    4042            self.resolve_sequence(path, node) 
    4143            for index in range(len(node.value)): 
    42                 self.resolve_node(path+[node, index], node.value[index]) 
     44                self.resolve_node(path+[(node, index)], node.value[index]) 
    4345        elif isinstance(node, MappingNode): 
    4446            self.resolve_mapping(path, node) 
    45             for key, value in node.value: 
     47            for key in node.value: 
    4648                self.resolve_node(path+[node, None], key) 
    47                 self.resolve_node(path+[node, key], value) 
     49                self.resolve_node(path+[node, key], node.value[key]) 
    4850 
    4951    def resolve_scalar(self, path, node): 
     
    6264 
    6365    def detect_scalar(self, value): 
    64         return None 
     66        if value == u'': 
     67            detectors = self.yaml_detectors.get(u'', []) 
     68        else: 
     69            detectors = self.yaml_detectors.get(value[0], []) 
     70        detectors += self.yaml_detectors.get(None, []) 
     71        for tag, regexp in detectors: 
     72            if regexp.match(value): 
     73                return tag 
     74 
     75    def add_detector(cls, tag, regexp, first): 
     76        if not 'yaml_detectors' in cls.__dict__: 
     77            cls.yaml_detectors = cls.yaml_detectors.copy() 
     78        for ch in first: 
     79            cls.yaml_detectors.setdefault(ch, []).append((tag, regexp)) 
     80    add_detector = classmethod(add_detector) 
     81 
     82    yaml_detectors = {} 
    6583 
    6684class Resolver(BaseResolver): 
    6785    pass 
    6886 
     87Resolver.add_detector( 
     88        u'tag:yaml.org,2002:bool', 
     89        re.compile(ur'''^(?:y|Y|yes|Yes|YES|n|N|no|No|NO 
     90                    |true|True|TRUE|false|False|FALSE 
     91                    |on|On|ON|off|Off|OFF)$''', re.X), 
     92        list(u'yYnNtTfFoO')) 
     93 
     94Resolver.add_detector( 
     95        u'tag:yaml.org,2002:float', 
     96        re.compile(ur'''^(?:[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*(?:[eE][-+][0-9]+)? 
     97                    |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]* 
     98                    |[-+]?\.(?:inf|Inf|INF) 
     99                    |\.(?:nan|NaN|NAN))$''', re.X), 
     100        list(u'-+0123456789.')) 
     101 
     102Resolver.add_detector( 
     103        u'tag:yaml.org,2002:int', 
     104        re.compile(ur'''^(?:[-+]?0b[0-1_]+ 
     105                    |[-+]?0[0-7_]+ 
     106                    |[-+]?(?:0|[1-9][0-9_]*) 
     107                    |[-+]?0x[0-9a-fA-F_]+ 
     108                    |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X), 
     109        list(u'-+0123456789')) 
     110 
     111Resolver.add_detector( 
     112        u'tag:yaml.org,2002:merge', 
     113        re.compile(ur'^(?:<<)$'), 
     114        ['<']) 
     115 
     116Resolver.add_detector( 
     117        u'tag:yaml.org,2002:null', 
     118        re.compile(ur'''^(?: ~ 
     119                    |null|Null|NULL 
     120                    | )$''', re.X), 
     121        [u'~', u'n', u'N', u'']) 
     122 
     123Resolver.add_detector( 
     124        u'tag:yaml.org,2002:timestamp', 
     125        re.compile(ur'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] 
     126                    |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]? 
     127                     (?:[Tt]|[ \t]+)[0-9][0-9]? 
     128                     :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)? 
     129                     (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X), 
     130        list(u'0123456789')) 
     131 
     132Resolver.add_detector( 
     133        u'tag:yaml.org,2002:value', 
     134        re.compile(ur'^(?:=)$'), 
     135        ['=']) 
     136 
Note: See TracChangeset for help on using the changeset viewer.