Index: pyyaml/trunk/lib/yaml/resolver.py
===================================================================
--- pyyaml/trunk/lib/yaml/resolver.py	(revision 132)
+++ pyyaml/trunk/lib/yaml/resolver.py	(revision 133)
@@ -1,6 +1,7 @@
 
-__all__ = ['BaseResolver', 'Resolver', 'ResolverError']
+__all__ = ['Resolver', 'ResolverError']
 
 from error import MarkedYAMLError
+from detector import Detector
 from nodes import *
 
@@ -11,5 +12,5 @@
     pass
 
-class BaseResolver:
+class Resolver(Detector):
 
     DEFAULT_SCALAR_TAG = u'tag:yaml.org,2002:str'
@@ -58,5 +59,5 @@
     def resolve_scalar(self, path, node):
         if node.tag is None and node.implicit:
-            node.tag = self.detect_scalar(node.value)
+            node.tag = self.detect(node.value)
         if node.tag is None or node.tag == u'!':
             node.tag = self.DEFAULT_SCALAR_TAG
@@ -70,81 +71,2 @@
             node.tag = self.DEFAULT_MAPPING_TAG
 
-    def detect_scalar(self, value):
-        if value == u'':
-            detectors = self.yaml_detectors.get(u'', [])
-        else:
-            detectors = self.yaml_detectors.get(value[0], [])
-        detectors += self.yaml_detectors.get(None, [])
-        for tag, regexp in detectors:
-            if regexp.match(value):
-                return tag
-
-    def add_detector(cls, tag, regexp, first):
-        if not 'yaml_detectors' in cls.__dict__:
-            cls.yaml_detectors = cls.yaml_detectors.copy()
-        for ch in first:
-            cls.yaml_detectors.setdefault(ch, []).append((tag, regexp))
-    add_detector = classmethod(add_detector)
-
-    yaml_detectors = {}
-
-class Resolver(BaseResolver):
-    pass
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:bool',
-        re.compile(ur'''^(?:yes|Yes|YES|n|N|no|No|NO
-                    |true|True|TRUE|false|False|FALSE
-                    |on|On|ON|off|Off|OFF)$''', re.X),
-        list(u'yYnNtTfFoO'))
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:float',
-        re.compile(ur'''^(?:[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*(?:[eE][-+][0-9]+)?
-                    |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*
-                    |[-+]?\.(?:inf|Inf|INF)
-                    |\.(?:nan|NaN|NAN))$''', re.X),
-        list(u'-+0123456789.'))
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:int',
-        re.compile(ur'''^(?:[-+]?0b[0-1_]+
-                    |[-+]?0[0-7_]+
-                    |[-+]?(?:0|[1-9][0-9_]*)
-                    |[-+]?0x[0-9a-fA-F_]+
-                    |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X),
-        list(u'-+0123456789'))
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:merge',
-        re.compile(ur'^(?:<<)$'),
-        ['<'])
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:null',
-        re.compile(ur'''^(?: ~
-                    |null|Null|NULL
-                    | )$''', re.X),
-        [u'~', u'n', u'N', u''])
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:timestamp',
-        re.compile(ur'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
-                    |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
-                     (?:[Tt]|[ \t]+)[0-9][0-9]?
-                     :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)?
-                     (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X),
-        list(u'0123456789'))
-
-Resolver.add_detector(
-        u'tag:yaml.org,2002:value',
-        re.compile(ur'^(?:=)$'),
-        ['='])
-
-# The following detector is only for documentation purposes. It cannot work
-# because plain scalars cannot start with '!', '&', or '*'.
-Resolver.add_detector(
-        u'tag:yaml.org,2002:yaml',
-        re.compile(ur'^(?:!|&|\*)$'),
-        list(u'!&*'))
-
