no need for special characters from combinations like 'á' can hold down keys for that (need to add this in)
this could be done on the next line, to modifiy the above key

CTRL + /_ hard coded to ^_ 1F
CTRL + |\ hard coded to ^\ 1C
CTRL + `  hard coded to ^\ 1C
Ctrl-~ == Ctrl-^

CTRL + ` == ?????
can edit the flags of a button on the next line, this would include setting the repeat style
 flag to say which button is the layout switcher, shows the current layout as alt-text and hold
 to change keyboard layout
also control font and content positioning?

+ is the flag setter, each flag is a letter? r = repeat, sN = rowspan, fN = font scale, l = layout
 pN =horz padding P=vert padding. h = horzAlign H = altHorzAlign


ctrl is only valid for ' ' to '?' and maps to 0 - 31 (c - 32)

some codes send the delete char \x7F, but these shouldn't be swapped with BS :(

for "a" controls, ctrl and s+c are optional. the default is ^ch

p {name} 
   defines a new page

c {width} [width] ...
   defines the widths of columns for a new page
   widths can be defined as pixels, auto, or star-widths
   numbers with no suffix are interterperated as star-widths
   example: c 30px 1 1 1 1.5 auto 20px

r {height} 
   start a new row with the specified height
   height must be a number

a{n} {normal} {shift} [ctrl] [ctrl+shift]
   create a new alpha/numeric key for {n} columns.
   {normal} is the label for the default action
   {shift} is the label for the default action
   [ctrl] is the byte sequence to send when this button is pressed wwith ctrl held
      the default is to send ^{normal}
   [ctrl+shift] is the byte sequence to send when this button is pressed with ctrl and shift held
      the default is to send ^{shift}

 l{n} {letter}
   create new simple letter key for {n} columns
   the content and control sequences are automatically create for you

e{n} [caption] [sequence] {shift sequence} {ctrl sequence} {ctrl+shift sequence}
   create a new extended button for {n} columns

s{n} {caption} {type}
   create a new modifier key for {n} columns
   {caption} is the display for this button
   {type} must be one of the following integers
       1 - shift
       2 - ctrl
       3 - alt gr
       4 - alt
g[n]
   introduce a gap of [n] columns or one column if [n] is ommited

f{n} {caption} {type}
   create a special key for {n} columns
   {caption} the title for this button
   {type} the type of this button, must be one of the following
       f1...f12, num_0...num_9, num_decimal, num_enter, num_divide,
       num_multiply, num_minus, num_add, home, end, delete, insert,
       pageup, pagedown, up, down, left, right, backspace, pause

j{n} {caption}
   EXPERIMENTAL - collapses the keyboard

m{n} [row]
   move to the specified column and optional row before adding the next button

+{s|l|h|H|p|P|f|F|c|d}
   modify the behaviour of the last button created

   +s {n} set the rowspan of the current button to {n} columns
   +l display the name of the current layout in the upper corner of the current button
   +h {type} change the horizontal alignement of the caption of the last button
       type must be one of the following values
       0 = Left
       1 = Center
       2 = Right
   +H {type} change the horizontal alignement of the alternative caption for the last button
   +p {value} change the uniform vertical padding for the last button to {value}
   +P {value} change the uniform horizontal padding for the last button to {value}
   +f {size} change the font size for the main caption of the last button to {size}
   +F {size} change the font size for the alternative caption of the last button to {size}
   +c set the visual state of the last button to checked/pressed
   +d [key] sets the last button as a dead key. key can be 1 for the normal key, 2 for the shifted key or 3 for both
   +g {caption} provides an AltGr value for last key.
   +G {caption} provides an uppercase version of the AltGr value for last key but doesn't
   +x hides the AltGr label for the last key