
    =(                         S r SSKrSSKrSSKJr  SSKJrJrJr  SSK	J
r
  SSKJrJrJrJr  \R                   " S\R"                  5      r\R                   " S\R"                  5      rS	rS
r\" SS5      r " S S\5      rg)zHA Lark Transformer for transforming a Lark parse tree into a Python dict    N)
namedtuple)ListDictAny)Meta)TransformerDiscard_DiscardTypev_argsz(<<([a-zA-Z][a-zA-Z0-9._-]+)\n([\s\S]*)\1z)<<-([a-zA-Z][a-zA-Z0-9._-]+)\n([\s\S]*)\1__start_line____end_line__	Attribute)keyvaluec                     ^  \ rS rSr% Sr\\S'   S1S\4U 4S jjjrS\S\	4S jr
S\S\4S jrS\S\4S	 jrS\S\4S
 jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jr\ " SS9S\!S\S\4S j5       r"S\S\#4S jr$S\S\4S jr%S\S\4S jr&S\S\4S jr'S\S\4S  jr(S\S\\\4   4S! jr)S\S\4S" jr*S\S\4S# jr+S\S\4S$ jr,S\S\4S% jr-S\S\4S& jr.S\S\4S' jr/S\S\4S( jr0S\S\4S) jr1S\S\4S* jr2S\S\4S+ jr3S,\S\4S- jr4S,\S\4S. jr5S,\S\4S/ jr6S0r7U =r8$ )2DictTransformer   zITakes a syntax tree generated by the parser and
transforms it to a dict.
	with_metac                 .   > Xl         [        TU ]	  5         g)z
:param with_meta: If set to true then adds `__start_line__` and `__end_line__`
parameters to the output dict. Default to false.
N)r   super__init__)selfr   	__class__s     #lib/third_party/hcl2/transformer.pyr   DictTransformer.__init__   s    
 #    argsreturnc           
      t    [        SR                  U Vs/ s H  n[        U5      PM     sn5      5      $ s  snf N )floatjoinstrr   r   args      r   	float_litDictTransformer.float_lit&   s,    RWW$7$3c#h$78997   5c           
      t    [        SR                  U Vs/ s H  n[        U5      PM     sn5      5      $ s  snf r    )intr#   r$   r%   s      r   int_litDictTransformer.int_lit)   s,    2775CH56775r)   c                     U R                  U5      nUS   S:X  a  gUS   S:X  a  gUS   S:X  a  g US   S:X  a  US   $ US   $ )	Nr   trueTfalseFnull(   strip_new_line_tokensr   r   s     r   	expr_termDictTransformer.expr_term,   s`    ))$/ 7f7g7f 7c>7NAwr   c                 <    U R                  U5      nUS    US    3$ Nr   r3   r4   r6   s     r   index_expr_termDictTransformer.index_expr_term=   s)    ))$/q'47)$$r   c                 6    U R                  U5      nSUS    S3$ )N[r   ]r4   r6   s     r   indexDictTransformer.indexA   s$    ))$/47)1~r   c                     US    US    3$ r:    r6   s     r   get_attr_expr_term"DictTransformer.get_attr_expr_termE       q'47)$$r   c                     SUS    3$ )N.r   rC   r6   s     r   get_attrDictTransformer.get_attrH   s    47)}r   c                     US    US    3$ r:   rC   r6   s     r   attr_splat_expr_term$DictTransformer.attr_splat_expr_termK   rF   r   c                 <    SR                  S U 5       5      nSU 3$ )Nr!   c              3   8   #    U  H  n[        U5      v   M     g 7fNr$   .0r&   s     r   	<genexpr>-DictTransformer.attr_splat.<locals>.<genexpr>O        4t3s88t   z.*r#   r   r   args_strs      r   
attr_splatDictTransformer.attr_splatN   s"    774t44H:r   c                     US    US    3$ r:   rC   r6   s     r   full_splat_expr_term$DictTransformer.full_splat_expr_termR   rF   r   c                 <    SR                  S U 5       5      nSU 3$ )Nr!   c              3   8   #    U  H  n[        U5      v   M     g 7frP   rQ   rR   s     r   rT   -DictTransformer.full_splat.<locals>.<genexpr>V   rV   rW   z[*]rX   rY   s      r   
full_splatDictTransformer.full_splatU   s#    774t44XJr   c                 l    U R                  U5       Vs/ s H  o R                  U5      PM     sn$ s  snf rP   )r5   to_string_dollarr%   s      r   tupleDictTransformer.tupleY   s1    6:6P6PQU6VW6Vs%%c*6VWWWs   1c                 X    U R                  US   5      nU R                  US   5      nX#0$ r:   )strip_quotesrf   r   r   r   r   s       r   object_elemDictTransformer.object_elem\   s4     Q(%%d1g.|r   c                 `    U R                  U5      n0 nU H  nUR                  U5        M     U$ rP   )r5   update)r   r   resultr&   s       r   objectDictTransformer.objectd   s2    ))$/!#CMM# r   c                     U R                  U5      nSn[        U5      S:  a8  SR                  US    Vs/ s H  o3[        Ld  M  [	        U5      PM     sn5      nUS    SU S3$ s  snf )Nr!   r3   z, r   r2   ))r5   lenr#   r	   r$   )r   r   rZ   r&   s       r   function_callDictTransformer.function_callk   sk    ))$/t9q=yyd1g!TgsGAS(#c(g!TUHq'!H:Q'' "Us   A&A&c                     U$ rP   rC   r6   s     r   	argumentsDictTransformer.argumentsr   s    r   c                     [         $ rP   r	   r6   s     r   new_line_and_or_comma%DictTransformer.new_line_and_or_commau       r   T)metar   c                     UGt p4UnU R                   (       a1  UR                  [        UR                  [        UR
                  05        [        U5       H  nU R                  U5      nXu0nM     U$ rP   )r   ro   
START_LINElineEND_LINEend_linereversedrj   )r   r   r   block_labels
block_bodyrp   label	label_strs           r   blockDictTransformer.blockx   si    $(!!+>>MM		dmm l+E))%0I(F , r   c                     [        US   5      nUR                  S5      (       a  UR                  S5      (       a  USS nU R                  US   5      n[	        X#5      $ )Nr   "r3   )r$   
startswithendswithrf   r   rk   s       r   	attributeDictTransformer.attribute   sV    $q'l>>#3<<#4#4a)C%%d1g.$$r   c                 J    U R                  U5      nUS    SUS    SUS    3$ )Nr   z ? r3   z :    r4   r6   s     r   conditionalDictTransformer.conditional   s5    ))$/q'#d1gYc$q'33r   c                 b    SR                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf N r#   r$   r%   s      r   	binary_opDictTransformer.binary_op   s'    xxT2TcST2332   ,c                 b    SR                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf r    r   r%   s      r   unary_opDictTransformer.unary_op   s'    wwD1DSCD1221r   c                     U R                  U5      nSR                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf r   r5   r#   r$   r%   s      r   binary_termDictTransformer.binary_term   7    ))$/xxT2TcST2332   =c                    U R                  U5      n[        5       n0 nU H  n[        U[        5      (       a]  UR                  U;   a  [        UR                   S35      eUR                  X4R                  '   UR                  UR                  5        Mu  UR                  5        HB  u  pV[        U5      nXS;   a(  XR;   a  [        U S35      eX5   R                  U5        M=  U/X5'   MD     M     U$ )Nz already defined)r5   set
isinstancer   r   RuntimeErrorr   additemsr$   append)r   r   
attributesrp   r&   r   r   s          r   bodyDictTransformer.body   s    " ))$/U
!#C#y))77f$&#''2B'CDD"%))wwsww' #&))+JCc(C},".#6F/G"HH**51',g #. " r   c                 .    U R                  U5      nUS   $ Nr   r4   r6   s     r   startDictTransformer.start   s    ))$/Awr   c                     [        US   5      $ r   rQ   r6   s     r   binary_operatorDictTransformer.binary_operator   s    47|r   c                     [         R                  [        US   5      5      nU(       d  [        SUS    35      eSnSUR	                  S5      R                  U5       S3$ )Nr   Invalid Heredoc token: 
	 r   r   )HEREDOC_PATTERNmatchr$   r   grouprstrip)r   r   r   
trim_charss       r   heredoc_template DictTransformer.heredoc_template   s\    %%c$q'l3!8a	BCC
5;;q>((45Q77r   c                    [         R                  [        US   5      5      nU(       d  [        SUS    35      eSnUR	                  S5      R                  U5      nUR                  S5      n[        R                  nU H4  n[        U5      [        UR                  S5      5      -
  n[        Xh5      nM6     U Vs/ s H  owUS  PM	     nnSSR                  U5      -  $ s  snf )Nr   r   r   r   
r   z"%s")HEREDOC_TRIM_PATTERNr   r$   r   r   r   splitsysmaxsizeru   lstripminr#   )	r   r   r   r   textlines
min_spacesr   leading_spacess	            r   heredoc_template_trim%DictTransformer.heredoc_template_trim   s    
 %**3tAw<8!8a	BCC
{{1~$$Z0

4  [[
D YT[[-=)>>NZ8J 
 055utjk"u5		%((( 6s   ;Cc                     [         $ rP   r|   r6   s     r   new_line_or_comment#DictTransformer.new_line_or_comment   r   r   c                     U R                  U5      nSR                  USS  Vs/ s H  n[        U5      PM     sn5      nSU S3$ s  snf )Nr   r3   r   r>   r?   r   r   r   r&   for_exprs       r   for_tuple_exprDictTransformer.for_tuple_expr   sL    ))$/88a<#SX<=8*A =   Ac                     U R                  U5      nSR                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf r   r   r%   s      r   	for_introDictTransformer.for_intro   r   r   c                     U R                  U5      nSR                  U Vs/ s H  n[        U5      PM     sn5      $ s  snf r   r   r%   s      r   for_condDictTransformer.for_cond   r   r   c                     U R                  U5      nSR                  USS  Vs/ s H  n[        U5      PM     sn5      nSU S3$ s  snf )Nr   r3   r   {}r   r   s       r   for_object_exprDictTransformer.for_object_expr   sO    ))$/88a<#SX<= H:R  	 =r   c                 V    U Vs/ s H  o"S:w  d  M
  U[         Ld  M  UPM     sn$ s  snf )z{
Remove new line and Discard tokens.
The parser will sometimes include these in the tree so we need to strip them out here
r   r|   r%   s      r   r5   %DictTransformer.strip_new_line_tokens  s)    
  $Jtd{s'7ItJJJs   	&&&r   c                     [        U[        5      (       a@  UR                  S5      (       a$  UR                  S5      (       a  [        U5      SS $ SU S3$ U$ )zWrap a string in ${ and }r   r3   r   z${r   r   r$   r   r   r   r   s     r   rf    DictTransformer.to_string_dollar  sR    eS!!$$)<)<5z!B''r?"r   c                     [        U[        5      (       a:  UR                  S5      (       a$  UR                  S5      (       a  [        U5      SS $ U$ )z:Remove quote characters from the start and end of a stringr   r3   r   r   r   s     r   rj   DictTransformer.strip_quotes  sD    eS!!$$)<)<5z!B''r   c                     [        US   5      $ r   rQ   r   s     r   
identifierDictTransformer.identifier  s    
 58}r   )r   )F)9__name__
__module____qualname____firstlineno____doc__bool__annotations__r   r   r"   r'   r+   r,   r   r7   r$   r;   r@   rD   rI   rL   r[   r^   rc   rg   r   rl   rq   rv   ry   r
   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   rf   rj   r   __static_attributes____classcell__)r   s   @r   r   r      s    O$  :d :u :8D 8S 8d s "%D %S %$ 3 %t % %T c % %# %t  % %# % t    X$ X4 X  4 D ($ (3 (d t $ <  $ d t  $%d %y %4 4 44d 4s 43T 3c 34 4 4% %$sDy/ %N$ 4 D S 8T 8c 8)$ )3 )0  4 C 
4d 4s 44T 4c 4!D !S !K$ K4 Kc c # #    r   r   )r   rer   collectionsr   typingr   r   r   	lark.treer   lark.visitorsr   r	   r
   r   compileSr   r   r   r   r   r   rC   r   r   <module>r      sy    N 	 
 " " "  D D **H"$$Ozz"NPRPTPTU  
 {$45	Jk Jr   