Ë
    £èh:�  ã                  ó¤  — U d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZ ddlZddlZddlZddlZddlmZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZ  G d
„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de«      Z" G d„ de«      Z# G d„ de«      Z$ G d„ de«      Z% G d„ de«      Z& G d„ dejN                  «      Z( G d„ dejN                  «      Z) G d„ dejN                  «      Z* e+«       Z,d e-d!<   d"Z. e/«       Z0d#e-d$<    e/«       Z1 e2d%«      Z3 e2d&«      Z4ejj                   G d'„ d(«      «       Z6dKd)„Z7 G d*„ d+«      Z8dLd,„Z9dMd-„Z:dMd.„Z;dNd/„Z<dOd0„Z=dOd1„Z>dOd2„Z?dOd3„Z@ G d4„ d5«      ZAd6ZBdPd7„ZCdQd8„ZDd9ZEdOd:„ZFdRd;„ZGdSd<„ZHh d=£ZIdTdUd>„ZJdVd?„ZKdVd@„ZL	 	 	 	 dWdA„ZM	 	 dX	 	 	 	 	 	 	 	 	 dYdB„ZNg dC¢ZOg dD¢ZP G dE„ dF«      ZQdZdG„ZRd[dH„ZS G dI„ dJe«      ZTy)\aT  
This module provides support for fonts stored as SHX and SHP files.
(SHP is not the GIS file format!)

The documentation about the SHP file format can be found at Autodesk:
https://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-DE941DB5-7044-433C-AA68-2A9AE98A5713

Using bytes for strings because no encoding is defined in shape-files.

é    )Úannotations)ÚSequenceÚIterableÚIteratorÚCallableÚOptionalÚAnyÚSetÚno_type_checkN)ÚUVecÚVec2ÚConstructionEllipseÚbulge_to_arcÚBoundingBox2dÚMatrix44)Úpathé   )ÚFontMeasurements)Ú	GlyphPathÚGlyphsc                  ó   — e Zd Zy)ÚShapeFileExceptionN©Ú__name__Ú
__module__Ú__qualname__© ó    ú5lib/python3.12/site-packages/ezdxf/fonts/shapefile.pyr   r   +   ó   „ Ør   r   c                  ó   — e Zd Zy)ÚUnsupportedShapeFileNr   r   r   r   r"   r"   /   r    r   r"   c                  ó   — e Zd Zy)ÚUnsupportedShapeNumberNr   r   r   r   r$   r$   3   r    r   r$   c                  ó   — e Zd Zy)ÚInvalidFontDefinitionNr   r   r   r   r&   r&   7   r    r   r&   c                  ó   — e Zd Zy)ÚInvalidFontParametersNr   r   r   r   r(   r(   ;   r    r   r(   c                  ó   — e Zd Zy)ÚInvalidShapeRecordNr   r   r   r   r*   r*   ?   r    r   r*   c                  ó   — e Zd Zy)ÚFileStructureErrorNr   r   r   r   r,   r,   C   r    r   r,   c                  ó   — e Zd Zy)ÚStackUnderflowNr   r   r   r   r.   r.   G   r    r   r.   c                  ó   — e Zd ZdZdZdZy)ÚFontEmbeddingr   r   é   N)r   r   r   ÚALLOWEDÚ
DISALLOWEDÚREADONLYr   r   r   r0   r0   K   s   „ Ø€GØ€JØ�Hr   r0   c                  ó   — e Zd ZdZdZdZy)ÚFontEncodingr   r   r1   N)r   r   r   ÚUNICODEÚPACKED_MULTIBYTE_1Ú
SHAPE_FILEr   r   r   r6   r6   Q   s   „ Ø€GØÐØ�Jr   r6   c                  ó   — e Zd ZdZdZy)ÚFontModer   r1   N)r   r   r   Ú
HORIZONTALÚBIDIRECTr   r   r   r;   r;   W   s   „ Ø€JØ�Hr   r;   úSequence[int]ÚNO_DATAFzSet[int]ÚDEBUG_CODESÚ0Ú-c                  óD   — e Zd ZU ded<   ded<   ded<   eZded<   d
dd„Zy	)ÚSymbolÚintÚnumberÚ
byte_countÚbytesÚnamer>   Údatac                óÎ   — |r|n| j                   }d|d›d| j                  › d�j                  «       | j                  z   g}|j	                  t        | j                  «      «       |S )NÚ*Ú05XÚ,)rF   rG   ÚencoderI   ÚextendÚformat_shape_data_stringrJ   )ÚselfÚas_numÚnumÚexports       r   Ú
export_strzSymbol.export_strl   sZ   € Ù‰f D§K¡KˆØ�c˜#�Y˜a §¡Ð0°Ð2×9Ñ9Ó;¸d¿i¹iÑGÐHˆØ�‰Ô.¨t¯y©yÓ9Ô:Øˆr   N©r   )rS   rE   Úreturnúlist[bytes])r   r   r   Ú__annotations__r?   rJ   rV   r   r   r   rD   rD   e   s    … àƒKØƒOØ
ƒKØ!€Dˆ-Ó!õr   rD   c                óæ   — g }d}| D ]Q  }||› d�j                  «       z   }t        |«      dk  r|}Œ*|j                  |d d «       d|› d�j                  «       }ŒS |r|j                  |d d «       |S )Nr   rN   éP   éÿÿÿÿ)rO   ÚlenÚappend)rJ   rU   ÚsrT   Ús2s        r   rQ   rQ   s   sƒ   € Ø€FØ€AÛˆØ�C�5˜�×!Ñ!Ó#Ñ#ˆÜˆr‹7�RŠ<Ø‰Aà�M‰M˜!˜C˜R˜&Ô!Ø�C�5˜�
×!Ñ!Ó#‰Að ñ 	Ø�‰�a˜˜�fÔØ€Mr   c                  ó  — e Zd ZdZej
                  ej                  ej                  f	 	 	 	 	 dd„Z
edd„«       Zedd„«       Zedd„«       Zedd„«       Zdd„Zd„ Zd	„ Zedd
„«       Zdd„Zdd„Zddd„Zddd„Zddd„Zddd„Zy)Ú	ShapeFilez+Low level representation of a SHX/SHP file.c                óv   — t        «       | _        || _        || _        || _        || _        || _        || _        y ©N)ÚdictÚshapesrI   ÚaboveÚbelowÚmodeÚencodingÚembed)rR   rI   rh   ri   rj   rk   rl   s          r   Ú__init__zShapeFile.__init__„   s7   € ô *.«ˆŒØˆŒ	ØˆŒ
ØˆŒ
ØˆŒ	Ø ˆŒØˆ�
r   c                ó,   — t        | j                  «      S re   )Úfloatrh   ©rR   s    r   Ú
cap_heightzShapeFile.cap_height•   ó   € ä�T—Z‘ZÓ Ð r   c                ó,   — t        | j                  «      S re   )ro   ri   rp   s    r   Ú	descenderzShapeFile.descender™   rr   r   c                ó<   — | j                   t        j                  k7  S re   ©rk   r6   r9   rp   s    r   Úis_fontzShapeFile.is_font�   ó   € à�}‰}¤× 7Ñ 7Ñ7Ð7r   c                ó<   — | j                   t        j                  k(  S re   rv   rp   s    r   Úis_shape_filezShapeFile.is_shape_file¡   rx   r   c                óh   — | j                   j                  «       D ]  }||j                  k(  sŒ|c S  y re   )rg   ÚvaluesrI   )rR   rI   Úsymbols      r   ÚfindzShapeFile.find¥   s/   € Ø—k‘k×(Ñ(Ö*ˆFØ�v—{‘{Ó"Ø’ð +ð r   c                ó,   — t        | j                  «      S re   )r^   rg   rp   s    r   Ú__len__zShapeFile.__len__«   s   € Ü�4—;‘;ÓÐr   c                ó    — | j                   |   S re   )rg   )rR   Úitems     r   Ú__getitem__zShapeFile.__getitem__®   s   € Ø�{‰{˜4Ñ Ð r   c                óâ  — t        | «      dk(  �rt        j                  }d}d}t        j                  }t
        j                  }d}| \  }}	 |j                  dd¬«      \  }	}
}|	dk(  r	 |j                  d«      \  }}}}}}n1|	dk(  r	 |j                  d«      ^}}}}|d   }nt        j                  }t        |«      dk(  sJ ‚t        |j                  «       t        |«      t        |«      t        t        |«      «      t        t        |«      «      t        t        |«      «      «      S y # t        $ r t        «       ‚w xY w# t        $ r t        |«      ‚w xY w# t        $ r t        |«      ‚w xY w)Nr1   r   ó   ,©Úmaxsplitó   *UNIFONTó   *0r]   )r^   r6   r7   r0   r2   r;   r<   ÚsplitÚ
ValueErrorr&   r(   r9   rE   rc   Ústrip)Úrecordsrk   rh   ri   rl   rj   ÚendÚheaderÚparamsÚspecÚ_rI   Úrests                r   Úfrom_ascii_recordszShapeFile.from_ascii_records±   sv  € äˆw‹<˜1ÓÜ#×+Ñ+ˆHØˆEØˆEÜ!×)Ñ)ˆEÜ×&Ñ&ˆDØˆCØ$‰NˆF�Fð.à &§¡¨T¸A Ó >‘��a˜ð �{Ò"ð8Ø?E¿|¹|ÈDÓ?QÑ<�E˜5 $¨°%¹ð ˜’ð8Ø06·±¸TÓ0BÐ-�E˜5 $¨Ø˜r™(‘Cô (×2Ñ2�Ü�s“8˜q’=Ð �=äØ—
‘
“Ü�E“
Ü�E“
Üœ˜T›Ó#ÜœS ›]Ó+Üœc %›jÓ)óð ð9 øô ò .Ü+Ó-Ð-ð.ûô
 "ò 8Ü/°Ó7Ð7ð8ûô "ò 8Ü/°Ó7Ð7ð8ús$   ÁD* Á)E ÂE Ä*D>ÅEÅE.c                ó8  — |D ]ú  }t        |«      dk  rt        |«      ‚	 t        |d   «      \  }}}t        |«      dkD  sJ ‚|d   t
        k(  rt        |dd  d«      }nt        |dd  d«      }t        |t        |«      |«      }dj                  |dd  «      }t        t        t        |«      «      «      |_        |j                  d   dk(  r|| j                  |<   ŒØ|d   j                  d¬	«      }	t	        d
|	› d�«      ‚ y # t        $ r t	        |d   «      ‚w xY w)Nr1   r   r   é   é
   r   r]   Úignore)Úerrorsz file structure error at symbol <Ú>)r^   r*   Úsplit_def_recordr‹   r,   ÚORD_NULLrE   rD   ÚjoinÚtupleÚparse_codesÚsplit_recordrJ   rg   Údecode)
rR   r�   ÚrecordrF   rG   rI   Úint_numr}   rJ   r`   s
             r   Úparse_ascii_recordszShapeFile.parse_ascii_recordsØ   s$  € ÛˆFÜ�6‹{˜QŠÜ(¨Ó0Ð0ð4Ü+;¸FÀ1¹IÓ+FÑ(�˜
 Dô �v“; ’?Ð"�?Ø�a‰yœHÒ$Ü˜f Q R˜j¨"Ó-‘ä˜f Q R˜j¨"Ó-�ä˜G¤S¨£_°dÓ;ˆFØ—8‘8˜F 1 2˜JÓ'ˆDÜ¤¬L¸Ó,>Ó ?Ó@ˆFŒKØ�{‰{˜2‰ !Ò#Ø'-�—‘˜GÒ$à˜1‘I×$Ñ$¨HÐ$Ó5�Ü(Ð+KÈAÈ3ÈaÐ)PÓQÐQñ+ øô
 ò 4Ü(¨°©Ó3Ð3ð4ús    DÄDc                ój   — | j                   j                  |«      }|€t        |«      ‚|j                  S re   )rg   Úgetr$   rJ   )rR   rF   r}   s      r   Ú	get_codeszShapeFile.get_codesð   s.   € Ø—‘—‘ Ó(ˆØˆ>Ü(¨Ó0Ð0Ø�{‰{Ðr   c                ó4   — t        |g| j                  |¬«      S ©N)Ústacked©Úrender_shapesr§   )rR   rF   rª   s      r   Úrender_shapezShapeFile.render_shapeö   s   € Ü˜f˜X t§~¡~¸wÔGÐGr   c                ó2   — t        || j                  |¬«      S r©   r«   )rR   Únumbersrª   s      r   r¬   zShapeFile.render_shapesù   s   € Ü˜W d§n¡n¸gÔFÐFr   c                ón   — |D �cg c]  }t        |«      ‘Œ }}t        || j                  |d¬«      S c c}w )NT)rª   Úreset_to_baseline)Úordr¬   r§   )rR   Útextrª   Úcharr¯   s        r   Úrender_textzShapeFile.render_textü   s9   € Ù)-Ó.© ”3�t•9¨ˆÐ.ÜØ�T—^‘^¨WÈô
ð 	
ùò /s   …2c                ó>   — | j                   |   j                  |«      S re   )rg   rV   )rR   Úshape_numberrS   s      r   Úshape_stringzShapeFile.shape_string  s   € Ø�{‰{˜<Ñ(×3Ñ3°FÓ;Ð;r   N)rI   rH   rh   rE   ri   rE   )rX   ro   ©rX   Úbool)rI   rH   rX   zOptional[Symbol])r�   úSequence[bytes])r�   zIterable[Sequence[bytes]]rX   ÚNone)rF   rE   rX   r>   ©F)rF   rE   rX   r   )r¯   r>   rX   r   )r³   ÚstrrX   r   rW   )r·   rE   rS   rE   rX   rY   )r   r   r   Ú__doc__r;   r<   r6   r7   r0   r2   rm   Úpropertyrq   rt   rw   rz   r~   r€   rƒ   Ústaticmethodr”   r¤   r§   r­   r¬   rµ   r¸   r   r   r   rc   rc   ‚   sØ   „ Ù5ð × Ñ Ø×%Ñ%Ø×#Ñ#ðàðð ðð ó	ð" ò!ó ð!ð ò!ó ð!ð ò8ó ð8ð ò8ó ð8óò ò!ð ò$ó ð$óLRó0ôHôGô
õ<r   rc   c                óî   — t        j                  | «      j                  «       }| j                  «       } | j	                  d«      rt        |«      S | j	                  d«      rt        |«      S t        d«      ‚)z¸Load shape-file `filename`, the file type is detected by the file
    name extension and should be ".shp" or ".shx" otherwise rises an
    exception :class:`UnsupportedShapeFile`.
    z.shpz.shxzunknown filetype)ÚpathlibÚPathÚ
read_bytesÚlowerÚendswithÚshp_loadÚshx_loadr"   )ÚfilenamerJ   s     r   ÚreadfilerË     sc   € ô
 �<‰<˜Ó!×,Ñ,Ó.€DØ�~‰~Ó€HØ×Ñ˜Ô Ü˜‹~ÐØ	×	Ñ	˜6Ô	"Ü˜‹~Ðä"Ð#5Ó6Ð6r   c                óH   — t        d„ | j                  dd¬«      D «       «      S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wre   ©rŒ   ©Ú.0r`   s     r   Ú	<genexpr>z#split_def_record.<locals>.<genexpr>  s   è ø€ ÐCÑ$B˜q�—‘—Ñ$Bùó   ‚r…   r1   r†   ©rž   rŠ   ©r¢   s    r   r›   r›     s    € ÜÑC F§L¡L°À LÔ$BÓCÓCÐCr   c                óD   — t        d„ | j                  d«      D «       «      S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wre   rÎ   rÏ   s     r   rÑ   zsplit_record.<locals>.<genexpr>  s   è ø€ Ð7Ñ$6˜q�—‘—Ñ$6ùrÒ   r…   rÓ   rÔ   s    r   r    r      s   € ÜÑ7 F§L¡L°Ô$6Ó7Ó7Ð7r   c              #  óè   K  — | D ]i  }|j                  d«      }|dk(  rŒ|d   t        k(  rt        |d«      –— Œ5|d   t        k(  r|d   t        k(  rt        |d«      –— Œ\t        |d«      –— Œk y ­w)Ns   ()r   r   r–   r   r—   )rŒ   rœ   rE   Ú	ORD_MINUS)ÚcodesÚcodes     r   rŸ   rŸ     so   è ø€ ÛˆØ�z‰z˜%Ó ˆØ�3Š;ØØ�‰7”hÒÜ�d˜B“-ÓØ�!‰Wœ	Ò! d¨1¡g´Ò&9Ü�d˜B“-Óä�d˜B“-Óñ ùs   ‚A0A2c           	     ó"  — t        t        t        | j                  d«      «      «      «      }d|v r|j	                  d«      }nd|v r|j	                  d«      }nd}t
        j                  |«      }|j                  |j                  «       «       |S )Nó   
rˆ   r‰   )s   _,_,_r   )	Úparse_string_recordsÚmerge_linesÚfilter_noiserŠ   Úpoprc   r”   r¤   r|   )rJ   r�   Úfont_definitionÚshps       r   rÈ   rÈ   *  s|   € Ü"¤;¬|¸D¿J¹JÀuÓ<MÓ/NÓ#OÓP€GØ�gÑØ!Ÿ+™+ kÓ2‰Ø	�'Ñ	Ø!Ÿ+™+ eÓ,‰ð *ˆÜ
×
&Ñ
& Ó
7€CØ×Ñ˜GŸN™NÓ,Ô-Ø€Jr   c                óø   — | j                  d«      rt        | «      S | j                  d«      rt        | «      S | j                  d«      rt        | «      S | j                  d«      rt	        d«      ‚t	        d«      ‚)Ns   AutoCAD-86 shapes 1.0s   AutoCAD-86 shapes 1.1s   AutoCAD-86 unifont 1.0s   AutoCAD-86 bigfont 1.0z$BIGFONT shapes are not supported yetzunknown shape file format)Ú
startswithÚload_shx_shape_file_1_0Úload_shx_shape_file_1_1Úload_shx_unifont_file_1_0r"   ©rJ   s    r   rÉ   rÉ   9  so   € Ø‡�Ð/Ô0Ü& tÓ,Ð,Ø	�‰Ð1Ô	2Ü& tÓ,Ð,Ø	�‰Ð2Ô	3Ü(¨Ó.Ð.Ø	�‰Ð2Ô	3Ü"Ð#IÓJÐJÜ
Ð:Ó
;Ð;r   c                ó  — d}d}t         j                  }d}t        | «      }|j                  d«      }|r5|j	                  d«       |j
                  }|d   }|d   }t        |d   «      }t        ||||¬«      }||_        |S )Nr   r   r   r1   )rh   ri   rj   )r;   r<   Úparse_shx_shapesr¦   rà   rJ   rc   rg   )	rJ   rh   ri   rj   rI   rg   rá   Ú
shape_dataÚ
shape_files	            r   rå   rå   E  sŠ   € Ø€EØ€EÜ×Ñ€DØ€DÜ˜dÓ#€FØ—j‘j “m€OÙØ�
‰
�1ŒØ$×)Ñ)ˆ
Ø˜1‘ˆØ˜1‘ˆÜ˜
 1™Ó&ˆä˜4 u°EÀÔE€JØ€JÔØÐr   c                ó   — t        | «      S re   )rå   rè   s    r   ræ   ræ   X  s   € ä" 4Ó(Ð(r   c                  ó`   — e Zd Zddd„Zedd„«       Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd„Zdd	„Zy
)Ú
DataReaderc                ó    — || _         || _        y re   ©rJ   Úindex)rR   rJ   rò   s      r   rm   zDataReader.__init__^  s   € ØˆŒ	Øˆ�
r   c                óF   — | j                   t        | j                  «      k  S re   )rò   r^   rJ   rp   s    r   Úhas_datazDataReader.has_datab  s   € à�z‰zœC §	¡	›NÑ*Ð*r   c                ó.   — | xj                   |z  c_         y re   )rò   )rR   Úns     r   ÚskipzDataReader.skipf  s   € Ø�
Š
�a‰Ž
r   c                ób   — | j                   }| xj                   dz  c_         | j                  |   S )Nr   ©rò   rJ   ©rR   rò   s     r   Úu8zDataReader.u8i  s'   € Ø—
‘
ˆØ�
Š
�a‰�
Ø�y‰y˜ÑÐr   c                ó|   — | j                   | j                     }| xj                  dz  c_        |dkD  r|dz  dz
  S |S )Nr   é   é€   rñ   ©rR   Úvalues     r   Úi8zDataReader.i8n  s<   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�
Š
�a‰�
Ø�3Š;Ø˜C‘K 3Ñ&Ð&Øˆr   c                óx   — | j                   | j                     }| xj                  dz  c_        |dz  r|dz   S |S )Nr   rþ   rý   rñ   rÿ   s     r   ÚoctantzDataReader.octantu  s9   € Ø—	‘	˜$Ÿ*™*Ñ%ˆØ�
Š
�a‰�
Ø�3Š;Ø˜S‘[�>Ð!àˆLr   c                óf   — t        «       }	 | j                  «       }|r|j                  |«       n|S Œ're   )Ú	bytearrayrû   r_   )rR   rJ   r´   s      r   Úread_strzDataReader.read_str}  s0   € Ü‹{ˆØØ—7‘7“9ˆDÙØ—‘˜DÕ!à�ð r   c                óh   — | j                   }| xj                   |z  c_         | j                  |||z    S re   rù   )rR   rö   rò   s      r   rÅ   zDataReader.read_bytes†  s-   € Ø—
‘
ˆØ�
Š
�a‰�
Ø�y‰y˜ ¨¡Ð+Ð+r   c                óŽ   — | j                   }| xj                   dz  c_         | j                  |   | j                  |dz      dz  z   S )Nr1   r   é   rù   rú   s     r   Úu16zDataReader.u16‹  s>   € à—
‘
ˆØ�
Š
�a‰�
Ø�y‰y˜Ñ 4§9¡9¨U°Q©YÑ#7¸1Ñ#<Ñ=Ð=r   NrW   )rJ   rH   r¹   )rö   rE   rX   r¼   )rX   rE   )rX   rH   )rö   rE   rX   rH   )r   r   r   rm   rÀ   rô   r÷   rû   r  r  r  rÅ   r
  r   r   r   rï   rï   ]  s>   „ ôð ò+ó ð+óó ó
óóó,ô
>r   rï   é   c           
     óÞ  — t        «       }t        | t        «      }|j                  «       dk7  rt	        d«      ‚|j                  «       }|j                  «       }|j                  «       }g }t        |«      D ]5  }|j                  «       }|j                  «       }	|j                  ||	f«       Œ7 |d   d   |k7  rt	        d«      ‚|d   d   |k7  rt	        d«      ‚|D ]G  \  }}
|j                  |
«      }	 t        |«      \  }}|
t        |«      z
  d
z
  }t        ||||«      ||<   ŒI |j                  d«      dk7  rt	        d«      ‚|S # t        $ r t	        d|d›d	t        |«      › �«      ‚w xY w)zSHX/SHP shape parser.é   úsignature byte 0x1A not foundr   z"invalid first entry in index tabler]   z!invalid last entry in index tablezSHX parsing error shape *rM   z: r   é   s   EOFzEOF marker not found)rf   rï   ÚSHX_SHAPES_START_INDEXrû   r,   r
  Úranger_   rÅ   Úparse_shx_data_recordÚ
IndexErrorr¾   r^   rD   )rJ   rg   ÚreaderÚfirst_numberÚlast_numberÚshape_countÚindex_tabler’   r·   Ú	data_sizeÚlengthr¢   rI   rë   rG   s                  r   rê   rê   –  s‚  € ä $£€FÜ˜Ô4Ó5€FØ‡y�yƒ{�dÒÜ Ð!@ÓAÐAØ—:‘:“<€LØ—*‘*“,€KØ—*‘*“,€KØ)+€KÜ�;ÖˆØ—z‘z“|ˆØ—J‘J“Lˆ	Ø×Ñ˜L¨)Ð4Õ5ð  ð �1�~�aÑ˜LÒ(Ü Ð!EÓFÐFØ�2��qÑ˜[Ò(Ü Ð!DÓEÐEÛ +Ñˆ�fØ×"Ñ" 6Ó*ˆð	Ü4°VÓ<ÑˆD�*ð
 œc $›iÑ'¨!Ñ+ˆ
Ü% l°JÀÀjÓQˆˆ|Òð !,ð ×Ñ˜Ó˜vÒ%Ü Ð!7Ó8Ð8Ø€Møô ò 	Ü$Ø+¨L¸Ð+=¸RÄÀFÃ¸}ÐMóð ð	ús   Ã4EÅ%E,c                óV   — t        | «      }|j                  «       }t        |«      }||fS )z&Low level SHX/SHP shape record parser.)rï   r  Úparse_shape_codes)rJ   r  rI   rÙ   s       r   r  r  ·  s,   € ä˜Ó€FØ�?‰?Ó€DÜ˜fÓ%€EØ�ˆ;Ðr   é   c                ó¾   — t        | t        «      }t        |«      \  }}}}}}t        ||||||¬«      }	 t	        |«      |_        |S # t        $ r t        d«      ‚w xY w)N)rh   ri   rj   rk   rl   zpre-mature end of file)rï   ÚSHX_UNIFONT_START_INDEXÚparse_shx_unifont_definitionrc   Úparse_shx_unifont_shapesrg   r  r,   )	rJ   r  rI   rh   ri   rj   rk   rl   rì   s	            r   rç   rç   Ã  sy   € Ü˜Ô5Ó6€FÜ0LÈVÓ0TÑ-€Dˆ%�˜˜h¨ÜØØØØØØô€Jð;Ü4°VÓ<ˆ
Ôð Ðøô ò ;Ü Ð!9Ó:Ð:ð;ús   µA ÁAc                óˆ  — | j                  «       dk7  rt        d«      ‚| j                  d«       | j                  «       }| j                  «       }| j                  «       }t	        | j                  «       «      }t        | j                  «       «      }t        | j                  «       «      }| j                  d«       ||||||fS )Nr  r  é   r   )rû   r,   r÷   r  r;   r6   r0   )r  rI   rh   ri   rj   rk   rl   s          r   r   r   Õ  s™   € Ø‡y�yƒ{�dÒÜ Ð!@ÓAÐAØ
‡K�K�„Nð �?‰?Ó€DØ�I‰I‹K€EØ�I‰I‹K€EÜ�F—I‘I“KÓ €DÜ˜FŸI™I›KÓ(€HÜ˜&Ÿ)™)›+Ó&€EØ
‡K�K�„NØ�˜˜t X¨uÐ4Ð4r   c                ó>  — t        «       }| j                  r†| j                  «       }| j                  «       }| j                  «       }|t	        |«      z
  dz
  }| j                  |«      }t        t        |«      d¬«      }t        ||||«      ||<   | j                  rŒ†|S )Nr   T)Úunifont)	rf   rô   r
  r  r^   rÅ   r  rï   rD   )r  rg   r·   rG   rI   Údata_recordrÙ   s          r   r!  r!  è  s‹   € Ü $£€FØ
�/Š/Ø—z‘z“|ˆØ—Z‘Z“\ˆ
Ø�‰Ó ˆØ¤# d£)Ñ+¨aÑ/ˆ
Ø×'Ñ'¨
Ó3ˆÜ!¤*¨[Ó"9À4ÔHˆÜ% l°JÀÀeÓLˆˆ|Ñð �/‹/ð €Mr   >   r   r1   é   r#  é   c                ó2  — g }	 | j                  «       }|j                  |«       |dk(  rt        |«      S |t        v s|dkD  rŒ@|dk(  s|dk(  r!|j                  | j                  «       «       �n©|dk(  rD|r!|j                  | j	                  «       «       �n�|j                  | j                  «       «       �n`|dk(  r@|j                  | j                  «       «       |j                  | j                  «       «       �n|dk(  rTd\  }}|s|�r| j                  «       }| j                  «       }|j                  |«       |j                  |«       |rŒE|rŒH�nÂ|d	k(  r@|j                  | j                  «       «       |j                  | j                  «       «       �n}|d
k(  rœ|j                  | j                  «       «       |j                  | j                  «       «       |j                  | j                  «       «       |j                  | j                  «       «       |j                  | j                  «       «       nÜ|dk(  r^|j                  | j                  «       «       |j                  | j                  «       «       |j                  | j                  «       «       ny|dk(  rtd\  }}|s|rk| j                  «       }| j                  «       }|j                  |«       |j                  |«       |s|r|j                  | j                  «       «       |rŒh|rŒk�Œ)Nr   r(  r  é   é   r	  é	   )r   r   r—   é   é   é   )rû   r_   rž   ÚSINGLE_CODESr
  r  r  )r  r%  rÙ   rÚ   ÚxÚys         r   r  r  ø  s3  € Ø€EØ
Ø�y‰y‹{ˆØ�‰�TÔØ�1Š9Ü˜“<ÐØ”\Ñ! T¨B¢YØØ�QŠY˜$ !š)Ø�L‰L˜Ÿ™›Ö%Ø�QŠYÙØ—‘˜VŸZ™Z›\Ö*à—‘˜VŸY™Y›[Ö)Ø�QŠYØ�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Ö%Ø�QŠYØ‰DˆAˆqÙ’qØ—I‘I“K�Ø—I‘I“K�Ø—‘˜Q”Ø—‘˜Q”ò	 ”qð
 �RŠZØ�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Ö)Ø�RŠZØ�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Õ)Ø�RŠZØ�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Ô%Ø�L‰L˜Ÿ™›Õ%Ø�RŠZØ‰DˆAˆqÙ‘qØ—I‘I“K�Ø—I‘I“K�Ø—‘˜Q”Ø—‘˜Q”Ù™Ø—L‘L §¡£Ô-ò ’qñO r   c              #  ó¸   K  — | D ]Q  }|j                  d«       |j                  «       }|sŒ'|j                  d«      d   }|j                  «       }|sŒN|–— ŒS y ­w)Ns   
ó   ;r   )ÚrstriprŒ   rŠ   )ÚlinesÚlines     r   rß   rß   *  sP   è ø€ ÛˆØ�‰�GÔØ�z‰z‹|ˆÚØ—:‘:˜dÓ# AÑ&ˆDØ—:‘:“<ˆDÚØ“
ñ ùs   ‚)A¬&AÁAc              #  óü   K  — d}| D ]j  }|s|}Œ|j                  d«      r|j                  d«      r||z  }Œ0|–— |}Œ7|j                  d«      r||z  }ŒN|j                  d«      r||z  }Œe|–— |}Œl |r|–— y y ­w)Nr   ó   *r…   )rä   rÇ   )r6  ÚcurrentÚ	next_lines      r   rÞ   rÞ   5  s–   è ø€ Ø€GÛˆ	ÙØ‰GØ×Ñ Ô%Ø×#Ñ# DÔ)Ø˜9Ñ$‘à’Ø#‘Ø×Ñ˜dÔ#Ø�yÑ ‰GØ×!Ñ! $Ô'Ø�yÑ ‰GàŠMØ‰Gð ñ  Ø‹ð ùs   ‚A:A<c                ó8  — t        «       }d }g }| D ]v  }|j                  d«      rt        d«      ‚|j                  d«      r6|�t        |«      ||<   |j	                  d«      d   j                  «       }|g}Œf|j                  |«       Œx |�t        |«      ||<   |S )Ns   *BIGFONTz)BIGFONT shape files are not supported yetr9  r…   r   )rf   rä   r"   rž   rŠ   rŒ   r_   )r6  r�   rI   r¢   r7  s        r   rÝ   rÝ   K  sŸ   € ô -1«F€GØ€DØ€FÛˆØ�?‰?˜;Ô'Ü&Ð'RÓSÐSØ�?‰?˜4Ô ØÐÜ % f£�˜‘Ø—:‘:˜dÓ# AÑ&×,Ñ,Ó.ˆDØ�V‰Fà�M‰M˜$Õð ð ÐÜ˜f›ˆ�‰Ø€Nr   c                óð   — t        t        j                  |«      d||¬«      }| D ]  }	 |j                  ||¬«       Œ t        |j                  «      S # t        $ r Y Œ9t
        $ r t        d|› �«      ‚w xY w)z1Renders multiple shapes into a single glyph path.T©Úpen_downrª   r§   ©r±   z-stack underflow while rendering shape number )ÚShapeRendererr   rÄ   Úrenderr$   r.   r   Úp)Úshape_numbersr§   rª   Ústartr±   Úctxr·   s          r   r¬   r¬   a  s‰   € ô Ü�	‰	�%ÓØØØô	€Có &ˆð	Ø�J‰J�|Ð7HˆJÕIð &ô �S—U‘UÓÐøô &ò 	ÙÜò 	Ü Ø?À¸~ÐNóð ð	ús   ©AÁ	A5ÁA5)r   r   r   ç      à?r   ç      à¿r]   r]   r]   r]   r]   rH  r   rG  r   r   )r   rG  r   r   r   r   r   rG  r   rH  r]   r]   r]   r]   r]   rH  c                  óÌ   — e Zd ZdZddddœ	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zdd„Zdd	„Z	 d	 	 	 dd
„Z	dd„Z
dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zy)rA  z+Low level glyph renderer for SHX/SHP fonts.ç      ð?TF)Úvector_lengthr?  rª   c               ó´   — || _         t        |«      | _        || _        || _        g | _        || _        | j                   j                  j                  | _	        y re   )
rC  ro   rK  r?  rª   Ú_location_stackÚ
_get_codesrE  r2  Ú_baseline_y)rR   rC  r§   rK  r?  rª   s         r   rm   zShapeRenderer.__init__„  sI   € ð ˆŒÜ" =Ó1ˆÔØ ˆŒØˆŒØ+-ˆÔØ#ˆŒØŸ6™6Ÿ<™<Ÿ>™>ˆÕr   c                ó@   — t        | j                  j                  «      S re   )r   rC  rŽ   rp   s    r   Úcurrent_locationzShapeRenderer.current_location•  s   € ä�D—F‘F—J‘JÓÐr   c                óN   — | j                   j                  | j                  «       y re   )rM  r_   rQ  rp   s    r   ÚpushzShapeRenderer.push™  s   € Ø×Ñ×#Ñ# D×$9Ñ$9Õ:r   c                ój   — | j                   j                  | j                  j                  «       «       y re   )rC  Úmove_torM  rà   rp   s    r   rà   zShapeRenderer.popœ  s!   € Ø�‰�‰�t×+Ñ+×/Ñ/Ó1Õ2r   c                ól  — d| _         | j                  |«      }d}d}|t        |«      k  �rk||   }t        r|t        v r|rt
        j                  |«       |dz  }|dkD  r|s| j                  |«       �n|dk(  r�n|dk(  r|s	d| _         �nù|dk(  r|s	d| _         �né|dk(  s|dk(  rC||   }|dz  }|�sÒ|dk(  r| xj                  |z  c_        n|dk(  r| xj                  |z  c_        ŒÌ|d	k(  r|s| j                  «        �nƒ|d
k(  r|s	 | j                  «        �ni|dk(  r ||   }|dz  }|�sW| j                  |«       �nD|dk(  r)||   }	||dz      }
|dz  }|�s*| j                  |	|
«       �n|dk(  r4	 ||   }	||dz      }
|dz  }|	dk(  r|
dk(  r�nò|s| j                  |	|
«       Œ3|dk(  rx||   }t        ||dz      «      \  }}}|dk(  rd}|dz  }|�s¯| j!                  || j                  z  t#        j$                  |dz  «      t#        j$                  |dz  «      |«       �n`|dk(  rË||   }||dz      }||dz      dz  ||dz      z   }t        ||dz      «      \  }}}|d	z  }|dk(  rd}d}||z  }||z  }|r||z   dz
  }|dz  |z   }|dz  |z   }n||z
  dz   }|dz  |z
  }|dz  |z
  }|sØ| j'                  || j                  z  t#        j$                  |«      t#        j$                  |«      |«       n�|dk(  r0||   }	||dz      }
||dz      }|dz  }|so| j)                  |	|
|«       n[|dk(  rA	 ||   }	||dz      }
|	dk(  r|
dk(  r|dz  }n8||dz      }|dz  }|s| j)                  |	|
|«       Œ@|dk(  r| j*                  sd}�Œhd}|t        |«      k  r�Œk|r…t#        j,                  | j.                  j0                  j2                  | j4                  «      sF| j.                  j7                  | j.                  j0                  j8                  | j4                  f«       y y y # t        $ r t        «       ‚w xY w)NTr   Fr   é   r1   r  r*  r'  r#  r+  r	  r,  r—   é-   r-  é   g     €Æ?g     €F@r.  r/  r(  )r?  rN  r^   ÚDEBUGr@   ÚDEBUG_SHAPE_NUMBERSÚaddÚdraw_vectorrK  rS  rà   r  r.   rB  Údraw_displacementÚdecode_octant_specsÚdraw_arc_spanÚmathÚradiansÚdraw_arc_start_to_endÚ
draw_bulgerª   ÚiscloserC  rŽ   r2  rO  rU  r1  )rR   r·   r±   rÙ   rò   Ú	skip_nextrÚ   ÚfactorÚsub_shape_numberr1  r2  ÚradiusÚstart_octantÚoctant_spanÚccwÚstart_offsetÚ
end_offsetÚ
binary_degÚstart_offset_angleÚend_offset_angleÚ
end_octantÚstart_angleÚ	end_angleÚbulges                           r   rB  zShapeRenderer.renderŸ  sÔ  € ð
 ˆŒØ—‘ Ó-ˆØˆØˆ	Ø”c˜%“jÓ Ø˜‘<ˆDÝ˜$¤+Ñ-±<Ü#×'Ñ'¨Ô5Ø�Q‰JˆEØ�bŠy¡Ø× Ñ  Ö&Ø˜’ÙØ˜’¡9Ø $�–Ø˜’¡9Ø %�–Ø˜’˜d ašiØ˜u™�Ø˜‘
�Ú Ø˜q’yØ×*Ò*¨fÑ4Ö*Ø šØ×*Ò*¨fÑ4Õ*ØØ˜’¡9Ø—	‘	–Ø˜’¡9ð+Ø—H‘H–Jð ˜’Ø#(¨¡<Ð Ø˜‘
�Ú à—K‘KÐ 0Ö1à˜’Ø˜%‘L�Ø˜% !™)Ñ$�Ø˜‘
�Ú Ø×*Ñ*¨1¨aÖ0Ø˜’ØØ˜e™�AØ˜e a™iÑ(�AØ˜Q‘J�EØ˜A’v ! q¢&ÙÙ$Ø×.Ñ.¨q°!Ô4ð ð ˜’Ø˜u™�Ü1DÀUÈ5ÐSTÉ9ÑEUÓ1VÑ.�˜k¨3Ø !Ò#Ø"#�KØ˜‘
�Ú Ø×&Ñ&Ø ×!3Ñ!3Ñ3ÜŸ™ \°BÑ%6Ó7ÜŸ™ [°2Ñ%5Ó6Øö	ð ˜’ð  % U™|�Ø" 5¨1¡9Ñ-�
Ø ¨¡	Ñ*¨aÑ/°5¸À¹Ñ3CÑC�Ü1DÀUÈ5ÐSTÉ9ÑEUÓ1VÑ.�˜k¨3Ø˜‘
�Ø ’?Ø!$�JØ)�
Ø%1°JÑ%>Ð"Ø#-°
Ñ#:Ð ÙØ!-°Ñ!;¸aÑ!?�JØ".°Ñ"5Ð8JÑ"J�KØ *¨TÑ 1Ð4DÑ D‘Ià!-°Ñ!;¸aÑ!?�JØ".°Ñ"5Ð8JÑ"J�KØ *¨TÑ 1Ð4DÑ D�Iá Ø×.Ñ.Ø ×!3Ñ!3Ñ3ÜŸ™ [Ó1ÜŸ™ YÓ/Øõ	ð ˜’Ø˜%‘L�Ø˜% !™)Ñ$�Ø˜e a™iÑ(�Ø˜‘
�Ù Ø—O‘O A q¨%Õ0Ø˜’ØØ˜e™�AØ˜e a™iÑ(�AØ˜A’v ! q¢&Ø ™
˜ØØ! %¨!¡)Ñ,�EØ˜Q‘J�EÙ$ØŸ™¨¨1¨eÔ4ð ð ˜’Ø—|’|Ø $�IÙØˆIðo ”c˜%“jÔ ñr ä—<‘< §¡§
¡
§¡¨d×.>Ñ.>Ô?Ø—‘—‘ §¡§
¡
§¡¨d×.>Ñ.>Ð?Õ@ð @ð øô} "ò +Ü(Ó*Ð*ð+ús   Ä
P ÐP3c                ój   — |dz  }|dz	  dz  }| j                  t        |   |z  t        |   |z  «       y )NrW  r*  )r^  ÚVEC_XÚVEC_Y)rR   rÚ   Úangler  s       r   r]  zShapeRenderer.draw_vector&  s;   € Ø˜C‘ZˆØ˜q‘y CÑ'ˆØ×Ñœu U™|¨fÑ4´e¸E±lÀVÑ6KÕLr   c                óà   — | j                   }| j                  t        ||z  ||z  «      z   }| j                  r| j                  j                  |«       y | j                  j                  |«       y re   )rK  rQ  r   r?  rC  Úline_torU  )rR   r1  r2  ÚscaleÚtargets        r   r^  zShapeRenderer.draw_displacement+  sS   € Ø×"Ñ"ˆØ×&Ñ&¬¨a°%©i¸¸U¹Ó)CÑCˆØ�=Š=Ø�F‰F�N‰N˜6Õ"à�F‰F�N‰N˜6Õ"r   c                ó@   — ||r|n| z   }| j                  ||||«       y re   )rc  )rR   ri  rs  Ú
span_anglerl  rt  s         r   r`  zShapeRenderer.draw_arc_span3  s(   € ð  ±¡:¸:¸+ÑFˆ	Ø×"Ñ" 6¨;¸	À3ÕGr   c                ó~  — |dkD  sJ ‚t        |df|||¬«      }|xj                  | j                  t        |r|j                  n|j
                  «      z
  z  c_        | j                  r#t        j                  | j                  |d¬«       y | j                  j                  |r|j
                  n|j                  «       y )Nç        r   )Ú
major_axisÚstart_paramÚ	end_paramrl  F©Úreset)r   ÚcenterrQ  r   Ústart_pointÚ	end_pointr?  r   Úadd_ellipserC  rU  )rR   ri  rs  rt  rl  Úarcs         r   rc  z#ShapeRenderer.draw_arc_start_to_end:  s˜   € ð ˜Š|Ðˆ|Ü!Ø �{Ø#ØØô	
ˆð 	�
Š
�d×+Ñ+¬dÙ"ˆC�OŠO¨¯©ó/
ñ 
ñ 	
�
ð �=Š=Ü×Ñ˜TŸV™V S°Ö6à�F‰F�N‰N©C˜3Ÿ=š=°S·_±_ÕEr   c                óì   — t        ||df|||¬«      }| j                  r#t        j                  | j                  |d¬«       y | j                  j                  |r|j                  n|j                  «       y )Nr   )r‡  r‚  rƒ  r„  rl  Fr…  )r   r?  r   rŠ  rC  rU  r‰  rˆ  )rR   r‡  ri  rƒ  r„  rl  r‹  s          r   Údraw_arczShapeRenderer.draw_arcO  s\   € ô "ØØ �{Ø#ØØô
ˆð �=Š=Ü×Ñ˜TŸV™V S°Ö6à�F‰F�N‰N©C˜3Ÿ=š=°S·_±_ÕEr   c                ó@  — | j                   r€|r~| j                  }| j                  }|dkD  }|t        ||z  ||z  «      z   }t	        |«      dz  }|rt        |||«      \  }}	}
}nt        |||«      \  }}	}
}| j                  |||	|
d¬«       y | j                  ||«       y )Nr   g     À_@T)rl  )r?  rQ  rK  r   Úabsr   r�  r^  )rR   r1  r2  ru  rˆ  r|  rl  r‰  r‡  rs  rt  ri  s               r   rd  zShapeRenderer.draw_bulged  s³   € Ø�=Š=™UØ×/Ñ/ˆKØ×&Ñ&ˆEØ˜!‘)ˆCØ#¤d¨1¨u©9°a¸%±iÓ&@Ñ@ˆIÜ˜“J Ñ&ˆEÙÜ9EØ ¨Eó:Ñ6�˜ Y±ô :FØ˜{¨Eó:Ñ6�˜ Y°ð �M‰M˜& &¨+°yÀdˆMÕKà×"Ñ" 1 aÕ(r   N)
rC  z	path.Pathr§   úCallable[[int], Sequence[int]]rK  ro   r?  rº   rª   rº   )rX   r   )rX   r¼   r½   )r·   rE   rX   r¼   )rÚ   rE   rX   r¼   )r1  ro   r2  ro   )ri  ro   rs  ro   r  ro   rl  rº   )ri  ro   rs  ro   rt  ro   rl  rº   )
r‡  r   ri  ro   rƒ  ro   r„  ro   rl  rº   )r1  ro   r2  ro   ru  ro   )r   r   r   r¿   rm   rÀ   rQ  rS  rà   rB  r]  r^  r`  rc  r�  rd  r   r   r   rA  rA  ‚  s%  „ Ù5ð  #ØØñ*àð*ð 2ð*ð
 ð*ð ð*ð ó*ð" ò ó ð ó;ó3ð  ðEAàðEAð 
ó	EAóNMó
#ðHØðHØ*/ðHØ=BðHØIMóHðFØðFØ*/ðFØ<AðFØHLóFð*FàðFð ðFð ð	Fð
 ðFð óFô*)r   rA  c                ó>   — d}| dk  rd}|  } | dz	  dz  }| dz  }|||fS )NTr   Fr*  rW  r   )Úspecsrl  rj  rk  s       r   r_  r_  x  s>   € Ø
€CØˆq‚yØˆØ�ˆØ˜Q‘J #Ñ%€LØ˜#‘+€KØ˜ cÐ)Ð)r   c                óÌ   — ddl m} ddlm}  || |j                  «      }d}	 t        |«      }|j                  |«      }|�|j                  S |S # t        t        f$ r |cY S w xY w)a@  Returns the shape number for shape `name` from the shape-file, returns -1 if not
    found.

    The filename can be an absolute path or the shape-file will be searched in the
    current directory and all directories stored in :attr:`ezdxf.options.support_dirs`.
    Supports shape files of type ".shx" and ".shp".
    r   )Úfind_support_file)Úoptionsr]   )
Úezdxf.filemanagementr”  Úezdxfr•  Úsupport_dirsrË   ÚIOErrorr   r~   rF   )rÊ   rI   r”  r•  Úshape_file_namerò   rg   Ú
shx_symbols           r   Úfind_shape_numberrœ  ‚  ss   € õ 7Ýá'¨°'×2FÑ2FÓG€OØ€EðÜ˜/Ó*ˆð —‘˜TÓ"€JØÐØ× Ñ Ð Ø€Løô Ô'Ð(ò ØŠðús   £A ÁA#Á"A#c                  óŒ   — e Zd Zdd„Zdd„Zdd„Zddd„Zdd„Zdd„Zdd„Z	e
dd„«       Z	 d	 	 	 	 	 	 	 dd	„Z	 d	 	 	 	 	 	 	 dd
„Zy)Ú
GlyphCachec                óä   — || _         t        «       | _        t        «       | _        | j	                  |j
                  ¬«      | _        | j                  «       | _        | j                  «       | _
        y)zCText render engine for SHX/SHP fonts with integrated glyph caching.)Údefault_widthN)Úfontrf   Ú_glyph_cacheÚ_advance_width_cacheÚdetect_space_widthrq   Úspace_widthÚget_empty_boxÚ	empty_boxÚ_get_font_measurementsÚfont_measurements)rR   r¡  s     r   rm   zGlyphCache.__init__š  sX   € à#ˆŒ	Ü26³&ˆÔÜ6:³fˆÔ!Ø"&×"9Ñ"9ÈÏÉÐ"9Ó"XˆÔØ$(×$6Ñ$6Ó$8ˆŒØ37×3NÑ3NÓ3PˆÕr   c                óT   — 	 || j                   j                  z  S # t        $ r Y yw xY w)NrJ  )r©  rq   ÚZeroDivisionError)rR   rq   s     r   Úget_scaling_factorzGlyphCache.get_scaling_factor£  s0   € ð	Ø × 6Ñ 6× AÑ AÑAÐAøÜ ò 	Ùð	ús   ‚ ›	'¦'c                óú   — d| j                   j                  v r%| j                  d«      j                  j                  S d| j                   j                  v r%| j                  d«      j                  j                  S |S )Né    éA   )r¡  rg   Ú	get_shaperŽ   r1  )rR   r   s     r   r¤  zGlyphCache.detect_space_width©  sb   € à�—‘×!Ñ!Ñ!Ø—>‘> "Ó%×)Ñ)×+Ñ+Ð+Ø�—‘×!Ñ!Ñ!Ø—>‘> "Ó%×)Ñ)×+Ñ+Ð+ØÐr   c                ó¨  — | j                   }|j                  }| j                  }t        dd«      }t        |d«      }||j                  v rn| j                  |«      }t        |j                  «       «      }|j                  j                  }|j                  j                  }|j                  }|j                  }t        j                  |«      }	|	j                  |t        |d«      z   «       |	j                  |t        ||«      z   «       |	j                  |t        d|«      z   «       |	j!                  «        |	j#                  |«       t%        |	«      S )zâReturns the empty box (tofu) representation based on the size of the given
        character index.

        The given index may not exist and a default box based on cap-height and space
        width will be created.
        r   )r¡  rq   r¥  r   rg   r°  r   Úcontrol_verticesÚsizer2  r1  rE  rŽ   r   rÄ   r{  ÚcloserU  r   )
rR   r´   r¡  ÚheightÚwidthrE  rŽ   ÚglyphÚboxrC  s
             r   r¦  zGlyphCache.get_empty_box±  s  € ð �y‰yˆØ—‘ˆØ× Ñ ˆÜ�Q˜“
ˆÜ�5˜!‹nˆà�4—;‘;Ñà—N‘N 4Ó(ˆEÜ × 6Ñ 6Ó 8Ó9ˆCØ—X‘X—Z‘ZˆFØ—H‘H—J‘JˆEØ—K‘KˆEØ—)‘)ˆCä�I‰I�eÓˆØ	�	‰	�%œ$˜u a›.Ñ(Ô)Ø	�	‰	�%œ$˜u fÓ-Ñ-Ô.Ø	�	‰	�%œ$˜q &›/Ñ)Ô*Ø	�‰Œ	Ø	�	‰	�#ŒÜ˜‹|Ðr   c                óÜ   — t        t        j                  «       dd| j                  j                  ¬«      }	 |j                  |d¬«       t        |j                  «      S # t        $ r Y Œ w xY w)NTFr>  r@  )	rA  r   rÄ   r¡  r§   rB  r.   r   rC  )rR   r·   rF  s      r   Ú_render_shapezGlyphCache._render_shapeÐ  sb   € ÜÜ�I‰I‹KØØØ—i‘i×)Ñ)ô	
ˆð	Ø�J‰J�|°uˆJÔ=ô ˜Ÿ™ÓÐøô ò 	Ùð	ús   ·A Á	A+Á*A+c                óœ  — 	 | j                   |   j                  «       S # t        $ r Y nw xY w	 | j                  |«      }n,# t        $ r  |dk  rt        d «      }n| j                  }Y nw xY w|| j                   |<   	 |j                  j                  }n# t        $ r | j                  }Y nw xY w|| j                  |<   |j                  «       S ©Nr®  )r¢  ÚcloneÚKeyErrorrº  r$   r   r§  rŽ   r1  r  r¥  r£  )rR   r·   r·  r¶  s       r   r°  zGlyphCache.get_shapeÝ  sÌ   € ð	Ø×$Ñ$ \Ñ2×8Ñ8Ó:Ð:øÜò 	Ùð	úð	'Ø×&Ñ& |Ó4‰EøÜ%ò 	'Ø˜bÒ Ü! $›‘àŸ™�ùð		'úð
 +0ˆ×Ñ˜,Ñ'ð	%Ø—I‘I—K‘K‰EøÜò 	%Ø×$Ñ$ŠEð	%úà27ˆ×!Ñ! ,Ñ/Ø�{‰{‹}Ðs/   ‚ Ÿ	+ª+¯A Á&A*Á)A*Á=B ÂB,Â+B,c                ó¬   — |dk(  r| j                   S 	 | j                  |   S # t        $ r Y nw xY w| j                  |«      j                  j
                  S r¼  )r¥  r£  r¾  r°  rŽ   r1  )rR   r·   s     r   Úget_advance_widthzGlyphCache.get_advance_widthñ  sY   € Ø˜2ÒØ×#Ñ#Ð#ð	Ø×,Ñ,¨\Ñ:Ð:øÜò 	Ùð	úà�~‰~˜lÓ+×/Ñ/×1Ñ1Ð1s   “" ¢	.­.c                ó†  — t        | j                  t        d«      «      j                  «       d d «      }|j                  j
                  }|j                  j
                  |z
  }| j                  j                  }|dk(  rMt        | j                  t        d«      «      j                  «       d d «      }|j                  j
                  |z
  }| j                  j                  }|dk(  rMt        | j                  t        d«      «      j                  «       d d «      }||j                  j
                  z
  }t        ||||¬«      S )Nr1  r]   r   ÚArC  )Úbaselinerq   Úx_heightÚdescender_height)r   r°  r²   r²  Úextminr2  Úextmaxr¡  rh   ri   r   )rR   ÚbboxrÃ  rÄ  rq   rÅ  s         r   r¨  z!GlyphCache._get_font_measurementsú  s   € ô ˜TŸ^™^¬C°«HÓ5×FÑFÓHÈÈ"ÐMÓNˆØ—;‘;—=‘=ˆØ—;‘;—=‘= 8Ñ+ˆà—Y‘Y—_‘_ˆ
Ø˜Š?Ü  §¡´°C³Ó!9×!JÑ!JÓ!LÈSÈbÐ!QÓRˆDØŸ™Ÿ™¨Ñ1ˆJØŸ9™9Ÿ?™?ÐØ˜qÒ Ü  §¡´°C³Ó!9×!JÑ!JÓ!LÈSÈbÐ!QÓRˆDØ'¨$¯+©+¯-©-Ñ7ÐÜØØ!ØØ-ô	
ð 	
r   c                óZ   ‡ — ‰ j                  |«      |z  }t        ˆ fd„|D «       «      |z  S )Nc              3  óR   •K  — | ]  }‰j                  t        |«      «      –— Œ  y ­wre   )rÀ  r²   )rÐ   ÚcrR   s     €r   rÑ   z-GlyphCache.get_text_length.<locals>.<genexpr>  s!   øè ø€ Ð@¹4°a�4×)Ñ)¬#¨a«&×1¹4ùs   ƒ$')r¬  Úsum)rR   r³   rq   Úwidth_factorÚscaling_factors   `    r   Úget_text_lengthzGlyphCache.get_text_length  s0   ø€ ð ×0Ñ0°Ó<¸|ÑKˆÜÓ@¹4Ó@Ó@À>ÑQÐQr   c                ó4  — g }| j                  |«      }||z  }t        j                  ||d«      }d}|D ]a  }	t        |	«      }
|
dkD  r8| j	                  |
«      }||d<   |j                  |«       |j                  |«       || j                  |
«      |z  z  }Œc |S )zFReturns the glyph paths of string `s` as a list, scaled to cap height.r   r�  r®  )r  r   )r¬  r   r|  r²   r°  Útransform_inplacer_   rÀ  )rR   r³   rq   rÍ  Úglyph_pathsÚsyÚsxÚmrQ  rË  r·   r·  s               r   Úget_text_glyph_pathszGlyphCache.get_text_glyph_paths  s¬   € ð (*ˆØ×$Ñ$ ZÓ0ˆØ�,ÑˆÜ�N‰N˜2˜r 1Ó%ˆØÐÛˆAÜ˜q›6ˆLØ˜bÒ ØŸ™ |Ó4�Ø*��$‘Ø×'Ñ'¨Ô*Ø×"Ñ" 5Ô)Ø × 6Ñ 6°|Ó DÀrÑ IÑIÑð ð Ðr   N)r¡  rc   rX   r¼   )rq   ro   rX   ro   )r   ro   rX   ro   )r¯  )r´   rE   rX   r   )rX   r   )r·   rE   rX   r   )r·   rE   rX   ro   )rX   r   )rJ  )r³   r¾   rq   ro   rÍ  ro   rX   ro   )rJ  rJ  )r³   r¾   rq   ro   rÍ  ro   rX   zlist[GlyphPath])r   r   r   rm   r¬  r¤  r¦  rº  r°  rÀ  r   r¨  rÏ  rÖ  r   r   r   rž  rž  ™  s—   „ óQóóôó> óó(2ð ò
ó ð
ð. CFðRØðRØ%*ðRØ:?ðRà	óRð ILðØðØ%*ðØ@Eðà	ôr   rž  )rJ   r>   rX   rY   )rÊ   r¾   rX   rc   )r¢   rH   rX   r»   )rÙ   úIterable[bytes]rX   zIterator[int])rJ   rH   rX   rc   )rJ   rH   rX   údict[int, Symbol])rJ   rH   rX   ztuple[bytes, Sequence[int]])r  rï   rX   zSequence[Any])r  rï   rX   rØ  r½   )r  rï   rX   r>   )r6  r×  rX   zIterator[bytes])r6  r×  rX   zdict[bytes, Sequence[bytes]]))r   r   F)
rD  r>   r§   r�  rª   rº   rE  r   rX   r   )r’  rE   rX   ztuple[int, int, bool])rÊ   r¾   rI   rH   rX   rE   )Ur¿   Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   ÚdataclassesÚenumra  rÃ   Ú
ezdxf.mathr   r   r   r   r   r   r—  r   r©  r   Úglyphsr   r   Ú	Exceptionr   r"   r$   r&   r(   r*   r,   r.   ÚIntEnumr0   r6   r;   rž   r?   rZ   rZ  Úsetr@   r[  r²   rœ   rØ   Ú	dataclassrD   rQ   rc   rË   r›   r    rŸ   rÈ   rÉ   rå   ræ   rï   r  rê   r  r  rç   r   r!  r0  r  rß   rÞ   rÝ   r¬   rw  rx  rA  r_  rœ  rž  r   r   r   Ú<module>rã     s9  ðò	õ #÷	÷ 	ó 	ó Û Û Û ÷÷ õ Ý /ß %ô	˜ô 	ô	Ð-ô 	ô	Ð/ô 	ô	Ð.ô 	ô	Ð.ô 	ô	Ð+ô 	ô	Ð+ô 	ô	Ð'ô 	ô�D—L‘Lô ô�4—<‘<ô ôˆt�|‰|ô ñ
 ›€ˆÓ  Ø€Ù›€ˆXÓ Ù“eÐ Ùˆs‹8€Ù�‹H€	ð ×Ñ÷
ð 
ó ð
ó÷A<ñ A<óH7óDó8ó
 óó	<óó&)÷
2>ñ 2>ðl Ð óóBð Ð óó$5ó&
ò  €ô/.ódóð,Øðà!óð4 ØðØ ðà-ðð ðð ð	ð óò8 	H€âG€÷s)ñ s)ól*óô.O�õ Or   