
    7j+                     D   d Z ddlZddl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mZmZmZ ddlmZmZ dd	lmZ dd
lmZ ej4                  j6                  j9                         j;                  d      Zd Zd9dZ d9dZ!d9dZ"d9dZ#d Z$d Z%d:dZ&d Z' ejP                  ddeed       ejP                  ddd       ejP                  ddd d!"       ejP                  d#d$d d%"       ejP                  d&d'd d("       ejP                  d)d*d+dd,-       ejP                  d.d e d/0       ejP                  d1d2d d3"       ejP                  d4d5d d6"       ejR                  d7      eed8                                                                                     Z*y);zbKeyboard information script.

Compile an info.json for a particular keyboard and pretty-print it.
    N)cli)InfoJSONEncoder)COL_LETTERSROW_LETTERS)automagic_keyboardautomagic_keymap)keyboard_completerkeyboard_folderrender_layoutsrender_layoutrules_mk)	info_jsonkeymap_json)locate_keymap)is_keyboardutfc                     | j                   dd         | j                   dd         | j                   dd         | j                   dd         | j                   dd         | j                   dd         | j                   dd         | j                   dd         | j                   d	d         | j                  d
i       j                         D ]8  }|j                  dd        |j                  dd        |j                  dd        : d| v r | j                   dd        dD ];  } | j                  |i       j                  dd       s'| |   j                  dd        = | S )Nplatformplatform_keyprocessor_typeprotocolconfig_h_featureskeymapsr
   parse_errorsparse_warningslayoutsfilenamec_macrojson_layoutmatrix_pinsmatrix_size
rgb_matrix
led_matrixlayout	led_count)popgetvalues)r   r%   features      E/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/info.py_strip_api_contentr,      sH   IMM*d#IMM.$'IMM"D)IMM*d#IMM%t,IMM)T"IMM#T*IMM.$'IMM"D))--	2.557 (

:t$

9d#

=$'(
 	!	mT*/ 69=="%))(D9g"";56     Tc                    t        t        j                  j                  j                  t        j                  j                  j
                        }|r/|j                  dk(  rt        j                  |j                  d            }d|vry|d   }| j                  di       j                  ||      }t        |d         D ]  \  }}|r:t        j                  dt        j                  j                  j
                  |       n9t        j                  d	t        j                  j                  j
                  |       t        t        | d
   |   d   t        j                  j                  j                  |              yyy)z$Render the keymap in ascii art.
    z.jsonzutf-8)encodingr%   Nlayout_aliaseslayersz&{fg_cyan}Keymap %s Layer %s{fg_reset}:z&{fg_cyan}keymap.%s.layer.%s{fg_reset}:r   )r   r   configinfokeyboardkeymapsuffixjsonloadopenr(   	enumerateechoprintr   ascii)kb_info_json
title_capskeymap_pathkeymap_datalayout_name	layer_numlayers          r+   show_keymaprE   0   s-     

 8 8#**//:P:PQK{))W4ii 0 0' 0 BC ;&!(+"&&'7<@@kZ )+h*? @ 	oIuA3::??CYCY[deA3::??CYCY[de-Y 7 DX NPSPZPZP_P_PePeglmn	o 5{r-   c                    t        | t        j                  j                  j                        j                         D ]@  \  }}|rd|j                          nd| }t        j                  d|       t        |       B y)z.Render the layouts with info.json labels.
    zLayout zlayouts.z{fg_cyan}%s{fg_reset}:N)	r   r   r2   r3   r=   itemstitler;   r<   )r>   r?   rB   
layout_artrH   s        r+   show_layoutsrJ   H   sn     $2,

@U@U#V#\#\#^ Z3='+++-./Xk]C[)51jr-   c                    | d   j                         D ]  \  }}g }|d   D ]J  }d|v r3t        |d   d      }t        |d   d      }|j                  ||z          :|j                  d       L |rt	        j
                  d|       nt	        j
                  d|       t        t        | d   |   d   t        j                  j                  j                  |              y	)
z7Render the layout with matrix labels in ascii art.
    r   r%   matrixr       z#{fg_blue}Matrix for "%s"{fg_reset}:z{fg_blue}matrix_%s{fg_reset}:N)rG   r   r   appendr   r;   r<   r   r2   r3   r=   )r>   r?   rB   r%   labelskeyrowcols           r+   show_matrixrT   Q   s      ,I6<<> lV(# 	"C3!#h-"23!#h-"23cCi(b!	" HH:KHHH4kBmL3K@JCJJOOLaLacijk%lr-   c                    d}dD ]  }d| j                  |i       v s|} n |st        j                  d       yi }t        | |   d         D ])  \  }}d|v st	        |j                  d            }|||<   + | d   j                         D ]  \  }}	g }
|	d   D ]A  }t	        |j                  d            }||v rt        ||         nd}|
j                  |       C |rt        j                  d|       nt        j                  d	|       t        t        | d   |   d   t        j                  j                  j                  |
              y)
zRender LED indices per key, using the keyboard's key layout geometry.

    We build a map from (row, col) -> LED index using rgb_matrix/led_matrix layout,
    then label each key with its LED index. Keys without an associated LED are left blank.
    Nr"   r%   zQ{fg_yellow}No rgb_matrix/led_matrix layout found to derive LED indices.{fg_reset}rL   r   rN   z({fg_blue}LED indices for "%s"{fg_reset}:z{fg_blue}leds_%s{fg_reset}:)r(   r   r;   r:   tuplerG   strrO   r<   r   r2   r3   r=   )r>   r?   led_featurer*   	by_matrixidxledled_keyrB   r%   rP   rQ   labels                r+   	show_ledsr^   i   s_    K/ |''44!K
 de Il;7AB %Ss?CGGH-.G!$Ig%  ,I6<<> lV(# 	!CCGGH-.G/6)/CC	'*+EMM% 		! HH?MHH2K@mL3K@JCJJOOLaLacijklr-   c           	      F   t        j                  d| j                  dd             t        j                  d| j                  dd             d| v r&t        j                  d| j                  dd             | j                  d	d
      d
k(  rt        j                  d       nt        j                  d| d	          t        j                  ddj                  t	        | d   j                                            t        j                  d| j                  dd             t        j                  d| j                  dd             d| v rR| d   j                         D cg c]  \  }}| d|  }}}t        j                  ddj                  |             yyc c}}w )z3Print the info.json in a friendly text format.
    z${fg_blue}Keyboard Name{fg_reset}: %skeyboard_nameUnknownz#{fg_blue}Manufacturer{fg_reset}: %smanufacturerurlz{fg_blue}Website{fg_reset}: %srN   
maintainerqmkz,{fg_blue}Maintainer{fg_reset}: QMK Communityz!{fg_blue}Maintainer{fg_reset}: %sz{fg_blue}Layouts{fg_reset}: %s, r   z {fg_blue}Processor{fg_reset}: %s	processorz!{fg_blue}Bootloader{fg_reset}: %s
bootloaderr0   =z#{fg_blue}Layout aliases:{fg_reset} N)r   r;   r(   joinsortedkeysrG   )r>   rQ   valuealiasess       r+   print_friendly_outputro      sU    HH3\5E5EoW`5abHH2L4D4D^U^4_`1<3C3CE23NOe,5?@4l<6PQHH-tyyY@W@\@\@^9_/`aHH/1A1A+y1YZHH0,2B2B<QZ2[\<'6BCS6T6Z6Z6\]
UcU!E7#]]DIIg<NPQ (]s    Fc           
      T   t        |       D ]a  }|dk(  r@t        j                  ddj                  t        | d   j	                                            Ht        j                  d|| |          c t        j
                  j                  j                  rt        | d       t        j
                  j                  j                  rt        | d       t        j                  j                  j                  r5t        j                  j                  j                  dk7  rt        | d       yyy)z0Print the info.json in a plain text format.
    r   {fg_blue}layouts{fg_reset}: %srf   {fg_blue}%s{fg_reset}: %sFconfig_fileN)rk   r   r;   rj   rl   r2   r3   r   rJ   rL   rT   config_sourcer5   rE   )r>   rQ   s     r+   print_text_outputru      s     l# J)HH5tyyU^H_HdHdHfAg7hiHH0#|C7HI	J zz\5)
zzL%(
$$):):)?)?)F)F-)WL%( *X$r-   c                    t        |       D ]  }|r| d| n|}|dv r|dk(  rE|dk(  r@t        j                  ddj                  t        | d   j	                                            ]t        | |   t              rt        | |   |       t        | |   t              rAt        j                  d|dj                  t        t        t        | |                            t        j                  d|| |           y)	zEPrint the info.json in a plain text format with dot-joined keys.
    .)r   r   r   rN   rq   rf   rr   N)rk   r   r;   rj   rl   
isinstancedictprint_dotted_outputlistmaprW   )r>   prefixrQ   
new_prefixs       r+   rz   rz      s     l# Q*0xq&c
44I&B,HH5tyyU^H_HdHdHfAg7hiS)40S 1:>S)40HH0*diiCQWXdehXiQjHk>lmHH0*l3>OPQr-   c                 |    t        |       }t        |j                               D ]  }t        |d||           y )Nz = )r   rk   rl   r<   )r`   rulesks      r+   print_parsed_rules_mkr      s:    ]#EEJJL! )1eAh'()
r-   z-kbz
--keyboardzKeyboard to show info for.)type	completerhelpz-kmz--keymapz#Keymap to show info for (Optional).)r   z-lz	--layouts
store_truezRender the layouts.)actionr   z-mz--matrixz+Render the layouts with matrix information.z-Lz--ledsz?Render the LED layout with LED indices (rgb_matrix/led_matrix).z-fz--formatfriendlyzIFormat to display the data in (friendly, text, json) (Default: friendly).)defaultarg_onlyr   z--asciiz)Render layout box drawings in ASCII only.)r   r   r   z-rz
--rules-mkz9Render the parsed values of the keyboard's rules.mk file.z-az--apiz7Show fully processed info intended for API consumption.zKeyboard information.c                    | j                   j                  j                  s9| j                  j	                  d       | j
                  d   j                          yt        | j                   j                  j                        s;| j                  j	                  d| j                   j                  j                         yt        | j                  j                        r*t        | j                   j                  j                         y| j                  j                  j                  dk(  rd| j                  j                  _        | j                   j                  j                  rIt        | j                   j                  j                  | j                   j                  j                        }n)t        | j                   j                  j                        }| j                  j                   st#        |      }| j                  j$                  dk(  r&t'        t)        j*                  |t,        d	             y| j                  j$                  d
k(  rt/        |       d}nX| j                  j$                  dk(  rt1        |       d}n1| j                  j	                  d| j                  j$                         y| j                   j                  j2                  rt5        ||       | j                   j                  j6                  rt9        ||       | j                   j                  j:                  rt=        ||       | j                   j                  j                  rt?        ||       yy)zHCompile an info.json for a particular keyboard and pretty-print it.
    zMissing parameter: --keyboardr3   FzInvalid keyboard: "%s"rs   Nr7   T)cls	sort_keystextr   zUnknown format: %s) r2   r3   r4   logerrorsubcommands
print_helpr   boolargsr   r   rt   r5   r   r   apir,   formatr<   r7   dumpsr   rz   ro   r   rJ   rL   rT   ledsr^   rE   )r   r>   r?   s      r+   r3   r3      s0     ::??##56**,szz//0.

0H0HICHHcjjoo667 $$5(,% zz"3::??#;#;SZZ__=S=ST !9!9:88<<),7 xx& djj?dKL	F	"L)
	J	&l+
*CHHOO< zz\:.
zzL*-
zz,
+
zzL*- r-   )T)rN   )+__doc__sysr7   milcr   qmk.json_encodersr   qmk.constantsr   r   qmk.decoratorsr   r   qmk.keyboardr	   r
   r   r   r   qmk.infor   r   
qmk.keymapr   qmk.pathr   stdoutr/   lower
startswithUNICODE_SUPPORTr,   rE   rJ   rT   r^   ro   ru   rz   r   argument
subcommandr3    r-   r+   <module>r      s      - 2 ? e e + $  **%%++-88?6o0l0'lTR&)&Q$ e\CU\xyeZ&KLdK;PQdJ|:ghdH\8yzdJ
T  IT  Ui/6IP{|dL<xydGL7pq'(7.   ) r z } U { i R M z7.r-   