
    CPc'G                         d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ	 d dl
mZmZ  G d deej                  Zedk    r e                                             dS dS )    N)etree)inkex_gettext)WebSlicerMixinis_emptyc                       e Zd Zd ZdZd Zd Zg Zd Zd Z	d Z
d Zd	 Zd
 Zd ZdZd Zd Zd Zd Zd Zd Zi Zd ZddZd Zd Zi Zd Zd dZg Zd Zd Z dS )!Exportc                     |                     d           |                     d           |                     dt          j        d           |                     dt          j        d           d S )Nz--tabz--dirz--create-dir
create_dir)typedestz--with-code	with_code)add_argumentinkexBoolean)selfparss     2/usr/share/inkscape/extensions/webslicer_export.pyadd_argumentszExport.add_arguments    sj    '"""'""".u}<PPP-em+NNNNN    z{http://www.w3.org/2000/svg}c           	      n   t          | j        j                  r!t          j        t          d                    | j        j        d         dk    s| j        j        d         dk    r| j        j        dd         | j        _        t          j                            | j        j                  s| j        j	        rq	 t          j
        | j        j                   n# t          $ rD}t          j        t          d                    | j        j        |                              d }~ww xY wt          j        t          d                    | j        j                                      |                                 }|!t          j        t          d                    |                     |           d S )	Nz/You must give a directory to export the slices./\r   zCan't create '{}': {}.zDir doesn't exist '{}'.zNo slicer layer found.)r   optionsdirr   AbortExtension_ospathexistsr
   makedirs	Exceptionformatget_slicer_layerunique_html_id)r   eslicer_layers      r   validate_inputszExport.validate_inputs(   s   DL$%% 	&CDD   <B3&&$,*:2*>$*F*F#|/"5DLw~~dl.// 	|& K 01111    .299$,:JANNOO  
 */66t|7GHHII   ,,..&q)A'B'BCCC---ts   ;C 
D($?D##D(c                     	 t          j        |          }n# t          $ r Y dS w xY w|                                \  }}|j        }|d}||dd          dk    r
|d d         }||fS )N)    r   r   
)
subprocessPopenFileNotFoundErrorcommunicate
returncode)r   cmdpipestdoutr   stss         r   get_cmd_outputzExport.get_cmd_outputG   s    	#C((DD  	 	 	55	$$&&	o;C&+"5"5CRC[FF{s    
%%c                    |                                 D ]8}|j        | j        dz   | j        dz   | j        dz   | j        dz   fv r|                     |          }|d         | j        v rt          j        d                    |d                              d}|d         dz   t          |          z   | j        v r'|d	z  }|d         dz   t          |          z   | j        v '|dxx         dt          |          z   z  cc<   | j        	                    |d                    | 
                    ||           |                     |           :d S )
Nrectr   circleghtml-idz1You have more than one element with "{}" html-id.   -r*   )getchildrentagsvgNSget_el_conf	_html_idsr   errormsgr#   strappend	save_confr%   )r   elchildconfns        r   r%   zExport.unique_html_idV   sl   ^^%% 	+ 	+Ey
V#
V#
X%
S 	   ''..	?dn44NKRR O   
 A	?S03q669dnLLQ  	?S03q669dnLLOOOsSVV|3OOO%%d9o666tU+++##E***)	+ 	+r   c                 T    |                      d          \  }}|dk    od|v | _        d S )Nzconvert --versionr   ImageMagick)r6   
has_magick)r   statusoutputs      r   test_if_has_imagemagickzExport.test_if_has_imagemagickm   s4    ../BCC A+A-6*Ar   c                    |                                   |                                 }|r|S |                     ddd           |                                  |                     |                                            | j        j        r(|                                  | 	                                 | 
                                 d S )Nbodyz
text-aligncenter)rP   r(   reg_csscreate_the_temporary_svgexport_chids_ofr$   r   r   make_html_filemake_css_filedelete_the_temporary_svg)r   streamerrors      r   savezExport.saveq   s    $$&&&$$&& 	LV\8444%%'''T2244555<! 	!!!!   %%'''''r   c                 
   t          t          j                            | j        j        d          d          }|                    d|                                 z   dz   dz   dz   dz              |                                 d S )Nzlayout.htmlwz<html>
<head>
  <title>Web Layout Testing</title>
  <style type="text/css" media="screen">
    @import url("style.css")
  </style>
</head>
<body>
z-  <p style="position:absolute; bottom:10px">
z/  This HTML code is not done to the web. <br/>
z4  The automatic HTML and CSS code are only a helper.z</p>
</body>
</html>)	openr   r   joinr   r   write	html_codecloser   fs     r   rW   zExport.make_html_file   s    dl.>>DD	" nn ?? AA E	E '
'	
 	
 	
 	
					r   c                     t          t          j                            | j        j        d          d          }|                    d|                                 z              |                                 d S )Nz	style.cssr^   ze/*
** This CSS code is not done to the web.
** The automatic HTML and CSS code are only a helper.
*/
)	r_   r   r   r`   r   r   ra   css_coderc   rd   s     r   rX   zExport.make_css_file   sf    dl.<<cBB	 mmoo		
 	
 	
 	
					r   c                     t          j        d          \  | _        | _        |                                 }|j        }d|_        | j                            | j                   ||_        d S )Nz.svgzdisplay:none)tempfilemkstemptmp_svg_reftmp_svgr$   styledocumentra   )r   layercurrent_styles      r   rU   zExport.create_the_temporary_svg   s^    +3+;F+C+C(	4<%%''$DL)))#r   c                     	 t          j        | j                   t          j        | j                   d S # t
          t          t          f$ r Y d S w xY w)N)r   rc   rk   removerl   IOErrorOSErrorPermissionError)r   s    r   rY   zExport.delete_the_temporary_svg   s[    	HT%&&&Idl#####/2 	 	 	DD	s   26 AAr   c                 T   |                     | j        dz             }i }|t          j        |d          }|j        d|_        |j                            d          D ]e}|                     d          dk    rJ|                    d          }|d                                         ||d                                         <   fd|vr_||                                 k    rddiS | xj        dz  c_        d	t          | j                  z   |d<   |xj        d
|d         z   z  c_        |S )Ndescr+   r,   :r   r*   r;   #body#zelement-z	
html-id:)
findr@   r   
SubElementtextsplitstripr$   noid_element_countrD   )r   rG   rw   rI   lines        r   rA   zExport.get_el_conf   s!   wwtzF*++<#B//D9DIIOOD)) 	8 	8Dyy~~!!zz#(,QT!W]]__%D  T**,,,,!8,,''1,''",s43J/K/K"KY		\DO;;		r   c                     |                     d          }|Dg }|D ]#}|                    |dz   ||         z              $d                    |          |_        d S d S )Nz {http://www.w3.org/2000/svg}descz : r,   )rz   rE   r`   r|   )r   rI   rG   rw   conf_aks         r   rF   zExport.save_conf   so    ww9::F 3 3a%i$q'12222		&))DIII	 r   c                    |                      |          d         }|                                D ]}|                      |          }|j        | j        dz   k    r8| j        j        r|                     ||           n|                     |           |j        | j        dz   | j        dz   | j        dz   fv r9| j        j        r|                     |||           | 	                    ||           d S )Nr;   r:   r8   r   r9   )
rA   r>   r?   r@   r   r   register_group_coderV   register_unity_code
export_img)r   parent	parent_idrG   el_confs        r   rV   zExport.export_chids_of   s   $$V,,Y7	$$&& 	- 	-B&&r**Gvc)))<) -,,R9999((,,,v
V#
V#
X%  
 <) E,,R)DDDG,,,	- 	-r   c           
         |                      d|           d|d         z   }|                     |dd           |                     |          }|                     |dt          t	          |d                             dz              |                     |d	t          t	          |d
                             dz              |                     |dt          t	          |d                             dz              |                     |dt          t	          |d                             dz              |                     |           d S )Ndiv#r;   positionabsolutetopypxleftxwidthr^   heighth)reg_htmlrT   get_relative_el_geometryrD   intrV   )r   grouprI   selecgeometrys        r   r   zExport.register_group_code   s#   eU###d9o%UJ
3330077UE3s8C='9'9#:#:T#ABBBUFCHSM(:(:$;$;d$BCCCUGSXc]););%<%<t%CDDDUHc#hsm*<*<&=&=&DEEEU#####r   c                 *    d|vrd|d<   d|vrd|d<   |S )Nlayout-dispositionzbg-el-norepeatlayout-position-anchormc )r   rI   s     r   __validate_slice_confzExport.__validate_slice_conf   s3    #t++)9D%&'4//-1D)*r   c           	         |                      |          }d|d         z   }d}|                     ||          }|d         dd         dk    r|d         dd         d	k    r|d
k    rd}nd|z   }|d         dk    rd}|d         dk    rd}|d         dk    rd}|d         }|dk    rd}|dk    rd}|dk    rd}|dk    rd}|dk    rd}|dk    rd}|dk    rd }|d!k    rd"}|d#k    rd$}|                     |d%d&                    |||                     d S |                     d'|           |                     |d%d(                    |d                     |                     |d)d*           |                     |d+          }|                     |d,|d-                    |                     |d.|d/                    |                     |d0|d1                    |                     |d2|d3                    d S |                     d4|           |d         d5k    r|                     |d)d*           |                     |          }|                     |d.t          |d/                   d6z              |                     |d,t          |d-                   d6z              |d         d7k    r|                     |d8d9           |d         d:k    r|                     |d8d9           d S d S );Nr   r;   z	no-repeatr   r   r<   bg	   z	bg-parentry   rR   zbg-parent-repeatrepeatzbg-parent-repeat-xzrepeat-xzbg-parent-repeat-yzrepeat-yr   tlztop lefttcz
top centertrz	top rightmlzmiddle leftr   zmiddle centermrzmiddle rightblzbottom leftbczbottom centerbrzbottom right
backgroundzurl("{}") {} {}r   zurl("{}") {}r   r   Tr   r   r   r   r   r^   r   r   imgzimg-posr   zimg-float-leftfloatrightzimg-float-right)_Export__validate_slice_confimg_namerT   r#   r   r   rD   )	r   rG   rI   r   css_selector	bg_repeatr   
lay_anchorgeos	            r   r   zExport.register_unity_code   s{   ))$//T)_,	==T**$%ac*d22()!A#.+==((#)LL#&?L,-1CCC (I,-1EEE *I,-1EEE *I!":;
%%!+J%%!-J%%!,J%%!.J%%!0J%%!/J%%!.J%%!0J%%!/J  %,,Xy*MM     eR(((  "))(K@@  
 \:zBBB33B==\5#c(;;;\63s8<<<\7CH===\8SX>>>>>MM%$$$()Y66\:zBBB33B77\63s3x==43GHHH\5#c#h--$2FGGG()-===\7G<<<()->>>\7G<<<<< ?>r   c                    d| j         z   }|                     |          \  }}i | _        |dk    r|                    d          D ]}|                    d          }t	          |          dk    rat          |d                   t          |d                   t          |d                   t          |d	                   d
| j        |d         <   | j                            | j        	                                
                    d                    }| j                            | j        	                                
                    d                    }dd||d
| j        d<   d S )Nzinkscape --query-all r   r,   ,   r*   r<         )r   r   r^   r   r   r   zwebslicer-layer)rl   r6   el_geor}   lenr   svgunittouurn   getrootget)r   ink_cmmrN   rO   rG   doc_wdoc_hs          r   register_all_els_geometryz Export.register_all_els_geometry5  s>   )DL8..w77Q;;ll4((  XXc]]r77a<<"2a5\\"2a5\\"2a5\\"2a5\\	* *DK1& !!$-"7"7"9"9"="=g"F"FGG!!$-"7"7"9"9"="=h"G"GHH/0qu5)Q)Q%&&&r   Fc                    | j         s|                                  |                                }| j         |j        d                  }|dxx         | j         |j        d                  d         z  cc<   |dxx         | j         |j        d                  d         z  cc<   |r-|D ]*}t	          t          ||                             dz   ||<   +|S )Nidr   r   r   )r   r   	getparentattribrD   r   )r   rG   value_to_cssr   r   r   s         r   r   zExport.get_relative_el_geometryG  s    
 { 	-**,,,;ry/V]4%89#>>V]4%89#>> 	; ; ;!#hqk"2"233d:r   c                 4    |j         d         dz   |d         z   S )Nr   .r#   )r   )r   rG   rI   s      r   r   zExport.img_nameW  s    y$tH~55r   c                     | j         s&t          j        t          d                     d|d<   t          j                            | j        j        | 	                    ||                    }|}|d         dk    r|dz   }d}d|v r|d|d         z   dz   z  }d	|v r|d
|d	         z   z  }d|v r5|d         
                    d          }|d|d         z   dz   |d         z   z  }|                     d                    ||j        d         || j                            \  }}|d         dk    rd}|d         dk    r|dt          |d                   z   z  }|d         dk    r>|d         dk    r|dz  }n|dz  }|d         dk     r|dt          |d                   z   z  }|                     d                    |||                    \  }}|dk    rt          j        d|z              t	          j        |           d S d S ) Nz4You must install the ImageMagick to get JPG and GIF.pngr#   z.pngr+   zbg-colorz -b "z" -y 1dpiz -d 	dimensionr   z -w r   z -h r*   z inkscape {} -i "{}" -o "{}" "{}"r   jpgz
 -quality qualitygifzgif-type	grayscalez -type Grayscalez -type Palettezpalette-size   z	 -colors zconvert "{}" {} "{}"zUpss... ImageMagick error: )rM   r   rC   r   r   r   r`   r   r   r   r}   r6   r#   r   rl   rD   rr   )	r   rG   rI   r   img_name_pngoptsdimrN   rO   s	            r   r   zExport.export_imgZ  sK    	#N1STTUUU"DN7<< 0$--D2I2IJJ>U""#f,LGd:..99DD==FT%[((D${#))#..CFSVOf,s1v55D...55bio|T\ 
 

 >U""DH~&&s4	?';';;;H~&&
#{22..DD,,D'#--K#d>.B*C*CCCD#22&--lD(KK   VV {{<vEFFFIl#####! #"r   c                 ^   |                                 }|                     |          d         }||                                 k    rd}|                     |          }|d         }d|v r	|d         }nd}|| j        vr
g | j        |<   | j        |                             |||d           d S )Nr;   rR   z
html-classr+   )r?   r   class)r   rA   r$   _htmlrE   )r   el_tagrG   r   r   rI   el_idel_classs           r   r   zExport.reg_html  s    $$V,,Y7	T**,,,,I##Y4L)HHHDJ&&$&DJy!
9$$V58%T%TUUUUUr   rR     c           	      "   || j         vrdS d}| j         |         D ]}|                     |d         |dz             }d}|d         dk    rd|d         z   dz   }|d         dk    rH||d	z   |d         z   dz   |z   d
z   |                     ||                     |                    z   dz   z  }||dz   |d         z   dz   |d         z   dz   |z   dz   z  }|r||z  }n||dz   |d         z   dz   z  }||dz   |d         z   dz   |d         z   dz   z  }|S )Nr+   r   r   r   z class=""r?   r   z	<img id="z src="z"/>
<z id="z>
z
  Element r,   z</z
><!-- id="z" -->
)r   rb   r   rA   )r   r   identcoderG   
child_code	tag_classs          r   rb   zExport.html_code  s   ##2*V$ 	W 	WB4%$,??JI'{b  &G4s:	%yE!!!"h   	 
  mmB(8(8(<(<==> 	 i   h	
     	  CJ&DDEL02d8;dBBDr%y0<?"T(JYVVr   c                 F   dx}}| j         D ]}|dz  }|d         |k    r|}|dk    r"|dz   }| j                             |i d           || j         |         d         vrg | j         |         d         |<   | j         |         d         |                             |           d S )Nr   r*   selector)r   attsr   )_cssrE   )r   r   attvalposiss          r   rT   zExport.reg_css  s    a 	 	AFA}(("99a%CI(B??@@@dinV,,,*,DIcN6"3'	#vs#**3/////r   c                     d}| j         D ]s}|d|d         z   dz   z  }|d         D ]R}|d         |         }|dk    rt          |          dk    r|dz  }|d	|z   d
z   d                    |          z   dz   z  }S|dz  }t|S )Nr+   r,   r   z {
r   r   r*   z8  /* the next attribute needs a CSS3 enabled browser */
r   z: z, z;
z}
)r   r   r`   )r   r   r   r   r   s        r   rg   zExport.css_code  s     	 	AD1Z=(611Dy E Ein,&&3s88a<<WWDs
T)TYYs^^<uDDEMDDr   N)F)rR   r   )!__name__
__module____qualname__r   r@   r(   r6   rB   r%   rP   r\   rW   rX   rU   rY   r   rA   rF   rV   r   r   r   r   r   r   r   r   r   r   rb   r   rT   rg   r   r   r   r   r      s       O O O +E  >   I+ + +.B B B( ( (&  "	 	 	$ $ $     (* * *- - -$	$ 	$ 	$  @= @= @=D FR R R$    6 6 6%$ %$ %$N EV V V% % % %N D0 0 0
 
 
 
 
r   r   __main__)r-   r   sysri   lxmlr   r   inkex.localizationr   r   webslicer_effectr   r   OutputExtensionr   r   runr   r   r   <module>r      s   &     				 



         1 1 1 1 1 1 5 5 5 5 5 5 5 5s s s s s^U2 s s sl z
FHHLLNNNNN r   