
    ve6              	       j   d dl Z d dlZd dlmZ dedefdZ e j        d           e j        d           e j        d           e j        d	           e j        d
           e j        d           e j        d          gZd Z	d Z
d Zd ZdedefdZdedefdZd Zedk    r e             dS dS )    N)Pathdkc                    t          |          dk    r|d         | vri | |d         <   t          |          dk    r-|d         | |d                  vri | |d                  |d         <   t          |          dk    rG|d         | |d                  |d                  vr'i | |d                  |d                  |d         <   d S d S d S )N   r         )len)r   r   s     >D:\Marlin-2.1.1.1\buildroot\share\PlatformIO\scripts\schema.pyextend_dictr      s    FFaKKAaDMM!AaD'FFaKKAaD!A$''!AaD'!A$-FFaKKAaD!A$!--!AaD'!A$-! K--    z#^([XYZIJKUVW]|[XYZ]2|Z[34]|E[0-7])$z^AXIS\d$z^(MIN|MAX)$z^[0-8]$z^HOTEND[0-7]$z^(HOTENDS|BED|PROBE|COOLER)$z^[XYZIJKUVW]M(IN|AX)$c                    |                     d          }dt          |          cxk     r|k    rn d S t          D ]}|                    ||                   rg||         }d                    |          }d||<   d                    |          }	| d| d|	 }
|
| vrg | |
<   | |
                             ||f           d S d S )N_r   *|)splitr
   grouping_patternsmatchjoinappend)gdictfilekeysectkeyoptkeypindexoptpartspattsubkeymodkeywildkeykkeys              r   find_groupingr"      s    LLH ) )d
jj&!"" )fFXXhFHVhhx  G++++'++D5%+	$K'((( ) )r   c                 $   t          ddd          D ]}i }|                                 D ]7\  }}|                                D ]\  }}|D ]}t          |||||           8d |                                D             }|D ]}	||	         }
t	          |
          dk    rl|	                    d          \  }}}t          | |||f           |
D ]=\  }}| |         |         |         | |         |         |         |<   | |         |         |= >||	= d S )N
   c                     g | ]}|S  r'   ).0r   s     r   
<listcomp>z!group_options.<locals>.<listcomp>4   s    
,
,
,!A
,
,
,r   r   r   )rangeitemsr"   keysr
   r   r   )schemar   found_groupsr   fr   sr   fkeysr!   r+   wr   s                r   group_optionsr3   ,   si   RR    V,LLNN C CjgqWWYY C Czw C C<'66BBBBCC -
,|((**
,
,
,%  d5	%jj1nnjjooGAq!Aq	"""  %ay|F3VAYq\!_V	1f		D r   c                  |   t          d          } |                                 r|                                 5 }g }|D ]L}|                    d          r5|                                d         }|dk    r|                    |           Mdd                    |          z   dz   cd d d            S # 1 swxY w Y   dS )	NzMarlin/src/core/boards.hz#define BOARD_r   BOARD_UNKNOWNz['z','z'] )r   is_fileopen
startswithr   r   r   )bpathbfileboardslinebnames        r   load_boardsr?   @   s    	(	)	)	MMOO +zz|| +u6 7 7t'(( 7ZZ\\!_U  &--"6"6"6
F##
#d
*+ + + + + + + + + + + + + + + + 	s   A,B11B58B5c            
         t                      }  G d d          }ddd}i i d}t          j        d          }d}|j        }d	}|                                D ]\  }}	t          d
|                                          5 }
d}d	}g }g }d}d}d}d}d }|
                                D ]}|dz  }|                                }|r||rdnd|z   z  }n||}}|	                    d          }|r|d d                                         }c|}|
                    |          }||j        k    rh|sE|                    d          r0|                    |dd                                                     n!d                    |          |d<   g }|j        }d }||j        |j        fv r(|                    d          }|d	k     r|}n[|d |                                         ||dz   d                                          }}||j        k    rd|d d          d}|j        }|                    d          r|dd                                          }||j        k    rFt          j
        d|          }|r-|d                             dd          }||d          d| dz  }||j        k    r |d k    r	|j        d!}} |||||          \  }})||j        k    r|t          j
        d"|          rdnd	}|                    d#          }|                    d|          }d} |dk    r||k     s|dk    r|} g }|j        }d}nK|dk    rE||k     s|dk    r9|} |                    d$          rd%}||j        k    r|d k    r| d&k    r	|j        }g }| dk    r|| dz   d                                          |d |                                          }}||j        k    r1|                    d          r|dd                                          }|dk    r |||||          \  }}|dk    rd}d' }!|                                }"|"d	         d(k    |"d	         d)k    }$}#|#s|$s|"d	         d*k    rt)          |          d	k    rt+          d+|           |                                }%|#s|$r]d,|%d         z   |%d<   |#r8|%                     |!|d-d                                                               |                    |%           _|"d	         d.k    r;|                     |!|d/d                                                    g           |"d	         d0k    r6|                    d1|d2d                                           d3g           |"d	         d4k    r6|                    d5|d6d                                           d3g           *|d k    r|d         d k    |d/         |d7         }(}'}&|dz  }||'|&||d8})|(dk    r|(|)d9<   |(dk    rd:}*nt          j
        d;|(          r	d<}*|(d=k    }(nt          j
        d>|(          rd?}*t/          |(          }(nt          j
        d@|(          r&dA}*t1          |(                    dBd                    }(n|(d	         dCk    rdDny|(d	         dk    rdEnkt          j
        dF|(          rdGnTt          j
        dH|(          rdIn=t          j
        dJ|(          rdKn&t          j
        dL|(          rdMn|(d	         dNk    rdOnd}*|*dk    r|*|)dP<   |r&dQ                    t3          |g                     |)dR<   |r_dS                    |          }+||j        k    rd|)d<   n|+|)d<   g }t          j
        dT|+          },|,r|,d         },|,dUk    s|,dVk    rdW},|,|)dX<   |'dYk    r| dk    r| |)dZ<   n|dk    r	||)dZ<   |rd}|||	         vri ||	         |<   |'||	         |         v rB||	         |         |'         }-t5          |-t6                    r|-g}-|-                    |)           n|)||	         |         |'<   ||j        k    r|)}	 d d d            n# 1 swxY w Y   |S )[Nc                   "    e Zd ZdZdZdZdZdZdS )extract.<locals>.Parser   r   r   r	   	   N)__name__
__module____qualname__NORMALBLOCK_COMMENTEOL_COMMENTGET_SENSORSERRORr'   r   r   ParserB   T   s'        &-++%%%r   rL   basicadvanced)zConfiguration.hzConfiguration_adv.h)rM   rN   z7^(//)?\s*(#define)\s+([A-Za-z0-9_]+)\s*(.*?)\s*(//.+)?$)CONFIGURATION_H_VERSIONCONFIGURATION_ADV_H_VERSIONCONFIG_EXPORTr   Marlinnoner6   Fr    \r%   z//r   commentc                    |                      d          r| dd                                          }|                     d          r|                     d          n+|                     d          r|                     d          nd}|rZ| d|dz                                            | |dz   d                                          }}|dk    r|                    |           ny| dd                                          }n\|                      d	          r| d
d                                          }n*|                      d          s|                    |            ||fS )N:r   {}[]r   r6   z@section   z========)r9   striprindexr   )coptsecbufrefr   cbrcmts          r   use_commentzextract.<locals>.use_comment   s;   	S 
ABB%++--a\\#..]AHHSMMMQ\\RUEVEV4]AHHSMMM\]c	 Ac!eG*""$$aAioo&7&7Cs
))V]]3'''qrrU[[]]ss
,,z
"
" abbEKKMMccll:&& mmAH_r   z*/z[ z ]r   z^(-?\d+)\s*:\s*(.+)$'z''z:'z', zTemperature sensors available:zTemperature Sensorsz^//\s*#definez/*rX   Tr$   c                 r    | dk    s*t          j        d|           st          j        d|           r| S d|  dS )Nr6   z^[A-Za-z0-9_]*(\([^)]+\))?$z^[A-Za-z0-9_]+ == \d+?$())rer   )r0   s    r   atomizezextract.<locals>.atomize   sI    	
b	0!	4	4 
	,a	0	0 
 xXXXor   z#elifz#elsez#endifzno #if block at line !   z#ifr	   z#ifdefzdefined(   rk   z#ifndefz	!defined(      )sectionnameenabledr=   sidvalueswitchz^(true|false)$booltruez^[-+]?\s*\d+$intz,[-+]?\s*(\d+\.|\d*\.\d+)([eE][-+]?\d+)?[fF]?floatr/   "stringcharz^(LOW|HIGH)$statez^[A-Za-z0-9_]{3,}$enumz^{(\s*[-+]?\s*\d+\s*(,\s*)?)+}$zint[]z@^{(\s*[-+]?\s*(\d+\.|\d*\.\d+)([eE][-+]?\d+)?[fF]?\s*(,\s*)?)+}$zfloat[]rY   arraytypez && requires
z^\(([^)]+)\)r0   rb   secondsunitsMOTHERBOARDoptions)r?   rl   compilerG   r+   r   r8   	readlinesr^   endswithr   rI   r9   r   r   rH   rJ   findreplacer   r
   	Exceptionpopr{   r|   sum
isinstancedict).r<   rL   r   sch_outdefgrepignorer   rv   fnfkfileobjrs   line_number
conditionscomment_buffoptions_jsoneol_options	join_liner=   last_added_refthe_line
line_startline_enddefmatchrf   endposclinesenss2stcpos1cpos2cposrm   cpartsiselifiselseprevru   define_namevaldefine_info
value_typefull_commentr   infos.                                                 r   extractr   O   s
   
--         'jJJB((:PQQ
U	}} E$ E$VRHb   D$G7;:<<;9
4>$$&& y$ y$x1K ~~H .	T!ccrX--TT +:T d##I "IOOTX}}T""H
 !!! ,,T22 (122,,,..////"%((<"8"8nYlle  " $e&7888iiooV

ee&M''))4q		?+@+@+B+BTe 
%#	#	#0<,000|le 	8uQRRy'8'8u 	"""X-u55d	 -GOOC%%r$q',,R,,,,|
5&
&
& 
2	2	2')>eu)k%wUUlG 
%,		x($//
6!!QRYYt__UYYtR  U T%2++dl!ekk
2++55==ERKKd 
		#		2d 
%,		8t#3#3r		 u| 	

aM''))4;+<+<+>+>Te 
%%	%	%


3

:qrr):): 
"*{5,VV|W 	

l    jjllVQi7*F1I,@VV i$& i$F1I11	ZA		<{<<=== ^^d	 6 R.tBx
8$++ggd122hnn&6&677888
)u

''$qrr(.."2"23356666
)x

8T!""X^^%5%5888:;;;;
)y
 
 9d122hnn&6&6999;<<<< d

 #+1+"5x{HQKC{g 
Qhc  k 
3K( 
zz8%s++ zF]ss8$c** zXXss8CSII z3;;s2&&''ss #A#HHQ3ff/377 gg"7== ff"DcJJ gg8$gilmm iiQ3gg  
r		;v. 
Ov{{3z2;N;N/O/O[, 
 %ii--| 5$
$
$!#I!-I x66u
 %aC<<5E>>95$G 
	%	%&B,, &{92 ,{9
(b| 
	#	#BWR[%9 
G,	,	,bk'";/t
T4
 
 14${{; ,7wr{7K(	%#	#	##~sy$D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$ D$L 	s   _a((a,	/a,	r-   jpathc                     |                     d          5 }t          j        | |dd           d d d            d S # 1 swxY w Y   d S )Nr2   Fr   )ensure_asciiindent)r8   jsondump)r-   r   jfiles      r   	dump_jsonr   q  s    jjoo 9)FEa88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   <A A ypathc                     dd l }|                    d          5 }|                    | |ddd           d d d            d S # 1 swxY w Y   d S )Nr   r2   Fx   r   )default_flow_stylewidthr   )yamlr8   r   )r-   r   r   yfiles       r   	dump_yamlr   u  s    jjoo J))FEe3q)IIIJ J J J J J J J J J J J J J J J J Js   AA	Ac                  .   	 t                      } n8# t          $ r+}t          dt          |          z              d } Y d }~nd }~ww xY w| rt          d           t	          | t          d                     t          |            t	          | t          d                     	 dd l}n># t          $ r1 t          d           dd l	}|
                    g d           dd l}Y nw xY wt          d           t          | t          d	                     d S d S )
NzError: zGenerating JSON ...zschema.jsonzschema_grouped.jsonr   zInstalling YAML module ...)python3z-mpipinstallpyyamlzGenerating YML ...z
schema.yml)r   r   printstrr   r   r3   r   ImportError
subprocessrunr   )r-   excr   r   s       r   mainr   z  sV   99&&   	CHH&&&&&&  (FD''(((FD.//000;;;;	   	%&&&>>???@@@;;;;;	 FD&&'''''( (s&    
A!AA$B) )8C$#C$__main__)rl   r   pathlibr   r   tupler   r   r   r"   r3   r?   r   r   r   r   rD   r'   r   r   <module>r      s         $ %     233KNJ+,,$%% ) ) )  (
 
 
` ` `D	9T 9 9 9 9 9JT J J J J J
( ( (0 z r   