#!/usr/bin/python3 import argparse import logging import os import sys from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry from keyman_config.kvk2ldml import parse_kvk_file, print_kvk, convert_ldml, output_ldml def main(): parser = argparse.ArgumentParser( description='Convert a Keyman kvk on-screen keyboard file to an LDML file. Optionally ' + 'print the details of the kvk file.') parser.add_argument('-p', "--print", help='print kvk details', action="store_true") parser.add_argument('-k', "--keys", help='if printing also print all keys', action="store_true") parser.add_argument('kvkfile', help='kvk file') parser.add_argument('-o', '--output', metavar='LDMLFILE', help='output LDML file location') add_standard_arguments(parser) args = parser.parse_args() initialize_logging(args) initialize_sentry() name, ext = os.path.splitext(args.kvkfile) # Check if input file extension is kvk if ext != ".kvk": logging.error("km-kvk2ldml: error, input file %s is not a kvk file.", args.kvkfile) logging.error("km-kvk2ldml [-h] [-k] [-p] [-o ] ") sys.exit(2) # Check if input kvk file exists if not os.path.isfile(args.kvkfile): logging.error("km-kvk2ldml: error, input file %s does not exist.", args.kvkfile) logging.error("km-kvk2ldml [-h] [-k] [-p] [-o ] ") sys.exit(2) kvkData = parse_kvk_file(args.kvkfile) if args.print: print_kvk(kvkData, args.keys) outputfile = args.output if args.output else f'{name}.ldml' dirname = os.path.dirname(outputfile) if not os.path.isdir(dirname): if os.path.exists(dirname): logging.error(f'km-kvk2ldml: error, `{dirname}` exists but is not a directory') sys.exit(3) os.makedirs(dirname) try: with open(outputfile, 'wb') as ldmlfile: ldml = convert_ldml(kvkData) output_ldml(ldmlfile, ldml) except PermissionError: logging.error(f'km-kvk2ldml: error, permission denied writing file `{outputfile}`') sys.exit(4) except IsADirectoryError: logging.error(f'km-kvk2ldml: error, cannot create file `{outputfile}` - it is a directory') sys.exit(5) if __name__ == "__main__": main()