
    OgZ$                        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    T/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/r12strict.pyr   r      sG    
~~$##6s7G7G6H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    " ~~$##6s7G7G6H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    
~~$##6s7G7G6H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   sI     1 	JJ##Du#5    		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    zz|((,,T2++D$2K2KLH00:H*2D!!$'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1DqLG 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"      ;?,#5s   rG   r   *rH   )join)r1   rV   new_names    ` r   rA   z!R12NameTranslator._name_sanitizer|   sO     77 CG9  7c>!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#35E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   si    OO--	%[ 	2E99>>D&t_EIINMM$& {{$$U[[1	2r   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    OO--	488--55<<>? 	9Fay}}))H *H *!)		*HH&&x8	9r   c                6    |D ]  }| j                  ||        y r4   )translate_entity_attributes)r9   r*   attribute_namesr+   s       r   rx   z&_R12StrictRename.process_table_entries   s#     	EE,,UOD	E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   sJ    OO--	&&( 	7Dio6	7r   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   sO     HH22 	2L &&E,,UMB{{$$U[[1		2r   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   sZ    OO--	

 	/C HHOO'',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   so    hh''..0 	EF$V,005;;>||$$V\\2,,V^D	Er   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   sb     OO--	* 	=K::%%k2::>>+.D

{IdO<	=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   s    OO--	JJ%%' 	AD(1$ A$}e 4<44<"(y/?"@DK	A	A 	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   