
    OgU                    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__     Z/var/www/html/public_html/myphp/venv/lib/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.   sy    
4==/*+dll^,-
4==/*+ZZ 	IEF5::,d5::,bQGH	I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    ZZ
_emu%EzzT!ekkU&:QJE	 em
 -dV2eWH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   s>      ZZ' 	EzzT!ekkU&:	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)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        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 !8td{#&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   DIMSTYLEi   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 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 H 	JJL"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   