projects
/
free-sw
/
xcb
/
proto
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Process <import> directives with a new import.py tool.
[free-sw/xcb/proto]
/
src
/
size.py
diff --git
a/src/size.py
b/src/size.py
index
907f2b5
..
07e2f27
100755
(executable)
--- a/
src/size.py
+++ b/
src/size.py
@@
-5,11
+5,10
@@
from xml.sax.xmlreader import AttributesImpl
from xml.sax import make_parser
import sys
from xml.sax import make_parser
import sys
-class AttributesUnion(AttributesImpl):
- def __init__(self, base, **values):
- baseitems = dict(base)
- baseitems.update(values)
- AttributesImpl.__init__(self, baseitems)
+def AttributesUnion(base, **values):
+ baseitems = dict(base)
+ baseitems.update(values)
+ return AttributesImpl(baseitems)
class AnnotateSize(XMLFilterBase):
types = {
class AnnotateSize(XMLFilterBase):
types = {
@@
-24,16
+23,16
@@
class AnnotateSize(XMLFilterBase):
'float': 4,
'double': 8,
}
'float': 4,
'double': 8,
}
- header =
None
+ header =
[]
def setTypeSize(self, name, size):
self.types[name] = size
def setTypeSize(self, name, size):
self.types[name] = size
- self.types[self.header + ':' + name] = size
+ self.types[self.header
[0]
+ ':' + name] = size
struct = None
union = None
def startElement(self, name, attrs):
if name == 'xcb':
struct = None
union = None
def startElement(self, name, attrs):
if name == 'xcb':
- self.header
= attrs['header']
+ self.header
.insert(0, attrs['header'])
elif name == 'field':
size = self.types.get(attrs['type'], 0)
if self.struct is not None:
elif name == 'field':
size = self.types.get(attrs['type'], 0)
if self.struct is not None:
@@
-49,17
+48,29
@@
class AnnotateSize(XMLFilterBase):
assert self.struct is None and self.union is None
setattr(self, name, attrs['name'])
self.totalsize = 0
assert self.struct is None and self.union is None
setattr(self, name, attrs['name'])
self.totalsize = 0
- XMLFilterBase.startElement(self, name, attrs)
+
+ if len(self.header) == 1:
+ XMLFilterBase.startElement(self, name, attrs)
+
+ def characters(self, content):
+ if len(self.header) == 1:
+ XMLFilterBase.characters(self, content)
def endElement(self, name):
def endElement(self, name):
- if name == 'struct' or name == 'union':
+ if len(self.header) == 1:
+ XMLFilterBase.endElement(self, name)
+
+ if name == 'xcb':
+ self.header.pop(0)
+ elif name == 'struct' or name == 'union':
assert getattr(self, name) is not None
self.setTypeSize(getattr(self, name), self.totalsize)
setattr(self, name, None)
del self.totalsize
assert getattr(self, name) is not None
self.setTypeSize(getattr(self, name), self.totalsize)
setattr(self, name, None)
del self.totalsize
- XMLFilterBase.endElement(self, name)
annotator = AnnotateSize(make_parser())
annotator.setContentHandler(XMLGenerator())
annotator = AnnotateSize(make_parser())
annotator.setContentHandler(XMLGenerator())
-for f in sys.argv[1:]:
- annotator.parse(f)
+if len(sys.argv) > 1:
+ annotator.parse(sys.argv[1])
+else:
+ annotator.parse(sys.stdin)