
    hU                    p    S SK Jr  S SKJrJrJr  SSKJr  S SKJ	r	   " S S\5      r
 " S S	5      rSS
 jrg)    )annotations)Iterable
NamedTupleBinaryIO   )DXFStructureError)
toencodingc                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg	)

IndexEntry
   intcodestrvaluelocationline N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       G/var/www/html/env/lib/python3.13/site-packages/ezdxf/lldxf/fileindex.pyr   r   
   s    
IJM
Ir   r   c                  X    \ rS rSrSrS	S jrS
S jrSSS jjr S       SS jjrSr	g)FileStructure   a  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                :    Xl         SU l        SU l        / U l        g )NAC1009cp1252)filenameversionencodingindex)selfr"   s     r   __init__FileStructure.__init__%   s    %$%')
r   c           
         [        SU R                   35        [        SU R                   35        [        SU R                   35        U R                   H6  n[        SUR
                   SUR                   SUR                   S35        M8     g )Nz
Filename: zDXF Version: z
encoding: zLine: z - (, ))printr"   r#   r$   r%   r   r   r   )r&   entrys     r   r,   FileStructure.print.   sr    
4==/*+dll^,-
4==/*+ZZEF5::,d5::,bQGH  r   c                    U R                   nUn[        U5      nXV:  a2  XE   nUR                  U:X  a  UR                  U:X  a  U$ US-  nXV:  a  M2  [	        SU SU S35      e)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   getFileStructure.get5   so    ZZ
_m%EzzT!ekkU&:QJE	 m
 -dV2eWHEFFr   c              #     #    U R                   US  H+  nUR                  U:X  d  M  UR                  U:X  d  M'  Uv   M-     g7f)zkIterate over all specified entities.

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

N)r%   r   r   )r&   r   r   r2   r-   s        r   fetchallFileStructure.fetchallA   s8      ZZ'EzzT!ekkU&: (s   !AA	A)r$   r"   r%   r#   N)r"   r   )returnNone)r   )r   r   r   r   r2   r   r:   r   )r   r   r   r   r2   r   r:   zIterable[IndexEntry])
r   r   r   r   __doc__r'   r,   r5   r8   r   r   r   r   r   r      sG    &*I
G 34

 #
,/
	
 
r   r   c                  ^^^ [        U 5      n[        U SS9mSmSnSn/ nSnSnSnSUU4S jjmSU4S	 jjnU(       GdN  TR                  5       n	Tn
 T" 5       u  pU(       a6  US
:X  a0  US:X  a  U" 5       Ul        OUS:X  a  [	        U" 5       5      Ul        Ma  US:X  a2  UnUR                  [        SUR                  5       X5      5        US:H  nOUS:X  a<  US:X  a6  US:X  a0  US:H  nUR                  [        SUR                  5       X5      5        OmUS:X  a1  US:w  a+  UR                  [        SUR                  5       X5      5        O6US:X  a0  US:X  a*  UR                  [        SUR                  5       X5      5        UnUnU(       d  GMN  TR                  5         U(       d  [        S5      eUR                  S:  a  SUl        XAl        U$ ! [         a     MN  f = f)zLoad 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   Fr   Nc                    >  [        TR                  5       5      n U S:  d  U S:  a  [        SU  ST 35      eTR                  5       R	                  S5      nTS-  mX4$ ! [         a    [        ST 35      ef = f)NzInvalid group code in line r   i/  zInvalid group code z	 in line s   
   )r   readliner1   r   rstrip)r   r   filer   s     r   load_tagload.<locals>.load_tagb   s    	Jt}}'D !8td{#&9$y$OPP&&w/	{  	J#&A$$HII	Js   A   A9c                 6   > T" 5       u  pUR                  5       $ )N)decode)_r   rF   s     r   load_header_varload.<locals>.load_header_varo   s    :||~r   	   s   $ACADVERs   $DWGCODEPAGEr   s   EOFrB   s   SECTIONs   HEADER   s   DIMSTYLEi   zUnexpected end of file.AC1021zutf-8)r:   ztuple[int, bytes])r:   r   )r   opentellr#   r	   r$   IOErrorappendr   rI   closer   r%   )r"   file_structureeofheaderr%   	prev_code
prev_value	structurerK   r   tag_liner   r   rE   r   rF   s                @@@r   loadr]   N   s    #8,N(.DDCF EIJI  99;		"*KD$!)K'-<->N*o-.89J.KN+ 19ILLAu||~xJK6/CQY9>jJ.Fi'FLLAu||~xJKQY93LLAu||~xJKS[Y+5LLAu||~xJK	
E cH 	JJL"9;;)") A  		s   AG 
GGN)r"   r   r:   r   )
__future__r   typingr   r   r   constr   ezdxf.tools.codepager	   r   r   r]   r   r   r   <module>rb      s3    # 1 1 $ + : :zPr   