
    7j                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZmZmZ d	 Z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eedd       ej,                  dd      d                                     Zy!)"z?Used by the make system to generate keyboard.h from info.json.
    )Path)cli)normpath)	info_json)
dump_lines)keyboard_completerkeyboard_folder)COL_LETTERSROW_LETTERSGPL2_HEADER_C_LIKEGENERATED_HEADER_C_LIKEc           
         d|vr$t         j                  j                  |  d       g S |d   d   }|d   d   }g }|j                  d       |j                  d       |j                  d       |j                  d       |d   j	                         D ]k  \  }}|d	   rt        d
 |d   D              s&t         j                  j                  |  d| d       Hg }t        |      D cg c]  }dg|z  
 }	}|d   D ]k  }
|
d   \  }}dt        |    t        |    }||k\  s||k\  r)t         j                  j                  d| d       g c c S ||	|   |<   |j                  |       m |j                  d       |j                  d| ddj                  |       d       dj                  |	D cg c]  }ddj                  |      z   dz    c}      }|dz  }|j                  |       |j                  d       n |j                  di       j	                         D ]R  \  }}|j                  d       |j                  d|        |j                  d| d|        |j                  d        T |S c c}w c c}w )!z"Generates the layouts macros.
    matrix_sizez: Invalid matrix config.colsrows z// Layout contentz#define XXX KC_NOlayoutsc_macroc              3   $   K   | ]  }d |v  
 yw)matrixN ).0key_datas     T/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/generate/keyboard_h.py	<genexpr>z$_generate_layouts.<locals>.<genexpr>"   s     NH8x'Ns   layout/z: No or incomplete matrix data!XXXr   kzSkipping layouts due to z! containing invalid matrix values#define (z, z) { \z, \
z    { z }z \}layout_aliasesz#ifndef z#   define  z#endif)r   logerrorappenditemsalldebugranger   r
   joinget)keyboardkb_info_jsoncol_numrow_numlineslayout_namelayout_datalayout_keys_layout_matrixr   rowcol
identifierr   aliastargets                    r   _generate_layoutsr=      s    L(
":;<	=)&1G=)&1GE	LL	LL$%	LL	LL$%$0$;$A$A$C  [y!NH8MNNGGMMXJa}4STU49'NCq%7*CC#H- 	+H)HC[-.{3/?.@AJg~ 8Efgh	&0M#s#z*	+ 	Rx}Adii.D-EWMN}}-X3h37$>XYTS7: &))*:B?EEG vRxw'({5'6(34X	 L5 D Ys   )I82I=
c                    d| vrg S g }|j                  d       |j                  d       |j                  d       |j                  d       t        | j                  d            D ]:  \  }}|d   }|dk(  r|j                  d| d       &|j                  d| d	       < |j                  d
       | j                  dg       D ]5  }|d   }|j                  dg       D ]  }|j                  d| d|         7 |S )z'Generates keyboard level keycodes.
    keycodesr   z// Keycode contentzenum keyboard_keycodes {keyr   z  z = QK_KB_0,,z};aliasesr    r$   )r'   	enumerater-   )r/   r2   indexitemr@   r;   s         r   _generate_keycodesrF   D   s    %	E	LL	LL%&	LL	LL+, !1!1*!=> &t5kA:LL2cU+./LL2cU!%& 
LL  R0 35kXXi, 	3ELL8E7!C512	33
 L    z-iz	--include?TzOptional file to include)nargsarg_onlyhelpz-oz--outputzFile to write to)rJ   typerK   z-qz--quiet
store_truez&Quiet mode, only output error messages)rJ   actionrK   z-kbz
--keyboardz$Keyboard to generate keyboard.h for.)rJ   rL   	completerrequiredrK   z=Used by the make system to generate keyboard.h from info.json)hiddenc                    t        | j                  j                        }| j                  j                  }t	        | j                  j                  |      }t        |      }|xs |}t        t        dddg}|r|j                  |       |r(|j                  dt        |      j                   d       |r|j                  |       |s|j                  d       t        | j                  j                  || j                  j                         y)z#Generates the keyboard.h file.
    z#pragma oncer   z#include "quantum.h"z
#include ""z#error("<keyboard>.h is required unless your keyboard uses data-driven configuration. Please rename your keyboard's header file to <keyboard>.h")N)r   argsr.   includer=   rF   r   r   extendr'   r   namer   outputquiet)r   r/   
keyboard_h
dd_layoutsdd_keycodesvalid_configkeyboard_h_liness          r   generate_keyboard_hr_   a   s     SXX../L!!J"388#4#4lCJ$\2K+L +,C^UWYop
+*T*-=-B-B,C1 EF,   !u  	v sxx 0#((..ArG   N)__doc__pathlibr   milcr   qmk.pathr   qmk.infor   qmk.commandsr   qmk.keyboardr   r	   qmk.constantsr
   r   r   r   r=   rF   argument
subcommandr_   r   rG   r   <module>rj      s        # < _ _3l: dKsT@Z[dJHCUVdI\Hpqe\DRdos  {a  bOX\]B ^ b r W \
BrG   