#!/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()