Browse Source

Adding inheritance to Backend class

- Preparing for JSON->kll and kll->JSON compilation modes
simple
Jacob Alexander 9 years ago
parent
commit
7d0094ed3a
2 changed files with 114 additions and 72 deletions
  1. 2
    72
      backends/kiibohd.py
  2. 112
    0
      kll_lib/backends.py

+ 2
- 72
backends/kiibohd.py View File

@@ -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 )


+ 112
- 0
kll_lib/backends.py 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 )