Archived
1
0

Adding inheritance to Backend class

- Preparing for JSON->kll and kll->JSON compilation modes
This commit is contained in:
Jacob Alexander 2015-02-21 21:45:20 -08:00
parent b7a8979864
commit 7d0094ed3a
2 changed files with 114 additions and 72 deletions

View File

@ -30,45 +30,12 @@ from datetime import date
sys.path.append( os.path.expanduser('..') ) sys.path.append( os.path.expanduser('..') )
from kll_lib.containers import * from kll_lib.containers import *
from kll_lib.backends import *
### Decorators ###
## Print Decorator Variables
ERROR = '\033[5;1;31mERROR\033[0m:'
WARNING = '\033[5;1;33mWARNING\033[0m:'
### Classes ### ### Classes ###
class Backend: class Backend( 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 # USB Code Capability Name
def usbCodeCapability( self ): def usbCodeCapability( self ):
return "usbKeyOut"; return "usbKeyOut";
@ -338,40 +305,3 @@ class Backend:
## Layer State ## ## Layer State ##
self.fill_dict['LayerState'] = "uint8_t LayerState[ LayerNum ];" 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 )

112
kll_lib/backends.py Normal file
View File

@ -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 <http://www.gnu.org/licenses/>.
### 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 )