Changeset 2990:1f06b2a19f01 in livinglogic.python.xist for src/ll/xist/scripts/dtd2xsc.py

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:
1 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":