
    BPcA!                     n   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ d	d
dZd e                                D             Z G d dej                  Z ej                    Ze                     e                        G d d          Z G d dej                  Z G d de          ZdS )z0
Parsing inx files for checking and generating.
    N)isclass)util)etree   )InkscapeExtension)Booleanz4http://www.inkscape.org/namespace/inkscape/extensionz+http://www.inkscape.org/namespaces/inkscape)inxinkscapec                     i | ]\  }}||	S  r   ).0abs      +/usr/share/inkscape/extensions/inkex/inx.py
<dictcomp>r   #   s    &&&Aq!&&&    c                       e Zd ZdZd ZdS )	InxLookupzCustom inx xml file lookupc                 *    |dk    rt           S t          S )Nparam)ParamElement
InxElement)self	node_typedocument	namespacenames        r   lookupzInxLookup.lookup)   s     7??r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   &   s)        $$    r   r   c                      e Zd ZdZ ed           Z ed           Z ed           Z ed           Z ed           Z	d Z
d Zed	             Zed
             Zed             Zed             Zed             ZdS )InxFilez-Open an INX file and provide useful functionsc                 6    | j                             d          S Nr   xmlget_textr   s    r   <lambda>zInxFile.<lambda>8   s    !2!26!:!: r   c                 6    | j                             d          S )Nidr'   r*   s    r   r+   zInxFile.<lambda>9   s    $("3"3D"9"9 r   c                     | j                             d          d                                                             dd          S )N._ )identsplittitlereplacer*   s    r   r+   zInxFile.<lambda>:   s8    !1!1#!6!6r!:!@!@!B!B!J!J3PR!S!S r   c                     | j         d         S )Ntype)metadatar*   s    r   r+   zInxFile.<lambda>;   s    v!6 r   c                 h    t          t          t          | j        j                                      S N)sortedlistsetr(   warningsr*   s    r   r+   zInxFile.<lambda><   s#    VDTX5F1G1G,H,H%I%I r   c                    t          |t                    rd|v r|                    d          }t          |t                    r>d|v r:d | _        t          j        t          j        |t                              | _	        nDt          j                            |          | _        t          j        |t                    | _	        | j	                                        | _        g | j        _        d S )N<utf8   <)parser)
isinstancestrencodebytesfilenamer   ElementTree
fromstring
INX_PARSERdocospathbasenameparsegetrootr(   r?   )r   rI   s     r   __init__zInxFile.__init__>   s    h$$ 	/v..Hh&& 	@48+;+; DM()9(:)V)V)VWWDHHG,,X66DM{8J???DH8##%%r   c                 (    d| j          d| j         dS )Nz<inx 'z' ''>)rI   r   r*   s    r   __repr__zInxFile.__repr__J   s    777$)7777r   c                     | j                             d          }|i S |                    dd          |                    dd          |j        dS )z+Returns information about the called scriptzscript/commandNinterpreterlocation)rX   rY   script)r(   find_onegettext)r   commands     r   rZ   zInxFile.scriptM   sZ     (##$455?I";;}d;;J55l
 
 	
r   c                    | j                             dd          }||dd                             dd          }t          j        ||          }t          j        |          }|j                            |           |j        	                                D ]9}d|vr3t          |          r$|j        |k    rt          |t                    r|c S :dS )z"Attempt to get the extension classrZ   N/r/   Base)rZ   r\   r6   r   spec_from_file_locationmodule_from_specloaderexec_module__dict__valuesr   r    
issubclassr   )r   rZ   r   specmodvalues         r   extension_classzInxFile.extension_classY   s     400#2#;&&sC00D/f==D'--CK##C(((,,.. ! !$&& '(D00"5*;<< 1 !LLLtr   c                    | j                             d          }| j                             d          }| j                             d          }i }|| j                             d          }|Ed|d<   | j                             dd	
          |d<   | j                             dd	
          |d<   n:d|d<   t          |                    dd                    |d<   |                    dd          |d<   n|fd|d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   n|d|d<   t          |                    dd                    |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |                    d          |d<   |S )z8Returns information about what type of extension this iseffectoutputinputNzinkscape:templateinfotemplater8   ztemplateinfo/shortdescr
   nssdescztemplateinfo/authorauthorzneeds-live-previewtruepreviewzobject-typeallobjects	extensionmimetypefiletypetooltiptooltipfiletypenamer   datalossfalse)r(   r[   r)   r   r\   )r   ro   rp   inputsdatarr   s         r   r9   zInxFile.metadatal   s    ""8,,""8,,""7++x(()@AAH#)V#x00,*  1    V "&!2!2)z "3 " "X  (V")&**5I6*R*R"S"SY"(//-"G"GY"DL & < <D%z::D$oo.?@@DO!??>::DLL#DL&vz7'K'KLLD & < <D%z::D$oo.?@@DO!??>::DLr   c                     fd| j                             d          }t           |                    | j        gz   S )z&Return the menu this effect ends up inc              3      K   |                      d          D ]-}|                    d          V   |          D ]}|V   d S d S )Nsubmenur   )xpathr\   )parentchildsubchild_recurse_menus      r   r   z#InxFile.menu.<locals>._recurse_menu   so      i00  ii''''' -e 4 4 # #H"NNNN	 r   zeffect/effects-menu)r(   r[   r=   r   )r   menur   s     @r   r   zInxFile.menu   sU    	 	 	 	 	 x  !677MM$''((DI;66r   c                 P    t          | j                            d                    S )zGet all params at all levelsz//param)r=   r(   r   r*   s    r   paramszInxFile.params   s      DHNN9--...r   N)r   r    r!   r"   propertyr   r3   slugkindr?   rS   rV   rZ   rm   r9   r   r   r   r   r   r$   r$   5   s       778::;;DH99::E8SSTTD86677DxIIJJH
 
 
8 8 8 	
 	
 X	
   X$ ! ! X!F 7 7 X7 / / X/ / /r   r$   c                   N     e Zd ZdZd Zd Zd Zd
dZd
 fd	Zd
dZ	dd	Z
 xZS )r   z5Any element in an inx file

    .. versionadded:: 1.1c                     |                                  }t          |d          r|j                            |           dS dS )z1Set a warning for slightly incorrect inx contentsr?   N)get_roothasattrr?   append)r   msgroots      r   set_warningzInxElement.set_warning   sG    }}4$$ 	&M  %%%%%	& 	&r   c                 z    |                                  &|                                                                  S | S )z9Get the root document element from any element descendent)	getparentr   r*   s    r   r   zInxElement.get_root   s3    >>'>>##,,...r   c                     |                                  j        }d|v r<|dd                             dd          \  }}t                              |d          S |                     d           dS )zASet default xml namespace prefix. If none is defined, set warning}r   Nr	   zNo inx xml prefix.)r   tagr4   SSNr\   r   )r   r   urls      r   get_default_prefixzInxElement.get_default_prefix   sh    mmoo!#::QRRsA..JS#773&&&-...tr   Nc                     |                                  fdd                    fd|                    d          D                       S )z Add prefixes to any xpath stringNc                 &    d| v s| rs| S  d|  S )N:r   )segrt   s    r   _processz&InxElement.apply_nss.<locals>._process   s)    czzzCz
>>C>>!r   ra   c                 &    g | ]} |          S r   r   )r   r   r   s     r   
<listcomp>z(InxElement.apply_nss.<locals>.<listcomp>   s!    CCC3#CCCr   )r   joinr4   )r   r   rt   r   s     `@r   	apply_nsszInxElement.apply_nss   sh    ;))++C	" 	" 	" 	" 	"
 xxCCCC%++c2B2BCCCDDDr   c                 ~    t                                          |                     ||          t                    S )z@Namespace specific xpath searches

        .. versionadded:: 1.1rs   )
namespaces)superr   r   NSS)r   r   rt   	__class__s      r   r   zInxElement.xpath   s/     ww}}T^^Es^;;}LLLr   c                 @    |                      ||          D ]}|c S dS )zOReturn the first element matching the given name

        .. versionadded:: 1.1rs   N)r   )r   r   rt   elems       r   r[   zInxElement.find_one   s1     JJtJ-- 	 	DKKKtr   c                     dD ]M}|                      ||z   |          }|/|j        r(|dk    r|                     d| d           |j        c S N|S )zGet text content agnostically)r2   r1   rs   Nr1   z!Use of old translation scheme: <_z...>)r[   r]   r   )r   r   defaultrt   prefr   s         r   r)   zInxElement.get_text   st     	! 	!D==#=66DDI3;;$$%S%S%S%STTTy   r   r;   )NN)r   r    r!   r"   r   r   r   r   r   r[   r)   __classcell__)r   s   @r   r   r      s         & & &    
E 
E 
E 
EM M M M M M          r   r   c                   ^    e Zd ZdZ ed           Z ed           Zed             Zd ZdS )r   z!
    A param in an inx file.
    c                 ,    |                      d          S r&   r\   r*   s    r   r+   zParamElement.<lambda>   s    &!1!1 r   c                 .    |                      dd          S )Nr8   stringr   r*   s    r   r+   zParamElement.<lambda>   s    txx'A'A r   c                     | j         dk    rd |                     d          D             S d |                     d          D             S )zReturn a list of option valuesnotebookc                 8    g | ]}|                     d           S )r   r   r   options     r   r   z(ParamElement.options.<locals>.<listcomp>   s$    HHH6FJJv&&HHHr   pagec                 8    g | ]}|                     d           S )rl   r   r   s     r   r   z(ParamElement.options.<locals>.<listcomp>   s$    GGG

7##GGGr   r   )
param_typer   r*   s    r   optionszParamElement.options   sQ     ?j((HHTZZ5G5GHHHHGG$**X2F2FGGGGr   c                 (    d| j          d| j         dS )Nz<param name='z' type='rU   )r   r   r*   s    r   rV   zParamElement.__repr__   s    EtyEE$/EEEEr   N)	r   r    r!   r"   r   r   r   r   rV   r   r   r   r   r      sv          81122DAABBJH H XHF F F F Fr   r   )r"   rN   inspectr   	importlibr   lxmlr   baser   utilsr   r   itemsr   CustomElementClassLookupr   	XMLParserrL   set_element_class_lookupr$   ElementBaser   r   r   r   r   <module>r      s  &  
			                   # # # # # #       B=  '&#))++&&&    .    U_
 
 # #IIKK 0 0 0m/ m/ m/ m/ m/ m/ m/ m/`< < < < <" < < <~F F F F F: F F F F Fr   