
    7j                         d dl mZ d dlmZmZmZmZ  ed      Zedz  Zedz  Z	d Z
ddZdd	Zdd
Zd Zd Zd ZddZddZd Zy)    )Path)merge_ordered_dictsdeep_update	json_loadvalidatezdata/constants/keycodesextrasc                     g }| j                  | d      D ]/  }|j                  |j                  j                  d      d          1 |j	                  d       |S )Nz_[0-9].[0-9].[0-9].hjson_T)reverse)globappendstemsplitsort)pathprefixretfiles       E/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/keycodes.py_find_versionsr   
   sZ    
C		VH$<=> -

499??3'+,- HHTHJ    Nc                 j    t        |      }|j                          |j                  |       dz   }|d | S )N   )list_versionsr   index)versionlangversionslocs       r   _potential_search_versionsr"      s7    T"H
..
!A
%CDS>r   c                     | rt         S t        S N)EXTRAS_PATHKEYCODES_PATHr   s    r   _search_pathr(      s    ;1M1r   c                     | rd|  S dS )N	keycodes_r    r'   s    r   _search_prefixr,       s    !%Ytf5:5r   c                    dg i}|D ]z  }|d   j                  | | d| dz         | j                  | d| d      D ]A  }|j                  j                  | d| dd      }||vrg ||<   ||   j                  |       C | |S )Nr   z.hjsonz_*.hjson )r   r   r   replace)r   r   r    filesr   r   fragments          r   _locate_filesr2   $   s    "IE )c
$F81WIV!<<=II'(;< 	)Dyy((F81WIQ)?DHu$"$h(O""4(		)) Lr   c                     i }| j                         D ]:  }g }|D ]  }|j                  t        |              t        |t	        |             < |S r$   )valuesr   r   r   r   )r0   speccategoryspecsr   s        r   _process_filesr8   3   sY    DLLN 6 	*DLL4)	* 	D-e456 Kr   c                 `   t        | d       g }| d   j                         D ]7  }|j                  |d          |j                  |j	                  dg              9 t        |D cg c]  }|j                  |      dkD  s| c}      }|rt        ddj                  |       d      y c c}w )	Nzqmk.keycodes.v1r   keyaliasesr   z+Keycode spec contains duplicate keycodes! (,))	r   r4   r   extendgetsetcount
ValueErrorjoin)r5   r   valuex
duplicatess        r   	_validaterG   @   s    T$% Hj!((* 2e%		)R012 CAX^^A->-BaCDJFsxxPZG[F\\]^__  Ds   %B+?B+c                    | dk(  rt        |      d   } t        |      }t        |      }t        | |      }t	        t        |||            }| |d<   t        t        |j                  di       j                                     |d<   t        t        |j                  di       j                                     |d<   t        |       |S )z4Build keycode data from the requested spec file
    latestr   r   r   ranges)r   r(   r,   r"   r8   r2   dictsortedr?   itemsrG   )r   r   r   r   r    r5   s         r   	load_specrN   N   s     (%a(DD!F)'48H -fh?@D DOF488J#;#A#A#CDED&(B!7!=!=!?@ADN dOKr   c                 F    t        |       }t        |       }t        ||      S )z4Return available versions - sorted newest first
    )r(   r,   r   )r   r   r   s      r   r   r   f   s%     DD!F$''r   c                      t               } t        j                  d      D ]/  }| j                  |j                  j                  d      d          1 | S )zReturn available languages
    z"keycodes_*_[0-9].[0-9].[0-9].hjsonr   r   )r@   r%   r   addr   r   )r   r   s     r   list_languagesrR   o   sK     %C  !EF )		$Q'() Jr   r$   )pathlibr   qmk.json_schemar   r   r   r   CONSTANTS_PATHr&   r%   r   r"   r(   r,   r2   r8   rG   rN   r   rR   r+   r   r   <module>rV      s`     Q Q'(+h&26
`0(r   