spielwiese
Last change
on this file since 0d4df5 was
0d4df5,
checked in by Michael Brickenstein <bricken@…>, 18 years ago
|
*bricken: faster, simpler, yeah
git-svn-id: file:///usr/local/Singular/svn/trunk@9004 2c84dea3-7e68-4137-9b89-c4e89433aadc
|
-
Property mode set to
100644
|
File size:
2.6 KB
|
Line | |
---|
1 | import lxml.etree as et |
---|
2 | from objects import * |
---|
3 | |
---|
4 | class OMFromXMLBuilder: |
---|
5 | def buildFromNode(self, node): |
---|
6 | erg=None |
---|
7 | if (node.tag=="OMI"): |
---|
8 | erg=int(node.text) |
---|
9 | if (node.tag=="OMSTR"): |
---|
10 | #print "data", node.text |
---|
11 | erg=node.text |
---|
12 | if (node.tag=="OMB"): |
---|
13 | erg=OMByteArray(base64.decodestring(node.text)) |
---|
14 | if (node.tag=="OMV"): |
---|
15 | name=node.get("name") #node.attributes["name"] |
---|
16 | #print dir(name) |
---|
17 | erg= OMV(name) |
---|
18 | if (node.tag=="OMS"): |
---|
19 | if "cdbase" in node.attrib: |
---|
20 | #FIXME: obtain from ancestors |
---|
21 | cdbase=node.get("cdbase") |
---|
22 | else: |
---|
23 | cdbase=None |
---|
24 | cdname=node.get("cd") |
---|
25 | name=node.get("name") |
---|
26 | #print repr(node) |
---|
27 | #print node.attributes |
---|
28 | #print "cdbase", cdbase |
---|
29 | if cdbase==None: |
---|
30 | cd=OMCD(cdname) |
---|
31 | else: |
---|
32 | cd=OMCD(cdname,cdbase) |
---|
33 | erg=OMS(name,cd) |
---|
34 | if (node.tag=="OMA"): |
---|
35 | children=[self.buildFromNode(c) for c in node] |
---|
36 | erg= OMA(children[0],children[1:]) |
---|
37 | if (node.tag=="OMOBJ"): |
---|
38 | children=[self.buildFromNode(c) for c in node] |
---|
39 | erg= OMOBJ(children) |
---|
40 | if (node.tag=="OMBIND"): |
---|
41 | children=[self.buildFromNode(c) for c in node] |
---|
42 | erg= OMBIND(children[0],children[1:-1],children[-1]) |
---|
43 | if (node.tag=="OMF"): |
---|
44 | if (node.hasAttribute("dec")): |
---|
45 | erg=float(node.getAttribute("dec")) |
---|
46 | else: |
---|
47 | raise NotImplementedError |
---|
48 | |
---|
49 | if (node.tag=="OMR"): |
---|
50 | erg=OMRef(node.get("xref")) |
---|
51 | self.refs.append(erg) |
---|
52 | if (node.tag=="OMATP"): |
---|
53 | children=[self.buildFromNode(c) for c in node] |
---|
54 | assert(len(children)==2) |
---|
55 | erg=OMAttributePair(children[0],children[1]) |
---|
56 | if (node.tag=="OMATTR"): |
---|
57 | children=[self.buildFromNode(c) for c in node] |
---|
58 | erg=OMAttribution(*children) |
---|
59 | if None==erg: |
---|
60 | raise NotImplementedError |
---|
61 | else: |
---|
62 | if "id" in node.attrib: |
---|
63 | id=node.get("id") |
---|
64 | self.ids[id]=erg |
---|
65 | return erg |
---|
66 | def __init__(self): |
---|
67 | self.refs=[] |
---|
68 | self.ids={} |
---|
69 | def build(self, tree): |
---|
70 | root=tree.getroot() |
---|
71 | #remove_white_space(root) |
---|
72 | erg=self.buildFromNode(root) |
---|
73 | for r in self.refs: |
---|
74 | r.ref=self.ids[r.ref] |
---|
75 | return erg |
---|
76 | def decode(tree): |
---|
77 | builder=OMFromXMLBuilder() |
---|
78 | om=builder.build(tree) |
---|
79 | return om |
---|
Note: See
TracBrowser
for help on using the repository browser.