
    'jU                    |    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dS )    )annotations)Iterable
NamedTupleBinaryIO   )DXFStructureError)
toencodingc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )
IndexEntryintcodestrvaluelocationlineN)__name__
__module____qualname____annotations__     O/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/lldxf/fileindex.pyr   r   
   s4         IIIJJJMMMIIIIIr   r   c                  8    e Zd ZdZddZddZdddZ	 dddZdS )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

    filenamer   c                >    || _         d| _        d| _        g | _        d S )NAC1009cp1252)r   versionencodingindex)selfr   s     r   __init__zFileStructure.__init__%   s"    %$%')


r   returnNonec           
         t          d| j                    t          d| j                    t          d| j                    | j        D ]*}t          d|j         d|j         d|j         d           +d S )Nz
Filename: zDXF Version: z
encoding: zLine: z - (, ))printr   r   r    r!   r   r   r   )r"   entrys     r   r)   zFileStructure.print.   s    *4=**+++,dl,,---*4=**+++Z 	I 	IEG5:GG5:GGGGGHHHH	I 	Ir   r   r   r   r   startc                    | j         }|}t          |          }||k     r+||         }|j        |k    r|j        |k    r|S |dz  }||k     +t	          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   r+   
self_indexr!   countr*   s           r   getzFileStructure.get5   s    Z
__emmu%EzT!!ekU&:&:QJE	 emm
 EdEEeEEEFFFr   Iterable[IndexEntry]c              #  b   K   | j         |d         D ]}|j        |k    r|j        |k    r|V  dS )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   sO       Z' 	 	EzT!!ekU&:&:	 	r   N)r   r   )r$   r%   )r   )r   r   r   r   r+   r   r$   r   )r   r   r   r   r+   r   r$   r2   )r   r   r   __doc__r#   r)   r1   r4   r   r   r   r   r      s         &* * * *I I I I
G 
G 
G 
G 
G 34
 
 
 
 
 
 
r   r   r   r   r$   c                :   t          |           }t          | d          dd}d}g }d}d}d}dfd
dfd}|s                                }	}
	              \  }}|r?|dk    r9|dk    r |            |_        n"|dk    rt	           |                      |_        hn# t          $ r Y n(w xY w|dk    r@|}|                    t          d|	                                |	|
                     |dk    }n|dk    rJ|dk    rD|dk    r>|dk    }|                    t          d|	                                |	|
                     n|dk    r>|dk    r8|                    t          d|	                                |	|
                     nC|dk    r=|dk    r7|                    t          d|	                                |	|
                     |}|}|
                                 |st          d          |j        dk    rd|_        ||_        |S )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   Nr$   tuple[int, bytes]c                 ,   	 t                                                    } n # t          $ r t          d           w xY w| dk     s| dk    rt          d|  d                                                               d          }dz  | |fS )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}}''DD 	J 	J 	J#$H$$H$HIII	J !88td{{#$O$$O$O$O$OPPP&&w//	U{s	   !% Ar   c                 F                 \  } }|                                 S )N)decode)_r   r@   s     r   load_header_varzload.<locals>.load_header_varo   s     8::5||~~r   	   s   $ACADVERs   $DWGCODEPAGEr   s   EOFr<   s   SECTIONs   HEADER   s   DIMSTYLEi   zUnexpected end of file.AC1021zutf-8)r$   r:   )r$   r   )r   opentellr   r	   r    IOErrorappendr   rB   closer   r!   )r   file_structureeofheaderr!   	prev_code
prev_value	structurerD   r   tag_liner   r   r?   r   r@   s                @@@r   loadrU   N   s    #8,,N(...DDCF EIJI             "99;;		"(**KD% $!))K''-<_->->N**o--.89J9J.K.KN+ 	 	 	E	 199ILLAu||~~xJJKKK6/CCQYY9>>jJ.F.Fi'FLLAu||~~xJJKKKKQYY933LLAu||~~xJJKKKKS[[Y+55LLAu||~~xJJKKK	
E  "H 	JJLLL < :;;;))") Ns   AB( (
B65B6N)r   r   r$   r   )
__future__r   typingr   r   r   constr   ezdxf.tools.codepager	   r   r   rU   r   r   r   <module>rZ      s    # " " " " " 1 1 1 1 1 1 1 1 1 1 $ $ $ $ $ $ + + + + + +       : : : : : : : :zP P P P P Pr   