
    7j              
       N   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ d Zd Zd	 Zd
 Zd Zd Zd Zd&dZ ej(                  ddddd       ej(                  ddde	d       ej(                  ddddd       ej*                  dd      d                             Z ej(                  ddddd       ej(                  d d!ddd"       ej(                  ddde	d       ej(                  ddddd       ej*                  d#d      d$                                    Zy%)'zLUsed by the make system to generate keycodes.h from keycodes_{version}.json
    )cli)GPL2_HEADER_C_LIKEGENERATED_HEADER_C_LIKE)
dump_lines)normpath)	load_specc                     | dk(  ry| dk(  ry| S )z/Fix up any issues with badly chosen values
    	modifiersmodifiermediaconsumer )groups    R/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/generate/keycodes.py_translate_groupr      s     L    c                     d}d| v r|t        d      z  }d| v r|t        d      z  }d| v r|t        d      z  }d| v r|t        d	      z  }| j                  |      S )
N   zS(zS()zA(zA()zRCTL(zRCTL()zALGR(zALGR())lenljust)keywidths     r   _render_keyr      sj    Es{Us{U#~X#~X99Ur   c                 *    | j                  dd      } | S )N\z(backslash))replace)labels    r   _render_labelr   "   s    MM$.ELr   c                    | j                  d       | j                  d       | j                  d       |d   j                         D ]  \  }}t        d |j                  d            \  }}||z   }|j	                  d      }| j                  d|j                  d	       d
|dd       | j                  d|dz   j                  d	       d
|dd        | j                  d       y )N zenum qk_keycode_ranges {z	// Rangesrangesc                     t        | d      S )N   )int)xs    r   <lambda>z"_generate_ranges.<locals>.<lambda>,   s    Q r   /define       z = 0x04X,_MAX};)appenditemsmapsplitgetr   )lineskeycodesr   valuelomaskhir(   s           r   _generate_rangesr:   '   s    	LL	LL+,	LLx(..0 I
U+SYYs^<D$Y8$tFLL,-U2c(!<=tVf_33B78bXQGHI 
LLr   c           	      (   | j                  d       | j                  d       | j                  d       |d   j                         D ],  \  }}| j                  d|j                  d       d| d       . | j                  d       | j                  d	       |d   j                         D ]T  \  }}|j                  d      }|j                  d
g       D ])  }| j                  d|j                  d       d| d       + V | j                  d       y )Nr    zenum qk_keycode_defines {z// Keycodesr5   r)   r   z = r,   z// Aliasaliases
   r.   )r/   r0   r3   r   )r4   r5   r   r6   tempaliass         r   _generate_definesr@   4   s   	LL	LL,-	LLz*002 9
UtEIIe,-SQ789 
LL	LLz*002 =
UyyYYy"- 	=ELL4B0D6;<	==
 
LLr   c           
         | j                  d       | j                  d       |d   j                         D ]1  }|j                  d      }| j                  d| d| d|dz    d	       3 i }|d
   j                         D ]X  \  }}|j                  dd       }|s||vrddg||<   t	        |d      }|||   d   k  r|||   d<   |||   d   kD  sQ|||   d<   Z | j                  d       | j                  d       |j                         D ][  \  }}|d
   d|d   d   d   }|d
   d|d   d   d   }	| j                  dt        |      j                          d| d|	 d	       ] | j                  d       | j                  d       |j                         D ]n  \  }}|d
   d|d   d   d   }|d
   d|d   d   d   }	t        |      j                          d}
| j                  d|
j                  d       d| d|	        p y )Nr    z// Range Helpersr!   r(   z#define IS_z(code) ((code) >= z && (code) <= r-   )r5   r   i  r   r#      z// Group Helpers0xr+   r   z_KEYCODE(code) ((code) >= z// Switch statement Helpers_KEYCODE_RANGE#define #    z ... )r/   valuesr3   r0   r$   r   upperr   )r4   r5   r6   r(   r>   r   r   codesr7   r9   names              r   _generate_helpersrM   E   sv   	LL	LL#$(#**, g8${6(*<VHNSY\bSbRccdefg
 Dz*002 
!
U		'4(!1+DK#rleQ DKNeQ DKN
! 
LL	LL#$

 wuj!BuQxn"56u=j!BuQxn"56u={#3E#:#@#@#B"CC]^`]aaoprosstuvw
 
LL	LL./

 @uj!BuQxn"56u=j!BuQxn"56u="5)//12.Ax

2/qE">?	@r   c                    d|d   j                         D cg c]  }|d   	 c}v r"| j                  d       | j                  d       | j                  d       | j                  d       |d   j                         D ]x  \  }}t        |j	                  d            }t        |      }d|v r3| j                  d| d	| d
t        |j	                  d                    b| j                  d| d	|        z | j                  d       |d   j                         D ]B  \  }}|j	                  dg       D ](  }| j                  d| d	|j	                  d              * D y c c}w )NCH_Hr<   r   r    z#undef CH_Hz
// Aliasesr   rF   rH   z // )rI   r/   r0   r   r3   r   )r4   r5   r6   r   r(   valr?   s          r   _generate_aliasesrQ   j   sZ   HY,?,F,F,HI5%,IIR]#	LL	LLy)//1 4
UUYYu-.#eLL8F81SEmEIIgDV6W5XYZLL8F81SE234 
LLy)//1 @
UYYy"- 	@ELL8E7!EIIe,<+=>?	@@ Js   E#c                 v   |d   }t        t        |j                  d            \  }}}d|d|d|d}| j                  d       | j                  d| d| d	       | j                  d| d
|        | j                  d| d|        | j                  d| d|        | j                  d| d|        y )Nversion.rD   02d04dr    z#define QMK_zKEYCODES_VERSION ""zKEYCODES_VERSION_BCD zKEYCODES_VERSION_MAJOR zKEYCODES_VERSION_MINOR zKEYCODES_VERSION_PATCH )r1   r$   r2   r/   )r4   r5   prefixrS   majorminorpatchbcds           r   _generate_versionr]      s    y!Gc7==#56E5%uSk%U3K
0C	LL	LL<x'9'!DE	LL<x'<SEBC	LL<x'>ugFG	LL<x'>ugFG	LL<x'>ugFGr   z-vz	--versionTz Version of keycodes to generate.)arg_onlyrequiredhelpz-oz--outputzFile to write to)r^   typer`   z-qz--quiet
store_truez&Quiet mode, only output error messages)r^   actionr`   zKUsed by the make system to generate keycodes.h from keycodes_{version}.json)hiddenc                 (   t         t        ddg}t        | j                  j                        }t        ||       t        ||       t        ||       t        ||       t        | j                  j                  || j                  j                         y)z#Generates the keycodes.h file.
    #pragma once// clang-format offN)r   r   r   argsrS   r]   r:   r@   rM   r   outputquietr   keycodes_h_linesr5   s      r   generate_keycodesrm      st     +,C^Ujk))*H&1%x0&1&1 sxx 0#((..Ar   z-lz--langz!Language of keycodes to generate.zWUsed by the make system to generate keymap_{lang}.h from keycodes_{lang}_{version}.jsonc                 p   t         t        dddg}t        | j                  j                  | j                  j
                        }t        ||| j                  j
                  j                          d       t        ||       t        | j                  j                  || j                  j                         y)zGenerates the header file.
    rf   z#include "keycodes.h"rg   _N)r   r   r   rh   rS   langr]   rJ   rQ   r   ri   rj   rk   s      r   generate_keycode_extrasrq      s     +,C^Ul  oD  E))388==9H&SXX]]5H5H5J4K12MN&1 sxx 0#((..Ar   N)r    )__doc__milcr   qmk.constantsr   r   qmk.commandsr   qmk.pathr   qmk.keycodesr   r   r   r   r:   r@   rM   rQ   r]   argument
subcommandrm   rq   r   r   r   <module>rz      s\    E #  "


""@J@,H dK$DfgdJHCUVdI\Hpq]fjkB l r W hB$ dK$DfgdHtdAdedJHCUVdI\HpqirvwB x r W f h
Br   