
    Ii2              
          S SK r S SKJrJr   S SKJrJrJr   SSK
Jr  S SKr\R                  S    S:X  a
  Sr\r\rS rOS	r\r\rS
 rSS jrS r0 rS0 SS0 SSSSS	4
S jrg! \ a    S SK	JrJrJr   N]f = f! \\4 a	    S SK
Jr   Njf = f)    N)lineseppath)SequenceIteratorCallable   )tokenize   Tc                     U $ N )xys     6/venv/lib/python3.13/site-packages/chevron/renderer.pyunicoder      s        Fc                 p    SSSS.nU R                  SS5      n U H  nU R                  X!U   5      n M     U $ )z HTML escape all of these " & < >z&quot;z&lt;z&gt;)"<>&z&amp;)replace)string
html_codeschars      r   _html_escaper   #   sH     J ^^C)F&67 Mr   c                    U S:X  a  US   $ U HA  n U R                  S5       H  n X4   nM
     US;   a  Us  $  UR
                  (       a  Us  $ MC     U(       a+  [        R                  R                  SU < S[        < 35        g! [        [        4 a6     [        X45      n M  ! [        [        4 a    U[	        U5         n  M  f = ff = f! [         a    U=(       d    Ss s  $ f = f! [        [        [        [        4 a     M  f = f)z Get a key from the current scope.r   )r   F zCould not find key '')split	TypeErrorAttributeErrorgetattrint _CHEVRON_return_scope_when_falsyKeyError
IndexError
ValueErrorsysstderrwriter   )keyscopeswarnscopechilds        r   _get_keyr2   3   s
    czay 	32!LE	 ( 
"# 99 L :/ D 

WEF; ">2 22 ' 5%~6 2 %c%j 122" " #{"#*jA 	 	sn   C,BC,CCB%"C,%C	CC,C	CC,C)$C,(C))C,,D
	D
c                 8    X   $ ! [          a    Ub  US:X  a   g U(       a  SU-   OSn[        R                  " X U-   5      n[        R                  " USSS9 nUR                  5       sSSS5        s $ ! , (       d  f        g= f! [         a      gf = ff = f)zLoad a partialNr   r   rutf-8)encoding)r'   r   joinioopenreadIOError)namepartials_dictpartials_pathpartials_extpath_extpartial_pathpartials          r   _get_partialrC   d   s    ""  MR$7		.:l*H99]8ODLsW=||~ >===  		sJ    B=BA5)	B2B5
B	?BB
BBBBr   r   mustachez{{z}}c
                   ^^^^^^^^	 [        U [        5      (       a  [        U [        5      (       d
  S U  5       n
O(U [        ;   a  S [        U     5       n
O[	        U TT5      n
[        SS5      nTc  U/mU
 GH  u  pTS   nUS:X  a  TS	 M  U(       d+  [        T5      S:w  a  US;   a  TR                  SS	5        MF  MH  US
:X  a:  [        U[        5      (       d  [        US5      nXR                  SST-   5      -  nM  US:X  aU  [        UTT	S9nUSL a  US:X  a  TS   n[        U[        5      (       d  [        [        U5      S5      nU[        U5      -  nM  US:X  a<  [        UTT	S9n[        U[        5      (       d  [        [        U5      S5      nX-  nGM%  US:X  Ga  [        UTT	S9n[        U[        5      (       a  [        SS5      n/ nU
 Hf  nUSU4:X  a    O]UR                  U5        Uu  nnUS
:X  a  UU-  nM0  US:X  a  UT< SU< ST< 3-  nMH  UT< SSSSSSSSS.U   < SU< T< 3-  nMh     U[        U'   U" US#UUUUUUUU	4S jj5      n[        (       a  UU-  nGM  UUR!                  S5      -  nGM  [        U[        ["        45      (       a  [        U[        5      (       d  / nSnU
 H6  nUSU4:X  a  US-  nUSU4:X  a  US-  nUS:  a    OUR                  U5        M8     U H@  nU/T-   n[%        UUTTTTTTT	S9	n[        (       a  UU-  nM,  UUR!                  S5      -  nMB     GM  TR                  SU5        GM  US:X  a%  [        UTT	S9nTR                  SU(       + 5        GM  US:X  d  GM  ['        UTTT5      nUR)                  S5      S    nTnUR+                  5       (       a  UU-  n[%        UTTTTTUTT	S!9	nUR+                  5       (       a  UR-                  S"5      n[        (       a  UU-  nGM  UUR!                  S5      -  nGM     [        (       a  U$ UR/                  S5      $ )$u  Render a mustache template.

Renders a mustache template with a data scope and partial capability.
Given the file structure...
╷
├─╼ main.py
├─╼ main.ms
└─┮ partials
  └── part.ms

then main.py would make the following call:

render(open('main.ms', 'r'), {...}, 'partials', 'ms')


Arguments:

template      -- A file-like object or a string containing the template

data          -- A python dictionary with your data scope

partials_path -- The path to where your partials are stored
                 If set to None, then partials won't be loaded from the file system
                 (defaults to '.')

partials_ext  -- The extension that you want the parser to look for
                 (defaults to 'mustache')

partials_dict -- A python dictionary which will be search for partials
                 before the filesystem is. {'include': 'foo'} is the same
                 as a file called include.mustache
                 (defaults to {})

padding       -- This is for padding partials, and shouldn't be used
                 (but can be if you really want to)

def_ldel      -- The default left delimiter
                 ("{{" by default, as in spec compliant mustache)

def_rdel      -- The default right delimiter
                 ("}}" by default, as in spec compliant mustache)

scopes        -- The list of scopes that get_key will look through

warn -- Issue a warning to stderr when a template substitution isn't found in the data


Returns:

A string containing the rendered template.
c              3   $   #    U  H  ov   M     g 7fr   r   .0tokens     r   	<genexpr>render.<locals>.<genexpr>   s     .XE%X   c              3   $   #    U  H  ov   M     g 7fr   r   rG   s     r   rJ   rK      s     A)@e)@rL   r   r5   r   endr   )sectioninverted sectionFliteral
variable)r/   Tr   	no escaperO   z&  !#^/r   =r   )commmentrO   rP   rN   rB   zset delimiterrT   rS   c                 T   > [        U 0 TTTTTTU=(       a    U/T-   =(       d    TT	S9
$ )N)	datar>   r?   r=   paddingdef_ldeldef_rdelr.   r/   )render)
templater]   r_   r`   r^   r=   r?   r>   r.   r/   s
     r   <lambda>render.<locals>.<lambda>  s7    vh"$+8*6+8%,&.$($:dVF]$Df"&@(r   )	rb   r.   r^   r>   r?   r=   r_   r`   r/   rP   rB      )	rb   r>   r?   r=   r_   r`   r^   r.   r/   z 	r   )
isinstancer   string_typeg_token_cacher	   r   leninsertunicode_typer   r2   strr   r   appendpython3decoder   ra   rC   
rpartitionisspacerstripencode)rb   r]   r>   r?   r=   r^   r_   r`   r.   r/   tokensoutputtagr-   current_scopethingr0   texttagstag_typetag_keyrendtags_with_same_key	new_scoperB   leftpart_paddingpart_outs     ````````                  r   ra   ra      s   p (H%%8[11 /X.}$Ax)@AF h(;FR!F~ q	 %<q	 3v;!#355 a' 6 Ic<00c7+kk$w77F JS&t4E} q	e\22E
G4l5))F KS&t4Ee\22E
G4OF IS&t4E %** r7+!Cucl*KK$(+%Hg9,![0x( KKx,/+.47'*+.14-0,.	: '	:( *1(	!< 	< ", '+d#T $( $( ) 7dNFdkk'22F EHh#788"5+66 %&"!Cy#..*a/*ucl**a/*-1!KK$ " #E!&& 0I!4	*10=/;0=+3h'+-D w$$++g"66 #$ a' &&S&t4EMM!Y' I"3#0,@G $$T*1-D"L||~~$ wm+7,9'/(&26#')H ||~~#??51 w("(//'22W Z w}}W%%r   )F)r8   osr   r   collections.abcr   r   r   ImportErrorcollections	tokenizerr	   r)   SystemErrorr*   version_inforn   rl   rk   rg   r   
basestringr   r2   rC   rh   ra   r   r   r   <module>r      s    
 9<<##
 A!GLK GLK .b2  RsR$Uz&q  9889 	K  #"#s"   
A# A9 #A65A69B
	B
