diff options
Diffstat (limited to 'misc/xml-tokens/gen-gnumeric-tokens.py')
-rwxr-xr-x | misc/xml-tokens/gen-gnumeric-tokens.py | 81 |
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() |