Ë
    £èh\%  ã                  óÐ   — d dl mZ d dl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 g d¢Zdd	„Zdd
„Zdd„Zdd„Zdd„Z G d„ d«      Zg d¢Zg d¢ZdgZdgZ G d„ d«      Zy)é    )ÚannotationsN)Úconst)Údxftag)ÚXDataÚ	DXFEntityÚis_graphic_entity)ÚDrawing)ÚTable)Úmake_acad_compatibleÚtranslate_namesÚcleanÚR12NameTranslatorc                ó®   — | j                   t        j                  k7  r"t        j                  d| j                  › �«      ‚t        | «       t        | «       y)zLApply all DXF R12 requirements, so Autodesk products will load the document.ú(expected DXF document version R12, got: N)Ú
dxfversionr   ÚDXF12ÚDXFVersionErrorÚacad_releaser   r   ©Údocs    ú/lib/python3.12/site-packages/ezdxf/r12strict.pyr   r      sG   € à
‡~�~œŸ™Ò$Ü×#Ñ#Ø6°s×7GÑ7GÐ6HÐIó
ð 	
ô 
ˆ#„JÜ�CÕó    c                ó´   — | j                   t        j                  k7  r"t        j                  d| j                  › �«      ‚t        | «      j                  «        y)a±  Translate table and block names into strict DXF R12 names.

    ACAD Releases upto 14 limit names to 31 characters in length and all names are
    uppercase.  Names can include the letters A to Z, the numerals 0 to 9, and the
    special characters, dollar sign ($), underscore (_), hyphen (-) and the
    asterix (\*) as first character for special names like anonymous blocks.

    Most applications do not care about that and work fine with longer names and
    any characters used in names for some exceptions, but of course Autodesk
    applications are very picky about that.

    .. note::

        This is a destructive process and modifies the internals of the DXF document.

    r   N)r   r   r   r   r   Ú_R12StrictRenameÚexecuter   s    r   r   r      sK   € ð" ‡~�~œŸ™Ò$Ü×#Ñ#Ø6°s×7GÑ7GÐ6HÐIó
ð 	
ô �SÓ×!Ñ!Õ#r   c                óè  — | j                   t        j                  k7  r"t        j                  d| j                  › �«      ‚t        | j                  «       t        | j                  «       t        | j                  «       t        | j                  «       t        | j                  «       t        | j                  «       t        | j                  «       t        | j                  «       t        | «       y)zMRemoves all features that are not supported for DXF R12 by Autodesk products.r   N)r   r   r   r   r   Ú_remove_table_xdataÚappidsÚ	linetypesÚlayersÚstylesÚ	dimstylesÚucsÚviewsÚ	viewportsÚ_remove_legacy_blocksr   s    r   r   r   1   s    € à
‡~�~œŸ™Ò$Ü×#Ñ#Ø6°s×7GÑ7GÐ6HÐIó
ð 	
ô ˜Ÿ
™
Ô#Ü˜Ÿ™Ô&Ü˜Ÿ
™
Ô#Ü˜Ÿ
™
Ô#Ü˜Ÿ™Ô&Ü˜Ÿ™Ô Ü˜Ÿ	™	Ô"Ü˜Ÿ™Ô&Ü˜#Õr   c                ó2   — t        | «      D ]	  }d|_        Œ y)zCAutodesk products do not accept XDATA in table entries for DXF R12.N)ÚlistÚxdata)ÚtableÚentrys     r   r   r   B   s   € ä�e–ˆØˆ�ñ r   c                ó€   — dD ]   }	 | j                   j                  |d¬«       Œ" y# t        j                  $ r Y Œ9w xY w)a  Due to bad conversion some DXF files contain after loading the blocks
    "$MODEL_SPACE" and "$PAPER_SPACE". This function removes these empty blocks,
    because they will clash with the translated layout names of "*Model_Space" and
    "*Paper_Space".
    )z$MODEL_SPACEz$PAPER_SPACEF)ÚsafeN)ÚblocksÚdelete_blockr   ÚDXFKeyError)r   Únames     r   r&   r&   H   sD   € ó 1ˆð	Ø�J‰J×#Ñ# D¨uÐ#Õ5ñ 1øô × Ñ ò 	Ùð	ús   ‡'§=¼=c                  ó†   — e Zd ZdZ eej                  ej                  z   dz   «      Zd	d„Z	d	d„Z
d
d„Zd
d„Zedd„«       Zy)r   a€  Translate table and block names into strict DXF R12 names.

    ACAD Releases upto 14 limit names to 31 characters in length and all names are
    uppercase.  Names can include the letters A to Z, the numerals 0 to 9, and the
    special characters, dollar sign ($), underscore (_), hyphen (-) and the
    asterix (\*) as first character for special names like anonymous blocks.

    z$_-c                ó0   — i | _         t        «       | _        y ©N)Útranslated_namesÚsetÚused_r12_names©Úselfs    r   Ú__init__zR12NameTranslator.__init__a   s   € Ø02ˆÔÜ(+«ˆÕr   c                ól   — | j                   j                  «        | j                  j                  «        y r4   )r5   Úclearr7   r8   s    r   ÚresetzR12NameTranslator.resete   s&   € Ø×Ñ×#Ñ#Ô%Ø×Ñ×!Ñ!Õ#r   c                óØ   — |j                  «       }| j                  j                  |«      }|€<| j                  || j                  «      }| j                  |«      }|| j                  |<   |S r4   )Úupperr5   ÚgetÚ_name_sanitizerÚVALID_R12_NAME_CHARSÚ_get_unique_r12_name)r9   r1   Úr12_names      r   Ú	translatezR12NameTranslator.translatei   sf   € Ø�z‰z‹|ˆØ×(Ñ(×,Ñ,¨TÓ2ˆØÐØ×+Ñ+¨D°$×2KÑ2KÓLˆHØ×0Ñ0°Ó:ˆHØ*2ˆD×!Ñ! $Ñ'Øˆr   c                óÆ   — |}d}|| j                   v r3t        |«      }|d dt        |«      z
   |z   }|dz  }|| j                   v rŒ3| j                   j                  |«       |S )Nr   é   é   )r7   ÚstrÚlenÚadd)r9   r1   Úname0ÚcounterÚexts        r   rC   z&R12NameTranslator._get_unique_r12_namer   sq   € ØˆØˆØ�d×)Ñ)Ñ)Ü�g“,ˆCØÐ*˜B¤ S£™MÐ+¨cÑ1ˆDØ�q‰LˆGð �d×)Ñ)Ò)ð 	×Ñ×Ñ Ô%Øˆr   c                óh   ‡— | sydj                  ˆfd„| d d D «       «      }| d   dk(  rd|dd z   S |S )NÚ c              3  ó.   •K  — | ]  }|‰v r|nd –— Œ y­w)Ú_N© )Ú.0ÚcharÚvalid_charss     €r   Ú	<genexpr>z4R12NameTranslator._name_sanitizer.<locals>.<genexpr>�   s!   øè ø€ ð ÙCL¸4˜ Ñ,‘°#Ó5Á9ùs   ƒrG   r   Ú*rH   )Újoin)r1   rV   Únew_names    ` r   rA   z!R12NameTranslator._name_sanitizer|   sO   ø€ ñ ØØ—7‘7ó ØCGÈÈÁ9óó ˆð �‰7�cŠ>Ø˜ ! B˜Ñ'Ð'àˆOr   N©ÚreturnÚNone)r1   rI   r\   rI   )r1   rI   rV   zset[str]r\   rI   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   ÚstringÚascii_uppercaseÚdigitsrB   r:   r=   rE   rC   ÚstaticmethodrA   rS   r   r   r   r   U   sP   „ ññ ˜v×5Ñ5¸¿¹ÑEÈÑMÓNÐó.ó$óóð òó ñr   r   )ÚlayerÚlinetypeÚstyleÚtagr1   Údimstyle)ÚdimblkÚdimblk1Údimblk2rg   rf   c                  ót   — e Zd Zdd„Zdd„Zdd„Zdd„Zd„ Zdd„Zdd„Z	d„ Z
dd	„Zdd
„Z	 	 	 	 	 	 dd„Zdd„Zy)r   c                óx   — |j                   t        j                  k(  sJ d«       ‚|| _        t	        «       | _        y )Nzexpected DXF version R12)r   r   r   r   r   Ú
translator)r9   r   s     r   r:   z_R12StrictRename.__init__’   s/   € Ø�~‰~¤§¡Ò,ÐHÐ.HÓHÐ,ØˆŒÜ+Ó-ˆ�r   c                ód   — | j                  «        | j                  «        | j                  «        y r4   )Úprocess_tablesÚprocess_header_varsÚprocess_entitiesr8   s    r   r   z_R12StrictRename.execute—   s&   € Ø×ÑÔØ× Ñ Ô"Ø×ÑÕr   c                óŠ  — | j                   j                  }| j                  |j                  «       | j                  |j                  «       | j                  |j
                  «       | j                  |j
                  t        «       | j                  |j                  «       | j                  |j                  «       | j                  |j                  t        «       | j                  |j                  «       | j                  |j                  «       | j                  «        | j                  «        | j                  «        y r4   )r   ÚtablesÚrename_table_entriesr   r   r    Úprocess_table_entriesÚLAYER_ATTRIBSr!   r"   ÚDIMSTYLE_ATTRIBSr#   r$   Úrename_vportsÚrename_block_layoutsÚprocess_blocks)r9   rv   s     r   rr   z_R12StrictRename.process_tablesœ   sà   € Ø—‘—‘ˆØ×!Ñ! &§-¡-Ô0Ø×!Ñ! &×"2Ñ"2Ô3Ø×!Ñ! &§-¡-Ô0Ø×"Ñ" 6§=¡=´-Ô@Ø×!Ñ! &§-¡-Ô0Ø×!Ñ! &×"2Ñ"2Ô3Ø×"Ñ" 6×#3Ñ#3Ô5EÔFØ×!Ñ! &§*¡*Ô-Ø×!Ñ! &§,¡,Ô/Ø×ÑÔØ×!Ñ!Ô#Ø×ÑÕr   c                ó  — | j                   j                  }t        |«      D ]i  }|j                  j                  } ||«      |j                  _        |j                  ||«       |j                  sŒO| j                  |j                  «       Œk y r4   )rp   rE   r(   Údxfr1   Úreplacer)   Útranslate_xdata)r9   r*   rE   r+   r1   s        r   rw   z%_R12StrictRename.rename_table_entries«   sd   € Ø—O‘O×-Ñ-ˆ	Ü˜%–[ˆEØ—9‘9—>‘>ˆDÙ& t›_ˆE�I‰IŒNØ�M‰M˜$ Ô&ð �{‹{Ø×$Ñ$ U§[¡[Õ1ñ !r   c                ól  — | j                   j                  }t        | j                  j                  j
                  j                  «       «      D ]d  }|sŒ|d   j                  j                  } ||«      }|D ]  }||j                  _        Œ | j                  j                  j                  ||«       Œf y )Nr   )
rp   rE   r(   r   r%   ÚentriesÚvaluesr   r1   r€   )r9   rE   ÚconfigÚold_namerZ   r+   s         r   r{   z_R12StrictRename.rename_vports¶   sŒ   € Ø—O‘O×-Ñ-ˆ	Ü˜4Ÿ8™8×-Ñ-×5Ñ5×<Ñ<Ó>Ö?ˆFÙØØ˜a‘y—}‘}×)Ñ)ˆHÙ  Ó*ˆHÛ�Ø!)�—	‘	•ð  à�H‰H×Ñ×&Ñ& x°Õ8ñ @r   c                ó6   — |D ]  }| j                  ||«       Œ y r4   )Útranslate_entity_attributes)r9   r*   Úattribute_namesr+   s       r   rx   z&_R12StrictRename.process_table_entriesÁ   s   € ÛˆEØ×,Ñ,¨U°OÕDñ r   c                ó¶   — | j                   j                  }| j                  j                  }|j	                  «       D ]  }|j                  | ||«      «       Œ y r4   )rp   rE   r   r.   Úblock_namesÚrename_block)r9   rE   r.   r1   s       r   r|   z%_R12StrictRename.rename_block_layoutsÅ   sE   € Ø—O‘O×-Ñ-ˆ	Ø—‘—‘ˆØ×&Ñ&Ö(ˆDØ×Ñ ¡i°£oÕ6ñ )r   c                óÎ   — | j                   j                  D ]L  }|j                  }| j                  |t        «       |j
                  sŒ2| j                  |j
                  «       ŒN y r4   )r   Úblock_recordsÚblockrˆ   ÚBLOCK_ATTRIBSr)   r�   )r9   Úblock_recordr�   s      r   r}   z_R12StrictRename.process_blocksË   sJ   € Ø ŸH™H×2Ô2ˆLØ ×&Ñ&ˆEØ×,Ñ,¨U´MÔBØ�{‹{Ø×$Ñ$ U§[¡[Õ1ñ	 3r   c                óÐ   — | j                   j                  }| j                  j                  }dD ]5  }| j                   j                  j	                  |«      }|sŒ+ ||«      ||<   Œ7 y )N)	z$CELTYPEz$CLAYERz$DIMBLKz$DIMBLK1z$DIMBLK2z	$DIMSTYLEz$UCSNAMEz	$PUCSNAMEz
$TEXTSTYLE)r   Úheaderrp   rE   r@   )r9   r“   rE   ÚkeyÚvalues        r   rs   z$_R12StrictRename.process_header_varsÒ   sU   € Ø—‘—‘ˆØ—O‘O×-Ñ-ˆ	ó

ˆCð —H‘H—O‘O×'Ñ'¨Ó,ˆEÚÙ'¨Ó.��s’ñ

r   c                ó$  — | j                   j                  j                  «       D ]i  }t        |«      sŒ|j                  t
        j                  kD  rŒ-|j                  r| j                  |j                  «       | j                  |t        «       Œk y r4   )r   Úentitydbr„   r   ÚMIN_DXF_VERSION_FOR_EXPORTr   r   r)   r�   rˆ   ÚCOMMON_ATTRIBS)r9   Úentitys     r   rt   z!_R12StrictRename.process_entitieså   sh   € Ø—h‘h×'Ñ'×.Ñ.Ö0ˆFÜ$ VÔ,ØØ×0Ñ0´5·;±;Ò>ØØ�|Š|Ø×$Ñ$ V§\¡\Ô2Ø×,Ñ,¨V´^ÕDñ 1r   c                óö   — | j                   j                  }|D ]^  }|j                  j                  |«      sŒ|j                  j	                  |«      }|sŒ=|j                  j                  | ||«      «       Œ` y r4   )rp   rE   r   Úhasattrr@   r6   )r9   rš   r‰   rE   Úattrib_namer1   s         r   rˆ   z,_R12StrictRename.translate_entity_attributesï   s]   € ð —O‘O×-Ñ-ˆ	Û*ˆKØ—:‘:×%Ñ% kÔ2ØØ—:‘:—>‘> +Ó.ˆDÚØ—
‘
—‘˜{©I°d«OÕ<ñ +r   c                óú   — | j                   j                  }|j                  j                  «       D ]8  }t	        |«      D ](  \  }\  }}|dk(  s|dk(  sŒt        | ||«      «      ||<   Œ* Œ: |j                  «        y )Nié  ië  )rp   rE   Údatar„   Ú	enumerater   Úupdate_keys)r9   r)   rE   ÚtagsÚindexÚcoder•   s          r   r�   z _R12StrictRename.translate_xdataú   sq   € Ø—O‘O×-Ñ-ˆ	Ø—J‘J×%Ñ%Ö'ˆDÜ(1°$®Ñ$�‘}˜˜eð ˜4’< 4¨4£<Ü"(¨©y¸Ó/?Ó"@�D˜’Kñ	 )8ð (ð 	×ÑÕr   N©r   r	   r\   r]   r[   ©r*   r
   r\   r]   )r*   r
   r‰   ú	list[str]r\   r]   )rš   r   r‰   r§   r\   r]   )r)   r   r\   r]   )r^   r_   r`   r:   r   rr   rw   r{   rx   r|   r}   rs   rt   rˆ   r�   rS   r   r   r   r   ‘   sX   „ ó.ó
 ó
ó	2ò	9óEó7ò2ó/ó&Eð	=Øð	=Ø2;ð	=à	ó	=ôr   r   r¥   r¦   )Ú
__future__r   rb   Úezdxfr   Úezdxf.lldxf.typesr   Úezdxf.entitiesr   r   r   Úezdxf.documentr	   Úezdxf.sections.tabler
   Ú__all__r   r   r   r   r&   r   r™   rz   ry   r�   r   rS   r   r   Ú<module>r¯      sp   ðõ #ã Ý Ý $ß >Ñ >Ý "Ý &â
S€óó$ó0ó"ó
÷3ñ 3òl K€Ú3Ð Ø�€Ø�	€÷qò qr   