1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- """!
- @package tools.build_modules_xml
- @brief Builds XML metadata of GRASS modules. Runs only during compilation.
- (C) 2013 by the GRASS Development Team
- This program is free software under the GNU General Public License
- (>=v2). Read the file COPYING that comes with GRASS for details.
- @author Vaclav Petras <wenzeslaus gmail.com>
- @author Anna Petrasova <kratochanna gmail.com>
- """
- import sys
- from datetime import datetime
- def escapeXML(text):
- """!Helper function for correct escaping characters for XML
- Duplicate function in core/toolboxes.
- """
- return text.replace('<', '<').replace("&", '&').replace(">", '>')
- def parse_modules(fd):
- """!Writes metadata to xml file."""
- import grass.script as grass
- mlist = list(grass.get_commands()[0]) # what about windows?
- indent = 4
- for m in mlist:
- # TODO: get rid of g.mapsets_picker.py
- if m == 'g.mapsets_picker.py':
- continue
- desc, keyw = get_module_metadata(m)
- fd.write('%s<module-item name="%s">\n' % (' ' * indent, m))
- indent += 4
- fd.write('%s<module>%s</module>\n' % (' ' * indent, m))
- fd.write('%s<description>%s</description>\n' % (' ' * indent, escapeXML(desc)))
- fd.write('%s<keywords>%s</keywords>\n' % (' ' * indent, escapeXML(','.join(keyw))))
- indent -= 4
- fd.write('%s</module-item>\n' % (' ' * indent))
- def get_module_metadata(name):
- import grass.script.task as gtask
- try:
- task = gtask.parse_interface(name)
- except:
- return '', ''
- return task.get_description(full=True), \
- task.get_keywords()
- def header(fd):
- import grass.script.core as grass
- fd.write('<?xml version="1.0" encoding="UTF-8"?>\n')
- fd.write('<!DOCTYPE module-items SYSTEM "module_items.dtd">\n')
- fd.write('<!--This file is automatically generated using %s-->\n' % sys.argv[0])
- vInfo = grass.version()
- fd.write('<!--version="%s" revision="%s" date="%s"-->\n' % \
- (vInfo['version'].split('.')[0],
- vInfo['revision'],
- datetime.now()))
- fd.write('<module-items>\n')
- def footer(fd):
- fd.write('</module-items>\n')
- def main():
- fh = sys.stdout
- header(fh)
- parse_modules(fh)
- footer(fh)
- return 0
- if __name__ == "__main__":
- sys.exit(main())
|