#!/usr/bin/env python import sys import yaml import argparse def parse_args(): description = 'convert fontawesome yaml into cpp code' parser = argparse.ArgumentParser(description=description, add_help=False) parser.add_argument('-h', '--help', action='help', help='show this help message and exit') parser.add_argument('-v', '--var-name', dest='var', default='fontawesome_character_map', nargs=1, metavar='NAME', help='variable name in the C++ code') parser.add_argument('-p', '--prefix', dest='prefix', default='fa-', nargs=1, metavar='PREFIX', help='prefix to use for the name') parser.add_argument('-i', '--indent', dest='indent', default=6, nargs=1, metavar='DEPTH', help='indentation depth in the C++ code') parser.add_argument('yaml', metavar='YAML', help='yaml file to read from') args = parser.parse_args() return args def main(): args = parse_args() doc = yaml.load(open(args.yaml)) unicode_to_name = {} for name in doc: # Example: f586 code = doc[name]['unicode'] # Example: F586 code = 'F' + code[1:] unicode_to_name[code] = name fmt = '{indent}{var}["{prefix}{name}"] = QString::fromWCharArray(L"\\x{code}");' indent = ' ' * args.indent for code in sorted(unicode_to_name.keys()): name = unicode_to_name[code] cpp_code = fmt.format(indent=indent, var=args.var, prefix=args.prefix, name=name, code=code) print(cpp_code) if __name__ == '__main__': main()