
    Z'i                     N    d dl Z  G d de      Z G d de      Z G d de      Zy)    Nc                       e Zd Zd Zd Zy)Uncompressionc                     |S N selfdatas     +/opt/sopds/book_tools/pymobi/compression.pypackzUncompression.pack           c                     |S r   r   r   s     r   unpackzUncompression.unpack   r   r   N)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   r   c                       e Zd Zd Zd Zd Zy)Palmdocc                     t        d      Nznot implement
ValueErrorr	   is     r   r   zPalmdoc.pack       ))r   c                    d\  }}|t        |      k  rt        ||         }|dz  }|dk\  r|dk  r|||||z    z  }||z  }n|dk  r|t        |      z  }n||dk\  r|dt        |dz        z   z  }nb|t        |      k  rT|dz  t        ||         z  }|dz  }|dz	  dz  }|d	z  dz   }||kD  r||| ||z
   z  }nt        |      D ]  }|||    z  } |t        |      k  r|S )
N) r                        )lenordchrranger	   r   opcmnzs           r   r   zPalmdoc.unpack   s   1#a&jAaD	AFAQ16QqQZQc'SVs(S3q3w<''s1v:a3qt9,AFAa6)AQ!AAQr!a%[(!&q 'AA2JA'' #a&j* r   c                    d\  }}|t        |      k  r||   }|dz  }|dk\  r|dk  r|||||z    z  }||z  }n|dk  r||j                  dd      z  }n|dk\  r|d|dz  j                  dd      z   z  }ni|t        |      k  r[|dz  ||   z  }|dz  }|dz	  d	z  }|d
z  dz   }||kD  r||| ||z
   z  }n)t        |      D ]  }|||    j                  dd      z  } |t        |      k  r|S )N)r   r   r   r    r!   bigr"       r$   r%   r&   )r'   to_bytesr*   r+   s           r   unpack3zPalmdoc.unpack3)   s3   1#a&j!AFAQ16QqQZQc'QZZ5))s(TQW..q%888s1v:a1Q4AFAa6)AQ!AAQr!a%[(!&q :AA25!99A:' #a&j* r   N)r   r   r   r   r   r6   r   r   r   r   r      s    *2r   r   c                   \    e Zd Z ej                  d      j
                  Zd Zd Zd Z	d Z
y)Huffcdicz>Qc                    |dd dk7  rt        d      t        j                  d|d      \  }}d }t        |t        j                  d||            | _        t        j                  d||      }d	\  | _        | _        t        d
|dd d   z         D ]!  \  }}| xj
                  |d|z
  z  fz  c_        # t        d
|dd d   z         D ]'  \  }}| xj                  |dz   d|z
  z  dz
  fz  c_        ) g | _        y )Nr   r    zHUFF   zinvalid huff header>LLc                 f    | dz  | dz  | dz	  }}}|dk7  sJ |dk  r|sJ |dz   d|z
  z  dz
  }|||fS )N   r!   r    r   r       r   )vcodelentermmaxcodes       r   dict1_unpackz'Huffcdic.loadHuff.<locals>.dict1_unpackK   sY    %&Xq4xa7TGa<<!|t!g6!;GT7++r   z>256Lz>64L)r   r   )r      r=   r   )	r   structunpack_frommapdict1mincoderA   	enumerate
dictionary)	r	   huffoff1off2rB   dict2r?   rH   rA   s	            r   loadHuffzHuffcdic.loadHuffF   s   !9..233''tQ7
d	, v'9'9'4'NO
""646%+"dl )$qt!t*< = 	:GWLLWg699L	: )$qt!t*< = 	FGWLLw{W=BEEL	F r   c           
      d   dd dk7  rt        d      t        j                  dd      \  }}t        d|z  |t	        | j
                        z
        }t        j                  d      j                  fd}| xj
                  t        |t        j                  d	|z  d
            z  c_        y )Nr   r    zCDIC   zinvalid cdic headerr:   r   z>Hc                 P     d| z         \  }d| z   d| z   |dz  z    }||dz  fS )N      i  i   r   )offblenslicecdichs      r   getslicez#Huffcdic.loadCdic.<locals>.getslicee   sA    dBH%EDc"s(dVm"<=E4&=))r   z>%dHrR   )r   rD   rE   minr'   rJ   StructrF   )r	   rW   phrasesbitsr0   rY   rX   s    `    @r   loadCdiczHuffcdic.loadCdic^   s    !9..233**5$:T	7S%99:MM$++	*
 	3x););FQJb)QRRr   c                     t        d      r   r   r   s     r   r   zHuffcdic.packl   r   r   c                 "   t         j                  }t        |      dz  }|dz  }d} |||      \  }d}d}	 |dk  r|dz  } |||      \  }|dz  }||z	  dz  }| j                  |dz	     \  }	}
}|
s9|| j                  |	   k  r|	d	z  }	|| j                  |	   k  r| j
                  |	   }||	z  }||	z  }|dk  r	 |S ||z
  d|	z
  z	  }| j                  |   \  }}|s1d | j                  |<   | j                  |      }|d	f| j                  |<   ||z  })
Nr    z        r   r=   r      l       r   )r8   qr'   rG   rH   rA   rJ   r   )r	   r
   rc   bitsleftposxr0   scoder?   r@   rA   rrV   flags                  r   r   zHuffcdic.unpacko   sV   JJt9q=22tS\AvqtS\RF}-D%)ZZ
%;"GT7T\\'22qLG T\\'22,,w/LAH!|  4R'\2A//!,KE4%)"E*&+QZ"JA1 r   N)r   r   r   rD   r[   rE   rc   rO   r^   r   r   r   r   r   r8   r8   C   s-    d''A0S*#r   r8   )rD   objectr   r   r8   r   r   r   <module>rl      s/    F 4f 4nOv Or   