Ë
    £èh]  ã                  óð   — d dl mZ d dlZd dlmZmZmZ d dlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ d d	lmZ erd d
lmZ d dlmZ d dlmZ  ej0                  d«      Z	 d	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Zdd„Zy)é    )ÚannotationsN)ÚIterableÚTYPE_CHECKINGÚOptional)ÚOrderedDicté   )ÚDXFStructureError)Ú
group_tagsÚDXFTagÚTags)ÚExtendedTags)Úfactory)ÚDrawing)Ú	DXFEntity)ÚSectionDictÚezdxfc                ó:  ‡
— dˆ
fd„}dˆ
fd„}t        «       }g Š
d}t        | «      D ]Ð  }|d   }|dk(  r6 |«       rt        d«      ‚t        ‰
«      rt        j                  d«       |gŠ
ŒC|dk(  rY |«       rt        d	«      ‚‰
d   }t        |«      d
k  s|d   j                  d
k7  rt        d«      ‚|d   }	‰
||	j                  <   g Š
Œ¡|dk(  r|rt        j                  d«       d}ŒÀ‰
j                  |«       ŒÒ  |«       rt        d«      ‚|s|st        d«      ‚|S )a�  Divide input tag stream from tagger into DXF structure entities.
    Each DXF structure entity starts with a DXF structure (0, ...) tag,
    and ends before the next DXF structure tag.

    Generated structure:

    each entity is a Tags() object

    {
        # 1. section, HEADER section consist only of one entity
        'HEADER': [entity],
        'CLASSES': [entity, entity, ...],  # 2. section
        'TABLES': [entity, entity, ...],   # 3. section
        ...
        'OBJECTS': [entity, entity, ...],
    }

    {
        # HEADER section consist only of one entity
        'HEADER': [(0, 'SECTION'), (2, 'HEADER'), .... ],
        'CLASSES': [
            [(0, 'SECTION'), (2, 'CLASSES')],
            [(0, 'CLASS'), ...],
            [(0, 'CLASS'), ...]
        ],
        'TABLES': [
            [(0, 'SECTION'), (2, 'TABLES')],
            [(0, 'TABLE'), (2, 'VPORT')],
            [(0, 'VPORT'), ...],
            ... ,
            [(0, 'ENDTAB')]
        ],
        ...
        'OBJECTS': [
            [(0, 'SECTION'), (2, 'OBJECTS')],
            ... ,
        ]
    }

    Args:
        tagger: generates DXFTag() entities from input data
        ignore_missing_eof: raises DXFStructureError() if False and EOF tag is
            not present, set to True only in tests

    Returns:
        dict of sections, each section is a list of DXF structure entities
        as Tags() objects

    c                 ó2   •— t        ‰ «      r‰ d   d   dk(  S y)Nr   ©r   ÚSECTIONF©Úlen©Úsections   €ú2lib/python3.12/site-packages/ezdxf/lldxf/loader.pyÚinside_sectionz*load_dxf_structure.<locals>.inside_sectionJ   s    ø€ ÜˆwŒ<Ø˜1‘:˜a‘= NÑ2Ð2Øó    c                 ó2   •— t        ‰ «      r‰ d   d   dk7  S y)Nr   r   Tr   r   s   €r   Úoutside_sectionz+load_dxf_structure.<locals>.outside_sectionO   s    ø€ ÜˆwŒ<Ø˜1‘:˜a‘= NÑ2Ð2Ør   Fr   r   z&DXFStructureError: missing ENDSEC tag.zFDXF Structure Warning: found tags outside a SECTION, ignored by ezdxf.)r   ÚENDSECzADXFStructureError: found ENDSEC tag without previous SECTION tag.é   r   zSDXFStructureError: missing required section NAME tag (2, name) at start of section.)r   ÚEOFz4DXF Structure Warning: found more than one EOF tags.Tz#DXFStructureError: missing EOF tag.)ÚreturnÚbool)	r   r
   r	   r   ÚloggerÚwarningÚcodeÚvalueÚappend)ÚtaggerÚignore_missing_eofr   r   ÚsectionsÚeofÚentityÚtagÚsection_headerÚname_tagr   s             @r   Úload_dxf_structurer2      sG  ø€ õjõ
ô
 (›M€HØ€GØ
€Cô
 ˜VÖ$ˆØ�Q‰iˆØ�.Ò ÙÔÜ'Ð(PÓQÐQÜ�7Œ|Ü—‘ð(ôð �h‰GØ�MÒ!áÔ Ü'ð#óð ð % Q™ZˆNä�>Ó" QÒ&¨.¸Ñ*;×*@Ñ*@ÀAÒ*EÜ'ð5óð ð & aÑ(ˆHØ'.ˆH�X—^‘^Ñ$à‰GØ�JÒáÜ—‘ÐUÔVØ‰Cà�N‰N˜6Õ"ðG %ñH ÔÜÐ HÓIÐIÙÑ)ÜÐ EÓFÐFØ€Or   c              #  ó\   K  — | D ]#  }t        j                  t        |«      |«      –— Œ% y ­w©N)r   Úloadr   )ÚentitiesÚdocr.   s      r   Úload_dxf_entitiesr8   †   s(   è ø€ ó ˆÜ�l‰lœ<¨Ó/°Ó5Ó5ñ ùs   ‚*,c                ó"  — |j                   }dD ]~  }|| v sŒ| |   }t        t        ||«      «      D ]Z  \  }}|j                  j	                  d«      }|r||v rt
        j                  d|› d�«       |||<   t        j                  ||«       Œ\ Œ€ y )N)ÚTABLESÚCLASSESÚENTITIESÚBLOCKSÚOBJECTSÚhandlez Found non-unique entity handle #z, data validation is required.)	ÚentitydbÚ	enumerater8   ÚdxfÚgetr%   r&   r   Úbind)r,   r7   ÚdbÚnamer   Úindexr.   r?   s           r   Úload_and_bind_dxf_contentrH   �   s�   € à	�‰€BÛFˆØ�8ÒØ˜t‘nˆGÜ!*Ô+<¸WÀcÓ+JÖ!K‘��vØŸ™Ÿ™¨Ó1�Ù˜f¨™lÜ—N‘NØ:¸6¸(ÐB`Ðaôð "(�˜‘ä—‘˜V SÕ)ñ "Lñ Gr   )F)r*   zIterable[DXFTag]r+   r$   r#   r   r4   )r6   zIterable[Tags]r7   zOptional[Drawing]r#   zIterable[DXFEntity])r,   Údictr7   r   r#   ÚNone)Ú
__future__r   ÚloggingÚtypingr   r   r   Úcollectionsr   Úconstr	   Útagsr
   r   r   Úextendedtagsr   Úezdxf.entitiesr   Úezdxf.documentr   r   Úezdxf.eztypesr   Ú	getLoggerr%   r2   r8   rH   © r   r   Ú<module>rW      s‘   ðõ #Û ß 4Ñ 4Ý #å $ß *Ñ *Ý &Ý "áÝ&Ý(Ý)à	ˆ×	Ñ	˜7Ó	#€ð :?ðnØðnØ26ðnàónðd 8<ð6Øð6Ø#4ð6àó6ô*r   