Ë
    £èhó  ã                  ón   — d dl mZ d dlmZmZmZ ddlmZ d dlm	Z	  G d„ de«      Z
 G d„ d	«      Zdd
„Zy)é    )Úannotations)ÚIterableÚ
NamedTupleÚBinaryIOé   )ÚDXFStructureError)Ú
toencodingc                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)Ú
IndexEntryÚintÚcodeÚstrÚvalueÚlocationÚlineN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú5lib/python3.12/site-packages/ezdxf/lldxf/fileindex.pyr   r   
   s   … Ø
ƒIØƒJØƒMØ
„Ir   r   c                  óD   — e Zd ZdZdd„Zdd„Zd	d
d„Z	 d		 	 	 	 	 	 	 dd„Zy)ÚFileStructurea1  DXF file structure representation stored as file locations.

    Store all DXF structure tags and some other tags as :class:`IndexEntry`
    tuples:

        - code: group code
        - value: tag value as string
        - location: file location as int
        - line: line number as int

    Indexed tags:

        - structure tags, every tag with group code 0
        - section names, (2, name) tag following a (0, SECTION) tag
        - entity handle tags with group code 5, the DIMSTYLE handle group code
          105 is also stored as group code 5

    c                ó<   — || _         d| _        d| _        g | _        y )NÚAC1009Úcp1252)ÚfilenameÚversionÚencodingÚindex)Úselfr   s     r   Ú__init__zFileStructure.__init__%   s   € à%ˆŒà$ˆŒà%ˆŒØ')ˆ�
r   c           
     ó  — t        d| j                  › �«       t        d| j                  › �«       t        d| j                  › �«       | j                  D ]5  }t        d|j
                  › d|j                  › d|j                  › d�«       Œ7 y )Nz
Filename: zDXF Version: z
encoding: zLine: z - (ú, Ú))Úprintr   r   r    r!   r   r   r   )r"   Úentrys     r   r'   zFileStructure.print.   sr   € Ü�
˜4Ÿ=™=˜/Ð*Ô+Ü�˜dŸl™l˜^Ð,Ô-Ü�
˜4Ÿ=™=˜/Ð*Ô+Ø—Z”ZˆEÜ�F˜5Ÿ:™:˜, d¨5¯:©:¨,°b¸¿¹¸ÀQÐGÕHñ  r   c                óÂ   — | j                   }|}t        |«      }||k  r0||   }|j                  |k(  r|j                  |k(  r|S |dz  }||k  rŒ0t	        d|› d|› d�«      ‚)z9Returns index of first entry matching `code` and `value`.r   zNo entry for tag (r%   z) found.)r!   Úlenr   r   Ú
ValueError)r"   r   r   ÚstartÚ
self_indexr!   Úcountr(   s           r   ÚgetzFileStructure.get5   su   € à—Z‘Zˆ
ØˆÜ˜“_ˆØ�eŠmØ˜uÑ%ˆEØ�z‰z˜TÒ! e§k¡k°UÒ&:Ø�Ø�Q‰JˆEð	 �e‹mô
 Ð-¨d¨V°2°e°W¸HÐEÓFÐFr   c              #  ó|   K  — | j                   |d D ]&  }|j                  |k(  sŒ|j                  |k(  sŒ#|–— Œ( y­w)z{Iterate over all specified entities.

        e.g. fetchall(0, 'LINE') returns an iterator for all LINE entities.

        N)r!   r   r   )r"   r   r   r,   r(   s        r   ÚfetchallzFileStructure.fetchallA   s9   è ø€ ð —Z‘Z  Ó'ˆEØ�z‰z˜TÓ! e§k¡k°UÓ&:Ø“ñ (ùs   ‚"<¥<µ<N)r   r   )ÚreturnÚNone)r   )r   r   r   r   r,   r   r2   r   )r   r   r   r   r,   r   r2   zIterable[IndexEntry])r   r   r   Ú__doc__r#   r'   r/   r1   r   r   r   r   r      sB   „ ñó&*óIô
Gð 34ð
Øð
Ø #ð
Ø,/ð
à	ô
r   r   c                ó‚  ‡‡‡— t        | «      }t        | d¬«      ŠdŠd}d}g }d}d}d}dˆˆfd„Šdˆfd	„}|�s<‰j                  «       }	‰}
	  ‰«       \  }}|r2|d
k(  r-|dk(  r |«       |_        n|dk(  rt	         |«       «      |_        ŒT|dk(  r3|}|j                  t        d|j                  «       |	|
«      «       |dk(  }n«|dk(  r;|dk(  r6|dk(  r1|dk(  }|j                  t        d|j                  «       |	|
«      «       nk|dk(  r1|dk7  r,|j                  t        d|j                  «       |	|
«      «       n5|dk(  r0|dk(  r+|j                  t        d|j                  «       |	|
«      «       |}|}|s�Œ<‰j                  «        |st        d«      ‚|j                  dk\  rd|_        ||_        |S # t        $ r Y ŒGw xY w)zÊLoad DXF file structure for file `filename`, the file has to be seekable.

    Args:
        filename: file system file name

    Raises:
        DXFStructureError: Invalid or incomplete DXF file.

    Úrb)Úmoder   Féÿÿÿÿr   Nc                 óô   •— 	 t        ‰j                  «       «      } | dk  s| dkD  rt        d| › d‰› �«      ‚‰j                  «       j	                  d«      }‰dz  Š| |fS # t        $ r t        d‰› �«      ‚w xY w)NzInvalid group code in line r   i/  zInvalid group code z	 in line s   
é   )r   Úreadliner+   r   Úrstrip)r   r   Úfiler   s     €€r   Úload_tagzload.<locals>.load_tagb   s�   ø€ ð	JÜ�t—}‘}“Ó'ˆDð �!Š8�t˜d’{Ü#Ð&9¸$¸¸yÈÈÐ$OÓPÐPØ—‘“×&Ñ& wÓ/ˆØ�‰	ˆØ�Uˆ{Ðøô ò 	JÜ#Ð&AÀ$ÀÐ$HÓIÐIð	Jús   ƒA ÁA7c                 ó8   •—  ‰«       \  } }|j                  «       S )N)Údecode)Ú_r   r>   s     €r   Úload_header_varzload.<locals>.load_header_varo   s   ø€ Ù“:‰ˆˆ5Ø�|‰|‹~Ðr   é	   s   $ACADVERs   $DWGCODEPAGEr   s   EOFr:   s   SECTIONs   HEADERé   s   DIMSTYLEéi   zUnexpected end of file.ÚAC1021zutf-8)r2   ztuple[int, bytes])r2   r   )r   ÚopenÚtellr   r	   r    ÚIOErrorÚappendr   r@   Úcloser   r!   )r   Úfile_structureÚeofÚheaderr!   Ú	prev_codeÚ
prev_valueÚ	structurerB   r   Útag_liner   r   r=   r   r>   s                @@@r   ÚloadrS   N   sÍ  ú€ ô # 8Ó,€NÜ˜(¨Ô.€DØ€DØ€CØ€FØ €EØ€IØ€JØ€Iöõò Ø—9‘9“;ˆØˆð		Ù"›*‰KˆD�%Ù˜$ !š)Ø˜KÒ'Ù-<Ó->�NÕ*Ø˜oÒ-Ü.8¹Ó9JÓ.K�NÔ+Øð �1Š9àˆIØ�L‰Lœ A u§|¡|£~°xÀÓJÔKØ˜6‘/‰Cà�QŠY˜9¨š>¨j¸JÒ.Fà˜iÑ'ˆFØ�L‰Lœ A u§|¡|£~°xÀÓJÕKà�QŠY˜9¨Ò3à�L‰Lœ A u§|¡|£~°xÀÓJÕKà�SŠ[˜Y¨+Ò5à�L‰Lœ A u§|¡|£~°xÀÓJÔKàˆ	Øˆ
óE ðH 	‡J�J„LÙÜÐ"9Ó;Ð;à×Ñ Ò)Ø")ˆÔØ €NÔØÐøôA ò 	Ùð	ús   Á=F2 Æ2	F>Æ=F>N)r   r   r2   r   )Ú
__future__r   Útypingr   r   r   Úconstr   Úezdxf.tools.codepager	   r   r   rS   r   r   r   Ú<module>rX      s3   ðõ #ß 1Ñ 1å $Ý +ô�ô ÷:ñ :ôzPr   