
    5d5J              	       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     ED:\Marlin\Marlin-2.1.2.1\buildroot\share\PlatformIO\scripts\schema.pyextend_dictr      s    
1vv{{qt1}}!A$
1vv{{qt1QqT7**!A$!
1vv{{qt1QqT71Q4=00 !A$!ad {00    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    ||C  H3x==!!!!6!!!!!!% 	5 	5Dzz(6*++ 5!&)(++#& ((8,,!77G77g77u$$BeDkd""FF#3444 "!	5 	5r   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    222!222r   r   r   )rangeitemsr"   keysr
   r   r   )schemar   found_groupsr   fr   sr   fkeysr!   r+   wr   s                r   group_optionsr3   ,   si   B## # # ,,.. 	R 	RJGQggii R R
 R RF!,&&QQQQRR 32\..00222 	# 	#D &E5zzA~~**S//1aFQ1I...&+ - -NFF.4Qil6.BF1IaLOF+q	!V,,T""	## #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    +,,E}} 4ZZ\\ 	4UF F F??#344 F JJLLOE//u1E1E1E%**V,,,t3	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 2s   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    rrt          j
        d"|          rdnd	}|                    d#          }|                    d|          }d} |dk    r||k     s|dk    r|} g }|j        }d}n)|dk    r#||k     s|dk    r|} |d k    r| d$k    r	|j        }g }| dk    r|| dz   d                                          |d |                                          }}||j        k    r2|                    d          r|dd                                          }n|                    d%          rd&}|dk    r |||||          \  }}|dk    rd}zd' }!|                                }"|"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                                                               |                    |%           U|"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}*nt          j
        d:|(          r	d;}*|(d<k    }(nt          j
        d=|(          rd>}*t/          |(          }(nt          j
        d?|(          r&d@}*t1          |(                    dAd                    }(n|(d	         dBk    rdCny|(d	         dk    rdDnkt          j
        dE|(          rdFnTt          j
        dG|(          rdHn=t          j
        dI|(          rdJn&t          j
        dK|(          rdLn|(d	         dMk    rdNnd}*|(dk    r|(|)dO<   |*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_EXAMPLES_DIR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>   ||C(( )abbEKKMM/0||C/@/@oahhsmmmWXWcWcdgWhWhFoahhsmmmno 0'(3q5z'7'7'9'91SUVV9??;L;LC"byy&--*<*<*<"#ABB%++--CCj11 )ekkmm\\*55 )a(((8Or   z*/z[ z ]r   z^(-?\d+)\s*:\s*(.+)$'z''z:'z', zTemperature sensors available:zTemperature Sensorsz^//\s*#definez/*r$   rY   Tc                 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    778$BAFF #8$>BB # $%H'1xxxr   z#elifz#elsez#endifzno #if block at line !   z#ifr	   z#ifdefzdefined(   rl   z#ifndefz	!defined(      )sectionnameenabledr=   sid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[]rZ   arrayvaluetypez && requires
z^\(([^)]+)\)r0   rc   secondsunitsMOTHERBOARDoptions)r?   rm   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   rw   fnfkfileobjrt   line_number
conditionscomment_buffoptions_jsoneol_options	join_liner=   last_added_refthe_line
line_startline_enddefmatchrg   endposclinesenss2stcpos1cpos2cposrn   cpartsiselifiselseprevrv   define_namevaldefine_info
value_typefull_commentr   infos.                                                 r   extractr   O   s
   ]]F        #*MMGr++GjSTTGoFLE
C--// D9 D9B(B$$&& C	9'GKJLLKID!N#--// x9 x9q  $>>++ =D0SSbH<<DD'/*D !MM$//	 +9??,,D*H"==..
 E---# -(;(;D(A(A -$++HQRRL,>,>,@,@AAAA47HH\4J4Jy1') %$ $ $" U0%2CDDD!YYt__Fzz $&*7F7m&9&9&;&;T&())_=R=R=T=Tt !E$555+ESbS0A+E+E+EL % '',,GeABBioo6G6Ge  111!x(?GG B!%aT!:!:B(tAw,A,A",A,A,AAL%"555 !$DDD+0+<>S5E0;E<QXZf0g0g-g el** h'7>>EAB IIdOOE IIdB//E D{{"$') % 3&+"%%--5B;;$ $t++r		$)$5E+-L rzz&*4677m&9&9&;&;T%4%[=N=N=P=Pt E$777$//44OeABBioo>O>Oe  %//44HDk !B;;4?K|U\^j4k4k1L' rzz') ( ( (  "ZZ\\F%+AY'%96!9;OFF h9 h96!9+@+@z??a//"+,QK,Q,Q"R"RR  *~~//! 4V 4'*T"X~DH%Mt{{7748>>;K;K3L3L'M'M'M&--d333e++"))GGDHNN4D4D,E,E*GHHHHh..")),JtABBx~~7G7G,J,J,J*LMMMMi//")),KQRR8H8H,K,K,K*MNNNN "T)) 5=QK44GRSV^_`Vac q (/$/'.$.#&' ' "99)1JJX&7== ,)/J"%-CCX&6<< ,).J"%c((CCX&UWZ[[ ,)0J"'C(;(;"<"<CC7:1v}}7:1v}}79xQT7U7U *,79x@UWZ7[7[ *,79x@bdg7h7h *,79x  AD  FI  8J  8J *,7:1v}})+ ' "99Sk'&:%++:[-@ &aSQ[]_M`M`AaAa{:'> ( =+/99\+B+BL  %(9999;I 6 69EI 6/1 %'H_l$K$KE$ =(-a#(C<<5E>>957<G 4 '-77FbLL5;K	22)R//5AK	2*=2L #'"+55bwr{77K ''"+g*>>>#*2;w#7#DD)$55Fht KK4444 ALGBK0= E$555-8Nqx9C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9 C	9J Ns   _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   p  s    	C ?E	&%eA>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   <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   t  s    KKK	C PE		&%EQ	OOOP P P P P P P P P P P P P P P P P Ps   AA	Ac                     	 t                      } n8# t          $ r+}t          dt          |          z              d } Y d }~nd }~ww xY w| rdd l}t          |j                  dk    r|j        d         }nd}|dv r,t          d           t          | t          d                     |dv r,t          |            t          | t          d	                     |d
v r	 dd l
}nX# t          $ rK t          d           dd l}	 |                    g d           dd l
}n#  t          d           Y Y d S xY wY nw xY wt          d           t          | t          d                     d S d S d S )NzError: r   r   some)r   r   jsonszGenerating JSON ...zschema.json)groupr   zschema_grouped.json)r   ymlr   zInstalling YAML module ...)python3z-mpipinstallpyyamlzFailed to install YAML modulezGenerating YML ...z
schema.yml)r   r   printstrsysr
   argvr   r   r3   r   ImportError
subprocessrunr   )r-   excr   argr   r   s         r   mainr   y  s      i#c(("###  "2 	


sx==1(1+CCC +++'(((fd=11222 $$$&!!!fd#899::: )))
   2333!!!!NN#P#P#PQQQKKKK9:::FFF  K &'''fd<0011111E"2 "2( *)sD    
A!AAC" "D7 DD7D1-D71D76D7__main__)rm   r   pathlibr   r   tupler   r   r   r"   r3   r?   r   r   r   r   rD   r'   r   r   <module>r      s         !$ !% ! ! ! ! BJ566BJ{BJ~BJzBJ  BJ.//BJ'(( 5 5 5# # #(
 
 
_ _ _B	?T ? ? ? ? ?PT P P P P P
)2 )2 )2V zDFFFFF r   