U
    '1eH                  l   @   s  d dl mZ d dlmZ d dlmZ d dlmZ ddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpkZdq\Z	Z
ZZd drdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd؜gZd drdsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddٜgZd drdsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddڜgZeefeefedfe	eefe
eefeedfdܜZdZee ZG dd߄ deZG dd deZedkrdd Ze  dS )    inch)asNative)MultiWidthBarcode)digitsZBaBbBbZBbBaBbZBbBbBaZAbAbBcZAbAcBbZAcAbBbZAbBbAcZAbBcAbZAcBbAbZBbAbAcZBbAcAbZBcAbAbZAaBbCbZAbBaCbZAbBbCaZAaCbBbZAbCaBbZAbCbBaZBbCbAaZBbAaCbZBbAbCaZBaCbAbZBbCaAbZCaBaCaZCaAbBbZCbAaBbZCbAbBaZCaBbAbZCbBaAbZCbBbAaZBaBaBcZBaBcBaZBcBaBaZAaAcBcZAcAaBcZAcAcBaZAaBcAcZAcBaAcZAcBcAaZBaAcAcZBcAaAcZBcAcAaZAaBaCcZAaBcCaZAcBaCaZAaCaBcZAaCcBaZAcCaBaZCaCaBaZBaAcCaZBcAaCaZBaCaAcZBaCcAaZBaCaCaZCaAaBcZCaAcBaZCcAaBaZCaBaAcZCaBcAaZCcBaAaZCaDaAaZBbAdAaZDcAaAaZAaAbBdZAaAdBbZAbAaBdZAbAdBaZAdAaBbZAdAbBaZAaBbAdZAaBdAbZAbBaAdZAbBdAaZAdBaAbZAdBbAaZBdAbAaZBbAaAdZDaCaAaZBdAaAbZAcDaAaZAaAbDbZAbAaDbZAbAbDaZAaDbAbZAbDaAbZAbDbAaZDaAbAbZDbAaAbZDbAbAaZBaBaDaZBaDaBaZDaBaBaZAaAaDcZAaAcDaZAcAaDaZAaDaAcZAaDcAaZDaAaAcZDaAcAaZAaCaDaZAaDaCaZCaAaDaZDaAaCaZBaAdAbZBaAbAdZBaAbCbZBcCaAaB)kr                           	   
                                                                      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   c   d   e   f   g   h   i   j   )rm   rn   ro   rp   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   )g !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ 	
   ó   òSHIFTTO_CTO_B   ô   ñ)grq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   `abcdefghijklmnopqrstuvwxyz{|}~r   r   r   r   r   TO_Ar   )gZ00Z0102Z03Z04Z05Z06Z07Z08Z0910Z11Z12Z13Z14Z15Z16Z17Z18Z19Z20Z21Z22Z23Z24Z25Z26Z27Z28Z29Z30Z31Z32Z33Z34Z35Z36Z37Z38Z39Z40Z41Z42Z43Z44Z45Z46Z47Z48Z49Z50Z51Z52Z53Z54Z55Z56Z57Z58Z59Z60Z61Z62Z63Z64Z65Z66Z67Z68Z69Z70Z71Z72Z73Z74Z75Z76Z77Z78Z7980Z81Z82Z83Z84Z85Z86Z87Z88Z89Z90Z91Z92Z93Z94Z95Z96Z97Z98Z99r   r   r   N)r   r   r   ZSTART_ASTART_BZSTART_C)r   r   r   c                   @   sZ   e Zd ZdZed ZdZdZdZdZ	dddZ
dd	 Zd
d Zdd Zdd Zdd ZdS )Code128u  
    Code 128 is a very compact symbology that can encode the entire
    128 character ASCII set, plus 4 special control codes,
    (FNC1-FNC4, expressed in the input string as ñ to ô).
    Code 128 can also encode digits at double density (2 per byte)
    and has a mandatory checksum.  Code 128 is well supported and
    commonly used -- for example, by UPS for tracking labels.
    
    Because of these qualities, Code 128 is probably the best choice
    for a linear symbology today (assuming you have a choice).

    Options that may be passed to constructor:

        value (int, or numeric string. required.):
            The value to encode.
   
        barWidth (float, default .0075):
            X-Dimension, or width of the smallest element
            Minumum is .0075 inch (7.5 mils).
            
        barHeight (float, see default below):
            Height of the symbol.  Default is the height of the two
            bearer bars (if they exist) plus the greater of .25 inch
            or .15 times the symbol's length.

        quiet (bool, default 1):
            Wether to include quiet zones in the symbol.
            
        lquiet (float, see default below):
            Quiet zone size to left of code, if quiet is true.
            Default is the greater of .25 inch, or 10 barWidth
            
        rquiet (float, defaults as above):
            Quiet zone size to right left of code, if quiet is true.
            
    Sources of Information on Code 128:

    http://www.semiconductor.agilent.com/barcode/sg/Misc/code_128.html
    http://www.adams1.com/pub/russadam/128code.html
    http://www.barcodeman.com/c128.html

    Official Spec, "ANSI/AIM BC4-1999, ISS" is available for US$45 from
    http://www.aimglobal.org/aimstore/
    gQ~?Nr    c                 K   s   t |trt|nt|}| D ]\}}t| || q"| jr| jd kr^tt	d | j
d | _| jd krtt	d | j
d | _nd | _| _t| | d S )Ng      ?g      $@g        )
isinstanceintstrr   itemssetattrquietlquietmaxr   barWidthrquietr   __init__)selfvalueargsr   r    r  F/tmp/pip-unpacked-wheel-109iniqw/reportlab/graphics/barcode/code128.pyr	     s    

zCode128.__init__c                 C   sD   d}d| _ | jD ](}t|dkr0|dkr0d| _ q|| }q|| _|S )Nr   r      u   ñòóôr   )Zvalidr  ord	validated)r
  Zvvalr   r  r  r  validate   s    

zCode128.validatec                 C   s  d}g }|t |k r|}g }d}|t |k r|| tkrF|}qq"|| dkrl|||  |d7 }q"q"|| tkr||d  tkr||| ||d    |d7 }|d7 }q"q"|| tkr||d  dkrg }d}	|}
|
|krd||
 dkr|||  |
d8 }
q||
 tkrd||
d  tkrd|||
d  ||
   |	d7 }	|
d8 }
qqdq|  |	|t|dko|o|d tk d kr||| 7 }|d7 }|}~|d7 }qq"|| dkp||k }|dko|o|d tk}|t| t|krp|r.|d dd d }|d= nd	}||g| 7 }|r`|d
|| dd   |||  n||||d  7 }|d7 }q|S )z?Improved version of old _trailingDigitsToC(self, l) inspired byr   r   r   r   STOPNr   r   ZTO)lencStartsappendr   reverser   )r
  r   r   nlstartposZrlZsavingsr   ZrrlZrsavingsr   taxsZtocr  r  r  	_try_TO_C   sp     

 
.
zCode128._try_TO_Cc           	      C   sf  | j }dg}|D ]&}|tkr,|d|dg }q|| q|d | |}|d tkrrd|d d  g|d d< t|d	  \}}}|g}|dd }|r |d	 }|d
kr||| ||d  g }|dd  }q|tkr|||  t| \}}|dd  }q|||  |dd  }q|d	 }tdt|D ]}||||   }q6||d tg | _	| j	S )Nr   r   r   r  r   START_r  r   r   r   rm   )
r  setbr  r  tossetmapranger  stopencoded)	r
  r   r   r   startsetshsetr   r   r  r  r  encode9  s:    


zCode128.encodec                 C   s   d dd | jD | _| jS )Nr   c                 S   s   g | ]}t | qS r  )	_patterns).0r   r  r  r  
<listcomp>e  s     z%Code128.decompose.<locals>.<listcomp>)joinr%  Z
decomposedr
  r  r  r  	decomposed  s    zCode128.decomposec                 C   s   | j S )N)r  r.  r  r  r  
_humanTexth  s    zCode128._humanText)r   )__name__
__module____qualname____doc__r   r  r  r  r  Z	barHeightr	  r  r  r)  r/  r0  r  r  r  r  r      s   ,
>+r   c                   @   s   e Zd ZdZdd ZdS )Code128Autozcontributed by https://bitbucket.org/kylemacfarlane/
    see https://bitbucket.org/rptlab/reportlab/issues/69/implementations-of-code-128-auto-and-data
    c                 C   s  | j }d }g }t|}|r|d}|tkrJ|rJ|d tkrJ||d7 }|tkrXd}n|tkrfd}nd}||kr|r|d|  n|d|  |}|| q|d t|d  \}}}	|g}
|dd	 }|r^|d }|d
kr|
|| |	|d  g }
|dd  }q|tkrB|
||  t| \}}	|dd  }q|
||  |dd  }q|
d }t	dt
|
D ]}|||
|   }qt|
|d tg | _| jS )Nr   r   r   r   ZTO_r  r  r   r  r   r   rm   )r  listpopr   setcr   r  r"  r!  r#  r  r$  r%  )r
  r   Zcurrent_setr   r  r   set_r&  r'  r(  r   r   r  r  r  r)  o  sN    



zCode128Auto.encodeN)r1  r2  r3  r4  r)  r  r  r  r  r5  k  s   r5  __main__c                  C   s   ddl m}  ddlm}m} ddlm} ddlm} ddl	m
} ddlm} | }|d }|d	 }	g }
|
j}d
D ]0}|||d| || |g |||| qp|d|
 d S )Nr   )r   )SpacerSimpleDocTemplater   )getSampleStyleSheet)	Paragraph)KeepTogetherZNormalZHeading1)ZBBBB123456BBBZBBBB12345BBBZBBBB1234BBBZ
BBBB123BBBZ	BBBB12BBBZBBBB1BBBZBBBB123456aaZ
BBBB1234aaZ	BBBB123aaZBBBB12aaZBBBB1aaZ
BBBB123456Z	BBBB12345ZBBBB1234ZBBBB123ZBBBB12ZBBBB1u   ñ1234Bu	   Bañ1234BZBa12ZBa123BZBa1234BZBBBB1234567ZBBBB1234567aazCode 128 %rzcode128-out.pdf)Z"reportlab.graphics.barcode.code128r   Zreportlab.platypusr;  r<  reportlab.lib.unitsr   Zreportlab.lib.stylesr=  Zreportlab.platypus.paragraphr>  Zreportlab.platypus.flowablesr?  r  build)r   r;  r<  r   r=  r>  r?  ZstylesZstyleNZstyleHZstoryZstoryAddr   r  r  r  main  s    rB  )r@  r   Zreportlab.lib.utilsr   Z!reportlab.graphics.barcode.commonr   stringr   r*  ZstartaZstartbZstartcr$  Zsetar   r8  r"  r  r6  keysr!  r   r5  r1  rB  r  r  r  r  <module>!   sn                                                                         '                                                                                                                                                                                                                                             ?7
)