
    g%                     \    S r SSKrSSKrSSKrSSKJr  SSKrSSKJr  SSK	r	 " S S5      r
g)z5functions to add css to mail html, successor in inces    N)Sheetsc                   x    \ rS rSrS/ 4S jrS rSS jrSS jrS rS	 r	S
 r
S rS rS rS rS rS rS rSrg)Jexes   Fc                 D   [        5       U l        Xl        S U l        S U l        S U l        X l        [        U5      S:X  a  U R                  5         [        U R                  5      S:X  a!  [        S5        [        R                  " S5        S U l        U R                  5         g )Nr   jesex has no cssx files   )r   sheets
do_verbosevarprefixdoc
cssx_fufislenset_fufi_from_environmentprintsysexitlocs	read_locs)selfr   r   s      !/home/ernad/ernad/python/jexes.py__init__Jexes.__init__   s}    h$ $z?a**,t1$+,HHQK	    c                 x   S[         R                  ;  a4  S U l        [        S[        R
                  S9  [        R                  " 5         [         R                  S   nUR                  S5      n/ nU H  nUR                  S5      (       d-  S[         R                  ;   a  [         R                  S   S-   U-   n[         R                  R                  U5      (       d  [        SU 3[        R
                  S9  M  UR                  U5        M     [        U5      S:X  a  [        S	[        R
                  S9  g X0l        g )
N	CSSXFILESzjexes has no CSSXFILESfile:/HOMEzjesex does not see r   r   )osenvironpathr   r   stderrr   split
startswithisfileappendr   r   )r   r%   partsr   parts        r   r   Jexes.set_fufi_from_environment&   s    bjj(DI*<HHJzz+&

3
D??3''Fbjj,@zz&)C/$677>>$''+D62Dd#  z?a+#**=$r   Nc                    [         R                  R                  U5      (       d-  U R                  (       a  [	        SU 3[
        R                  S9  gUR                  S5      (       d  [	        S[
        R                  S9  [        R                  " U5      nU R                  X25      nUSS S-   n[        R                  " U5      n[        R                  " XVU R                  S9nU$ )	z!external callers transform a fufizjexes does not see r   Nz.xhtmlzjexes needs .xhtml inputiz.html)r   )r#   r%   r)   r   r   r   r&   endswithfiling	parse_lax	trans_docdocingshowsrite)r   fufir   r   out_docout_fufistringhas_it_been_writtens           r   
trans_fufiJexes.trans_fufi;   s    ww~~d##+D62D}}X&&,zz#t$ ..+9w&W%$ll86:ooG""r   c                     Uc  U R                   n SU R                  U5      -   S-   U l        U R                  U5        UR	                  S5      nU H  nU R                  XB5        M     U$ )N{}z//*)r   get_nsr   remove_css_linkxpath	trans_ele)r   r   r   eleseles        r   r2   Jexes.trans_docN   sd    <99D%DKK,,s2S!yyCNN3% 
r   c                     SnUS-  nUR                  U5      nUc  g[        U5      nUS:  a&  [        SU S3[        R                  S9  [        5         US   nUS   R                  5       R                  U5        g	)
Nz./*[local-name()='html']/*[local-name()='head']z*/*[local-name()='link'][@rel='stylesheet']Fr	   zjexes sees z stylesheet linksr   r   T)rB   r   r   r   r&   quit	getparentremove)r   r   xp	link_elescount_linkslink_eles         r   rA   Jexes.remove_css_linkY   s    =
::IIbM	)n?K},=>zz#FQ<! ''1r   c                     UR                  5       nUR                  nUSS nUR                  S5      S   n[        U5      U l        U$ )z'there should be a better way to do thisr	   Nr?   r   )getroottag	partitionr   ns_len)r   r   root_elerR   nss        r   r@   Jexes.get_nsj   sF    ;;=ll!"g]]3""g 	r   c                    SUR                   ;   a1  SUR                   S   -   nX2S   ;   a  U R                  XS   U   5        SUR                   ;   a1  SUR                   S   -   nXBS   ;   a  U R                  XS   U   5        UR                  R                  U R                  S5      nXRS   ;   a  U R                  XS   U   5        g g )Nclass.id# name)attrib	add_stylerR   replacer   )r   rE   r   	the_classthe_idr^   s         r   rC   Jexes.trans_elev   s    cjj cjj11IM)sM)$<=3::3::d++Fd#sJv$67wwt{{B/<NN3VT 23  r   c                 v    SUR                   ;   a  UR                   S==   SU-   -  ss'   g X!R                   S'   g )Nstyle )r_   )r   rE   r9   s      r   r`   Jexes.add_style   s5    cjj JJw3</$

7r   c                     0 n[         R                  " S5      US'   [         R                  " S5      US'   [         R                  " S5      US'   U$ )Nz
\.[a-z_]+$rY   z	#[a-z_]+$r[   z[a-z]([a-z]+|[0-9])$r^   )recompile)r   ress     r   get_resJexes.get_res   sC    zz-0GJJ|,D	jj!89F
r   c                    SnU R                   R                  U5      n0 nU H  nSUR                  ;  a0  [        R                  " U5      n[        S[        R                  S9  MC  SUR                  ;  a3  [        R                  " U5      n[        SU 3[        R                  S9  M  UR                  S   X4R                  S   '   M     U$ )Nz./*[local-name()='rules']/*[local-name()='var']r^   z!jexes: no name for variable {err}r   valuezjexes: no value for variable )css_docrB   r_   r3   r4   r   r   r&   )r   rK   var_elesr   var_eleerrs         r   get_varJexes.get_var   s    =<<%%b)GW^^+kk'*9::'gnn,kk'*5cU;::'*1..*ACv&'   
r   c                    U R                  5       U l        U R                  5       U l        U R	                  5       U l        SnUS-  nU R                  R                  U5      n0 n0 US'   0 US'   0 US'   U H  nUR                  nSnU R
                   HB  nU R
                  U   R                  U5      (       d  M(  SnU R                  U5      nXU   U'     O   U(       a  Ml  U R                  (       d  M  [        SU S	35        M     X0l        U$ )
zexternel caller gets the locs//*[local-name()='rules']/*[local-name()='rule']z/*[local-name()='loc']r[   rY   r^   FTzjexes can not implement '')load_cssrq   ru   r   rm   rl   rB   textmatch	get_rulesr   r   r   )	r   rK   loc_elesr   loc_elelocfoundr^   ruless	            r   r   Jexes.read_locs   s    }}<<><<>>
&& <<%%b)T
WVG,,CE88D>'',, E NN3/E&+JsO ! 5T___1#a89   	r   c                    U R                   n[        R                  " US   5      R                  5       nSnU[	        U R                   5      :  ac  X   n[        R                  " U5      nUR                  S5       H  nUR                  U5        US-   nM     U[	        U R                   5      :  a  Mc  [        R                  " U5      U l	        U R                  $ )Nr   r	   z/child::node())
r   r0   r1   rQ   r   rB   r*   etreeElementTreerq   )r   r   css_xmlcount	cssx_fufir   childs          r   rz   Jexes.load_css   s     __
"":a=199;c$//**")I""9-C#34u%	 5 c$//** ((1||r   c                    SnUSU S3-  nU R                   R                  U5      n[        U5      S:X  a   U R                  (       a  [	        SU 35        g Sn0 nU GHM  nUR                  U5      nU GH1  nSUR
                  ;  a3  [        R                  " U5      n[	        SU 3[        R                  S	9  MG  UR
                  S   n	X;   a#  U R                  (       a  [	        S
U	 SU 35        OSXI'   SUR
                  ;   a  XI==   UR
                  S   -  ss'   M  SUR
                  ;  a  U R                  (       a  [	        S5        M  UR
                  S   n
XR                  ;  a  U R                  (       a  [	        S5        GM  XI==   U R                  U
   -  ss'   GM4     GMP     U R                  U5      nU$ )Nrx   z/*[local-name()='loc'][text()='z']r   zjexes can not find a rule for z../*[local-name()='prop']r^   zjexes: no name for variable r   zjexes find duplicate rule z in r]   litr   z-jexes: no lit= and no var= in {name} at {loc}z*jexes sees refer error for {name} in {loc})rq   rB   r   r   r   r_   r3   r4   r   r&   r   format_rules)r   r   rK   	rule_elesr   rule_ele	prop_elesprop_elert   r^   r   outs               r   r}   Jexes.get_rules   s   >
/uB77LL&&r*	y>Q6se<=(!H r*I%0 ++h/C8>"zz+v.= :4&SEJK"$EKHOO+K8??5#99K/MNooe,hh&JKtxx},7 & "> &
r   c                 D    SnU H  nX#S-   X   -   S-   -  nM     US S nU$ )Nr]   z: z;  )r   r   r   r^   s       r   r   Jexes.format_rules  s9    D$;,t33C #2h
r   )rq   r   r   r   r   rT   r%   r   rl   r
   r   )N)__name__
__module____qualname____firstlineno__r   r   r;   r2   rA   r@   rC   r`   rm   ru   r   rz   r}   r   __static_attributes__r   r   r   r   r      sO    "'B .%*#&	"
4%& D$,\r   r   )__doc__r#   rj   r   
lxml.etreer   r0   r
   r   r3   r   r   r   r   <module>r      s)    ; 	 	 
     r   