
    7jr                        d Z ddlZddlZddlmZ ddlZddlZddl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 ej(                  dddej*                  j,                  d       ej(                  ddddd       ej(                  dej*                  j/                  d      dd       ej(                  ddej0                  j2                  ej0                  j4                  ddd       ej(                  dddd d!"       ej(                  d#d$dd%&       ej6                  d'      d(                                                  Zy))z0Generate a keymap.c from a configurator export.
    N)cli)	info_json)KeymapJSONEncoder)
dump_lines)generate_jsonc                 d    t        | d   j                               }t        |      dk(  r|d   S dS )z1Assume layout macro when only 1 is available
    layouts   r   N)listkeyslen)keyboard_datar	   s     I/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/via2json.py_find_via_layout_macror      s6     =+0023GW*71:44    c           	         t        t        d |             } t        |       dk(  r
t               S t        j                  d      }t        j                  d      }t               }| D ]"  }|j                  |      }t        t        d |            }t               }|D ]  }d|v sd|v r|j                  |      }|D ]  }	|	j                  d      }	d	}
g }|	d   d
k(  rd}
|j                  |	dd         nF|	d   dk(  rd}
|j                  |	dd         n'|j                  d|	v r|	j                  d      n|	g       t        t        d |            }|j                  |
|d        |j                  |        |j                  |       % |S )Nc                     t        |       S )N)boolfs    r   <lambda>z!_convert_macros.<locals>.<lambda>   s
    tAw r   r   z(}\,)|(\,{)z({.+?})c                     | dv rdS dS )N)Nz},z,{FT r   s    r   r   z!_convert_macros.<locals>.<lambda>"   s    q4F/Fe D r   {}z {}tap+downr
   -up,c                 &    | j                  dd      S )NKC_ )replace)ss    r   r   z!_convert_macros.<locals>.<lambda>9   s    		%8L r   )actionkeycodes)r   filterr   recompilesplitfindallstripappendextendmap)
via_macrossplit_regexmacro_group_regexmacros	via_macromacro
macro_datammacro_groupsmacro_groupmacro_actionmacro_keycodess               r   _convert_macrosr>      s   f.
;<J
:!v**^,K

:.VF !"	!!),VPRWXYV
 	%Aax3!8088;#/ \K"-"3"3E":K#(L%'N"1~,'-&--k!"o>$Q3.'+&--k!"o>&--{HZk.?.?.Dal`mn &*#.Ln*]%^N%%>&Z['\, !!!$5	%6 	j!C!"F Mr   c                 
   t        j                  d      }t        dt        |             D ]U  }t        dt        | |               D ]8  }| |   |   }|j	                  |      }|sd|j                  d       | |   |<   : W | S )NzMACRO0?\(([0-9]{1,2})\)r   MC_r
   )r*   r+   ranger   matchgroup)keymap_datamacro_noijkcr9   s         r   _fix_macro_keysrI   D   s    zz45H1c+&' 7q#k!n-. 	7AQ"Br"A&)!''!*$6Aq!		77 r   c                 f   |d   j                  |      }|s?t        j                  j                  d| dt        j                  j
                   d       y |d   }t               }t        |      D ]  \  }}|j                  ||d   g        |j                  d        d	}t        d	|d
   d         D ]t  }t        d	|d
   d         D ]]  }	|t        |      k\  s||   d   d	   |k7  s||   d   d   |	k7  r|j                  |d ||	gg       n|j                  d ||	gg       |dz  }_ v t               }
| d   D ]n  }d	}t               }|D ](  }||   d	   |j                  ||   d	   |g       |dz  }* |j                          |D cg c]  }|d   	 }}|
j                  |       p |
S c c}w )Nr	   zLAYOUT macro z! is not a valid one for keyboard !layoutmatrixc                 "    | d   d   | d   d   fS )Nr
   r   r   )ks    r   r   z _via_to_keymap.<locals>.<lambda>[   s    AaDGQqT!W#5 r   )keyr   matrix_sizerowscolsr
   layers)getr   logerrorargskeyboardr   	enumerater/   sortrA   r   insert)
via_backupr   keymap_layoutlayout_datasorting_hatindexdataposrow_numcol_numrD   layer
layer_datarP   rH   s                  r   _via_to_keymaprh   O   s	   	*..}=Km_4UVYV^V^VgVgUhhijkh'K&K - 4tE4>234 56
CM-8@A Qm <V DE 	Gc+&&+c*:1*=a*@G*K{[^O_`aObcdOeipOp""3/A(BC""D7G*<#=>1HC	 &KH% 	'V
 	C3".!!;s#3A#6"<=1HC	 	&01be1
1:&	'  2s   F.z-oz--outputTzFile to write to)arg_onlytypehelpz-qz--quiet
store_truez&Quiet mode, only output error messages)ri   r'   rk   filenamerzVIA Backup JSON file)rj   ri   rk   z-kbz
--keyboardzThe keyboard's name)rj   	completerri   requiredrk   z-kmz--keymapvia2jsonzThe keymap's name)ri   defaultrk   z-lz--layoutzThe keymap's layout)ri   rk   z0Convert a VIA backup json to keymap.json format.c                    | j                   j                  j                  d      5 }t        j                  |      }ddd       t        | j                   j                        }| j                   j                  r| j                   j                  n
t        |      }|s4| j                  j                  d| j                   j                   d       yt        ||      }|s4| j                  j                  d| j                   j                   d       yt               }|j                  d      rt        |d         }t        |      }t!        | j                   j"                  | j                   j                  |||      }t        j$                  |t&        d	
      g}t)        | j                   j*                  || j                   j,                         y# 1 sw Y   xY w)zConvert a VIA backup json to keymap.json format.

    This command uses the `qmk.keymap` module to generate a keymap.json from a VIA backup json. The generated keymap is written to stdout, or to a file if -o is provided.
    rn   Nz(Couldn't find LAYOUT macro for keyboard z+. Please specify it with the '-l' argument.FzGCould not extract valid keycode data from VIA backup matching keyboard rK   r5   T)cls	sort_keys)rX   rm   openjsonloadr   rY   rL   r   rV   rW   rh   r   rU   r>   rI   r   keymapdumpsr   r   outputquiet)	r   fdr]   r   r^   rD   r8   keymap_jsonkeymap_liness	            r   rq   rq   u   sp    
					$ #YYr]
# chh//0M (+xxCHHOO<RS`<aM@ARAR@SS~  	A !]MJK_`c`h`h`q`q_rrstu J~~h$Z%9:
 &k2  1B1BMS^`jkKJJ{0ATRSLsxxchhnn=;# #s   GG)__doc__rw   r*   milcr   qmk.keyboardqmkqmk.pathqmk.infor   qmk.json_encodersr   qmk.commandsr   
qmk.keymapr   r   r>   rI   rh   argumentpathnormpathFileTyperY   keyboard_folderkeyboard_completer
subcommandrq   r   r   r   <module>r      sG    	     / # $5*Z#L dJCHH4E4EL^_dI\Hpqjsxx005Kabe\(D(DPSP\P\PoPoz~  JN  Uk  leZ$
I]^dJ4JKBC#> D L _ l c r `#>r   