# -*- coding: iso-8859-1 -*- """ Automagically generate MapServer SYMBOL [1] objects from all SVG files [1] http://mapserver.org/mapfile/symbol.html Args: None Example usage: To create MapServer pixmap symbol objects: $ python gen_mapserver_symbols.py png > wmo_symbols.sym To create MapServer svg symbol objects: # NOTE: MapServer requires libsvg-cairo to support SVG symbols $ python gen_mapserver_symbols.py svg > wmo_symbols.sym """ import os import sys import warnings import xml.etree.ElementTree as etree def gen_symbols(path, symbol_format='png'): """returns SYMBOL objects as string""" symbols = '' symbol_type = 'pixmap' if symbol_format not in ['png', 'svg']: raise RuntimeError('format must be png or svg') if symbol_format == 'svg': symbol_type = symbol_format for root, dirs, files in os.walk(os.path.abspath(path)): for wwsfile in files: basename, extension = os.path.splitext(wwsfile) if extension == '.svg': if symbol_format == 'svg': filepath = os.path.join(root, wwsfile) elif symbol_format == 'png': filepath = '%s%s%s.png' % (os.path.join(path, 'png'), os.sep, basename) try: svg = etree.parse(os.path.join(root, wwsfile)) title = svg.find('{http://www.w3.org/2000/svg}title').text symbols += ''' SYMBOL # %s NAME "%s" TYPE %s IMAGE "%s" END ''' % (title.encode('utf8'), basename, symbol_type, filepath) except Exception, err: warnings.warn('Could not parse file %s: %s' % (os.path.join(root, wwsfile), err)) return symbols if __name__ == '__main__': if len(sys.argv) != 2: print 'Usage: %s ' % sys.argv[0] sys.exit(0) path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'symbols') print gen_symbols(path, sys.argv[1])