"""! @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 @author Anna Petrasova """ 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\n' % (' ' * indent, m)) indent += 4 fd.write('%s%s\n' % (' ' * indent, m)) fd.write('%s%s\n' % (' ' * indent, escapeXML(desc))) fd.write('%s%s\n' % (' ' * indent, escapeXML(','.join(keyw)))) indent -= 4 fd.write('%s\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('\n') fd.write('\n') fd.write('\n' % sys.argv[0]) vInfo = grass.version() fd.write('\n' % \ (vInfo['version'].split('.')[0], vInfo['revision'], datetime.now())) fd.write('\n') def footer(fd): fd.write('\n') def main(): fh = sys.stdout header(fh) parse_modules(fh) footer(fh) return 0 if __name__ == "__main__": sys.exit(main())