summaryrefslogtreecommitdiffstats
path: root/misc/xml-tokens/gen-gnumeric-tokens.py
diff options
context:
space:
mode:
Diffstat (limited to 'misc/xml-tokens/gen-gnumeric-tokens.py')
-rwxr-xr-xmisc/xml-tokens/gen-gnumeric-tokens.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/misc/xml-tokens/gen-gnumeric-tokens.py b/misc/xml-tokens/gen-gnumeric-tokens.py
new file mode 100755
index 0000000..6212a83
--- /dev/null
+++ b/misc/xml-tokens/gen-gnumeric-tokens.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+#************************************************************************
+#
+# Copyright (c) 2010-2012 Kohei Yoshida
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+#***********************************************************************
+
+import xml.parsers.expat, sys
+import token_util
+
+class XMLParser:
+
+ def __init__ (self, strm):
+ self.__strm = strm
+ self.__elem = None
+ self.tokens = []
+
+ def start_element(self, name, attrs):
+ self.__elem = name
+ if name in ['xs:element', 'xs:attribute', 'xsd:element', 'xsd:attribute'] and attrs.has_key('name'):
+ token = attrs['name']
+ if len(token) > 0:
+ self.tokens.append(token)
+
+ def end_element(self, name):
+ pass
+
+ def character(self, data):
+ pass
+
+ def parse (self):
+ p = xml.parsers.expat.ParserCreate()
+ p.StartElementHandler = self.start_element
+ p.EndElementHandler = self.end_element
+ p.CharacterDataHandler = self.character
+ p.Parse(self.__strm, 1)
+
+
+def parse_file(filename):
+ file = open(filename, 'r')
+ chars = file.read()
+ file.close()
+
+ parser = XMLParser(chars)
+ parser.parse()
+ tokens = {}
+ for token in parser.tokens:
+ tokens[token] = True
+ keys = tokens.keys()
+ keys.sort()
+ return keys
+
+
+def main ():
+ tokens = parse_file(sys.argv[1])
+ token_util.gen_token_constants(sys.argv[2], tokens)
+ token_util.gen_token_names(sys.argv[3], tokens)
+
+if __name__ == '__main__':
+ main()