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