Exemple #1
0
def getCommandLineSettings(*replacementValues):

    def assertExists(value):
        if not os.path.exists(value):
            msg = "%s does not exist" % value
            raise argparse.ArgumentTypeError(msg)

    def assertParentExists(value):
        if not (os.path.exists(os.path.dirname(value)) and
                os.path.isdir(os.path.dirname(value))):
            msg = "%s is not a valid directory" % os.path.dirname(value)
            raise argparse.ArgumentTypeError(msg)

    def assertIsFolder(value):
        assertExists(value)
        if not os.path.isdir(value):
            msg = "%s is not a folder" % value
            raise argparse.ArgumentTypeError(msg)

    def folderType(value):
        assertIsFolder(value)
        return value
#        return os.path.abspath(value)

    def assertFileExtension(value, extension):
        basename = os.path.basename(value)
        if not basename.lower().endswith(extension.lower()):
            msg = "%s is not a %s file" % ( value, extension, )
            raise argparse.ArgumentTypeError(msg)

    def ufoSrcFolderType(value):
        assertIsFolder(value)
        assertFileExtension(value, '.ufo')
        return value
#        return os.path.abspath(value)

    def ufoDstFolderType(value):
        assertParentExists(value)
        assertFileExtension(value, '.ufo')
#        return os.path.abspath(value)
        return value

    def otfDstFileType(value):
        assertParentExists(value)
        assertFileExtension(value, '.otf')
        return value
#        return os.path.abspath(value)

    parser = argparse.ArgumentParser(description='')

    parser.add_argument('--ufo-src-path',
                        type=ufoSrcFolderType,
                        help='The .ufo source file to kern.',
#                        ) # TODO:
                        required=True)
    parser.add_argument('--ufo-dst-path',
                        type=ufoDstFolderType,
                        help='The .ufo destination file.',
#                        ) # TODO:
                        required=True)
    parser.add_argument('--otf-dst',
                        type=otfDstFileType,
                        help='Optional OpenType (.otf) destination file.',
                        ) # TODO:
#                        required=True)

    parser.add_argument('--log-path',
                        type=folderType,
                        help='Optional folder in which to write HTML logs.  CAUTION: This folder will be completely overwritten.')

    parser.add_argument('--default-diacritical-distance-ems',
                        type=float,
                        default=0.065,
                        help='The default distance between a glyph and its diacritical in ems. 0.0 <= x <= 1.0. Default: 0.065 em')

    parser.add_argument('--top-join-centers',
                        nargs='*',
                        help='A list of custom (unicode code point, horizontal center value) pairs used for top-aligned diacriticals.  To center the diacritical Grave (unicode: 0x60) 100 units right of its origin, use --top-join-centers 0x60 100.  Accepts an arbitrary number of pairs.')

    parser.add_argument('--tail-join-centers',
                        nargs='*',
                        help='A list of custom (unicode code point, horizontal center value) pairs used for tail-aligned diacriticals.  To center the diacritical Ogonek (unicode: 0x2DB) 100 units right of its origin, use --tail-join-centers 0x2DB 100.  Accepts an arbitrary number of pairs.')

    parser.add_argument('--middle-join-centers',
                        nargs='*',
                        help='A list of custom (unicode code point, horizontal center value) pairs used for middle-aligned diacriticals.  To center the diacritical Middle Dot (unicode: 0xB7) 100 units right of its origin, use --middle-join-centers 0xB7 100.  Accepts an arbitrary number of pairs.')

    if replacementValues:
        args = parser.parse_args(replacementValues)
    else:
        args = parser.parse_args()

#    print 'args', args

    result = TFSMap()
    result.ufo_src_path = args.ufo_src
    result.ufo_dst_path = args.ufo_dst
    result.otf_dst = args.otf_dst
    result.log_path = args.log_dst
    result.default_diacritical_distance_ems = args.default_diacritical_distance_ems

    result.top_join_centers = args.top_join_centers
    if result.top_join_centers is not None:
        if len(result.top_join_centers) % 2 != 0:
            raise Exception('--top-join-centers requires an even number of values.')

    result.tail_join_centers = args.tail_join_centers
    if result.tail_join_centers is not None:
        if len(result.tail_join_centers) % 2 != 0:
            raise Exception('--tail-join-centers requires an even number of values.')

    result.middle_join_centers = args.middle_join_centers
    if result.middle_join_centers is not None:
        if len(result.middle_join_centers) % 2 != 0:
            raise Exception('--middle-join-centers requires an even number of values.')

#    print 'args.top_join_centers', args.custom_glyph_centers
#    import sys
#    sys.exit(0)


    return result