
k4Vdc           @   s   dZ  i dd 6dd 6d	d 6d
d% 6dd 6dd; 6dd8 6ddS 6dd 6dd 6dd 6dd* 6dd 6dd 6dd 6dd 6Z dZ dZ ddl m Z de f d    YZ dS(  t   ECC200datamatrixi   i0   i   io   i>   i   i   iD   i   i   i   i\   i   i   i   i   i   i   i   i   it   i   in   i=   i
   i   i   i   i   i   i   i'   i   i<   ia   ix   i   i)   i   i   i[   i*   i   i   i   id   i   i   i   i   i_   i	   i   iw   i-   i   i   iS   i   i   i   iK   iB   i   im   i   i^   i   iZ   i   i   iG   i   i   i   i   iO   il   iR   i   i   i   i   i4   i   iX   i   i   i   i   i   i|   i   i   i`   i2   i   i   i   i+   ig   i%   i   i   i5   i"   i   iy   i   i   i   i]   i   i   i   i   i   if   iT   i   i   iP   i   i   i   i!   ie   i   is   i,   i;   i   ib   iQ   ip   i$   iM   i   i   i&   i   i   ii   iz   i   i   i   i   i9   i   i6   i   iE   i   i   i   i   i    iu   i   i   iW   i   ij   i   i   iv   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   iC   ik   i   i.   i8   i   i   i   i   i?   i   i@   ir   i   i   i3   i(   i   i   iV   i/   i   i   iY   i   i   iI   i   i   i   i   i   i1   ii   i   i   i7   i   i   iN   i}   i   ic   i   i   iL   i   ih   i   i   i~   iJ   i   i   i   i   i   iq   i   i#   i   i   iU   i   iA   iH   i{   i   i:   i   iF   i(   t   Barcodet   ECC200DataMatrixc           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s  This code only supports a Type 12 (44x44) C40 encoded data matrix.
    This is the size and encoding that Royal Mail wants on all mail from October 1st 2015.
    see https://bitbucket.org/rptlab/reportlab/issues/69/implementations-of-code-128-auto-and-data
    c         O   s   d |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ |  j  |  j d |  _ |  j |  j d |  _ t	 j
 |  | |  d  S(   Ni,   i   i   i8   i   (   t   row_modulest   col_modulest   row_regionst   col_regionst   cw_datat   cw_ecct   barWidtht   row_usable_modulest   col_usable_modulesR   t   __init__(   t   selft   argst   kwargs(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyR   _   s    							c         C   sL   d |  _  x< |  j D]% } t |  d k r d |  _  Pq q W|  j |  _ d  S(   Ni   i   i    (   t   validt   valuet   ordt	   validated(   R   t   c(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   validatem   s    		c         C   s  t  |  } g  } | d k sN | d k r6 | d k sN | d k r | d k r | d k rn | j | d  q| d k r | d k r | j | d  q| j | d  nS| d	 k r | d
 k r | j d	  | j |  n| d k r | d k s| d k r`| d k r`| j d  | d k rL| d k rL| j | d  q| j | d  n | d k r| d k r| j d  | j | d  nh | d k r| d k r| j d  | j d  | |  j t | d   7} n t d | | f   | S(   Ni    i0   i9   iA   iZ   i   i,   i3   i    i   i!   i@   i[   i_   i   iE   i`   i   i   i   i   i   s   Cannot encode %s (%s)(   R   t   appendt   _encode_c40_chart   chrt	   Exception(   R   t   chart   ot   encoded(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyR   v   s2    <0 c   	      C   s  g  } x! | D] } | |  j  |  7} q Wx! t |  d rM | j d  q- Wg  } | j d  xy t d t |  d  D]_ } | | | d !} | d d | d d | d d } | j | d  | j | d  qz W| j d	  t |  |  j k rt d
   n  t |  |  j k  r| j d  xM t |  |  j k  r|d t |  d d d } | j d | d	  q3Wn  | S(   Ni   i    i   i@  i   i(   i   i   i   s4   Too much data to fit into a data matrix of this sizei   i   i   (   R   t   lenR   t   rangeR   R   (	   R   R   R   R   t	   codewordst   it   chunkt   totalt   r(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _encode_c40   s*    &c         C   s   | | AS(   N(    (   R   t   int1t   int2(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _gfsum   s    c         C   s8   | d k s | d k r d St  t | t | d Sd  S(   Ni    i   (   t   ALOGVALt   LOGVAL(   R   R%   R&   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt
   _gfproduct   s    c         C   s   t  | } d g | } x | D] } |  j | | d  } xi t | d d d  D]Q } |  j | | |  | | <| d k rQ |  j | | d | |  | | <qQ qQ Wq W| j   | S(   s   
        This method is basically verbatim from "huBarcode" which is BSD licensed
        https://github.com/hudora/huBarcode/blob/master/hubarcode/datamatrix/reedsolomon.py
        i    ii   (   t   FACTORSR'   R   R*   t   reverse(   R   t   datat   num_code_wordst
   cw_factorst
   code_wordst	   data_wordt   tmpt   j(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _get_reed_solomon_code   s    
-
c         C   sR   | j  d  } g  } x, t d d  D] } | j | | ?d @ q% W| j   | S(   Ni    i   i   (   t   popR   R   R,   (   R   R-   R   t   bitsR    (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _get_next_bits   s    
c         C   s   | d k  r5 | |  j  7} | d |  j  d d 7} n  | d k  rj | |  j 7} | d |  j d d 7} n  | |  j | | <d  S(   Ni    i   i   (   R
   R   t   _matrix(   R   t   rowt   colt   bit(    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt
   _place_bit   s    c         C   s  |  j  |  } |  j |  j d d | d  |  j |  j d d | d  |  j |  j d d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  d  S(	   Ni   i    i   i   i   i   i   i   (   R7   R<   R
   R   (   R   R-   R6   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _place_bit_corner_1   s    c         C   s  |  j  |  } |  j |  j d d | d  |  j |  j d d | d  |  j |  j d d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  d  S(	   Ni   i    i   i   i   i   i   i   (   R7   R<   R
   R   (   R   R-   R6   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _place_bit_corner_2   s    c         C   s  |  j  |  } |  j |  j d d | d  |  j |  j d d | d  |  j |  j d d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  d  S(	   Ni   i    i   i   i   i   i   i   (   R7   R<   R
   R   (   R   R-   R6   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _place_bit_corner_3   s    c         C   s
  |  j  |  } |  j |  j d d | d  |  j |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  |  j d |  j d | d  d  S(	   Ni   i    i   i   i   i   i   i   (   R7   R<   R
   R   (   R   R-   R6   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _place_bit_corner_4  s    %c         C   s   |  j  |  } |  j | d | d | d  |  j | d | d | d  |  j | d | d | d  |  j | d | d | d  |  j | d | | d  |  j | | d | d  |  j | | d | d  |  j | | | d  d  S(	   Ni   i    i   i   i   i   i   i   (   R7   R<   (   R   R-   R9   R:   R6   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _place_bit_standard  s    c         C   s  |  j  } |  j } |  j | |  |  _ d } d } x(t r]| | k rd | d k rd |  j |  n | | d k r | d k r | d r |  j |  nx | | d k r | d k r | d d k r |  j |  n< | | d k r| d k r| d d k r|  j |  n  x t r| | k  r`| d k r`|  j | | d k r`|  j
 | | |  n  | d 8} | d 7} | d k  s| | k rPqqW| d 7} | d 7} x t r)| d k r| | k  r|  j | | d k r|  j
 | | |  n  | d 7} | d 8} | | k s"| d k  rPqqW| d 7} | d 7} | | k r6 | | k r6 Pq6 q6 WxH |  j D]= } x4 t d |  D]# } | | d k r~d | | <q~q~WqhW|  j S(   s   
        This method is heavily influenced by "huBarcode" which is BSD licensed
        https://github.com/hudora/huBarcode/blob/master/hubarcode/datamatrix/placement.py
        i   i    i   i   i   i   N(   R
   R   t   _create_empty_matrixR8   t   TrueR=   R>   R?   R@   t   NoneRA   R   (   R   R-   t   rowst   colsR9   R:   R    (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _create_matrix  sN    			&,,	/



	/



c         C   s   g  } d } d } t  |  j |  j  } t  |  j |  j  } x | |  j k  r x | |  j k  r | | } | | } | | | | !}	 x6 t d t |	   D] }
 |	 |
 | | | !|	 |
 <q W| j |	  | d 7} qS Wd } | d 7} qA W| S(   Ni    i   (   t   intR
   R   R   R   R   R   R   (   R   t   matrixt   regionst
   col_offsett
   row_offsetRE   RF   t   r_offsett   c_offsett   regionR    (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _create_data_regionsX  s"    

c         C   s8   g  } x+ t  d |  D] } | j d  g |  q W| S(   Ni    (   R   R   RD   (   R   R9   R:   RI   R    (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyRB   n  s    c         C   s]  g  } xP| D]H} |  j  t |  j |  j  t |  j |  j   } xM t |  D]? \ } } x0 t |  D]" \ } } | | | d | d <qk WqR Wx t |  D] \ } }	 | d k r x t |	  D] \ } }
 | d d |	 | <q Wq | d t |  k r,x? t |	  D] \ } }
 d |	 | <qWq d |	 d <| d |	 d <q W| j |  q W| S(   Ni   i    i   i(	   RB   RH   R   R   R   R   t	   enumerateR   R   (   R   RJ   t   wrappedRO   RI   R    RE   R3   R-   R9   R:   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _wrap_data_regions_with_finderst  s&    
c         C   s   g  } x t  d t |  |  j  D]y } | | | |  j !} d } xV | t | d  k  r g  } x | D] } | | | 7} qh W| j |  | d 7} qE Wq" W| S(   Ni    i   (   R   R   R   R   (   R   RJ   t   mergedR    R!   R3   t
   merged_rowR9   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   _merge_data_regions  s    "c         C   s   t  |  d  r |  j S|  j |  j  } | |  j | |  j  7} |  j |  } |  j |  } |  j |  } |  j	 |  |  _ |  j j
   |  j S(   NR   (   t   hasattrR   R$   R   R4   R   RG   RP   RS   RV   R,   (   R   R   RI   t   data_regionsRR   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   encode  s    c         G   s*   |  j  |  j |  _ |  j |  j |  _ d  S(   N(   R   R	   t   _heightR   t   _width(   R   R   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   computeSize  s    c         C   s   x{ t  |  j  D]j \ } } x[ t  |  D]M \ } } | r) |  j |  j | |  j |  j | |  j |  j |  j  q) q) Wq Wd  S(   N(   RQ   R   t   rectt   xR	   t   y(   R   R_   R9   R^   R-   (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   draw  s    (   t   __name__t
   __module__t   __doc__R   R   R   R$   R'   R*   R4   R7   R<   R=   R>   R?   R@   RA   RG   RP   RB   RS   RV   RY   R\   R`   (    (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyR   Z   s.   				"	 											;						N(   R    (   i   i0   i   io   i>   (   i   iD   i   i   i   i\   i   (
   i   i   i   i   i   i   it   i   in   i=   (   i   i   i   i   i   i   i'   i   i<   ia   ix   (   i)   i   i   i[   i=   i*   i   i   ia   i   id   i   (   i   ia   i   i   i_   i	   i   iw   i   i-   i   i   iS   i   (   iS   i   id   i'   i   iK   iB   i=   i   i   im   i   i^   i   i   i0   iZ   i   (   i   i   i   i	   i   iG   i   i   i   i   i   i   i   iO   il   iR   i   i   i   i   (   i4   i   iX   i   im   i'   i   i   i   i   i   i   i   i   i   i   i   i|   i   i   i   i`   i2   i   (   i   i   i+   ia   iG   i`   ig   i   i%   i   i   i5   iK   i"   i   iy   i   i   in   i   i   i   ix   i   i   i   i]   i   ($   i   i   i   i   i   i   i   i   if   ix   iT   i   i   i   iP   i   i   i   i   i   iD   i!   ie   i   i_   iw   is   i,   i   i   i;   i   i   ib   iQ   ip   (*   iM   i   i   i   i   i&   i   i   i   ii   iz   i   i   i   i   i   i   i_   id   i	   i   ii   i   io   i9   iy   i   i   i   i9   i6   ie   i   i   iE   i2   i   i   i   i   i	   i   (0   i   i   i   i   i`   i    iu   i   i   i   i   i   i   i   i   iW   i   ij   i   i   iv   i   i%   iZ   i   i   i   iX   ix   id   iB   i   i   i   iR   i,   i   iW   i   i   i   i   iE   i   i\   i   i   i   (8   i   i	   i   i   i   i   i   i   id   i   i   i   i   i   i   i   i   i   i$   i   i&   i   i   i6   i   i   i   i   iu   i   i   i   i   i   i   i   i   iu   i>   i   i   i   i   i   i   iC   i   i   i   i+   i   ik   i   i5   i   i.   (>   i   i]   i   i2   i   i   i'   iv   i   i   i   i   i   il   i   i%   i   ip   i   i   i   i?   i   i   i   ij   i   i   i   i@   ir   iG   i   i,   i   i   i   i   i3   i?   iW   i
   i(   i   i   i   i   i   i   i   i   ik   i   i   i^   i   i   i|   iV   i/   i   i   (D   i   i   i   iY   i   i   i   i8   iY   i!   i   i   i   i$   iI   i   i   i   i   i   i   i   i   i   iD   iz   i]   i   i   i   i   i   iB   i   i   i   i   i   i   i   i   i   i`   i   i   i   i   i   i   i   i;   i4   i   i   i1   i   i   i   i@   i6   il   i   i   i?   i`   ig   iR   i   (   ii   i   i   i   i   i   i5   i   i&   i   i   i   i+   i6   i   i   i   i'   ir   i   ij   i   i   i   i   i,   i   i7   iv   i   i   i   i   i   i`   i(   i   is   ig   i   iN   ik   i}   i   i   i   i   i   i   i   i   i-   ic   i   i1   i8   i   iw   i   i   i   i   i[   i   iL   i   i   i   i   ia   i   i)   i$   i   i   it   i   ih   i   i   iV   iO   i   il   i   i~   i   i   i"   i	   iJ   i   i    i   iT   i   i   i   i   i   iQ   i   i   i.   iX   id   i   i   i   i2   i   i9   i   i   iC   ix   i   i   i   i   i   i   i?   i   in   i\   i   i   i   iM   i|   i   if   i   i_   i   iZ   i   i   ib   i0   i   i   i*   i   i%   i   i   i4   i   i   iu   i   i   i   ii   i   i   iq   i   i   iW   i   iP   i   i   i   im   i   i   i>   i   i   i   iB   i   i   i#   i   i
   i   iK   i   i   iS   i!   iI   i   i   iU   i   i   iA   i   i=   i   i   i   i   i   i   iR   iH   i   i   i   i   i/   i   iY   i   ie   i^   i   i{   i   ip   i   i   i3   i   i   i   i:   iE   i   i   i   i   iD   i   iy   i   i   i   i   i;   i   iF   i   i   i   iG   i   i   i@   i<   i   i   io   i   i]   iz   i   i   (   i   i   i   i   i   i    i@   i   i-   iZ   i   iE   i   i9   ir   i   i   i   i   i   i   i   i   i   i6   il   i   i   i   i.   i\   i   i]   i   iY   i   iI   i   i	   i   i$   iH   i   i   i   i4   ih   i   i   i7   in   i   i   i   i   i   i8   ip   i   i   i   i   i   i{   i   i   i   is   i   i   i   i   i   i   i[   i   iA   i   i)   iR   i   ie   i   i   i_   i   iQ   i   ii   i   i   i?   i~   i   i   i   i#   iF   i   i5   ij   i   i   i'   iN   i   i   i*   iT   i   i}   i   i   i   i   i&   iL   i   i   i:   it   i   i   i   i   i+   iV   i   iu   i   i   i   i   i   i   i,   iX   i   iM   i   i   i2   id   i   i   iW   i   iq   i   i   i   i   i   i;   iv   i   i   i   i   ik   i   i   i/   i^   i   iU   i   iy   i   i   i   iS   i   ia   i   i   i   i   i   i   i3   if   i   i   iG   i   i1   ib   i   i   ig   i   i   iO   i   i   i"   iD   i   i=   iz   i   i   i   ic   i   i   io   i   i   i   i   i<   ix   i   i   i   iC   i   i!   iB   i   i%   iJ   i   i   i
   i   i(   iP   i   im   i   i   i   i>   i|   i   i   i   i   i   i   i   i0   i`   i   i   iw   i   i   i   i   iK   i   i   (   t   __all__R+   R)   R(   t!   reportlab.graphics.barcode.commonR   R   (    (    (    sy   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyt   <module>   s                         
                                    