# HG changeset patch # User Jacob Alexander # Date 1410150756 25200 # Node ID fbd991c7542d55480fea54530eb139e61cfe1fe6 # Parent 4bea03bae7ebc9b7c7d355e7aa554a5575ed2bc5 Adding support for USB Code trigger assignment - Added USBCode "cached assignment" - Added ANSI -> Colemak USBCode assignment kll file - Removed debug printing diff -r 4bea03bae7eb -r fbd991c7542d examples/colemak.kll --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/colemak.kll Sun Sep 07 21:32:36 2014 -0700 @@ -0,0 +1,31 @@ +Name = colemak; +Version = 0.1; +Author = "HaaTa (Jacob Alexander) 2014"; +KLL = 0.3; + +# Modified Date +Date = 2014-09-07; + +# Top row +'e' : 'f'; +'r' : 'p'; +'t' : 'g'; +'y' : 'j'; +'u' : 'l'; +'i' : 'u'; +'o' : 'y'; +'p' : ';'; + +# Middle Row +'s' : 'r'; +'d' : 's'; +'f' : 't'; +'g' : 'd'; +'j' : 'n'; +'k' : 'e'; +'l' : 'i'; +';' : 'o'; + +# Bottom Row +'n' : 'k'; + diff -r 4bea03bae7eb -r fbd991c7542d examples/md1Map.kll --- a/examples/md1Map.kll Sat Sep 06 20:56:46 2014 -0700 +++ b/examples/md1Map.kll Sun Sep 07 21:32:36 2014 -0700 @@ -4,11 +4,12 @@ KLL = 0.3; # Modified Date -Date = 2014-08-24; +Date = 2014-09-07; # MOVE THIS SECTION to another file usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 ); +layerState => Macro_layerState_capability( layer: 2, state : 1 ); # END SECTION diff -r 4bea03bae7eb -r fbd991c7542d kll.py --- a/kll.py Sat Sep 06 20:56:46 2014 -0700 +++ b/kll.py Sun Sep 07 21:32:36 2014 -0700 @@ -397,9 +397,6 @@ elif operator == ":": macros_map.replaceScanCode( trigger, result ) - print ( triggers ) - print ( results ) - def eval_usbCode( triggers, operator, results ): # Convert to lists of lists of lists to tuples of tuples of tuples # Tuples are non-mutable, and can be used has index items @@ -411,20 +408,8 @@ scanCodes = macros_map.lookupUSBCodes( trigger ) for scanCode in scanCodes: for result in results: - # Append Case - if operator == ":+": - macros_map.appendScanCode( scanCode, result ) - - # Remove Case - elif operator == ":-": - macros_map.removeScanCode( scanCode, result ) - - # Replace Case - elif operator == ":": - macros_map.replaceScanCode( scanCode, result ) - - print ( triggers ) - print ( results ) + # Cache assignment until file finishes processing + macros_map.cacheAssignment( operator, scanCode, result ) def eval_variable( name, content ): # Content might be a concatenation of multiple data types, convert everything into a single string @@ -506,8 +491,8 @@ #| : ; operatorTriggerResult = operator(':') | operator(':+') | operator(':-') -scanCode_expression = triggerCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) >> map_scanCode -usbCode_expression = triggerUSBCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) #>> map_usbCode +scanCode_expression = triggerCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) >> map_scanCode +usbCode_expression = triggerUSBCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) >> map_usbCode def parse( tokenSequence ): """Sequence(Token) -> object""" @@ -538,11 +523,11 @@ data = file.read() tokenSequence = tokenize( data ) - print ( pformat( tokenSequence ) ) # Display tokenization + #print ( pformat( tokenSequence ) ) # Display tokenization tree = parse( tokenSequence ) - #print ( tree ) - #print ( variable_dict ) - #print ( capabilities_dict ) + + # Apply assignment cache, see 5.1.2 USB Codes for why this is necessary + macros_map.replayCachedAssignments() # Do macro correlation and transformation macros_map.generate() diff -r 4bea03bae7eb -r fbd991c7542d kll_lib/containers.py --- a/kll_lib/containers.py Sat Sep 06 20:56:46 2014 -0700 +++ b/kll_lib/containers.py Sun Sep 07 21:32:36 2014 -0700 @@ -94,6 +94,9 @@ self.triggerList = [] self.maxScanCode = [] + # USBCode Assignment Cache + self.assignmentCache = [] + def __repr__( self ): return "{0}".format( self.macros ) @@ -124,11 +127,35 @@ # Scan current layer for USB Codes for macro in self.macros[ self.layer ].keys(): - if usbCode == self.macros[ self.layer ][ macro ]: + if usbCode in self.macros[ self.layer ][ macro ]: scanCodeList.append( macro ) return scanCodeList + # Cache USBCode Assignment + def cacheAssignment( self, operator, scanCode, result ): + self.assignmentCache.append( [ operator, scanCode, result ] ) + + # Assign cached USBCode Assignments + def replayCachedAssignments( self ): + # Iterate over each item in the assignment cache + for item in self.assignmentCache: + # Check operator, and choose the specified assignment action + # Append Case + if item[0] == ":+": + self.appendScanCode( item[1], item[2] ) + + # Remove Case + elif item[0] == ":-": + self.removeScanCode( item[1], item[2] ) + + # Replace Case + elif item[0] == ":": + self.replaceScanCode( item[1], item[2] ) + + # Clear assignment cache + self.assignmentCache = [] + # Generate/Correlate Layers def generate( self ): self.generateIndices()