ó
    /j-j€~  ã                   ój  • S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
JrJrJrJr  SSKJrJrJrJrJrJrJrJr  SSKJrJr  SSKJrJrJr  SS	KJ r   SS
K!J"r"J#r#J$r$  SSK%J&r&J'r'J(r(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  SSK7J8r8J9r9J:r:J;r;J<r<  \Rz                  " \>5      r?\&" S5      r@\&" S5      rA " S S5      rB " S S\B5      rCS\	\D\'4   S\D4S jrE " S S\C5      rF " S S\C5      rG " S S\C5      rHSSS.rIS \
\'   S\	\J\K4   4S! jrLS \
\'   S\	\J\\K\84   4   4S" jrM " S# S$\B5      rNg)%zFont metrics and descriptors.é    N)ÚBytesIO)ÚPath)ÚDictÚIterableÚListÚMappingÚTupleÚUnion)ÚCMapÚCMapBaseÚToUnicodeMapÚ
UnicodeMapÚget_cmapÚget_unicode_mapÚparse_encodingÚparse_tounicode)Úcid2unicode_from_encodingÚget_encoding)ÚSYMBOL_BUILTIN_ENCODINGÚZAPFDINGBATS_BUILTIN_ENCODINGÚLITERAL_STANDARD_CID2UNICODE)ÚFONT_METRICS)ÚCFFFontProgramÚTrueTypeFontProgramÚType1FontHeaderParser)ÚLITÚ	PDFObjectÚ	PSLiteralÚliteral_name)ÚContentStreamÚMatrixÚRectÚ
dict_valueÚ	int_valueÚ
list_valueÚmatrix_valueÚ	num_valueÚpoint_valueÚ
rect_valueÚresolve1Ústream_value)ÚPointÚchoplistÚdecode_textÚtransform_bboxÚIDENTITY_MAPPINGÚStandardEncodingÚCIDFontType0c            	       ó,  • \ rS rSr% Sr\\S'   Sr\\S'   \\	\
4   \S'   \
\S'    SS\\
\4   S	\\	\4   S
\\S4   SS4S jjrS\
4S jrS\S\\\	\
4      4S jrS\	S\4S jrS\	S\4S jrS\	S\\\4   4S jrS\	S\4S jrS\S\\S4   4S jrSrg)ÚFontéG   FÚverticalÚ	multibyteÚencodingÚfontnameNÚ
descriptorÚwidthsÚdefault_widthÚreturnc                 ó¶  • Xl         X l        [        UR                  S5      5      n[	        U[
        5      (       a  [        U5      U l        O-[	        U[        5      (       a  [        U5      U l        OSU l        U R                  U l
        [        UR                  SS5      5      U l        [        UR                  SS5      5      U l        [        UR                  SS5      5      U l        [        UR                  S	S5      5      U l        Uc!  [        UR                  S
S5      5      U l        OX0l        [        UR                  SS5      5      U l        SU;   a  ['        US   5      U l        OSU l        SU l        U R                  S:”  a  U R                  * U l        U R                  S:X  a+  U R                  S:X  a  U R(                  u  oPl        oPl        g g g )NÚFontNameÚunknownÚFlagsr   ÚAscentép  ÚDescentiˆÿÿÿÚItalicAngleÚMissingWidthéè  ÚLeadingÚFontBBox)r   r   r   r   ©çü©ñÒMbP?r   r   rK   r   r   )r:   r;   r*   ÚgetÚ
isinstancer   r   r9   Úbytesr.   Úbasefontr$   Úflagsr'   ÚascentÚdescentÚitalic_angler<   Úleadingr)   ÚbboxÚmatrix)Úselfr:   r;   r<   r9   Ú_s         ÚG/home/mande/repo/quber/.venv/lib/python3.13/site-packages/playa/font.pyÚ__init__ÚFont.__init__M   sr  € ð %ŒØŒÜ˜JŸN™N¨:Ó6Ó7ˆÜ�h¤	×*Ñ*Ü(¨Ó2ˆD�MÜ˜¤%×(Ñ(Ü'¨Ó1ˆD�Mà%ˆDŒMØŸ™ˆŒÜ˜zŸ~™~¨g°qÓ9Ó:ˆŒ
ä 
§¡¨x¸Ó =Ó>ˆŒÜ  §¡°	¸4Ó!@ÓAˆŒÜ% j§n¡n°]ÀAÓ&FÓGˆÔØÑ Ü!*¨:¯>©>¸.È$Ó+OÓ!PˆDÕà!.ÔÜ  §¡°	¸1Ó!=Ó>ˆŒØ˜Ó#Ü" :¨jÑ#9Ó:ˆD�Ià$ˆDŒIØ8ˆŒð �<‰<˜!ÓØ ŸL™L˜=ˆDŒLð �;‰;˜!Ó §¡°Ó 1Ø.2¯i©iÑ+ˆAŒ|˜Q¥ð !2Ðó    c                 ó   • g)Nz<Font>© ©rW   s    rY   Ú__repr__ÚFont.__repr__|   s   € Ør\   Údatac                 ó@   • [         R                  SU5        S U 5       $ )Nzdecode with identity: %rc              3   ó:   #   • U  H  o[        U5      4v •  M     g 7f©N)Úchr)Ú.0Úcids     rY   Ú	<genexpr>ÚFont.decode.<locals>.<genexpr>‚   s   é € Ð0ª4 C”c˜#“h•ª4ùs   ‚)ÚlogÚdebug©rW   rb   s     rY   ÚdecodeÚFont.decode   s   € ä�	‰	Ð,¨dÔ3Ù0©4Ó0Ð0r\   rh   c                 óp   • U R                   R                  XR                  5      nU R                  S   U-  $ ©zPGet the horizontal displacement (so-called "width") of a character
from its CID.r   )r;   rL   r<   rV   ©rW   rh   Úwidths      rY   ÚhdispÚ
Font.hdisp„   s/   € ð —‘—‘ ×%7Ñ%7Ó8ˆØ�{‰{˜1‰~ Ñ%Ð%r\   c                 ó   • g)z•Get vertical displacement for vertical writing mode, in
text space units.

This is always 0 for simple fonts as they have no vertical
writing mode.

r   r^   ©rW   rh   s     rY   ÚvdispÚ
Font.vdispŠ   s   € ð r\   c                 ó   • g)z”Get position vector for vertical writing mode, in text
space units.

This is always `[0 0]` for simple fonts as they have no
vertical writing mode.
©r   r   r^   rw   s     rY   ÚpositionÚFont.position”   s   € ð r\   c                 ó°   • U R                   R                  XR                  5      nU R                  u  n  pE  nSXPR                  -  X2-  XPR
                  -  4$ ©aŒ  Get the standard bounding box for a character from its CID.

This is, very specifically, `[0 descent width ascent]` in text
space units.

Danger: Not the actual bounding box of the glyph.
    This is a standardized bounding box for use in text
    extraction and layout analysis.  It does not correspond to
    the actual bounding box of an individual glyph as
    specified by the font program.
r   )r;   rL   r<   rV   rR   rQ   ©rW   rh   rs   ÚarX   Úds         rY   Ú	char_bboxÚFont.char_bbox�   sN   € ð —‘—‘ ×%7Ñ%7Ó8ˆàŸ;™;Ñˆˆ1ˆa�A�qØ�1—|‘|Ñ# Q¡Y°·K±K±Ð@Ð@r\   Úoutdirc                 óR  • S H¡  u  p#X0R                   ;   d  M  [        U R                   U   5      n[        U[        5      (       d  [        R                  SU5        M[  [        R                  " SSU R                  5      nXU-   -  nUR                  UR                  5        Us  $    g )N))z.pfaÚFontFile)z.ttfÚ	FontFile2)z.cffÚ	FontFile3z%s is not a content streamz[^\w\+]Ú )r:   r*   rM   r    rk   ÚwarningÚreÚsubr9   Úwrite_bytesÚbuffer)rW   r…   ÚsuffixÚkeyÚfontfiler9   Úoutpaths          rY   Úwrite_fontfileÚFont.write_fontfile®   s�   € ó
‰KˆFð
 —o‘oÕ%Ü# D§O¡O°CÑ$8Ó9�Ü! (¬M×:Ñ:Ü—K‘KÐ <¸cÔBÙÜŸ6š6 *¨b°$·-±-Ó@�Ø ¨vÑ$5Ñ6�Ø×#Ñ# H§O¡OÔ4Ø’ñ
ð r\   )rQ   rO   rU   r<   rR   r:   rP   r9   rS   rT   rV   r;   re   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r6   ÚboolÚ__annotations__r7   r   ÚintÚstrr   Úfloatr
   rZ   r`   rN   r   r	   rn   rt   rx   r|   r"   rƒ   r   r”   Ú__static_attributes__r^   r\   rY   r4   r4   G   s  ‡ Ø€HˆdÓØ€IˆtÓØ�3˜�8‰nÓØƒMð -1ñ	-8à˜˜i˜Ñ(ð-8ð �S˜%�ZÑ ð-8ð ˜U D˜[Ñ)ð	-8ð
 
õ-8ð^˜#ô ð1˜5ð 1 X¨e°C¸°H©oÑ%>ô 1ð
&˜ð & ô &ð˜ð  ô ð˜Cð  E¨%°¨,Ñ$7ô ðA˜Sð A Tô Að" Tð ¨e°D¸$°JÑ.?÷ r\   r4   c                   ó    • \ rS rSrS\\\4   S\\\4   S\\\4   SS4S jr	S\\\4   S\
\\\\4   S4   4S jrS	\S\\\\4      4S
 jrSrg)Ú
SimpleFontéÀ   r:   r;   Úspecr=   Nc                 ó2  • S nS nSU;   a~  [        US   5      n[        U[        5      (       a-  UR                  S5      n[	        UR                  S/ 5      5      nO.[        U[
        5      (       a  UnO[        R                  SU5        Uc  U R                  U5      n[        XE5      U l
        [        U R                  5      U l        S U l        SU;   aæ  [        US   5      n[        U[        5      (       a­  [        UR                   5      U l        U R                  R"                  S/:w  aN  [        R%                  SU R                  R&                  5        S/U R                  l        S/U R                  l        [        R%                  S	[)        U R                  5      5        O[        R                  S
U5        U R                  0 :X  a8  U R                  c+  [        R                  SU R                  5        [*        U l        [,        R/                  XU5        g )NÚEncodingÚBaseEncodingÚDifferencesz/Encoding is neither a dictionary nor a name: %rÚ	ToUnicodeé   z_Technical Note #5144 Considered Harmful: A simple font's code space must be single-byte, not %r)ó    ó   ÿzToUnicode: %rz%ToUnicode is not a content stream: %rzOUsing StandardEncoding for cid2unicode as Encoding has no meaningful glyphs: %r)r*   rM   ÚdictrL   r%   r   rk   r‹   Úget_implicit_encodingr   r8   r   Ú_cid2unicodeÚ	tounicoder    r   r�   Úcode_lengthsrl   Ú
code_spaceÚvarsr   r4   rZ   )rW   r:   r;   r£   ÚbaseÚdiffr8   Ústrms           rY   rZ   ÚSimpleFont.__init__Á   s¢  € ð ˆØˆØ˜ÓÜ  ZÑ 0Ó1ˆHÜ˜(¤D×)Ñ)Ø—|‘| NÓ3�Ü! (§,¡,¨}¸bÓ"AÓB‘Ü˜H¤i×0Ñ0Ø‘ä—‘ÐMÈxÔXØ‰<Ø×-Ñ-¨jÓ9ˆDÜ$ TÓ0ˆŒÜ5°d·m±mÓDˆÔØ48ˆŒØ˜$ÓÜ˜D Ñ-Ó.ˆDÜ˜$¤×.Ñ.Ü!0°·±Ó!=�”Ø—>‘>×.Ñ.°1°#Ó5Ü—I‘IðAàŸ™×1Ñ1ôð
 45°#�D—N‘NÔ/Ø1CÐ0D�D—N‘NÔ-Ü—	‘	˜/¬4°·±Ó+?Õ@ä—‘ÐCÀTÔJà×Ñ Ó" t§~¡~Ñ'=Ü�K‰Kð8à—‘ôô
 !=ˆDÔÜ�‰�d¨Õ/r\   c                 ó   • [        5       ere   )ÚNotImplementedError©rW   r:   s     rY   r­   Ú SimpleFont.get_implicit_encodingó   s   € ô "Ó#Ð#r\   rb   c                 óØ   ^ • T R                   b;  [        R                  SU5        [        UT R                   R	                  U5      5      $ [        R                  SU5        U 4S jU 5       $ )Núdecode with ToUnicodeMap: %rzdecode with Encoding: %rc              3   ó^   >#   • U  H"  oTR                   R                  US 5      4v •  M$     g7f)rŠ   N)r®   rL   )rg   rh   rW   s     €rY   ri   Ú$SimpleFont.decode.<locals>.<genexpr>þ   s'   øé € ÐJÂT¸c˜$×+Ñ+×/Ñ/°°RÓ8Õ9ÂTùs   ƒ*-)r¯   rk   rl   Úziprn   rm   s   ` rY   rn   ÚSimpleFont.decodeø   sR   ø€ Ø�>‰>Ñ%Ü�I‰IÐ4°dÔ;Ü�t˜TŸ^™^×2Ñ2°4Ó8Ó9Ð9ä�I‰IÐ0°$Ô7ÜJÁTÓJÐJr\   )r®   r8   r¯   )r–   r—   r˜   r™   r   r�   r   rœ   rž   rZ   r
   r   r­   rN   r   r	   rn   rŸ   r^   r\   rY   r¡   r¡   À   sž   † ð00à˜˜i˜Ñ(ð00ð �S˜%�ZÑ ð00ð �3˜	�>Ñ"ð	00ð
 
ô00ðd$Ø˜s I˜~Ñ.ð$à	ˆy˜$˜s C˜x™.¨$Ð.Ñ	/ô$ð
K˜5ð K X¨e°C¸°H©oÑ%>÷ Kr\   r¡   r£   r=   c                 óÚ   • SU ;   aO  [        U S   5      n[        U[        5      (       a  UR                  $ [        U[        5      (       a  [        U5      $ [        R                  SU 5        g)NÚBaseFontz$Missing or unrecognized BaseFont: %rr@   )r*   rM   r   ÚnamerN   r.   rk   r‹   )r£   rO   s     rY   Úget_basefontrÄ     sZ   € Ø�TÓÜ˜D Ñ,Ó-ˆÜ�h¤	×*Ñ*Ø—=‘=Ð Ü˜¤%×(Ñ(Ü˜xÓ(Ð(Ü‡K�KÐ6¸Ô=Ør\   c                   óÊ   • \ rS rSr% Sr\\\\4   S4   \	S'   S\\\
4   SS4S jrS\\\
4   S\\\\\4   S4   4S jrS	\S\4S
 jrS	\S\4S jrS	\S\4S jrS\4S jrSrg)Ú	Type1Fonti  NÚchar_widthsr£   r=   c                 ó¾  • [        U5      U l        U R                  [        ;   a  [        U R                     u  o l        0 nO€[	        UR                  S0 5      5      n[        UR                  SS5      5      n[        UR                  SS/S-  5      5      n[        U5       VVs0 s H  u  pgXd-   [        U5      _M     nnn[        R                  XX15        g s  snnf ©NÚFontDescriptorÚ	FirstCharr   ÚWidthsé   )rÄ   rO   r   rÇ   r#   rL   r$   r%   Ú	enumerater'   r¡   rZ   )rW   r£   r:   r;   Ú	firstcharÚ
width_listÚiÚws           rY   rZ   ÚType1Font.__init__  s·   € Ü$ TÓ*ˆŒà�=‰=œLÓ(Ü-9¸$¿-¹-Ñ-HÑ*ˆZÔ)Ø‰Fä# D§H¡HÐ-=¸rÓ$BÓCˆJÜ! $§(¡(¨;¸Ó":Ó;ˆIä# D§H¡H¨X¸°s¸S±yÓ$AÓBˆJÜ@IÈ*Ô@UÔVÒ@U±f°q�a‘m¤Y¨q£\Ò1Ñ@UˆFÑVÜ×Ñ˜D¨fÕ;ùó Ws   Â%Cr:   c                 ó  • SU;   ak  [        UR                  S5      5      U l        [        U R                  S   5      nU R                  R                  S U n[        U5      nUR                  5       $ SU;   ar  [        UR                  S5      5      U l         [        U R                  [        U R                  R                  5      5      nUR                  (       a   eUR                  $ U R                  S:X  a  [&        $ U R                  S	:X  a  [(        $ [         $ ! [         a)    [        R                  SU R                  5        [         s $ ["         a(    [        R%                  SU R                  SS9  [         s $ f = f)
Nr‡   ÚLength1r‰   z/Embedded CFFFont %r for Type1 font is a CIDFontúFailed to parse CFFFont %rT©Úexc_infoÚSymbolÚZapfDingbats)r+   rL   r’   r$   r�   r   r   Ú	fontfile3r   rO   r   Ú
is_cidfontÚ	code2nameÚAssertionErrorrk   r‹   ÚLITERAL_STANDARD_ENCODINGÚ	Exceptionrl   r   r   )rW   r:   Úlength1rb   ÚparserÚcfffonts         rY   r­   ÚType1Font.get_implicit_encoding  sA  € ð ˜Ó#Ü(¨¯©¸
Ó)CÓDˆDŒMÜ §¡¨iÑ 8Ó9ˆGØ—=‘=×'Ñ'¨¨Ð1ˆDÜ*¨4Ó0ˆFØ×&Ñ&Ó(Ð(Ø˜JÓ&Ü)¨*¯.©.¸Ó*EÓFˆDŒNð1Ü(¨¯©¼ÀÇÁ×@UÑ@UÓ8VÓW�Ø"×-×-Ð-Ð-Ø×(Ñ(Ð(ð �]‰]˜hÓ&ä*Ð*Ø�]‰]˜nÓ,Ü0Ð0ô
 -Ð,øô# "ó 1Ü—‘ØEÀtÇ~Á~ôô 1Ò0Üó 1Ü—	‘	Ð6¸¿¹ÐQU�	ÑVÜ0Ò0ð1ús   ÂAD Ä0E?Å.E?Å>E?rh   c                 ó  • U R                   bN  XR                  ;  a  U R                  $ U R                   R                  U R                  U   U R                  5      $ U R                  R                  XR                  5      $ re   )rÇ   r®   r<   rL   r;   rw   s     rY   Ú_glyph_space_widthÚType1Font._glyph_space_widthB  sk   € ð ×ÑÑ'Ø×+Ñ+Ó+Ø×)Ñ)Ð)Ø×#Ñ#×'Ñ'¨×(9Ñ(9¸#Ñ(>À×@RÑ@RÓSÐSØ�{‰{�‰˜s×$6Ñ$6Ó7Ð7r\   c                 óD   • U R                   S   U R                  U5      -  $ rq   )rV   ræ   rw   s     rY   rt   ÚType1Font.hdispV  s"   € ð �{‰{˜1‰~ × 7Ñ 7¸Ó <Ñ<Ð<r\   c                 óˆ   • U R                  U5      nU R                  u  n  pE  nSXPR                  -  X2-  XPR                  -  4$ r   )ræ   rV   rR   rQ   r€   s         rY   rƒ   ÚType1Font.char_bbox[  sF   € ð ×'Ñ'¨Ó,ˆàŸ;™;Ñˆˆ1ˆa�A�qØ�1—|‘|Ñ# Q¡Y°·K±K±Ð@Ð@r\   c                 ó    • SU R                   -  $ )Nz<Type1Font: basefont=%r>©rO   r_   s    rY   r`   ÚType1Font.__repr__l  s   € Ø)¨D¯M©MÑ9Ð9r\   )rO   rÇ   r’   rÛ   )r–   r—   r˜   r™   rÇ   r
   r   r�   rœ   r›   r   rZ   r   r­   rž   ræ   rt   r"   rƒ   r`   rŸ   r^   r\   rY   rÆ   rÆ     sµ   ‡ Ø/3€K��t˜C ˜H‘~ tÐ+Ñ,Ó3ð<˜T # y .Ñ1ð <°dô <ð#-Ø˜s I˜~Ñ.ð#-à	ˆy˜$˜s C˜x™.¨$Ð.Ñ	/ô#-ðJ8 cð 8¨eô 8ð(=˜ð = ô =ð
A˜Sð A Tô Að":˜#÷ :r\   rÆ   c                   óp   • \ rS rSrS\\\4   SS4S jrS\\\4   S\\	\\
\4   S4   4S jrS\4S jrS	rg)
ÚTrueTypeFontip  r£   r=   Nc                 ó\  • [        U5      U l        [        UR                  S0 5      5      n[	        UR                  SS5      5      n[        UR                  SS/S-  5      5      n[        U5       VVs0 s H  u  pVXS-   [        U5      _M     nnn[        R                  XXq5        g s  snnf rÉ   )
rÄ   rO   r#   rL   r$   r%   rÎ   r'   r¡   rZ   )rW   r£   r:   rÏ   rÐ   rÑ   rÒ   r;   s           rY   rZ   ÚTrueTypeFont.__init__q  s’   € Ü$ TÓ*ˆŒä §¡Ð)9¸2Ó >Ó?ˆ
Ü˜dŸh™h {°AÓ6Ó7ˆ	ä §¡¨°A°3¸±9Ó =Ó>ˆ
Ü<EÀjÔ<QÔRÒ<Q±&°1�!‘-¤¨1£Ò-Ñ<QˆÑRÜ×Ñ˜D¨fÕ;ùó Ss   Á4B(r:   c                 ó\   • S[        UR                  SS5      5      -  nU(       a  [        $ S $ )Né    rA   r   )r$   rL   rß   )rW   r:   Úis_non_symbolics      rY   r­   Ú"TrueTypeFont.get_implicit_encoding{  s.   € ð œy¨¯©¸ÀÓ)CÓDÑDˆö -<Ô(ÐEÀÐEr\   c                 ó    • SU R                   -  $ )Nz<TrueTypeFont: basefont=%r>rí   r_   s    rY   r`   ÚTrueTypeFont.__repr__ƒ  s   € Ø,¨t¯}©}Ñ<Ð<r\   rí   )r–   r—   r˜   r™   r   r�   r   rZ   r
   r   rœ   r­   r`   rŸ   r^   r\   rY   rð   rð   p  s_   † ð<˜T # y .Ñ1ð <°dô <ðFØ˜s I˜~Ñ.ðFà	ˆy˜$˜s C˜x™.¨$Ð.Ñ	/ôFð=˜#÷ =r\   rð   c                   ó‚   • \ rS rSrS\\\4   SS4S jrS\\\4   S\\	\\
\4   S4   4S jrS\
S\4S	 jrS\4S
 jrSrg)Ú	Type3Fonti‡  r£   r=   Nc                 óž  • [        UR                  SS5      5      n[        UR                  SS/S-  5      5      n[        U5       VVs0 s H  u  pEXB-   [	        U5      _M     nnn[        UR                  S0 5      5      n[        R                  XXa5        [        UR                  SUR                  S5      5      5      n[        U[        5      (       a  UR                  U l        O-[        U[        5      (       a  [        U5      U l        OSU l        U R                  U l        [        UR                  S	0 5      5      U l        [        UR                  S
5      5      n	U	c  S O
[        U	5      U l        SU;   a  [%        US   5      U l        OSU l        SU;   a  [)        US   5      U l        U R*                  u  o l        o l        g s  snnf )NrË   r   rÌ   rÍ   rÊ   r?   ÚNamer@   Ú	CharProcsÚ	ResourcesÚ
FontMatrixrJ   rI   )r$   rL   r%   rÎ   r'   r#   r¡   rZ   r*   rM   r   rÃ   r9   rN   r.   rO   Ú	charprocsÚ	resourcesr&   rV   r)   rU   rR   rQ   )rW   r£   rÏ   rÐ   rÑ   rÒ   r;   r:   r9   r  rX   s              rY   rZ   ÚType3Font.__init__ˆ  s{  € Ü˜dŸh™h {°AÓ6Ó7ˆ	ä §¡¨°A°3¸±9Ó =Ó>ˆ
Ü<EÀjÔ<QÔRÒ<Q±&°1�!‘-¤¨1£Ò-Ñ<QˆÑRÜ §¡Ð)9¸2Ó >Ó?ˆ
Ü×Ñ˜D¨fÔ;ô ˜JŸN™N¨:°t·x±xÀÓ7GÓHÓIˆÜ�h¤	×*Ñ*Ø$ŸM™MˆD�MÜ˜¤%×(Ñ(Ü'¨Ó1ˆD�Mà%ˆDŒMØŸ™ˆŒä# D§H¡H¨[¸"Ó$=Ó>ˆŒô ˜TŸX™X kÓ2Ó3ˆ	àÑ%‰D¬:°iÓ+@ð 	Œð ˜4ÓÜ& t¨LÑ'9Ó:ˆD�Kà4ˆDŒKà˜ÓÜ" 4¨
Ñ#3Ó4ˆDŒIð +/¯)©)Ñ'ˆŒ<˜�KùóM Ss   Á	G	r:   c                 ó   • 0 $ re   r^   r¹   s     rY   r­   ÚType3Font.get_implicit_encoding´  s	   € ð ˆ	r\   rh   c                 ó¦   • U R                   R                  XR                  5      n[        U R                  SU R
                  X R                  45      $ )a‰  Get the standard bounding box for a character from its CID.

This is the smallest rectangle enclosing [0 descent width
ascent] after the font matrix has been applied.

Danger: Not the actual bounding box of the glyph (but almost).
    The descent and ascent here are from the **font** and not
    from the individual **glyph** so this will be somewhat
    larger than the actual bounding box.
r   )r;   rL   r<   r/   rV   rR   rQ   rr   s      rY   rƒ   ÚType3Font.char_bbox¼  s<   € ð —‘—‘ ×%7Ñ%7Ó8ˆÜ˜dŸk™k¨A¨t¯|©|¸UÇKÁKÐ+PÓQÐQr\   c                 ó   • g)Nz<Type3Font>r^   r_   s    rY   r`   ÚType3Font.__repr__Ê  s   € Ør\   )rQ   rO   rU   r   rR   r9   rV   r  )r–   r—   r˜   r™   r   r�   r   rZ   r
   r   rœ   r­   r"   rƒ   r`   rŸ   r^   r\   rY   rú   rú   ‡  ss   † ð*4˜T # y .Ñ1ð *4°dô *4ðXØ˜s I˜~Ñ.ðà	ˆy˜$˜s C˜x™.¨$Ð.Ñ	/ôðR˜Sð R Tô Rð˜#÷ r\   rú   z
Identity-Hz
Identity-V)z	DLIdent-Hz	DLIdent-VÚseqc                 óÀ  • 0 n/ nU  HÓ  n[        U[        5      (       a@  U(       a7  US   n[        U5       H  u  pV[        U5      U[	        U5      U-   '   M!     / nMV  MX  [        U[
        [        45      (       d  Mu  UR                  U5        [        U5      S:X  d  M—  Uu  pGn[        [	        U5      [	        U5      S-   5       H  n[        U5      X'   M     / nMÕ     U$ )z;Build a mapping of character widths for horizontal writing.éÿÿÿÿé   r©   )
rM   ÚlistrÎ   r'   r$   rœ   rž   ÚappendÚlenÚrange)r	  r;   ÚrÚvÚchar1rÑ   rÒ   Úchar2s           rY   Ú_get_widthsr  Ö  sÌ   € à!€FØ€AÛˆÜ�aœ×ÑÞØ˜"™�Ü% ažL‘D�AÜ3<¸Q³<�Fœ9 UÓ+¨aÑ/Ó0ñ )à’ñ	 ô
 ˜œC¤˜<×(Ó(Ø�H‰H�QŒKÜ�1‹v˜�{Ø$%Ñ!�˜qÜœy¨Ó/´¸5Ó1AÀAÑ1EÖF�AÜ )¨!£�F“Iñ Gà’ñ ð €Mr\   c                 ó:  • 0 n/ nU  GH  n[        U[        5      (       ad  U(       a[  US   n[        [        SU5      5       H9  u  nu  pgn[	        U5      [	        U5      [	        U5      44U[        U5      U-   '   M;     / nM{  M}  [        U[
        [        45      (       d  Mš  UR                  U5        [        U5      S:X  d  M¼  Uu  pIpgn[        [        U5      [        U	5      S-   5       H&  n[	        U5      [	        U5      [	        U5      44X'   M(     / nGM     U$ )z9Build a mapping of character widths for vertical writing.r  r  é   r©   )
rM   r  rÎ   r-   r'   rœ   rž   r  r  r  )
r	  r;   r  r  r  rÑ   rÒ   ÚvxÚvyr  s
             rY   Ú_get_widths2r  ë  s  € à-/€FØ€AÜˆÜ�aœ×ÑÞØ˜"™�Ü&/´¸¸A³Ö&?‘N�A‘{˜˜rä! !›Ü" 2›¬	°"«Ð6ð.�Fœ3˜u›:¨™>Ó*ñ '@ð
 ’ñ ô ˜œC¤˜<×(Ó(Ø�H‰H�QŒKÜ�1‹v˜�{Ø,-Ñ)�˜q bÜœs 5›z¬3¨u«:¸©>Ö:�Aä! !›Ü" 2›¬	°"«Ð6ð!�F“Iñ ;ð
 “ñ' ð( €Mr\   c                   ó  • \ rS rSr% \\S'   S\\\4   SS4S jr	\
S\\\\4   S4   4S j5       rS\\\4   S\4S jr\S\\\4   S\4S	 j5       rS
\S\\\\4      4S jrS\4S jrS\S\4S jrS\S\\\4   4S jrS\S\4S jrSrg)ÚCIDFonti  Údefault_vdispr£   r=   Nc                 ó4	  • Xl         [        UR                  S5      5      U l        [	        U5      U l        [        UR                  S0 5      5      U l        [        U R                  R                  S5      5      n[        U[        5      (       a  [        U5      R                  5       nOSn[        U R                  R                  S5      5      n[        U[        5      (       a  [        U5      R                  5       nOSnU SU 3U l        U R                  U5      U l         [        US   5      nS U l        S U l        S	nS
U;   aä  SU;   a)  US
   US   :X  a  [         R)                  SUS
   5        SnGOB[        US
   [*        5      (       a?  [-        US
   5      n[         R)                  SU5        [/        UR0                  5      U l        Oë[        US
   [2        5      (       a/  SUS
   R4                  ;   a  [         R)                  SUS
   5        SnO¤[         R#                  SU5        O�SU;   a‡  [-        UR                  S5      5      U l        [         R)                  SU R6                  5        [9        U R
                  [;        U R6                  R0                  5      5      n	U	R=                  5       U l        U R$                  c4   [?        U R                  U R                  RA                  5       5      U l        U R&                  c*  U R$                  c  U(       d  [         R)                  SU5        [C        [E        UR                  S/ 5      5      5      n
SU;   a  [G        US   5      nOSnU R                  RA                  5       U l$        U RH                  (       a”  SU;   a  [K        US   5      u  pÍOSnSnUS-  U4U l&        XÐl'        0 U l(        0 U l)        SU;   aR  [U        [E        US   5      5      RW                  5        H)  u  nu  nu  püXü4U RP                  U'   XÐRR                  U'   M+     OSU l&        SU l'        0 U l(        0 U l)        [X        R[                  XX«S9  g ! [         a    [         R#                  SU5        0 n GNTf = f! [         a     GN�f = f) NÚSubtypeÚCIDSystemInfoÚRegistryr@   ÚOrderingÚ-rÊ   z'Font spec is missing FontDescriptor: %rFr¨   r¥   zsToUnicode and Encoding point to the same object, using an identity mapping for Unicode instead of this nonsense: %rTz Parsing ToUnicode from stream %rÚIdentityz'Using identity mapping for ToUnicode %rzUnparseable ToUnicode in %rrˆ   z'Parsing ToUnicode from TrueType font %rzSUnable to find/create/guess unicode mapping for CIDFont, using identity mapping: %rÚWÚDWrG   ÚDW2rC   iüÿÿé   ÚW2r{   r   )r<   ).r£   r*   rL   ÚsubtyperÄ   rO   r#   ÚcidsysteminforM   rN   r.   ÚstripÚ	cidcodingÚget_cmap_from_specÚcmapÚKeyErrorrk   r‹   r¯   Úunicode_maprl   r    r+   r   r�   r   rÃ   r’   r   r   Úcreate_tounicoder   Úis_verticalr  r%   r'   r6   r(   Údefault_positionr  Ú	positionsÚvdispsr  Úitemsr4   rZ   )rW   r£   Úcid_registryÚregstrÚcid_orderingÚordstrr:   Úidentity_maprµ   Úttfr;   r<   r  Úw1rh   r  s                   rY   rZ   ÚCIDFont.__init__	  s   € ð Œ	Ü §¡¨Ó 3Ó4ˆŒÜ$ TÓ*ˆŒÜ'¨¯©°À"Ó(EÓFˆÔô   × 2Ñ 2× 6Ñ 6°zÓ BÓCˆÜ�l¤E×*Ñ*Ü  Ó.×4Ñ4Ó6‰FàˆFÜ × 2Ñ 2× 6Ñ 6°zÓ BÓCˆÜ�l¤E×*Ñ*Ü  Ó.×4Ñ4Ó6‰FàˆFØ"˜8 1 V HÐ-ˆŒØ"×5Ñ5°dÓ;ˆŒ	ð	Ü# DÐ)9Ñ$:Ó;ˆJð 59ˆŒØ48ˆÔð ˆà˜$ÓØ˜TÓ! d¨;Ñ&7¸4À
Ñ;KÓ&KÜ—	‘	ðPà˜Ñ%ôð
  $’Ü˜D Ñ-¬}×=Ñ=Ü# D¨Ñ$5Ó6�Ü—	‘	Ð<¸dÔCÜ!0°·±Ó!=�•ô ˜4 Ñ,¬i×8Ñ8Ø $ {Ñ"3×"8Ñ"8Ó8ä—	‘	ÐCÀTÈ+ÑEVÔWØ#‘ä—‘Ð9¸4Õ@à˜JÓ&Ü(¨¯©¸Ó)DÓEˆDŒMÜ�I‰IÐ?ÀÇÁÔOä% d§m¡m´W¸T¿]¹]×=QÑ=QÓ5RÓSˆCØ ×1Ñ1Ó3ˆDŒNð �>‰>Ñ!ðÜ#2Ø—N‘NØ—I‘I×)Ñ)Ó+ó$�Ô ð ×ÑÑ#¨¯©Ñ(>Æ|Ü�I‰Ið-àôô œZ¨¯©°°bÓ(9Ó:Ó;ˆØ�4‹<Ü% d¨4¡jÓ1‰Mà ˆMØŸ	™	×-Ñ-Ó/ˆŒØ�=�=Ø˜‹}Ü& t¨E¡{Ó3‘��Rð �Ø�Ø%2°QÑ%6¸Ð$;ˆDÔ!ð "$ÔàˆDŒNØˆDŒKØ�t‹|Ü+7¼
À4ÈÁ:Ó8NÓ+O×+UÑ+UÖ+WÑ'�C™˜"™h˜rØ+-¨(�D—N‘N 3Ñ'Ø')—K‘K Ó$ñ ,Xøð %+ˆDÔ!Ø!"ˆDÔØˆDŒNØˆDŒKä�‰�d¨ˆÒLøôq ó 	Ü�K‰KÐAÀ4ÔHØ‹Jð	ûô\ ó Úðús$   Ä#Q  Ë3R	 Ñ "RÒRÒ	
RÒRc                 ó¼  • SU R                   ;   a†  [        U R                  R                  S5      5      n[	        U[
        5      (       aG  UR                  n[        [        [        R                  " SS[        U5      S-  -  -   U5      5      5      $ [        $ SU R                   ;   aq   [        U R                   R                  S5      5      n[        U R                  [!        UR                  5      5      nUR"                  (       a  UR$                  $ [        $ U R,                  [.        :X  a  [        $ g
! [&         a    [(        R+                  SWSS	9  [        s $ f = f)aV  According to PDF 2.0 Sec 9.7.4.2 Glyph selection in CIDFonts:
The CID to glyph id mapping, or None in the case of external TrueType
font program (Type2 CIDFont), because "...In this case, CIDs shall not
participate in glyph selection..."
Note that this is not exactly equivalent to the CIDToGIDMap entry,
despite what the name might suggest.
rˆ   ÚCIDToGIDMapÚ>ÚHr(  r‰   rÖ   Tr×   N)r:   r*   r£   rL   rM   r    r�   r¬   rÎ   ÚstructÚunpackr  r0   r+   r   rO   r   rÜ   Úcid2gidrà   rk   rl   r*  ÚLITERAL_CIDFONT_TYPE0)rW   Ú
cid2gidmapr�   rÛ   rã   s        rY   rF  ÚCIDFont.cid2gid|  s  € ð ˜$Ÿ/™/Ó)ä! $§)¡)§-¡-°Ó">Ó?ˆJÜ˜*¤m×4Ñ4Ø#×*Ñ*�ÜÜœfŸmšm¨C°#¼¸V»ÈÑ9IÑ2JÑ,JÈFÓSÓTóð ô (Ð'Ø˜DŸO™OÓ+ð(Ü(¨¯©×)<Ñ)<¸[Ó)IÓJ�	Ü(¨¯©¼À	×@PÑ@PÓ8QÓR�Ø*1×*<×*<�w—‘ÐRÔBRÐRð �\‰\Ô2Ó2ä#Ð#ð øô ó (Ü—	‘	Ð6¸	ÈD�	ÑQÜ'Ò'ð(ús   Â(A)D3 ÄD3 Ä3%EÅEc                 ó*  • U R                  U5      n [        U5      $ ! [         aj  n[        US   [        5      (       a(  [        US   5      n[        UR                  5      s SnA$ [        R                  SX#5        [        5       s SnA$ SnAff = f)a>  Get cmap from font specification

For certain PDFs, Encoding Type isn't mentioned as an attribute of
Encoding but as an attribute of CMapName, where CMapName is an
attribute of spec['Encoding'].
The horizontal/vertical modes are mentioned with different name
such as 'DLIdent-H/V','OneByteIdentityH/V','Identity-H/V'.
r¥   NzFailed to get cmap %s: %s)Ú_get_cmap_namer   r0  rM   r    r+   r   r�   rk   r‹   r   )rW   r£   Ú	cmap_nameÚerµ   s        rY   r.  ÚCIDFont.get_cmap_from_specŸ  sz   € ð ×'Ñ'¨Ó-ˆ	ð		Ü˜IÓ&Ð&øÜó 	ä˜$˜zÑ*¬M×:Ñ:Ü# D¨Ñ$4Ó5�Ü% d§k¡kÓ2Õ2ä—‘Ð7¸ÔFÜ“v•ûð	ús&   “
 ž
B¨:BÁ"BÁ(BÂBÂBc                 ó2  • Sn [        U S   5      nUb  [        U5      nO[        U S   5      nUb  [        U5      n[        R                  X5      $ ! [         a    [        R	                  SU 5         N7[
         a    [        R	                  SU 5         NXf = f)z%Get cmap name from font specificationr@   r¥   ÚCMapNamez!Font spec is missing Encoding: %rz"Font spec has invalid Encoding: %r)r*   r   r0  rk   r‹   Ú	TypeErrorÚIDENTITY_ENCODERrL   )r£   rL  Úspec_encodings      rY   rK  ÚCIDFont._get_cmap_nameµ  sš   € ð ˆ	ð	DÜ$ T¨*Ñ%5Ó6ˆMØÑ(Ü(¨Ó7‘	ä (¨¨jÑ)9Ó :�Ø Ñ,Ü ,¨]Ó ;�Iô
  ×#Ñ# IÓ9Ð9øô	 ó 	CÜ�K‰KÐ;¸TÖBÜó 	DÜ�K‰KÐ<¸dÖCð	Dús   „A ¡A Á BÁ4BÂBrb   c                 óÔ  ^ • T R                   b[  [        R                  SU5        [        S T R                  R                  U5       5       T R                   R                  U5      5      $ T R                  b;  [        R                  SU5        U 4S jT R                  R                  U5       5       $ [        R                  SU5        S T R                  R                  U5       5       $ )Nr¼   c              3   ó*   #   • U  H	  u  pUv •  M     g 7fre   r^   )rg   rX   rh   s      rY   ri   Ú!CIDFont.decode.<locals>.<genexpr>Í  s   é € Ð:Ò#9™˜•Ò#9ùs   ‚zdecode with UnicodeMap: %rc              3   ób   >#   • U  H$  u  pUTR                   R                  U5      4v •  M&     g 7fre   )r1  Ú
get_unichr)rg   rX   rh   rW   s      €rY   ri   rW  Ñ  s0   øé € ð â 6‘H�Qð �d×&Ñ&×1Ñ1°#Ó6Õ7Ú 6ùs   ƒ,/z$decode with identity unicode map: %rc              3   óh   #   • U  H(  u  pU[        [        R                  US 5      5      4v •  M*     g7f)ÚbigN)rf   rœ   Ú
from_bytes)rg   Úsubstrrh   s      rY   ri   rW  ×  s.   é € ð â#9‘K�Fð ”cœ#Ÿ.™.¨°Ó7Ó8Õ9Ú#9ùs   ‚02)r¯   rk   rl   r¿   r/  rn   r1  rm   s   ` rY   rn   ÚCIDFont.decodeÇ  sÄ   ø€ Ø�>‰>Ñ%Ü�I‰IÐ4°dÔ;ô Ù: 4§9¡9×#3Ñ#3°DÔ#9Ó:¸D¿N¹N×<QÑ<QÐRVÓ<Wóð ð ×ÑÑ)Ü�I‰IÐ2°DÔ9ôà $§	¡	× 0Ñ 0°Ô 6óð ô
 �I‰IÐ<¸dÔCñà#'§9¡9×#3Ñ#3°DÔ#9óð r\   c                 ó@   • SU R                   < SU R                  < S3$ )Nz<CIDFont: basefont=z, cidcoding=rB  )rO   r-  r_   s    rY   r`   ÚCIDFont.__repr__Ü  s"   € Ø$ T§]¡]Ñ$5°\À$Ç.Á.ÑASÐSTÐUÐUr\   rh   c                 ól   • U R                   S   U R                  R                  XR                  5      -  $ )z‚Get vertical displacement for vertical writing mode, in
text space units.

Returns 0 for horizontal writing, for obvious reasons.
r  )rV   r6  rL   r  rw   s     rY   rx   ÚCIDFont.vdispß  s*   € ð �{‰{˜1‰~ §¡§¡°×5GÑ5GÓ HÑHÐHr\   c                 ó„   • U R                   R                  XR                  5      u  p#U R                  u  n  pV  nXB-  Xc-  4$ )a  Get position vector for vertical writing mode, in text
space units.

This is quite ill-defined in the PDF standard (PDF 2.0 Figure
55), but basically it specifies a translation of the glyph
with respect to the origin.  It is *subtracted* from that
origin to give the glyph position.  So if your text matrix is
`[1 0 0 1 100 100]`, and your font size is `10`, a position
vector of `[500 200]` will place the origin of the glyph in
glyph space at `[-500 -200]`, which becomes `[-.5 -.2]` in
text space, then `[-5 -2]` after applying the font size, thus
the glyph is painted with its origin at `[95 98]`.

Yes, the horizontal scaling factor **does** apply to the
horizontal component of the position vector, even if some PDF
viewers don't think so.

For horizontal writing, it is obviously (0, 0).

)r5  rL   r4  rV   )rW   rh   r  r  r�   rX   r‚   s          rY   r|   ÚCIDFont.positionç  sB   € ð* —‘×#Ñ# C×)>Ñ)>Ó?‰ˆàŸ;™;Ñˆˆ1ˆa�A�qØ‰v�q‘vˆ~Ðr\   c                 ó‚  • U R                   R                  XR                  5      nU R                  u  n  pE  nU R                  (       aX  U R
                  R                  XR                  5      u  pgU* nU* nX6-  XWU R                  -   -  X6U-   -  XWU R                  -   -  4$ SXPR                  -  X2-  XPR                  -  4$ )a¾  Get the standard bounding box for a character from its CID.

This is the standard bounding box in text space units based on
width, descent and ascent, translated by the position vector.

Danger: Not the actual bounding box of the glyph.
    This is a standardized bounding box for use in text
    extraction and layout analysis.  It does not correspond to
    the actual bounding box of an individual glyph as
    specified by the font program.

r   )	r;   rL   r<   rV   r6   r5  r4  rR   rQ   )rW   rh   rs   r�   rX   r‚   r  r  s           rY   rƒ   ÚCIDFont.char_bbox  s¼   € ð —‘—‘ ×%7Ñ%7Ó8ˆàŸ;™;Ñˆˆ1ˆa�A�qØ�=�=Ø—^‘^×'Ñ'¨×-BÑ-BÓC‰FˆBð �ˆBà�ˆBð ‘Ø˜$Ÿ,™,Ñ&Ñ'Ø˜%‘ZÑ Ø˜$Ÿ+™+Ñ%Ñ&ð	ð ð �1—|‘|Ñ# Q¡Y°·K±K±Ð@Ð@r\   )rO   r-  r+  r/  r4  r  r’   r5  r£   r*  r¯   r1  r6  r6   )r–   r—   r˜   r™   rž   r›   r   r�   r   rZ   Úpropertyr
   r   rœ   rF  r   r.  ÚstaticmethodrK  rN   r   r	   rn   r`   rx   r|   r"   rƒ   rŸ   r^   r\   rY   r  r    s  ‡ ØÓðqMà�3˜	�>Ñ"ðqMð 
ôqMðf ð ˜˜w s¨C xÑ0°$Ð6Ñ7ó  ó ð ðD t¨C°¨NÑ';ð Àô ð, ð:˜T # y .Ñ1ð :°có :ó ð:ð"˜5ð  X¨e°C¸°H©oÑ%>ô ð*V˜#ô VðI˜ð I ô Ið˜Cð  E¨%°¨,Ñ$7ô ð4A˜Sð A T÷ Ar\   r  )OÚ__doc__ÚloggingrŒ   rD  Úior   Úpathlibr   Útypingr   r   r   r   r	   r
   Úplaya.cmapdbr   r   r   r   r   r   r   r   Úplaya.encodingdbr   r   Úplaya.encodingsr   r   r   Úplaya.fontmetricsr   Úplaya.fontprogramr   r   r   Úplaya.parserr   r   r   r   Úplaya.pdftypesr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Úplaya.utilsr,   r-   r.   r/   r0   Ú	getLoggerr–   rk   rß   rG  r4   r¡   r�   rÄ   rÆ   rð   rú   rR  rœ   rž   r  r  r  r^   r\   rY   Ú<module>rw     si  ðÙ #ã Û 	Û Ý Ý ÷÷ ÷	÷ 	ó 	÷÷ñ õ
 +ß XÑ X÷ó ÷÷ ÷ ó ÷õ ð ×Ò˜Ó!€ÙÐ 2Ó3Ð Ù˜NÓ+Ð ÷vñ vôr>K�ô >KðB�t˜C ˜NÑ+ð °ô ôa:�
ô a:ôH=�:ô =ô.D�
ô DðT ØñÐ ð�X˜iÑ(ð ¨T°#°u°*Ñ-=ô ð*�h˜yÑ)ð ¨d°3¸¸eÀU¸lÑ8KÐ3KÑ.Lô ô6YAˆdõ YAr\   