From 5696fc5dfb407e43ad2aa1ed5fb12ff90dfdf374 Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Mon, 16 Feb 2015 13:29:26 -0800 Subject: [PATCH] Adding name and file stacks and layer naming - Name and kll filenames are treated as special variables - Using the order of the stacks the compilation order can be inferred (useful for debugging) - Layer names are finally implemented (instead of Layer 1, Layer 2, etc.) --- backends/kiibohd.py | 32 +++++++++++++++++++++++++------- kll_lib/containers.py | 27 ++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/backends/kiibohd.py b/backends/kiibohd.py index 19168a2..eff0490 100644 --- a/backends/kiibohd.py +++ b/backends/kiibohd.py @@ -100,8 +100,21 @@ class Backend: else: gitChangesStr = " None\n" + # Prepare BaseLayout and Layer Info + baseLayoutInfo = "" + defaultLayerInfo = "" + partialLayersInfo = "" + for file, name in zip( variables.baseLayout['*LayerFiles'], variables.baseLayout['*NameStack'] ): + baseLayoutInfo += "// {0}\n// {1}\n".format( name, file ) + for file, name in zip( variables.layerVariables[0]['*LayerFiles'], variables.layerVariables[0]['*NameStack'] ): + defaultLayerInfo += "// {0}\n// {1}\n".format( name, file ) + for layer in range( 1, len( variables.layerVariables ) ): + partialLayersInfo += "// Layer {0}\n".format( layer ) + for file, name in zip( variables.layerVariables[ layer ]['*LayerFiles'], variables.layerVariables[ layer ]['*NameStack'] ): + partialLayersInfo += "// {0}\n// {1}\n".format( name, file ) + + ## Information ## - # TODO self.fill_dict['Information'] = "// This file was generated by the kll compiler, DO NOT EDIT.\n" self.fill_dict['Information'] += "// Generation Date: {0}\n".format( date.today() ) self.fill_dict['Information'] += "// KLL Backend: {0}\n".format( "kiibohd" ) @@ -109,9 +122,9 @@ class Backend: self.fill_dict['Information'] += "// KLL Git Changes:{0}".format( gitChangesStr ) self.fill_dict['Information'] += "// Compiler arguments:\n{0}".format( compilerArgs ) self.fill_dict['Information'] += "//\n" - self.fill_dict['Information'] += "// - Base Layer -\n" - self.fill_dict['Information'] += "// - Default Layer -\n" - self.fill_dict['Information'] += "// - Partial Layers -\n" + self.fill_dict['Information'] += "// - Base Layer -\n{0}".format( baseLayoutInfo ) + self.fill_dict['Information'] += "// - Default Layer -\n{0}".format( defaultLayerInfo ) + self.fill_dict['Information'] += "// - Partial Layers -\n{0}".format( partialLayersInfo ) ## Variable Information ## @@ -304,12 +317,17 @@ class Backend: # Lookup first scancode in map firstScanCode = macros.firstScanCode[ layer ] + # Generate stacked name + stackName = "" + for name in range( 0, len( variables.layerVariables[ layer ]['*NameStack'] ) ): + stackName += "{0} + ".format( variables.layerVariables[ layer ]['*NameStack'][ name ] ) + stackName = stackName[:-3] + # Default map is a special case, always the first index - # TODO Fix names if layer == 0: - self.fill_dict['LayerIndexList'] += '\tLayer_IN( default_scanMap, "DefaultMap", 0x{0:02X} ),\n'.format( firstScanCode ) + self.fill_dict['LayerIndexList'] += '\tLayer_IN( default_scanMap, "D: {1}", 0x{0:02X} ),\n'.format( firstScanCode, stackName ) else: - self.fill_dict['LayerIndexList'] += '\tLayer_IN( layer{0}_scanMap, "Layer {0}", 0x{1:02X} ),\n'.format( layer, firstScanCode ) + self.fill_dict['LayerIndexList'] += '\tLayer_IN( layer{0}_scanMap, "{0}: {2}", 0x{1:02X} ),\n'.format( layer, firstScanCode, stackName ) self.fill_dict['LayerIndexList'] += "};" diff --git a/kll_lib/containers.py b/kll_lib/containers.py index 33792e9..fe00f84 100644 --- a/kll_lib/containers.py +++ b/kll_lib/containers.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # KLL Compiler Containers # -# Copyright (C) 2014 by Jacob Alexander +# Copyright (C) 2014-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 @@ -298,10 +298,16 @@ class Variables: # If still processing BaseLayout if self.baseLayoutEnabled: - self.baseLayout['*LayerFiles'] = name + if '*LayerFiles' in self.baseLayout.keys(): + self.baseLayout['*LayerFiles'] += [ name ] + else: + self.baseLayout['*LayerFiles'] = [ name ] # Set for the current layer else: - self.layerVariables[ self.currentLayer ]['*LayerFiles'] = name + if '*LayerFiles' in self.layerVariables[ self.currentLayer ].keys(): + self.layerVariables[ self.currentLayer ]['*LayerFiles'] += [ name ] + else: + self.layerVariables[ self.currentLayer ]['*LayerFiles'] = [ name ] def incrementLayer( self ): # Store using layer index @@ -312,6 +318,21 @@ class Variables: # Overall set of variables self.overallVariables[ key ] = value + # The Name variable is a special accumulation case + if key == 'Name': + # BaseLayout still being processed + if self.baseLayoutEnabled: + if '*NameStack' in self.baseLayout.keys(): + self.baseLayout['*NameStack'] += [ value ] + else: + self.baseLayout['*NameStack'] = [ value ] + # Layers + else: + if '*NameStack' in self.layerVariables[ self.currentLayer ].keys(): + self.layerVariables[ self.currentLayer ]['*NameStack'] += [ value ] + else: + self.layerVariables[ self.currentLayer ]['*NameStack'] = [ value ] + # If still processing BaseLayout if self.baseLayoutEnabled: self.baseLayout[ key ] = value