### Classes ### | ### Classes ### | ||||
class Backend( BackendBase ): | class Backend( BackendBase ): | ||||
# Default templates and output files | |||||
templatePaths = ["templates/kiibohdKeymap.h", "templates/kiibohdDefs.h"] | |||||
outputPaths = ["generatedKeymap.h", "kll_defs.h"] | |||||
# USB Code Capability Name | # USB Code Capability Name | ||||
def usbCodeCapability( self ): | def usbCodeCapability( self ): | ||||
return "usbKeyOut"; | return "usbKeyOut"; |
# Optional Arguments | # Optional Arguments | ||||
pArgs.add_argument( '-b', '--backend', type=str, default="kiibohd", | pArgs.add_argument( '-b', '--backend', type=str, default="kiibohd", | ||||
help="Specify target backend for the KLL compiler.\n" | help="Specify target backend for the KLL compiler.\n" | ||||
"Default: kiibohd" ) | |||||
"Default: kiibohd\n" | |||||
"Options: kiibohd, json" ) | |||||
pArgs.add_argument( '-d', '--default', type=str, nargs='+', | pArgs.add_argument( '-d', '--default', type=str, nargs='+', | ||||
help="Specify .kll files to layer on top of the default map to create a combined map." ) | help="Specify .kll files to layer on top of the default map to create a combined map." ) | ||||
pArgs.add_argument( '-p', '--partial', type=str, nargs='+', action='append', | pArgs.add_argument( '-p', '--partial', type=str, nargs='+', action='append', | ||||
"Each -p defines another partial map.\n" | "Each -p defines another partial map.\n" | ||||
"Base .kll files (that define the scan code maps) must be defined for each partial map." ) | "Base .kll files (that define the scan code maps) must be defined for each partial map." ) | ||||
pArgs.add_argument( '-t', '--templates', type=str, nargs='+', | pArgs.add_argument( '-t', '--templates', type=str, nargs='+', | ||||
default=["templates/kiibohdKeymap.h", "templates/kiibohdDefs.h"], | |||||
help="Specify template used to generate the keymap.\n" | help="Specify template used to generate the keymap.\n" | ||||
"Default: templates/kiibohdKeymap.h templates/kiibohdDefs.h" ) | |||||
"Default: <backend specific>" ) | |||||
pArgs.add_argument( '-o', '--outputs', type=str, nargs='+', | pArgs.add_argument( '-o', '--outputs', type=str, nargs='+', | ||||
default=["generatedKeymap.h", "kll_defs.h"], | |||||
help="Specify output file. Writes to current working directory by default.\n" | help="Specify output file. Writes to current working directory by default.\n" | ||||
"Default: generatedKeymap.h kll_defs.h" ) | |||||
"Default: <backend specific>" ) | |||||
pArgs.add_argument( '-h', '--help', action="help", | pArgs.add_argument( '-h', '--help', action="help", | ||||
help="This message." ) | help="This message." ) | ||||
### Classes ### | ### Classes ### | ||||
class BackendBase: | class BackendBase: | ||||
# Default templates and output files | |||||
templatePaths = [] | |||||
outputPaths = [] | |||||
# Initializes backend | # Initializes backend | ||||
# Looks for template file and builds list of fill tags | # Looks for template file and builds list of fill tags | ||||
def __init__( self, templatePaths=[] ): | |||||
self.templatePaths = templatePaths | |||||
def __init__( self, templatePaths ): | |||||
# Use defaults if no template is specified | |||||
if templatePaths is not None: | |||||
self.templatePaths = templatePaths | |||||
self.fill_dict = dict() | self.fill_dict = dict() | ||||
# Process each template and add to tagList | # Process each template and add to tagList | ||||
self.tagList = [] | self.tagList = [] | ||||
for templatePath in templatePaths: | |||||
for templatePath in self.templatePaths: | |||||
# Does template exist? | # Does template exist? | ||||
if not os.path.isfile( templatePath ): | if not os.path.isfile( templatePath ): | ||||
print ( "{0} '{1}' does not exist...".format( ERROR, templatePath ) ) | print ( "{0} '{1}' does not exist...".format( ERROR, templatePath ) ) | ||||
# Generates the output keymap with fill tags filled | # Generates the output keymap with fill tags filled | ||||
def generate( self, outputPaths ): | def generate( self, outputPaths ): | ||||
# Use default if not specified | |||||
if outputPaths is None: | |||||
outputPaths = self.outputPaths | |||||
for templatePath, outputPath in zip( self.templatePaths, outputPaths ): | for templatePath, outputPath in zip( self.templatePaths, outputPaths ): | ||||
# Process each line of the template, outputting to the target path | # Process each line of the template, outputting to the target path | ||||
with open( outputPath, 'w' ) as outputFile: | with open( outputPath, 'w' ) as outputFile: |