
    Z'i                     J    d dl Z G d d      Z G d de      Z G d d      Zy)    Nc                   H    e Zd Zd Zd Zg fdZd Zd Zd ZddZ	d Z
d	 Zy
)fb2tagc                     || _         g | _        g | _        d| _        t	        | j                         | _        g | _        d| _        d| _        y NF )	tagsattrsattrssindexlensizevaluesprocess_valuecurrent_valueselfr	   s     #/opt/sopds/opds_catalog/fb2parse.py__init__zfb2tag.__init__   sD    tytzt{tzTYYtyt{tt    c                 X    d| _         g | _        g | _        g | _        d| _        d| _        y r   )r   r   r
   r   r   r   r   s    r   resetzfb2tag.reset   s.    tzt{tzt{ttr   c                 *   d}| j                   dz   | j                  k  r4| j                  | j                   dz      |k(  r| xj                   dz  c_         | j                   dz   | j                  k(  r$|| _        | j                  j                  |       d}|S )NF   T)r   r   r	   r
   r   append)r   tagr
   results       r   tagopenzfb2tag.tagopen   sx    v::a<
"YYtzz!|$c)ZZ]Z::a<$))
#$*
++

U
#&}r   c                     | j                   dk\  rk| j                  | j                      |k(  rN| xj                   dz  c_         | j                  r%| j                  j	                  | j
                         d| _        y y y )Nr   r   F)r   r	   r   r   r   r   r   r   s     r   tagclosezfb2tag.tagclose#   sb    
**a-YYtzz"C'ZZ]Z""""4#5#56 %T	 ( r   c                     | j                   dz   | j                  k(  r4| j                  dk(  r|| _        d| _        y | xj                  |z  c_        y y )Nr   FT)r   r   r   r   r   values     r   setvaluezfb2tag.setvalue+   sJ    ::a<$))
#& %T $T& $r   c                     | j                   S N)r   r   s    r   getvaluezfb2tag.getvalue3   s    kkr   c                 p    d}t        | j                        dkD  r|j                  | j                        }|S )Nr   r   )r   r   join)r   dividerr   s      r   gettextzfb2tag.gettext6   s/    v
dkk
1
dkk*&}r   c                 t    t        | j                        dkD  r| j                  j                  |      }|S d }|S Nr   )r   r
   get)r   attrvals      r   getattrzfb2tag.getattr<   s7    
djj/!
jjnnT"# z #zr   c                     t        | j                        dkD  r/| j                  D cg c]  }||v s|j                  |       }}|S g }|S c c}w r/   )r   r   r0   )r   r1   ar2   s       r   getattrszfb2tag.getattrsC   sP    	T[[	!	#';;<a$!)aeeDk<< j j =s
   	AAN)
)__name__
__module____qualname__r   r   r   r"   r&   r)   r-   r3   r6    r   r   r   r      s4     ! 
&'r   r   c                   h    e Zd Zd Zd Zg fdZd Zd Zd Ze	d        Z
e
j                  d        Z
y	)
fb2coverc                 h    d| _         d| _        g | _        d| _        t        j                  | |       y NFr   )iscover
cover_name_cover_dataisfindr   r   r   s     r   r   zfb2cover.__init__K   s-    t|ttt{tD!r   c                 f    d| _         d| _        g | _        d| _        t        j                  |        y r?   )r@   rA   rB   rC   r   r   r   s    r   r   zfb2cover.resetR   s+    t|ttt{||Dr   c                     t         j                  | ||      }|r<| j                  d      }|d k7  r&|j                         }|| j                  k(  rd| _        |S )NidT)r   r   r3   lowerrA   r@   )r   r   r
   r   idvalues        r   r   zfb2cover.tagopenY   sO    nnT#e,v
,,t$'d]]]_W(!}r   c                 d    | j                   rd| _        d| _         t        j                  | |       y )NTF)r@   rC   r   r"   r!   s     r   r"   zfb2cover.tagclosec   s%    
,,$+$,tC r   c                 *    |d k7  r|dk7  r|| _         y y y Nr   )rA   )r   rA   s     r   setcovernamezfb2cover.setcovernamei   s    
d
z2~$$/  .
r   c                 `    | j                   r"|dk7  r| j                  j                  |       y y y )Nz\n)r@   rB   r   r   datas     r   add_datazfb2cover.add_datan   s.    
,,5[$$T*  r   c                 8    dj                  | j                        S rK   )r+   rB   r   s    r   
cover_datazfb2cover.cover_datas   s    ggd&&''r   c                     |g| _         y r(   )rB   r$   s     r   rR   zfb2cover.cover_dataw   s     'tr   N)r8   r9   r:   r   r   r   r"   rL   rP   propertyrR   setterr;   r   r   r=   r=   J   sS    " ! !%
+
 ( ( " "r   r=   c                   4    e Zd ZddZd Zd Zd Zd ZddZy)		fb2parserc                    || _         t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _	        | j                   d	k7  r t        d
      | _
        t        d      | _        d| _        d| _        d	| _        d| _        y )N)description
title-infoauthorz
first-name)rY   rZ   r[   z	last-name)rY   rZ   genre)rY   rZ   lang)rY   rZ   z
book-title)rY   rZ   
annotationp)rY   zdocument-infodate)rY   rZ   sequencer   )rY   	coverpageimage)fictionbookbinaryrY   Tr   )rcr   author_firstauthor_lastr\   r]   
book_titler^   docdateseriesrA   r=   cover_imagestoptagprocess_descriptionparse_errorparse_errormsg)r   	readcovers     r   r   zfb2parser.__init__|   s    tw RStPQt=>tz;<tyGHtKLtABt|ABt{
''1*"$GH$/%'?@$
!t| $tttr   c                 H   d| _         d| _        | j                  j                          | j                  j                          | j
                  j                          | j                  j                          | j                  j                          | j                  j                          | j                  j                          | j                  j                          | j                  dk7  r5| j                  j                          | j                  j                          y y )NTr   )rn   ro   rg   r   rh   r\   r]   ri   r^   rk   rj   rf   rA   rl   r   s    r   r   zfb2parser.reset   s     $tt zzyy{{||
''1*
//


!



 
 
" r   c                    |j                         }| j                  r| j                  j                  |       | j                  j                  |       | j
                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  ||       | j                  dk7  r| j                  j                  ||      r| j                  j                  d      }|dk(  s|d k(  r| j                  j                  d      }t        |      dkD  r|d   dk(  r|j                  d      }nd }| j                   j#                  |       | j                  dk7  r| j                   j                  ||       y y )Nr   zl:hrefr   z
xlink:href#)rG   rn   rg   r   rh   r\   r]   ri   r^   rj   rk   rf   rA   r3   r   striprl   rL   )r   namer
   rA   s       r   start_elementzfb2parser.start_element   sg   JJLt

"
"



#
#D
)



"
"4
(
**

T
"
))

D
!
//
!
!$
'
//
!
!$
'
,,

t
$
++

d5
)WWaZ''U3??228<
r>Z%5"oo55lC:z?1$A);(..s3:":  --j9
''1*



"
"4
. r   c                     |j                         }| j                  r| j                  j                  |       | j                  j                  |       | j
                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  dk7  r| j                  j                  |       | j                  dk7  r7| j                  j                  |       | j                  j                  rt        |dk(  rt!        | j                  j#                               t!        | j                  j#                               kD  r&| j                  j$                  j'                  d       nlt!        | j                  j#                               t!        | j                  j#                               k  r%| j                  j$                  j'                  d       || j(                  k(  r<| j                  dk7  r'| j                  j                  dk(  rt        d| _        y t        y )Nr   r[    r   F)rG   rn   rg   r"   rh   r\   r]   ri   r^   rj   rk   rf   rA   rl   rC   StopIterationr   r)   r   r   rm   )r   rv   s     r   end_elementzfb2parser.end_element   s   JJLt

"
"



$
$T
*



#
#D
)
**

d
#
))

T
"
//
"
"4
(
//
"
"4
(
,,


%
++

t
$WWaZ__%%d+
''1*



#
#D
)$$   .!!**,-c$2C2C2L2L2N.OO%%,,S14##,,./D4E4E4N4N4P0QQ$$++C0

WWaZ  ++r1##).(   r   c                    | j                   r| j                  j                  |       | j                  j                  |       | j                  j                  |       | j
                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  dk7  r| j                  j                  |       y y r/   )rn   rg   r&   rh   r\   r]   ri   r^   rj   rf   rl   rP   rN   s     r   	char_datazfb2parser.char_data   s    

"
"



$
$T
*



#
#D
)
**

d
#
))

T
"
//
"
"4
(
//
"
"4
(
,,


%
''1*



#
#D
) r   c                    | j                          t        j                  j                  j	                         }| j
                  |_        | j                  |_        | j                  |_
        	 |dk(  r!|j                  |j                         d       y |j                  |j                  |      d       y # t        $ r Y y t        $ r}|| _        d| _        Y d }~y d }~ww xY w)Nr   Tr   )r   xmlparsersexpatParserCreaterw   StartElementHandlerr{   EndElementHandlerr}   CharacterDataHandlerParsereadrz   	Exceptionrp   ro   )r   fhsizeparsererrs        r   parsezfb2parser.parse   s    zz|!!..0v$($6$6v!"&"2"2v%)^^v"	1HLL4(LL- 	  			s$   -%B5 !B5 5	C  C CC N)r   )	r8   r9   r:   r   r   rw   r{   r}   r   r;   r   r   rW   rW   {   s!    $#/2 !D
*r   rW   )xml.parsers.expatr   r   r=   rW   r;   r   r   <module>r      s.    E EN/"v /"bx xr   