
    BPc                     h    d Z ddlmc mZ ddlmZ ddlmZ d Z	 G d de
          Zd Zd	 Zd
 ZdS )zN
Allow two xml files/lxml etrees to be compared, returning their differences.
    N)BytesIO)Pathc                     | s|sdS | dk    s|dk    rdS | pd                                 |pd                                 k    S )ze
    Compare two text strings while allowing for '*' to match
    anything on either lhs or rhs.
    T* )strip)test1test2s     6/usr/share/inkscape/extensions/inkex/tester/xmldiff.pytext_comparer      sY    
   t||u||tKR  U[b$7$7$9$999    c                   4    e Zd ZdZd Zd Zd Zd ZeZd Z	dS )DeltaLoggerz2A record keeper of the delta between two svg filesc                 T    |rd| d}|rd| d}|                      ||f           dS )zRecord a tag difference<z.../>Nappend)selftag_atag_bs      r   
append_tagzDeltaLogger.append_tag    sN     	%$$$$E 	%$$$$EUEN#####r   c                 |    fd} ||          } ||          }||k    r|                      ||f           dS dS )zRecord an attribute differencec                 j    | r/dk    r%gt          |                                           z   S | fS | S )Nd)r   	to_arrays)valattrs    r   _prepz&DeltaLogger.append_attr.<locals>._prep+   sB     #3;; 6DII$7$7$9$999c{"Jr   Nr   )r   r   value_avalue_br   prep_aprep_bs    `     r   append_attrzDeltaLogger.append_attr(   sh    	 	 	 	 	 wwVKK())))) r   c                 4    |                      ||f           dS )zRecord a text differenceNr   )r   text_atext_bs      r   append_textzDeltaLogger.append_text9   s    VV$%%%%%r   c                 ,    |                                   S )z7Returns True if there's no log, i.e. the delta is clean)__len__r   s    r   __bool__zDeltaLogger.__bool__=   s    <<>>!!r   c                 .    | rdS t          |            dS )NzNo differences detectedz xml differences)lenr*   s    r   __repr__zDeltaLogger.__repr__C   s%     	-,,d))----r   N)
__name__
__module____qualname____doc__r   r#   r'   r+   __nonzero__r.    r   r   r   r      sl        <<$ $ $* * *"& & &" " " K. . . . .r   r   c                     t          | t                    r|                     d          } t          | t                    r3t	          j        t          |                                                     S | S )z/Convert string or bytes to xml parsed root nodeutf8)
isinstancestrencodebytesxmlparser   getroot)datas    r   to_xmlr?   I   s^    $ #{{6""$ 2y''//111Kr   c                     t          |           t          |          }}t                      }t          |||           t          j        |                              d          |fS )zICreate an xml difference, will modify the first xml structure with a diffzutf-8)r?   r   _xmldiffr;   tostringdecode)data1data2xml1xml2deltas        r   xmldiffrI   R   sU    u$DMMET4<$$W--u44r   c                    | j         |j         k    r6| j          d|j          | _         |                    | j         |j                    | j                                        D ]\  }}||j        vr8|                    || j        |         d            | j        |xx         dz  cc<   F|j                            |          |k    r|                    || j                            |          |j                            |                     | j                            |           d|j                            |           | j        |<   |j                                        D ]2\  }}|| j        vr$|                    |d |           d|z   | j        |<   3t          | j        |j                  s6|                    | j        |j                   | j         d|j         | _        t          | j	        |j	                  s6|                    | j	        |j	                   | j	         d|j	         | _	        t          |           }t          |          }|d gt          |          t          |          z
  z  z  }|d gt          |          t          |          z
  z  z  }t          ||          D ]R\  }}||                    |j         d            #||                    d |j                    At          |||           Sd S )NXXX)tagr   attribitemsr#   getr   textr'   taillistr-   ziprA   )	rF   rG   rH   namevalue
children_a
children_bchild_achild_bs	            r   rA   rA   Z   s   x48h--48--48,,,{((** U Uet{""dDK$5t<<<K&[__T""e++dDKOOD$9$94;??4;P;PQQQ#';??4#8#8 T TT[__T=R=R T TDK{((** . .et{""dD%000 %DK	49-- 1$)TY///y00TY00		49-- 1$)TY///y00TY00	 dJdJ4&C
OOc*oo=>>J4&C
OOc*oo=>>J
J77 . .?W[$////_T7;////Wgu----. .r   )r2   xml.etree.ElementTreeetreeElementTreer;   ior   inkex.pathsr   r   rR   r   r?   rI   rA   r4   r   r   <module>r_      s     $ # # # # # # # #            	: 	: 	:). ). ). ). ).$ ). ). ).X  5 5 5". ". ". ". ".r   