ó
\¬L\c           @` sÆ   d  d l  m Z m Z m Z m Z d d l m Z m Z m Z m	 Z	 m
 Z
 d  d l Z e re e Z n  d  d l Z d d l m Z e Z d e f d „  ƒ  YZ d „  Z d	 „  Z d
 d d „  ƒ  YZ d S(   i    (   t   unicode_literalst   divisiont   absolute_importt   print_functioni   (   t   PY2t   hexlifyt   bstrt   bordt   bcharN(   t   pathoft   unpackExceptionc           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyR
      s   c         C` s   d } t  |  ƒ } xX |  D]P } t | ƒ d k  sC t | ƒ d k rP | d 7} q | t | ƒ j d ƒ 7} q Wd | d d | S(   Nu    i    i   u   ?u   latin-1u   "u    0x(   R   R   R   t   decode(   t   datat   txtanst   hexanst   i(    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   describe   s    $c         C` so   |  d k r= t  j  d d d d d d ƒ t  j d |  ƒ } n. t  j  d d d d d d ƒ t  j d |  ƒ } | S(	   Niÿÿÿt   yearip  t   monthi   t   dayt   secondsi²  (   t   datetimet	   timedelta(   t   palmtimet   pythondatetime(    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   datetimefrompalmtime%   s    1.t   Sectionizerc           B` s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` s5  d |  _  t t | ƒ d ƒ  } | j ƒ  |  _  Wd  QX|  j  d  |  _ |  j  d  |  _ |  j d d !|  _ t j d |  j d ƒ \ |  _	 t
 |  j  ƒ |  _ t j t d	 |  j	 d
 ƒ |  j  d ƒ |  j d f } | d  d  d
 … |  _ | d d  d
 … |  _ g  t |  j	 d ƒ D] } d ^ q|  _ d |  j d <d  S(   Nt    u   rbiN   i    i<   i   s   >HiL   u   >%dLi   i    i   u    u   File Length OnlyiÿÿÿÿiD   (   R   t   openR	   t   readt
   palmheadert   palmnamet   identt   structt   unpack_fromt   num_sectionst   lent
   filelengthR   t   sectionoffsetst   sectionattributest   ranget   sectiondescriptions(   t   selft   filenamet   ft   sectionsdatat   x(    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   __init__/   s    	6)c         C` s½   t  d ƒ xx t |  j ƒ D]g } t  d | | |  j | |  j | d |  j | |  j | d @|  j | d ?d @|  j | f ƒ q Wt  d |  j |  j |  j |  j |  j |  j f ƒ d  S(   Nu7   Section     Offset  Length      UID Attribs Descriptionu#   %3d %3X  0x%07X 0x%05X % 8d % 7d %si   iÿÿÿ i   iÿ   u+   %3d %3X  0x%07X                          %s(   t   printR*   R%   R(   R)   R+   (   R,   R   (    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   dumpsectionsinfo?   s    
Ic         C` s=   | t  |  j ƒ k  r% | |  j | <n t d | | f ƒ d  S(   Nu(   Section out of range: %d, description %s(   R&   R+   R2   (   R,   t   sectiont   description(    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   setsectiondescriptionG   s    c         C` s)  t  d ƒ t  d t |  j d  ƒ ƒ t j d |  j d ƒ \ } t  d | ƒ | d k rû t  d ƒ | d @r{ t  d	 ƒ n  | d
 @r’ t  d ƒ n  | d @r© t  d ƒ n  | d @rÀ t  d ƒ n  | d @r× t  d ƒ n  | d @rî t  d ƒ n  t  d ƒ n
 t  d ƒ t  d t j d |  j d ƒ d ƒ t j d |  j d ƒ \ } t  d t t | ƒ ƒ d | ƒ t j d |  j d ƒ \ } t  d t t | ƒ ƒ d | ƒ t j d |  j d ƒ \ } | d k rït  d t t | ƒ ƒ d | ƒ n  t  d t j d |  j d  ƒ d ƒ t  d! t j d |  j d" ƒ d ƒ t  d# t j d |  j d$ ƒ d ƒ t  d% t |  j d& d !ƒ t |  j d d' !ƒ f ƒ t  d( t j d |  j d' ƒ d ƒ t j d |  j d) ƒ \ } | d k rt  d* t j d |  j d) ƒ d ƒ n  t  d+ t j d |  j d, ƒ d ƒ d  S(-   Nu   Palm Database Headeru   Database name: i    s   >Hu   Bitfield attributes: 0x%0Xi    u    (i   u   Read-only; i   u   Dirty AppInfoArea; i   u   Needs to be backed up; i   u   OK to install over newer; u   Reset after installation; i@   u!   No copying by PalmPilot beaming; u   )u    u   File version: %di"   s   >Li$   u   Creation Date: u    (0x%0X)i(   u   Modification Date: i,   u   Backup Date: u   Modification No.: %di0   u   App Info offset: 0x%0Xi4   u   Sort Info offset: 0x%0Xi8   u   Type/Creator: %s/%si<   iD   u   Unique seed: 0x%0XiH   u   Should be zero but isn't: %du   Number of sections: %diL   (   R2   t   reprR    R#   R$   t   strR   (   R,   t   dbattributest
   dbcreationt   dbmodificationt   dbbackupt   expectedzero(    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   dumppalmheaderM   sL    








$""%$$$4$'$c         C` s(   |  j  | | d !\ } } |  j | | !S(   Ni   (   R(   R   (   R,   R4   t   beforet   after(    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   loadSectionv   s    (   R   R   R1   R3   R6   R>   RA   (    (    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyR   -   s
   				)(    (   t
   __future__R    R   R   R   t   compatibility_utilsR   R   R   R   R   R   t   xrangeR*   R#   t   unipathR	   t   Falset   DUMPt	   ExceptionR
   R   R   R   (    (    (    s=   /home/sid/Downloads/KindleUnpack-master/lib/mobi_sectioner.pyt   <module>   s   "(		
	