
    7jd                        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 ddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZmZ d Zd Zd Z ej8                  ddd ed       ed      d       ej8                  ddded       ej8                  ddddd       ej8                  dd ddd!       ej8                  d"d#deed$%       ej:                  d&d'      d(                                           Zy))*z/Used by the make system to generate a rules.mk
    )Path)dotty)FilesCompleter)cli)	info_json)	json_load)keyboard_completerkeyboard_folder)
dump_linesparse_configurator_json)normpathFileType)GPL2_HEADER_SH_LIKEGENERATED_HEADER_SH_LIKEc                 V    t         j                  j                  }|rdnd}|  d| d| S )N=z?= )r   argsfilename)	rules_keyrules_value	is_keymaprule_assignment_operators       R/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/generate/rules_mk.pygenerate_ruler      s4    !!I&/sT[231[MBB    c           
         |j                  dd      sy|d   }|j                  dd      }	 | |   }|dv rt        |dj                  |            S |d	k(  rt        ||rd
      S d      S |dk(  r<dj                  |j	                         D cg c]  \  }}t        ||       c}}      S |dk(  rt        |d| d      S t        ||      S # t        $ r Y yw xY wc c}}w )z4Return the rules.mk line(s) for a mapping rule.
    to_cTNinfo_key
value_typeraw)arraylistr   boolyesnomapping
str")getKeyErrorr   joinitems)kb_info_jsonr   	info_dictr   key_typer   keyvalues           r   process_mapping_ruler4      s     ==&$H}}\51H"8, $$Y(=>>	V	YGG$GG	Y	yykFWFWFYZ
U-U3Z[[	U	Y!K=(:;;K00   [s   C C
	CCc                     g }| j                         D ]9  \  }}|j                         }|rdnd}|j                  t        | d|             ; |S )Nr%   r&   _ENABLE)r.   upperappendr   )features_dictlinesfeatureenableds       r   generate_features_rulesr=   1   s[    E)//1 B--/"%]gYg#6@AB Lr   r   ?Trz.jsonzuA configurator export JSON to be compiled and flashed or a pre-compiled binary firmware file (bin/hex) to be flashed.)nargsarg_onlytype	completerhelpz-oz--outputzFile to write to)rA   rB   rD   z-qz--quiet
store_truez&Quiet mode, only output error messages)rA   actionrD   z-ez--escapezEscape spaces in quiet modez-kbz
--keyboardz"Keyboard to generate rules.mk for.)rA   rB   rC   rD   z;Used by the make system to generate rules.mk from info.json)hiddenc                 ^   d}| j                   j                  rMt        | j                   j                        }t        |j	                  di             }|j	                  dd      }nx| j                   j
                  r)t        t        | j                   j
                              }n9| j                  j                  d       | j                  d   j                          yt        t        d            }t        t        g}|j                         D ]&  \  }}t!        |||      }|s|j#                  |       ( d|v r|j%                  t'        |d                |j	                  d	i       j	                  d
i       j	                  d      dk(  r|j#                  t)        dd             |j	                  di       j	                  d      r|j#                  t)        dd             n<|j	                  di       j	                  d      r|j#                  t)        dd             |r|j#                  t)        d|             t+        | j                   j,                  |       | j                   j,                  r| j                   j.                  rt| j                   j0                  r>t3        | j                   j,                  j5                         j7                  dd             yt3        | j                   j,                         y| j                  j9                  d| j                   j,                         yy)z.Generates a rules.mk file from info.json.
    Nconfig	converterz6You must supply a configurator export or `--keyboard`.zgenerate-rules-mkFzdata/mappings/info_rules.hjsonfeaturessplit	transportprotocolcustomSPLIT_TRANSPORTmatrix_pinscustom_liteCUSTOM_MATRIXliter%   
CONVERT_TOr   z\ zWrote rules.mk to %s.)r   r   r   r   r+   keyboardr   logerrorsubcommands
print_helpr   r   r   r   r.   r4   r8   extendr=   r   r   outputquietescapeprintas_posixreplaceinfo)	r   rJ   user_keymapr/   info_rules_maprules_mk_linesr   r0   	new_entrys	            r   generate_rules_mkrg   :   se    I
xx-chh.?.?@[__Xr:;OOK6				Ysxx'8'89:NO+,779t$DEFN)+CDN !/ 4 4 6 -	9(y)L	!!),	- \!5l:6NOP $((b9==jIXUm,=xHI r*..}=mOVDE			-	,	0	0	:mOUCDmL)DE sxx/
xx88>>xxchhoo..088eDEchhoo&GGLL0#((//B r   N)__doc__pathlibr   
dotty_dictr   argcomplete.completersr   milcr   qmk.infor   qmk.json_schemar   qmk.keyboardr	   r
   qmk.commandsr   r   qmk.pathr   r   qmk.constantsr   r   r   r4   r=   argument
subcommandrg    r   r   <module>rv      s     1   % < < ' GC14 jd#R`ahRi  qh  idJHCUVdI\HpqdJlIfge\DRd  lP  QMVZ[5C \ Q h r W i5Cr   