Changeset 2990:1f06b2a19f01 in livinglogic.python.xist

Show
Ignore:
Timestamp:
09/25/07 18:22:09 (12 years ago)
Author:
Walter Doerwald <walter@…>
Children:
2991:4ea5661a3e74, 4090:c883a22d11bd
Branch:
newparser
Message:

Try to guess the namespace name of none is specified. Fix tests.

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • src/ll/xist/scripts/dtd2xsc.py

    r2989 r2990  
    2828 
    2929 
     30def getxmlns(dtd): 
     31    """ 
     32    Extract the value of all fixed <lit>xmlns</lit> attributes 
     33    """ 
     34    found = set() 
     35    for elemname in dtd.get_elements(): 
     36        element = dtd.get_elem(elemname) 
     37        for attrname in element.get_attr_list(): 
     38            attr = element.get_attr(attrname) 
     39            if attrname=="xmlns" or u":" in attrname: 
     40                if attr.decl=="#FIXED": 
     41                    found.add(attr.default) 
     42                    continue # skip a namespace declaration 
     43    return found 
     44 
     45 
    3046def dtd2xnd(dtd, xmlns=None): 
    3147    """ 
     
    3854    ns = xnd.Module() 
    3955 
    40     foundxmlns = set() # collects all the values of fixed xmlns attributes 
     56    if xmlns is None: 
     57        # try to guess the namespace name from the dtd 
     58        xmlns = getxmlns(dtd) 
     59        if len(xmlns) == 1: 
     60            xmlns = iter(xmlns).next() 
     61        else: 
     62            xmlns = None 
    4163 
    4264    # Add element info 
     
    5375            for attrname in attrs: 
    5476                dtd_a = dtd_e.get_attr(attrname) 
    55                 if attrname=="xmlns": 
    56                     if dtd_a.decl=="#FIXED": 
    57                         foundxmlns.add(dtd_a.default) 
    58                     continue # skip a namespace declaration 
    59                 elif u":" in attrname: 
    60                     continue # skip global attributes 
     77                if attrname=="xmlns" or u":" in attrname: 
     78                    continue # skip namespace declarations and global attributes 
    6179                values = [] 
    6280                if dtd_a.type == "ID": 
  • test/test_dtd2xsc.py

    r2989 r2990  
    5252    ns = dtd2mod(dtdstring) 
    5353 
    54     assert ns.xmlns == "http://xmlns.foo.com/foo" 
     54    assert ns.foo.xmlns == "http://xmlns.foo.com/foo" 
    5555    assert isinstance(ns.foo.model, sims.Elements) 
    5656    assert len(ns.foo.model.elements) == 1 
     
    114114    """ 
    115115    ns = dtd2mod(dtdstring, '"') 
    116     assert ns.xmlns == '"' 
     116    assert ns.foo.xmlns == '"' 
    117117 
    118118 
     
    122122    """ 
    123123    ns = dtd2mod(dtdstring, u'\u3042') 
    124     assert ns.xmlns == u'\u3042' 
     124    assert ns.foo.xmlns == u'\u3042' 
    125125 
    126126 
     
    130130    """ 
    131131    ns = dtd2mod(dtdstring, u'"\u3042"') 
    132     assert ns.xmlns == u'"\u3042"' 
     132    assert ns.foo.xmlns == u'"\u3042"' 
    133133 
    134134 
     
    169169    > 
    170170    """ 
    171     mod = dtd2mod(dtdstring, "foo", shareattrs=False) 
    172     assert issubclass(mod.foo.Attrs.baz, mod.baz.baz) 
    173     assert issubclass(mod.bar.Attrs.baz, mod.baz.baz) 
    174     assert not hasattr(mod, "baz2") 
    175     assert not mod.foo.Attrs.baz2.required 
    176     assert mod.bar.Attrs.baz2.required 
     171    ns = dtd2mod(dtdstring, "foo", shareattrs=False) 
     172    assert issubclass(ns.foo.Attrs.baz, ns.baz.baz) 
     173    assert issubclass(ns.bar.Attrs.baz, ns.baz.baz) 
     174    assert not hasattr(ns, "baz2") 
     175    assert not ns.foo.Attrs.baz2.required 
     176    assert ns.bar.Attrs.baz2.required 
    177177 
    178178 
     
    190190    > 
    191191    """ 
    192     mod = dtd2mod(dtdstring, "foo", shareattrs=True) 
    193     assert issubclass(mod.foo.Attrs.baz, mod.baz.baz) 
    194     assert issubclass(mod.bar.Attrs.baz, mod.baz.baz) 
     192    ns = dtd2mod(dtdstring, "foo", shareattrs=True) 
     193    assert issubclass(ns.foo.Attrs.baz, ns.baz.baz) 
     194    assert issubclass(ns.bar.Attrs.baz, ns.baz.baz) 
    195195 
    196     assert not mod.foo.Attrs.bazz.required 
    197     assert mod.bar.Attrs.bazz.required 
     196    assert not ns.foo.Attrs.bazz.required 
     197    assert ns.bar.Attrs.bazz.required