o
    *ήcY                     @   s   d dl mZ ddlmZ G dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZdS )    )absolute_import   )Typec                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ZippedDocumentBasec                 C   s$   |  |dd}|dkrd S | |S )Nr   p  )search_signaturematch_document)selfbufidx r   >/tmp/pip-target-vg8gfxp4/lib/python/filetype/types/document.pymatch	   s   
zZippedDocumentBase.matchc                 C   s   t )N)NotImplementedErrorr	   r
   r   r   r   r      s   z!ZippedDocumentBase.match_documentc                 C   s0   t |}|| t |krdS ||||  |kS )NFlen)r	   r
   subslicestart_offsetslr   r   r   compare_bytes   s   z ZippedDocumentBase.compare_bytesc                 C   sV   d}t |}|| }||kr|n|}||krdS z||||W S  ty*   Y dS w )Ns   PK)r   index
ValueError)r	   r
   startrangeNum	signaturelengthendr   r   r   r      s   z#ZippedDocumentBase.search_signatureN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s
    r   c                   @   s   e Zd Zdd ZdS )OpenDocumentc                 C   s(   |  |dds	d S |  |t| jddS )Ns   mimetype   ASCII&   )r   bytesmimer   r   r   r   r   -   s   zOpenDocument.match_documentN)r   r    r!   r   r   r   r   r   r"   ,   s    r"   c                   @   s   e Zd Zdd Zdd ZdS )OfficeOpenXmlc                 C   s   |  |d}|r
|S | |dds!| |dds!| |dds!d S d}tdD ] }| ||d d}|dkr9 d S |  ||d }|rG|  S q'd S )	Nr#   s   [Content_Types].xmls   _rels/.relss   docPropsr      r   r   )match_filenamer   ranger   )r	   r
   ftr   ir   r   r   r   7   s(   zOfficeOpenXml.match_documentc                 C   sL   |  |d|r| jdkS |  |d|r| jdkS |  |d|r$| jdkS d S )Ns   word/Gapplication/vnd.openxmlformats-officedocument.wordprocessingml.documents   ppt/Iapplication/vnd.openxmlformats-officedocument.presentationml.presentations   xl/Aapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet)r   r'   )r	   r
   offsetr   r   r   r*   T   s    zOfficeOpenXml.match_filenameN)r   r    r!   r   r*   r   r   r   r   r(   6   s    r(   c                       0   e Zd ZdZdZdZ fddZdd Z  ZS )DoczO
    Implements the Microsoft Word (Office 97-2003) document type matcher.
    zapplication/msworddocc                       t t| jtjtjd d S N)r'   	extension)superr3   __init__MIME	EXTENSIONr	   	__class__r   r   r9   n      zDoc.__init__c                 C   sT   t |dkr(|dd dkr(|dd dkrdS t |d	kr(d
|dd	 v r(dS dS )Ni  r         ࡱ     s    Ti^  s'    
   MSWordDoc    Word.Document.8 9qi  Fr   r   r   r   r   r   q   s   

z	Doc.match	r   r    r!   __doc__r:   r;   r9   r   __classcell__r   r   r=   r   r3   f       r3   c                       (   e Zd ZdZdZdZ fddZ  ZS )DocxzS
    Implements the Microsoft Word OOXML (Office 2007+) document type matcher.
    r.   docxc                    r5   r6   )r8   rI   r9   r:   r;   r<   r=   r   r   r9      r?   zDocx.__init__r   r    r!   rE   r:   r;   r9   rF   r   r   r=   r   rI      
    rI   c                       rH   )OdtzA
    Implements the OpenDocument Text document type matcher.
    z'application/vnd.oasis.opendocument.textodtc                    r5   r6   )r8   rM   r9   r:   r;   r<   r=   r   r   r9      r?   zOdt.__init__rK   r   r   r=   r   rM      rL   rM   c                       r2   )XlszP
    Implements the Microsoft Excel (Office 97-2003) document type matcher.
    zapplication/vnd.ms-excelxlsc                    r5   r6   )r8   rO   r9   r:   r;   r<   r=   r   r   r9      r?   zXls.__init__c                 C   s   t |dkr>|dd dkr>|dd dkr$|d dks"|d d	kr$d
S |dd dkr.d
S t |dkr>d|dd v r>d
S dS )Ni  r   r@   rA   rB   rC      i     Ts   	   i/  s      \ p   Calci   Fr   r   r   r   r   r      s"   



z	Xls.matchrD   r   r   r=   r   rO      rG   rO   c                       rH   )XlsxzT
    Implements the Microsoft Excel OOXML (Office 2007+) document type matcher.
    r0   xlsxc                    r5   r6   )r8   rS   r9   r:   r;   r<   r=   r   r   r9      r?   zXlsx.__init__rK   r   r   r=   r   rS      rL   rS   c                       rH   )OdszH
    Implements the OpenDocument Spreadsheet document type matcher.
    z.application/vnd.oasis.opendocument.spreadsheetodsc                    r5   r6   )r8   rU   r9   r:   r;   r<   r=   r   r   r9      r?   zOds.__init__rK   r   r   r=   r   rU      rL   rU   c                       r2   )PptzU
    Implements the Microsoft PowerPoint (Office 97-2003) document type matcher.
    zapplication/vnd.ms-powerpointpptc                    r5   r6   )r8   rW   r9   r:   r;   r<   r=   r   r   r9      r?   zPpt.__init__c                 C   s   t |dkrN|dd dkrN|dd dkrdS |dd d	kr"dS |dd d
kr,dS |dd dkr>|dd dkr>dS t |dkrN|dd dkrNdS dS )Ni  r   r@   rA   rB   rC   s   FTs    ns    rQ   i
  s     i0  i  s    )   MS PowerPoint 97Fr   r   r   r   r   r      s"    

z	Ppt.matchrD   r   r   r=   r   rW      rG   rW   c                       rH   )PptxzY
    Implements the Microsoft PowerPoint OOXML (Office 2007+) document type matcher.
    r/   pptxc                    r5   r6   )r8   rY   r9   r:   r;   r<   r=   r   r   r9      r?   zPptx.__init__rK   r   r   r=   r   rY      rL   rY   c                       rH   )OdpzI
    Implements the OpenDocument Presentation document type matcher.
    z/application/vnd.oasis.opendocument.presentationodpc                    r5   r6   )r8   r[   r9   r:   r;   r<   r=   r   r   r9      r?   zOdp.__init__rK   r   r   r=   r   r[      rL   r[   N)
__future__r   baser   r   r"   r(   r3   rI   rM   rO   rS   rU   rW   rY   r[   r   r   r   r   <module>   s   $
0