2 import xml
.sax
.handler
;
5 from ListStack
import ListStack
;
6 from FieldContainer
import FieldContainer
;
7 from Field
import Field
;
9 class FCDContentHandler(xml
.sax
.handler
.ContentHandler
):
10 """A SAX-parser content handler class for .fcd files
13 def __init__(self
, reader
):
14 self
.m_log
= logging
.getLogger("FCDContentHandler");
15 self
.m_reader
= reader
;
16 self
.m_container
= None;
17 self
.m_elemStack
= ListStack();
18 self
.m_parseField
= False;
20 def startDocument(self
):
21 self
.m_log
.debug("startDocument");
22 self
.m_elemStack
.clear();
24 def endDocument(self
):
25 self
.m_log
.debug("endDocument");
26 self
.m_container
.finalize();
27 self
.m_reader
.setFieldContainer(self
.m_container
);
29 def startElement(self
, name
, attr
):
30 self
.m_log
.debug("startElement: %s", name
);
31 if name
== "FieldContainer":
32 container
= FieldContainer();
33 self
.m_container
= container
;
34 self
.m_elemStack
.push(container
);
37 self
.m_elemStack
.top().addField(field
);
38 self
.m_elemStack
.push(field
);
39 self
.m_parseField
= True;
41 self
.m_log
.error("startElement: unknown element: %s", name
);
44 for i
, attrName
in enumerate(attr
.getNames()):
45 self
.m_log
.debug("%s attr: %d - %s - %s", name
, i
, attrName
, attr
[attrName
]);
46 self
.m_elemStack
.top().setFCD(attrName
, attr
[attrName
]);
48 def endElement(self
, name
):
49 self
.m_log
.debug("endElement: %s", name
);
51 if(self
.m_parseField
== True):
53 if(self
.m_elemStack
.top().getFCD("osg2Ignore") == "true"):
54 field
= self
.m_elemStack
.top()
55 self
.m_elemStack
.pop();
56 self
.m_elemStack
.top().subField(field
)
58 self
.m_elemStack
.pop();
60 self
.m_parseField
= False;
62 self
.m_elemStack
.pop();
64 def characters(self
, content
):
65 self
.m_log
.debug("characters: |%s|", content
);
67 currDesc
= self
.m_elemStack
.top().getFCD("description");
69 self
.m_elemStack
.top().setFCD("description", content
.lstrip(" \t"));
71 currDesc
+= content
.lstrip(" \t");
72 self
.m_elemStack
.top().setFCD("description", currDesc
);
76 """Reader for .fcd files - calls a SAX parser with the FCDContentHandler
79 def read(self
, fileName
):
81 self
.m_container
= None;
83 self
.m_fcdCH
= FCDContentHandler(self
);
84 self
.m_parser
= xml
.sax
.make_parser();
85 self
.m_parser
.setContentHandler(self
.m_fcdCH
);
87 self
.m_parser
.parse(fileName
);
89 fcdFile
= open(fileName
, "r");
90 fcdContents
= fcdFile
.readlines();
93 self
.m_container
.setFCDContents(fcdContents
);
95 def setFieldContainer(self
, fc
):
96 self
.m_container
= fc
;
98 def getFieldContainer(self
):
99 return self
.m_container
;