From: Jacob Alexander Date: Sun, 22 Feb 2015 05:45:20 +0000 (-0800) Subject: Adding inheritance to Backend class X-Git-Url: https://git.donarmstrong.com/?p=kiibohd-kll.git;a=commitdiff_plain;h=7d0094ed3affc1219a83caf5cc2422ea0923816f Adding inheritance to Backend class - Preparing for JSON->kll and kll->JSON compilation modes --- diff --git a/backends/kiibohd.py b/backends/kiibohd.py index 8419ee8..34b570a 100644 --- a/backends/kiibohd.py +++ b/backends/kiibohd.py @@ -30,45 +30,12 @@ from datetime import date sys.path.append( os.path.expanduser('..') ) from kll_lib.containers import * - - -### Decorators ### - - ## Print Decorator Variables -ERROR = '\033[5;1;31mERROR\033[0m:' -WARNING = '\033[5;1;33mWARNING\033[0m:' - +from kll_lib.backends import * ### Classes ### -class Backend: - # Initializes backend - # Looks for template file and builds list of fill tags - def __init__( self, templatePath, definesTemplatePath ): - # Does template exist? - if not os.path.isfile( templatePath ): - print ( "{0} '{1}' does not exist...".format( ERROR, templatePath ) ) - sys.exit( 1 ) - - self.definesTemplatePath = definesTemplatePath - self.templatePath = templatePath - self.fill_dict = dict() - - # Generate list of fill tags - self.tagList = [] - with open( templatePath, 'r' ) as openFile: - for line in openFile: - match = re.findall( '<\|([^|>]+)\|>', line ) - for item in match: - self.tagList.append( item ) - with open( definesTemplatePath, 'r' ) as openFile: - for line in openFile: - match = re.findall( '<\|([^|>]+)\|>', line ) - for item in match: - self.tagList.append( item ) - - +class Backend( BackendBase ): # USB Code Capability Name def usbCodeCapability( self ): return "usbKeyOut"; @@ -338,40 +305,3 @@ class Backend: ## Layer State ## self.fill_dict['LayerState'] = "uint8_t LayerState[ LayerNum ];" - - # Generates the output keymap with fill tags filled - def generate( self, outputPath, definesOutputPath ): - # Process each line of the template, outputting to the target path - with open( outputPath, 'w' ) as outputFile: - with open( self.templatePath, 'r' ) as templateFile: - for line in templateFile: - # TODO Support multiple replacements per line - # TODO Support replacement with other text inline - match = re.findall( '<\|([^|>]+)\|>', line ) - - # If match, replace with processed variable - if match: - outputFile.write( self.fill_dict[ match[ 0 ] ] ) - outputFile.write("\n") - - # Otherwise, just append template to output file - else: - outputFile.write( line ) - - # Process each line of the defines template, outputting to the target path - with open( definesOutputPath, 'w' ) as outputFile: - with open( self.definesTemplatePath, 'r' ) as templateFile: - for line in templateFile: - # TODO Support multiple replacements per line - # TODO Support replacement with other text inline - match = re.findall( '<\|([^|>]+)\|>', line ) - - # If match, replace with processed variable - if match: - outputFile.write( self.fill_dict[ match[ 0 ] ] ) - outputFile.write("\n") - - # Otherwise, just append template to output file - else: - outputFile.write( line ) - diff --git a/kll_lib/backends.py b/kll_lib/backends.py new file mode 100644 index 0000000..38ce916 --- /dev/null +++ b/kll_lib/backends.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +# KLL Compiler - Kiibohd Backend +# +# Backend code generator classes +# +# Copyright (C) 2015 by Jacob Alexander +# +# This file is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see . + +### Imports ### + +import os +import sys +import re + + +### Decorators ### + + ## Print Decorator Variables +ERROR = '\033[5;1;31mERROR\033[0m:' +WARNING = '\033[5;1;33mWARNING\033[0m:' + + + +### Classes ### + +class BackendBase: + # Initializes backend + # Looks for template file and builds list of fill tags + def __init__( self, templatePath, definesTemplatePath ): + # Does template exist? + if not os.path.isfile( templatePath ): + print ( "{0} '{1}' does not exist...".format( ERROR, templatePath ) ) + sys.exit( 1 ) + + self.definesTemplatePath = definesTemplatePath + self.templatePath = templatePath + self.fill_dict = dict() + + # Generate list of fill tags + self.tagList = [] + with open( templatePath, 'r' ) as openFile: + for line in openFile: + match = re.findall( '<\|([^|>]+)\|>', line ) + for item in match: + self.tagList.append( item ) + with open( definesTemplatePath, 'r' ) as openFile: + for line in openFile: + match = re.findall( '<\|([^|>]+)\|>', line ) + for item in match: + self.tagList.append( item ) + + + # USB Code Capability Name + # XXX Make sure to override + def usbCodeCapability( self ): + return "my_capability"; + + + # Processes content for fill tags and does any needed dataset calculations + def process( self, capabilities, macros, variables, gitRev, gitChanges ): + print ( "{0} BackendBase 'process' function must be overridden".format( ERROR ) ) + sys.exit( 2 ) + + + # Generates the output keymap with fill tags filled + def generate( self, outputPath, definesOutputPath ): + # Process each line of the template, outputting to the target path + with open( outputPath, 'w' ) as outputFile: + with open( self.templatePath, 'r' ) as templateFile: + for line in templateFile: + # TODO Support multiple replacements per line + # TODO Support replacement with other text inline + match = re.findall( '<\|([^|>]+)\|>', line ) + + # If match, replace with processed variable + if match: + outputFile.write( self.fill_dict[ match[ 0 ] ] ) + outputFile.write("\n") + + # Otherwise, just append template to output file + else: + outputFile.write( line ) + + # Process each line of the defines template, outputting to the target path + with open( definesOutputPath, 'w' ) as outputFile: + with open( self.definesTemplatePath, 'r' ) as templateFile: + for line in templateFile: + # TODO Support multiple replacements per line + # TODO Support replacement with other text inline + match = re.findall( '<\|([^|>]+)\|>', line ) + + # If match, replace with processed variable + if match: + outputFile.write( self.fill_dict[ match[ 0 ] ] ) + outputFile.write("\n") + + # Otherwise, just append template to output file + else: + outputFile.write( line ) +