Changeset 4295:46c7e07b95af in livinglogic.python.xist for src/ll/xist/scripts/dtd2xsc.py

Show
Ignore:
Timestamp:
01/21/11 16:24:54 (9 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Internal refactoring of ll.xist.xnd.

All options are now passed to Module.init.

Adding stuff to the module (and attributes to an element) is done with +=.

Files:
1 modified

Legend:

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

    r4289 r4295  
    2525 
    2626 
    27 import sys, os.path, argparse, contextlib 
     27import sys, os.path, argparse, cStringIO 
    2828 
    2929try: 
     
    5555 
    5656 
    57 def adddtd2xnd(ns, dtd, xmlns=None, model="simple", duplicates="reject"): 
     57def adddtd2xnd(ns, dtd): 
    5858    """ 
    5959    Append DTD information from :var:`dtd` to the :class:`xnd.Module` object 
     
    6363    dtd = dtdparser.load_dtd_string(dtd) 
    6464 
    65     if xmlns is None: 
    66         # try to guess the namespace name from the dtd 
    67         xmlns = getxmlns(dtd) 
    68         if len(xmlns) == 1: 
    69             xmlns = iter(xmlns).next() 
    70         else: 
    71             xmlns = None 
     65    # try to guess the namespace name from the dtd 
     66    xmlns = getxmlns(dtd) 
     67    if len(xmlns) == 1: 
     68        xmlns = iter(xmlns).next() 
     69    else: 
     70        xmlns = None 
    7271 
    7372    # Add element info 
     
    101100                else: 
    102101                    required = None 
    103                 a = xnd.Attr(name=attrname, type=type, default=default, required=required, values=values) 
    104                 e.attrs[a.name] = a 
    105         e.add(ns, duplicates=duplicates) 
     102                e += xnd.Attr(name=attrname, type=type, default=default, required=required, values=values) 
     103        ns += e 
    106104 
    107105    # Iterate through the elements a second time and add model information 
     
    140138                    modeltype = "sims.NoElementsOrText" 
    141139        e = ns.elements[(elemname, xmlns)] 
    142         if model == "simple": 
     140        if ns.model == "simple": 
    143141            modeltype = modeltype == "sims.Empty" 
    144142            modelargs = None 
     
    156154                pass 
    157155            else: 
    158                 e = xnd.CharRef(entname, codepoint=ord(unicode(ent[0])[0])) 
    159                 e.add(ns, duplicates=duplicates) 
     156                ns += xnd.CharRef(entname, codepoint=ord(unicode(ent[0])[0])) 
    160157 
    161158 
    162 def urls2xnd(urls, xmlns, shareattrs, duplicates): 
    163     ns = xnd.Module() 
     159def urls2xnd(urls, shareattrs=None, **kwargs): 
     160    ns = xnd.Module(**kwargs) 
    164161    with url.Context(): 
    165162        for u in urls: 
    166             with contextlib.closing(u.openread()) as f: 
    167                 adddtd2xnd(ns, f.read(), xmlns, duplicates) 
     163            if isinstance(u, url.URL): 
     164                u = u.openread() 
     165            elif isinstance(u, str): 
     166                u = cStringIO.StringIO(u) 
     167            adddtd2xnd(ns, u.read()) 
    168168 
    169169    if shareattrs=="dupes": 
     
    174174 
    175175 
    176 def dtd2xnd(dtd, xmlns=None, duplicates="reject"): 
    177     ns = xnd.Module() 
    178     adddtd2xnd(ns, dtd, xmlns, duplicates) 
    179     return ns 
    180  
    181  
    182176def main(args=None): 
    183177    p = argparse.ArgumentParser(description="Convert DTDs to XIST namespace (on stdout)") 
    184178    p.add_argument("urls", metavar="urls", type=url.URL, help="ULRs of DTDs to be parsed", nargs="+") 
    185     p.add_argument("-x", "--xmlns", dest="xmlns", metavar="NAME", help="the namespace name for this module") 
     179    p.add_argument("-x", "--xmlns", dest="defaultxmlns", metavar="NAME", help="the namespace name for this module") 
    186180    p.add_argument("-s", "--shareattrs", dest="shareattrs", help="Should identical attributes be shared among elements? (default: %(default)s)", choices=("none", "dupes", "all"), default="dupes") 
    187181    p.add_argument("-m", "--model", dest="model", default="once", help="Add sims information to the namespace (default: %(default)s)", choices=("no", "simple", "fullall", "fullonce")) 
     
    190184 
    191185    args = p.parse_args(args) 
    192     print urls2xnd(args.urls, args.xmlns, args.shareattrs, args.model, args.duplicates).aspy(model=args.model, defaults=args.defaults) 
     186    print urls2xnd(args.urls, **args.__dict__) 
    193187 
    194188