§
    £”jû2  ã                   ó@  — d Z dZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZmZ ddlmZ dd	lmZ dd
lmZ dddddœZ G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd„ Z G d„ de¦  «        Zd„ Zedk    r e¦   «          dS dS )z3.3.0aL  Routines to print code page (character set) drawings. Predates unicode.

To be sure we can accurately represent characters in various encodings
and fonts, we need some routines to display all those characters.
These are defined herein.  The idea is to include flowable, drawable
and graphic objects for single and multi-byte fonts. é    N)ÚCanvas)ÚFlowable)Ú
pdfmetricsÚcidfonts)ÚGroupÚStringÚRect)ÚWidget)Úcolors)Úint2ByteÚwinansiÚmacromanÚ	macexpertÚpdfdoc)ÚWinAnsiEncodingÚMacRomanEncodingÚ	MacExpertÚPDFDocc                   ó,   — e Zd ZdZd„ Zd„ Zd„ Zdd„ZdS )	ÚCodeChartBasezrBasic bits of drawing furniture used by
    single and multi-byte versions: ability to put letters
    into boxes.c                 ó  — | j         dz  | j        z  }|t          |¦  «        k    rt          |¦  «        | _        nt          |¦  «        dz   | _        | j        d| j        z   z  | _        | j        d| j        z   z  | _        g | _        t          | j        dz   ¦  «        D ]$}| j         	                    || j        z  ¦  «         Œ%g | _
        t          | j        dz   ¦  «        D ]$}| j
         	                    || j        z  ¦  «         Œ%dS )z&Work out x and y positions for drawingg      ð?é   é   N)Ú
codePointsÚcharsPerRowÚintÚrowsÚboxSizeÚwidthÚheightÚylistÚrangeÚappendÚxlist)Úselfr   ÚrowÚcols       úg/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/reportlab/lib/codecharts.pyÚ
calcLayoutzCodeChartBase.calcLayout#   s	  € ð Œ Ñ$ tÔ'7Ñ7ˆØ•3�t‘9”9ÒÐÝ˜D™	œ	ˆDŒIˆIå˜D™	œ	 A™ˆDŒIà”\ Q tÔ'7Ñ%7Ñ8ˆŒ
Ø”l a¨¬	¡kÑ2ˆŒð ˆŒ
Ý˜œ Q™Ñ'Ô'ð 	2ð 	2ˆCØŒJ×Ò˜c D¤LÑ0Ñ1Ô1Ð1Ð1ØˆŒ
Ý˜Ô)¨AÑ-Ñ.Ô.ð 	2ð 	2ˆCØŒJ×Ò˜c D¤LÑ0Ñ1Ô1Ð1Ð1ð	2ð 	2ó    c                 ó$   — | j         rd|z  S d|z  S )Nú%02Xz%d)Úhex)r%   Úbyts     r(   Ú
formatBytezCodeChartBase.formatByte8   s    € ØŒ8ð 	Ø˜C‘<Ðà˜#‘:Ðr*   c           
      ó  — | j         | j        z  t          |¦  «        z
  }t          |¦  «        D ]}|                     d¦  «         Œd}d}| j                             | j        | j        dz  ¦  «         |D �]’}|€}| j         	                    d¦  «         | j         
                    d|z   | j        z  | j         |z
  dz
  | j        z  | j        | j        dd¬¦  «         | j         	                    d¦  «         nù	 | j                             |dz   | j        z  | j         |z
  d	z
  | j        z  |¦  «         n½#  | j         	                    d¦  «         | j         
                    d|z   | j        z  | j         |z
  dz
  | j        z  | j        | j        dd¬¦  «         | j                             |dz   | j        z  | j         |z
  d	z
  | j        z  d
¦  «         | j         	                    d¦  «         Y nxY w|dz   }|| j        k    r|dz   }d}�Œ”dS )z]Fills boxes in order.  None means skip a box.
        Empty boxes at end get filled with grayNr   ç      è?gÍÌÌÌÌÌì?r   ©ÚstrokeÚfillç        ç      ø?g      ì?ú?)r   r   Úlenr"   r#   ÚcanvÚsetFontÚfontNamer   ÚsetFillGrayÚrectÚdrawCentredString)r%   ÚcharListÚextraNeededÚir&   r'   Úchs          r(   Ú	drawCharszCodeChartBase.drawChars>   sM  € ð ”y 4Ô#3Ñ3µc¸(±m´mÑCˆÝ�{Ñ#Ô#ð 	"ð 	"ˆAØ�OŠO˜DÑ!Ô!Ð!Ð!àˆØˆØŒ	×Ò˜$œ-¨¬¸Ñ)<Ñ=Ô=Ð=Øð 	ñ 	ˆBØˆzØ”	×%Ò% cÑ*Ô*Ð*Ø”	—’  #¡¨¬Ñ5¸¼	ÀC¹È!Ñ8KÈtÌ|Ñ7[Ø”L $¤,°q¸qð ñ Bô Bð Bà”	×%Ò% cÑ*Ô*Ð*Ð*ð/Ø”I×/Ò/Ø  ™W¨¬Ñ4Ø!œY¨™_¨uÑ4¸¼ÑDØñô ð ð øð
	/Ø”I×)Ò)¨#Ñ.Ô.Ð.Ø”I—N’N A c¡E¨T¬\Ñ#9¸D¼IÈ¹OÈaÑ<OÐSWÔS_Ñ;_Øœ d¤l¸1À1ð #ñ Fô Fð Fà”I×/Ò/Ø  ™W¨¬Ñ4Ø!œY¨™_¨uÑ4¸¼ÑDØñô ð ð
 ”I×)Ò)¨#Ñ.Ô.Ð.Ð.Ð.øøøØ˜‘'ˆCØ�dÔ&Ò&Ð&Ø˜A‘g�Ø�ùð5	ð 	s   Ã8:D3Ä3B8G-Ú c                 óú  — | j                              d¦  «         | j                              d| j        d         | j        | j        dd¬¦  «         | j                              dd| j        | j        d         dd¬¦  «         | j                              d¦  «         | j                              dd| j        z  ¦  «         d}t          | j        ¦  «        D ]k}| j	        r| j	        |         }n|  
                    || j        z  ¦  «        }| j                              d	| j        z  | j        |z
  d
z
  | j        z  |¦  «         Œlt          | j        ¦  «        D ]L}| j                              |dz   | j        z  | j        dz   | j        z  |  
                    |¦  «        ¦  «         ŒM|rY| j                              dd	| j        z  ¦  «         | j                              d	| j        z  | j        dz   | j        z  |¦  «         dS dS )z4Writes little labels in the top row and first columnçš™™™™™é?r   éþÿÿÿr   )r4   r3   r5   zHelvetica-Obliqueg      Ø?g      à?r1   r6   g      Ð?zHelvetica-BoldObliqueN)r9   r<   r=   r!   r   r   r:   r"   r   Ú	rowLabelsr/   r   r>   )r%   ÚtopLeftr.   r&   Úlabelr'   s         r(   Ú
drawLabelszCodeChartBase.drawLabelsd   s  € àŒ	×Ò˜cÑ"Ô"Ð"ØŒ	�Š�q˜$œ* Rœ.¨$¬*°d´lÈÐSTˆÑUÔUÐUØŒ	�Š�q˜!˜Tœ\¨4¬:°b¬>ÀÈ!ˆÑLÔLÐLØŒ	×Ò˜cÑ"Ô"Ð"ð 	Œ	×ÒÐ-¨e°d´lÑ.BÑCÔCÐCØˆÝ˜œÑ#Ô#ð 	*ð 	*ˆCØŒ~ð @Øœ sÔ+��àŸš¨¨dÔ.>Ñ(>Ñ?Ô?�ØŒI×'Ò'¨¨d¬lÑ(:Ø)-¬°S©¸4Ñ)?À4Ä<Ñ(OØ(-ñ*ô *ð *ð *õ ˜Ô)Ñ*Ô*ð 	*ð 	*ˆCØŒI×'Ò'¨¨s©°d´lÑ(BØ)-¬°TÑ)9¸T¼\Ñ(IØ(,¯ª¸Ñ(<Ô(<ñ*ô *ð *ð *ð
 ð 	*ØŒI×ÒÐ5°c¸D¼LÑ6HÑIÔIÐIØŒI×'Ò'¨¨d¬lÑ(:Ø)-¬°TÑ)9¸T¼\Ñ(IØ(/ñ*ô *ð *ð *ð *ð	*ð 	*r*   N)rD   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r/   rC   rK   © r*   r(   r   r      s`   € € € € € ðð ð2ð 2ð 2ð*ð ð ð$ð $ð $ðL*ð *ð *ð *ð *ð *r*   r   c                   ó    — e Zd Z	 	 d	d„Zd„ ZdS )
ÚSingleByteEncodingChartÚ	Helveticar   é   é   r   c                 ó,  — d| _         || _        || _        | j        dz   | j        z   | _        || _        || _        || _        d | _        t          j	        t          j
        | j        | j        | j        ¦  «        ¦  «         |                      ¦   «          d S )Né   ú-)r   ÚfaceNameÚencodingNamer;   r   r   r-   rH   r   ÚregisterFontÚFontr)   )r%   rY   rZ   r   r   r-   s         r(   Ú__init__z SingleByteEncodingChart.__init__…   s—   € àˆŒØ ˆŒØ(ˆÔØœ¨Ñ+¨dÔ.?Ñ?ˆŒØ&ˆÔØˆŒØˆŒØˆŒÝÔ¥
¤°´Ø04´Ø04Ô0Añ!Cô !Cñ 	"ô 	"ð 	"ð
 	�ŠÑÔÐÐÐr*   c                 óÌ  ‡‡— |                       ¦   «          d gdz  t          t          t          t          t	          dd¦  «        ¦  «        ¦  «        ¦  «        z   }| j        }t                               ||¦  «        }t          j	        |¦  «        d         Šˆfd„Šˆfd„|D ¦   «         }|  
                    |¦  «         | j                             | j        | j        ¦  «         d S )Né    rW   r   c                 ó2   •— | €d S  ‰| d¬¦  «        d         S )NÚreplace)Úerrorsr   rP   )ÚtxtÚdecoders    €r(   Ú
decodeFuncz0SingleByteEncodingChart.draw.<locals>.decodeFunc¢   s'   ø€ Øˆ{Ø�tà�w˜s¨9Ð5Ñ5Ô5°aÔ8Ð8r*   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS rP   rP   )Ú.0rB   re   s     €r(   ú
<listcomp>z0SingleByteEncodingChart.draw.<locals>.<listcomp>¨   s!   ø€ Ð6Ð6Ð6 r�J�J˜r‘N”NÐ6Ð6Ð6r*   )rK   ÚlistÚmapr   r"   rZ   Úadobe2codecÚgetÚcodecsÚlookuprC   r9   Úgridr$   r!   )r%   r?   ÚencNamere   rd   s      @@r(   ÚdrawzSingleByteEncodingChart.draw—   sß   øø€ Ø�ŠÑÔÐØ�6˜B‘;¥¥c­(µD½¸rÀ3¹¼Ñ4HÔ4HÑ&IÔ&IÑ!JÔ!JÑJˆð
 Ô#ˆå—/’/ '¨7Ñ3Ô3ˆÝ”- Ñ(Ô(¨Ô+ˆð	9ð 	9ð 	9ð 	9ð 	9ð 7Ð6Ð6Ð6¨XÐ6Ñ6Ô6ˆð 	�Š�xÑ Ô Ð ØŒ	�Š�t”z 4¤:Ñ.Ô.Ð.Ð.Ð.r*   N)rS   r   rT   rU   r   )rL   rM   rN   r]   rq   rP   r*   r(   rR   rR   „   s=   € € € € € Ø:KØ12ðð ð ð ð$/ð /ð /ð /ð /r*   rR   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚKutenRowCodeChartaf  Formats one 'row' of the 94x94 space used in many Asian encodings.aliases

    These deliberately resemble the code charts in Ken Lunde's "Understanding
    CJKV Information Processing", to enable manual checking.  Due to the large
    numbers of characters, we don't try to make one graphic with 10,000 characters,
    but rather output a sequence of these.c                 ór  — || _         d| _        d| _        d| _        d| _        g d¢| _        d| _        || _        || _        	 t          j
        | j        | j        ¦  «        }t          j        |¦  «         n#  d| _        d| _        Y nxY w| j        d	z   | j        z   | _        |                      ¦   «          d S )
Né^   é   é   é   )Ú00Ú20Ú40Ú60Ú80r   rS   r   rX   )r&   r   r   r   r   rH   r-   rY   rZ   r   ÚCIDFontr   r[   r;   r)   ©r%   r&   rY   rZ   Úfonts        r(   r]   zKutenRowCodeChart.__init__¹   sÃ   € ØˆŒØˆŒØˆŒØˆÔØˆŒ	Ø3Ð3Ð3ˆŒØˆŒØ ˆŒØ(ˆÔð	2åÔ# D¤M°4Ô3DÑEÔEˆDÝÔ# DÑ)Ô)Ð)Ð)øð	2à'ˆDŒMØ 1ˆDÔÐÐøøøØœ¨Ñ+¨dÔ.?Ñ?ˆŒØ�ŠÑÔÐÐÐó   Á3A7 Á7B	c                 ó  — g }| j                              d¦  «        dk    rNt          dd¦  «        D ]<}t          |dz   ¦  «        t          |dz   ¦  «        z   }|                     |¦  «         Œ=n|                     dgdz  ¦  «         |S )z1Works out the character values for this kuten rowÚEUCéÿÿÿÿr   é_   é    Nru   ©rZ   Úfindr"   r   r#   )r%   r&   Úcellsr'   rB   s        r(   ÚmakeRowzKutenRowCodeChart.makeRowÏ   s•   € àˆØÔ×!Ò! %Ñ(Ô(¨2Ò-Ð-å˜Q ‘|”|ð !ð !�Ý˜c C™iÑ(Ô(­8°C¸±GÑ+<Ô+<Ñ<�Ø—’˜RÑ Ô Ð Ð ð!ð �LŠL˜$˜ "™Ñ%Ô%Ð%Øˆr*   c                 óò   — |                       d| j        z  ¬¦  «         d g|                      | j        ¦  «        z   }|                      |¦  «         | j                             | j        | j        ¦  «         d S )NzR%d©rI   ©rK   r&   rŠ   rC   r9   ro   r$   r!   ©r%   r?   s     r(   rq   zKutenRowCodeChart.drawß   sk   € Ø�Š ¨¬Ñ!1ˆÑ2Ô2Ð2ð �6˜DŸLšL¨¬Ñ2Ô2Ñ2ˆØ�Š�xÑ Ô Ð ØŒ	�Š�t”z 4¤:Ñ.Ô.Ð.Ð.Ð.r*   N©rL   rM   rN   rO   r]   rŠ   rq   rP   r*   r(   rs   rs   °   sK   € € € € € ð.ð .ðð ð ð,ð ð ð 	/ð 	/ð 	/ð 	/ð 	/r*   rs   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚBig5CodeChartz¿Formats one 'row' of the 94x160 space used in Big 5

    These deliberately resemble the code charts in Ken Lunde's "Understanding
    CJKV Information Processing", to enable manual checking.c                 ór  — || _         d| _        d| _        d| _        d| _        d| _        || _        || _        g d¢| _        	 t          j
        | j        | j        ¦  «        }t          j        |¦  «         n#  d| _        d| _        Y nxY w| j        d	z   | j        z   | _        |                      ¦   «          d S )
Nr†   rv   rT   é
   r   )
Ú4Ú5Ú6Ú7ÚAÚBÚCÚDÚEÚFrS   r   rX   )r&   r   r   r   r   r-   rY   rZ   rH   r   r~   r   r[   r;   r)   r   s        r(   r]   zBig5CodeChart.__init__ð   sÃ   € ØˆŒØˆŒØˆŒØˆÔØˆŒ	ØˆŒØ ˆŒØ(ˆÔØBÐBÐBˆŒð	2åÔ# D¤M°4Ô3DÑEÔEˆDÝÔ# DÑ)Ô)Ð)Ð)øð	2à'ˆDŒMØ 1ˆDÔÐÐøøøØœ¨Ñ+¨dÔ.?Ñ?ˆŒØ�ŠÑÔÐÐÐr�   c                 ó   — g }| j                              d¦  «        dk    rTdD ]P}t          d¦  «        D ]>}|dz  |z   }t          |¦  «        t          |¦  «        z   }|                     |¦  «         Œ?ŒQn|                     dgdz  ¦  «         |S )zLWorks out the character values for this Big5 row.
        Rows start at 0xA1ÚB5r„   )
é   rx   é   é   r“   é   é   é   rU   é   rT   Nr†   r‡   )r%   r&   r‰   ÚyÚxr'   rB   s          r(   rŠ   zBig5CodeChart.makeRow  sª   € ð ˆØÔ×!Ò! $Ñ'Ô'¨"Ò,Ð,à0ð %ð %�Ý˜r™œð %ð %�AØ˜B™$˜q™&�CÝ! #™œ­°#©¬Ñ6�BØ—L’L Ñ$Ô$Ð$Ð$ð%ð%ð �LŠL˜$˜ #™Ñ&Ô&Ð&Øˆr*   c                 óê   — |                       d| j        z  ¬¦  «         |                      | j        ¦  «        }|                      |¦  «         | j                             | j        | j        ¦  «         d S )Nr,   rŒ   r�   rŽ   s     r(   rq   zBig5CodeChart.draw  sb   € Ø�Š ¨¬Ñ 1ˆÑ2Ô2Ð2à—<’< ¤Ñ)Ô)ˆØ�Š�xÑ Ô Ð ØŒ	�Š�t”z 4¤:Ñ.Ô.Ð.Ð.Ð.r*   Nr�   rP   r*   r(   r‘   r‘   ë   sM   € € € € € ð@ð @ðð ð ð*ð ð ð /ð /ð /ð /ð /r*   r‘   c           	      ó   — |                      ¦   «          	 t          j        |¦  «        }n8# t          $ r+ t	          j        |¦  «        }t          j        |¦  «         Y nw xY w|                     d¦  «         |                     ||t          j	        | |d¦  «        ddd¬¦  «         |                     d¦  «         | 
                    |dd¦  «         |                     ||| ¦  «         |                     ¦   «          dS )z¡Helper for stringwidth tests on Asian fonts.

    Registers font if needed.  Then draws the string,
    and a box around it derived from the stringWidth functionrF   rT   r   r   r2   N)Ú	saveStater   ÚgetFontÚKeyErrorr   ÚUnicodeCIDFontr[   r<   r=   ÚstringWidthr:   Ú
drawStringÚrestoreState)ÚmsgÚcanvasr¨   r§   r;   r€   s         r(   ÚhBoxTextr´     s  € ð
 ×ÒÑÔÐð&ÝÔ! (Ñ+Ô+ˆˆøÝð &ð &ð &ÝÔ& xÑ0Ô0ˆÝÔ Ñ%Ô%Ð%Ð%Ð%ð&øøøð ×Ò�sÑÔÐØ
‡K‚K��!•JÔ*¨3°¸"Ñ=Ô=¸bÈÈq€KÑQÔQÐQØ
×Ò�qÑÔÐØ
‡N‚N�8˜R Ñ#Ô#Ð#Ø
×Ò�a˜˜#ÑÔÐØ
×ÒÑÔÐÐÐs   –+ «2A ÁA c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
CodeWidgetz Block showing all the charactersc                 ó>   — d| _         d| _        d| _        d| _        d S )Nr   r†   )r¨   r§   r   r    )r%   s    r(   r]   zCodeWidget.__init__3  s"   € ØˆŒØˆŒØˆŒ
ØˆŒˆˆr*   c           
      óÜ  — | j         dz  }| j        dz  }t          ¦   «         }|                     t	          | j        | j        | j         | j        d t          j        ¬¦  «        ¦  «         t          d¦  «        D ]s}t          d¦  «        D ]a}|dz  |z   }|dk    rQt          | j        ||z  z   | j        | j        ||z  z
  z   t          |¦  «        ¦  «        }|                     |¦  «         ŒbŒt|S )Ng      0@)Ú	fillColorÚstrokeColorrT   r_   )r   r    r   Úaddr	   r¨   r§   r   Úblackr"   r   r   )r%   ÚdxÚdyÚgr¨   r§   Ú	charValueÚss           r(   rq   zCodeWidget.draw9  sù   € ØŒZ˜$ÑˆØŒ[˜4ÑˆÝ‰GŒGˆØ	�Š�d�4”6˜4œ6 4¤:¨t¬{Ø!­v¬|ð=ñ =ô =ñ 	>ô 	>ð 	>å�r‘”ð 	ð 	ˆAÝ˜2‘Y”Yð ð �Ø ™F Q™J�	Ø˜r’>�>Ý˜tœv¨¨B©™Ø#œv¨¬°q¸±tÑ);Ñ<½hÀyÑ>QÔ>QñSô S�Aà—E’E˜!‘H”H�Høðð ˆr*   N)rL   rM   rN   rO   r]   rq   rP   r*   r(   r¶   r¶   1  s8   € € € € € Ø*Ð*ðð ð ðð ð ð ð r*   r¶   c                  ó¬  — t          d¦  «        } |                      dd¦  «         |                      ddd¦  «         t          ¦   «         }|                     | dd¦  «         t          d¬	¦  «        }|                     | dd
¦  «         t          dd¬¦  «        }|                     | dd¦  «         |                      ¦   «          t          d¦  «         d S )Nzcodecharts.pdfzHelvetica-Boldé   éH   iî  zTesting code page chartsiô  r_   )r   i,  é   r   )r   r-   éd   zsaved codecharts.pdf)r   r:   r°   rR   ÚdrawOnÚsaveÚprint)ÚcÚcc1Úcc2Úcc3s       r(   ÚtestrÎ   M  sÏ   € ÝÐÑ Ô €AØ‡I‚IÐ Ñ#Ô#Ð#Ø‡L‚L��SÐ4Ñ5Ô5Ð5Ý
!Ñ
#Ô
#€CØ‡J‚Jˆq�"�cÑÔÐå
!¨bÐ
1Ñ
1Ô
1€CØ‡J‚Jˆq�"�cÑÔÐå
!¨b°aÐ
8Ñ
8Ô
8€CØ‡J‚Jˆq�"�cÑÔÐð ‡F‚F�H„H€HÝ	Ð
 Ñ!Ô!Ð!Ð!Ð!r*   Ú__main__)Ú__version__rO   rm   Úreportlab.pdfgen.canvasr   Úreportlab.platypusr   Úreportlab.pdfbaser   r   Úreportlab.graphics.shapesr   r   r	   Úreportlab.graphics.widgetbaser
   Úreportlab.libr   Úreportlab.lib.utilsr   rk   r   rR   rs   r‘   r´   r¶   rÎ   rL   rP   r*   r(   ú<module>rØ      sè  ðð
 €ð	9€ð €€€à *Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø  Ð  Ð  Ð  Ð  Ð  Ø (Ð (Ð (Ð (Ð (Ð (ð  Ø!ØØð	ð €ðd*ð d*ð d*ð d*ð d*�Hñ d*ô d*ð d*ðL)/ð )/ð )/ð )/ð )/˜mñ )/ô )/ð )/ðX8/ð 8/ð 8/ð 8/ð 8/˜ñ 8/ô 8/ð 8/ðv//ð //ð //ð //ð //�Mñ //ô //ð //ðdð ð ð(ð ð ð ð �ñ ô ð ð8"ð "ð "ð: ˆZÒÐØ€D�F„F€F€F€Fð Ðr*   