
    a                      *   d Z ddlZddlZej                  dk\  rd ZddZnd ZeZ G d de      Z G d	 d
e      Z	 ede
fde	dd      Z G d de	      Z G d de      Z G d de
      Z G d de
      Z G d de      Z G d d      Z e       Zy)z
module for generating and serializing xml and html structures
by using simple python objects.

(c) holger krekel, holger at merlinux eu. 2009
    N)   r   c                     | S N ss    ,/usr/lib/python3/dist-packages/py/_xmlgen.pyur
   
   s        c                 P    t        | d      r| j                         S t        |       S )N__unicode__)hasattrr   str)xerrorss     r	   unicoder      s!    1m$==?"1vr   c                     t        |       S r   r   r   s    r	   r
   r
      s    qzr   c                       e Zd Zd Zy)NamespaceMetaclassc                     |d d dk(  rt        |      | t        k(  rt        d      | j                  }|||vrt        |      i }| j                  r||d<   t        || j                  f|      }t        | ||       |S )N   _zNamespace class is abstractxmlname)AttributeError	Namespace
ValueError__tagspec____stickyname__type__tagclass__setattr)selfnametagspec	classattrclss        r	   __getattr__zNamespaceMetaclass.__getattr__   s    8s? &&9:;;""4w#6 &&	#'Ii 4$++-y9dC 
r   N)__name__
__module____qualname__r(   r   r   r	   r   r      s    r   r   c                   L     e Zd Z G d de      Z fdZd ZeZddZd Z	 xZ
S )Tagc                       e Zd Zd Zy)Tag.Attrc                 :    | j                   j                  |       y r   )__dict__update)r#   kwargss     r	   __init__zTag.Attr.__init__(   s    MM  (r   Nr)   r*   r+   r4   r   r   r	   Attrr/   '   s    	)r   r6   c                 Z    t         t        |   |        | j                  di || _        y )Nr   )superr-   r4   r6   attr)r#   argsr3   	__class__s      r	   r4   zTag.__init__+   s'    c4!$'DII''	r   c                 &    | j                  d      S )Nr   )indentr   r#   s    r	   r   zTag.__unicode__/   s    ||1|%%r   c                     g }t        |j                  |      j                  |        t        d      j	                  |      S N )SimpleUnicodeVisitorappendvisitr
   joinr#   r=   ls      r	   r   zTag.unicode3   s2    QXXv.44T:uzz!}r   c                 N    | j                   j                  }d|t        |       fz  S )Nz<%r tag object %d>)r;   r)   id)r#   r$   s     r	   __repr__zTag.__repr__8   s%    ~~&&#tRX&666r      )r)   r*   r+   objectr6   r4   r   __str__r   rJ   __classcell__)r;   s   @r	   r-   r-   &   s(    )v )(&G
7r   r-   r   F)r   r!   r   c                       e Zd ZddZy)HtmlTagc                     g }t        |j                  |d      j                  |        t        d      j	                  |      S )NF
shortemptyrA   )HtmlVisitorrC   rD   r
   rE   rF   s      r	   r   zHtmlTag.unicodeC   s4    AHHf7==dCuzz!}r   NrK   )r)   r*   r+   r   r   r   r	   rQ   rQ   B   s    r   rQ   c                       e Zd ZeZdZ edj                  d      D  cg c]  }|r|df
 c}}       Z G d de	      Z
yc c}} w )htmlTa  a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,comment,datalist,dd,del,details,dfn,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,font,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,img,input,ins,isindex,kbd,keygen,label,legend,li,link,listing,map,mark,marquee,menu,meta,meter,multicol,nav,nobr,noembed,noframes,noscript,object,ol,optgroup,option,output,p,param,pre,progress,q,rp,rt,ruby,s,samp,script,section,select,small,source,span,strike,strong,style,sub,summary,sup,table,tbody,td,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,xmp,var,video,wbr,r   c                       e Zd Zd Zy)
html.Stylec                 r    |j                         D ]$  \  }}|j                  dd      }t        | ||       & y )Nr   -)itemsreplacer"   )r#   kwr   ys       r	   r4   zhtml.Style.__init__\   s7    
 $1IIc3'a#$r   Nr5   r   r   r	   StylerZ   [   s    	$r   ra   N)r)   r*   r+   rQ   r!   r   dictsplitr   rM   ra   ).0r   s   00r	   rW   rW   I   sS    LN	G eCj!  1  K$ $s   A 
rW   c                       e Zd ZdZd Zy)rawz]just a box that can contain a unicode string that will be
    included directly in the outputc                     || _         y r   )uniobj)r#   rh   s     r	   r4   zraw.__init__e   s	    r   N)r)   r*   r+   __doc__r4   r   r   r	   rf   rf   b   s    'r   rf   c                   T    e Zd ZdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)rB   z% recursive visitor to write unicode. c                 f    || _         i | _        i | _        || _        || _        g | _        || _        y r   )writecachevisitedr=   	curindentparentsrT   )r#   rl   r=   ro   rT   s        r	   r4   zSimpleUnicodeVisitor.__init__j   s3    

"$r   c                     |j                   }	 | j                  |   } ||       y# t        $ rJ |j                  D ]  }t	        | |j
                  d      }| n | j                  }|| j                  |<   Y [w xY w)z( dispatcher on node's class/bases name. N)r;   rm   KeyError__mro__getattrr)   _SimpleUnicodeVisitor__object)r#   noder'   visitmethodsubclasss        r	   rD   zSimpleUnicodeVisitor.visits   s    nn		***S/K 	D  	*KK ,%dH,=,=tD*,
 #mm)DJJsO	*s   & 1A9A98A9c                 J    | j                  t        t        |                   y r   )rl   escaper   r#   objs     r	   __objectzSimpleUnicodeVisitor.__object   s    

6'#,'(r   c                 :    | j                  |j                         y r   )rl   rh   r{   s     r	   rf   zSimpleUnicodeVisitor.raw   s    

3::r   c                     t        |      | j                  vsJ d| j                  t        |      <   |D ]  }| j                  |        y )Nr   )rI   rn   rD   )r#   r|   elems      r	   listzSimpleUnicodeVisitor.list   sE    #wdll*** !RW 	DJJt	r   c                    t        |      | j                  vsJ 	 | j                  d   |_        d| j                  t        |      <   t        |d|j                  j                        }| j                  r;| j                  |      s*| j                  dt        d      | j                  z  z          |r| xj                  | j                  z  c_        | j                  t        d      || j                  |      fz         | j                  j                  |       |D ]  }| j                  |        | j                  j!                          | j                  t        d      |z         | xj                  | j                  z  c_        y || j                  |      z   }| j#                  |      r| j                  t        d      |fz         y | j                  t        d	      ||fz         y # t        $ r d |_        Y w xY w)
Nr   r   
 z<%s%s>z</%s>z<%s/>z	<%s></%s>)rI   rn   rp   parent
IndexErrorrt   r;   r)   ro   	_isinlinerl   r
   r=   
attributesrC   rD   pop_issingleton)r#   tagtagnamer   nameattrs        r	   r-   zSimpleUnicodeVisitor.Tag   s   #wdll***	b)CJ !"RW#y#--*@*@A>>$.."9JJtaft~~556NNdkk)NJJq{gts/C%DDELL$ 

1LLJJqzG+,NNdkk)Nts33H  )

1W:34

1[>Xw,??@)  	CJ	s   G, ,H ?H c                 2   t        |j                        }|j                          g }|D ]2  }| j                  |j                  |      }|"|j	                  |       4 |j                  | j                  |             t        d      j                  |      S r@   )	dirr9   sortrepr_attributerC   extendgetstyler
   rE   )r#   r   attrlistrG   r$   ress         r	   r   zSimpleUnicodeVisitor.attributes   s{    sxx= 	D%%chh5C	 	
s#$uzz!}r   c                     |d d dk7  r\t        ||      }|j                  d      r|d d }t        |t              r|j                  }nt        t        |            }d|d|dS y )NrL   __r   r   r   z="")rt   endswith
isinstancerf   rh   rz   r   )r#   attrsr$   valueinserts        r	   r   z#SimpleUnicodeVisitor.repr_attribute   se    8tE4(E}}S!CRy%%/!%v.. r   c                     	 |j                   j                  }|j                         D cg c]  \  }}|dz   |z    }}}t        d      t        d      j	                  |      z  gS c c}}w # t
        $ r g cY S w xY w)z- return attribute list suitable for styling. z: z style="%s"z; )styler1   r]   r
   rE   r   )r#   r   	styledictr   r`   	stylelists         r	   r   zSimpleUnicodeVisitor.getstyle   s{    	@		**I 09/@A!4!AIAm$qw||I'>>?? B  	I	s   A- A'-A;:A;c                     | j                   S )*can (and will) be overridden in subclassesrS   r#   r   s     r	   r   z!SimpleUnicodeVisitor._issingleton   s    r   c                      y)r   Fr   r   s     r	   r   zSimpleUnicodeVisitor._isinline   s    r   N)r   r   T)r)   r*   r+   ri   r4   rD   ru   rf   r   r-   r   r   r   r   r   r   r   r	   rB   rB   h   s>    /%")A4
	/@r   rB   c                       e Zd Z edj	                  d      D  cg c]  }|df c}}       Z edj	                  d      D  cg c]  }|df c}}       ZfdZd Zd Z	xZ
S c c}} w c c}} w )	rU   z3br,img,area,param,col,hr,meta,link,base,input,framerX   r   za abbr acronym b basefont bdo big br cite code dfn em font i img input kbd label q s samp select small span strike strong sub sup textarea tt u varr   c                 T    |dk(  rt        ||      }|y t        t        |   ||      S )Nclass_)rt   r8   rU   r   )r#   r   r$   r   r;   s       r	   r   zHtmlVisitor.repr_attribute   s3    8E4(E}[$6udCCr   c                     || j                   v S r   )singler   s     r	   r   zHtmlVisitor._issingleton       $++%%r   c                     || j                   v S r   )inliner   s     r	   r   zHtmlVisitor._isinline   r   r   )r)   r*   r+   rb   rc   r   r   r   r   r   rO   )rd   r   r;   s   00@r	   rU   rU      sy    "#(5:/aAq6 / 0F 449E#JAaAq6 A BF
D&&%/As   A'
A-
rU   c                       e Zd Zd Zd Zd Zy)_escapec                 n   t        d      t        d      t        d      t        d      t        d      t        d      t        d      t        d      t        d	      t        d
      i| _        t        j                  t        d      j	                  | j                  j                                     | _        y )Nr   z&quot;<z&lt;>z&gt;&z&amp;'z&apos;|)r
   rz   recompilerE   keys
charef_rexr>   s    r	   r4   z_escape.__init__   su    cFQx[!C&1V9afqycFQwZ3!H+ **QsV[[1A1A1C%DEr   c                 >    | j                   |j                  d         S )Nr   )rz   group)r#   matchs     r	   	_replacerz_escape._replacer   s    {{5;;q>**r   c                     	 t        |      }| j                  j                  | j                  |      S # t        $ r t        |dd      }Y ?w xY w)z& xml-escape the given unicode string. zutf-8r^   )r   )r   UnicodeDecodeErrorr   subr   )r#   ustrings     r	   __call__z_escape.__call__   sP    	Bg&G ""4>>7;; " 	BgwyAG	Bs   3 AAN)r)   r*   r+   r4   r   r   r   r   r	   r   r      s    F+<r   r   r   )ri   sysr   version_infor
   r   r    r   r   r-   rM   r   rQ   rW   rf   rB   rU   r   rz   r   r   r	   <module>r      s    u
G  7$ 7, {VJ9 	c $9 $2& j6 jX&& &0< <& 
r   