fixed: gcc8 compile issues
[opensg.git] / Tools / fcd2code / FCDReader.py
blob300ca54beab5cba8c7e38304d6bd8daa3a121147
2 import xml.sax.handler;
3 import logging;
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
11 """
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);
35 elif name == "Field":
36 field = Field();
37 self.m_elemStack.top().addField(field);
38 self.m_elemStack.push(field);
39 self.m_parseField = True;
40 else:
41 self.m_log.error("startElement: unknown element: %s", name);
42 return;
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)
57 else:
58 self.m_elemStack.pop();
60 self.m_parseField = False;
61 else:
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");
68 if currDesc == None:
69 self.m_elemStack.top().setFCD("description", content.lstrip(" \t"));
70 else:
71 currDesc += content.lstrip(" \t");
72 self.m_elemStack.top().setFCD("description", currDesc);
75 class FCDReader:
76 """Reader for .fcd files - calls a SAX parser with the FCDContentHandler
77 """
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();
91 fcdFile.close();
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;