
    hZ$                        S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  / SQrSS	 jrSS
 jrSS jrSS jrSS jr " S S5      r/ SQr/ SQrS/rS/r " S S5      rg)    )annotationsN)const)dxftag)XData	DXFEntityis_graphic_entity)Drawing)Table)make_acad_compatibletranslate_namescleanR12NameTranslatorc                    U R                   [        R                  :w  a#  [        R                  " SU R                   35      e[        U 5        [        U 5        g)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    A/var/www/html/env/lib/python3.13/site-packages/ezdxf/r12strict.pyr   r      sG    
~~$##6s7G7G6HI
 	
 
#JC    c                    U R                   [        R                  :w  a#  [        R                  " SU R                   35      e[        U 5      R                  5         g)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                   U R                   [        R                  :w  a#  [        R                  " SU R                   35      e[        U R                  5        [        U R                  5        [        U R                  5        [        U R                  5        [        U R                  5        [        U R                  5        [        U R                  5        [        U R                  5        [        U 5        g)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                6    [        U 5       H
  nSUl        M     g)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                    S H  n U R                   R                  USS9  M      g! [        R                   a     M:  f = f)zDue 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	JJ##Du#5 1    		s   &>>c                      \ rS rSrSr\" \R                  \R                  -   S-   5      r	SS jr
SS jrSS jrSS jr\SS j5       rS	rg
)r   U   al  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    0 U l         [        5       U l        g N)translated_namessetused_r12_namesselfs    r   __init__R12NameTranslator.__init__a   s    02(+r   c                l    U R                   R                  5         U R                  R                  5         g r5   )r6   clearr8   r9   s    r   resetR12NameTranslator.resete   s&    ##%!!#r   c                    UR                  5       nU R                  R                  U5      nUc:  U R                  XR                  5      nU R                  U5      nX R                  U'   U$ r5   )upperr6   get_name_sanitizerVALID_R12_NAME_CHARS_get_unique_r12_name)r:   r1   r12_names      r   	translateR12NameTranslator.translatei   sb    zz|((,,T2++D2K2KLH00:H*2!!$'r   c                    UnSnXR                   ;   a5  [        U5      nUS S[        U5      -
   U-   nUS-  nXR                   ;   a  M5  U R                   R                  U5        U$ )Nr         )r8   strlenadd)r:   r1   name0counterexts        r   rF   &R12NameTranslator._get_unique_r12_namer   sm    )))g,C*BSM+c1DqLG ))) 	%r   c                v   ^ U (       d  gSR                  U4S jU S S  5       5      nU S   S:X  a  SUSS -   $ U$ )N c              3  6   >#    U  H  oT;   a  UOS v   M     g7f)_N ).0charvalid_charss     r   	<genexpr>4R12NameTranslator._name_sanitizer.<locals>.<genexpr>   s      CL4,#59s   rK   r   *rL   )join)r1   r[   new_names    ` r   rD   !R12NameTranslator._name_sanitizer|   sO     77 CG9  7c>!B''Or   )r6   r8   NreturnNone)r1   rM   rc   rM   )r1   rM   r[   zset[str]rc   rM   )__name__
__module____qualname____firstlineno____doc__r7   stringascii_uppercasedigitsrE   r;   r?   rH   rF   staticmethodrD   __static_attributes__rX   r   r   r   r   U   sP     v55EMN.$  r   r   )layerlinetypestyletagr1   dimstyle)dimblkdimblk1dimblk2rp   ro   c                      \ rS rSrSS jrSS jrSS jrSS jrS rSS jr	SS jr
S	 rSS
 jrSS jr      SS jrSS jrSrg)r      c                x    UR                   [        R                  :X  d   S5       eXl        [	        5       U l        g )Nzexpected DXF version R12)r   r   r   r   r   
translator)r:   r   s     r   r;   _R12StrictRename.__init__   s-    ~~,H.HH,+-r   c                d    U R                  5         U R                  5         U R                  5         g r5   )process_tablesprocess_header_varsprocess_entitiesr9   s    r   r   _R12StrictRename.execute   s&      "r   c                   U R                   R                  nU R                  UR                  5        U R                  UR                  5        U R                  UR
                  5        U R                  UR
                  [        5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  [        5        U R                  UR                  5        U R                  UR                  5        U R                  5         U R                  5         U R                  5         g r5   )r   tablesrename_table_entriesr   r   r    process_table_entriesLAYER_ATTRIBSr!   r"   DIMSTYLE_ATTRIBSr#   r$   rename_vportsrename_block_layoutsprocess_blocks)r:   r   s     r   r}   _R12StrictRename.process_tables   s    !!&--0!!&"2"23!!&--0""6==-@!!&--0!!&"2"23""6#3#35EF!!&**-!!&,,/!!#r   c                ,   U R                   R                  n[        U5       Ho  nUR                  R                  nU" U5      UR                  l        UR                  XC5        UR                  (       d  MT  U R                  UR                  5        Mq     g r5   )rz   rH   r(   dxfr1   replacer)   translate_xdata)r:   r*   rH   r+   r1   s        r   r   %_R12StrictRename.rename_table_entries   sd    OO--	%[E99>>D&t_EIINMM$& {{{$$U[[1 !r   c                |   U R                   R                  n[        U R                  R                  R
                  R                  5       5       Hk  nU(       d  M  US   R                  R                  nU" U5      nU H  nXER                  l        M     U R                  R                  R                  X25        Mm     g )Nr   )
rz   rH   r(   r   r%   entriesvaluesr   r1   r   )r:   rH   configold_namer`   r+   s         r   r   _R12StrictRename.rename_vports   s    OO--	488--55<<>?Fay}}))H *H!)		  HH&&x8 @r   c                8    U H  nU R                  X25        M     g r5   )translate_entity_attributes)r:   r*   attribute_namesr+   s       r   r   &_R12StrictRename.process_table_entries   s    E,,UD r   c                    U R                   R                  nU R                  R                  nUR	                  5        H  nUR                  X1" U5      5        M     g r5   )rz   rH   r   r.   block_namesrename_block)r:   rH   r.   r1   s       r   r   %_R12StrictRename.rename_block_layouts   sE    OO--	&&(Dio6 )r   c                    U R                   R                   HS  nUR                  nU R                  U[        5        UR
                  (       d  M8  U R                  UR
                  5        MU     g r5   )r   block_recordsblockr   BLOCK_ATTRIBSr)   r   )r:   block_recordr   s      r   r   _R12StrictRename.process_blocks   sL     HH22L &&E,,UMB{{{$$U[[1	 3r   c                    U R                   R                  nU R                  R                  nS H;  nU R                   R                  R	                  U5      nU(       d  M1  U" U5      X'   M=     g )N)	z$CELTYPEz$CLAYERz$DIMBLKz$DIMBLK1z$DIMBLK2z	$DIMSTYLEz$UCSNAMEz	$PUCSNAMEz
$TEXTSTYLE)r   headerrz   rH   rC   )r:   r   rH   keyvalues        r   r~   $_R12StrictRename.process_header_vars   sU    OO--	

C HHOO'',Eu'.

r   c                B   U R                   R                  R                  5        Hw  n[        U5      (       d  M  UR                  [
        R                  :  a  M5  UR                  (       a  U R                  UR                  5        U R                  U[        5        My     g r5   )r   entitydbr   r   MIN_DXF_VERSION_FOR_EXPORTr   r   r)   r   r   COMMON_ATTRIBS)r:   entitys     r   r   !_R12StrictRename.process_entities   sk    hh''..0F$V,,005;;>||$$V\\2,,V^D 1r   c                   U R                   R                  nU Hj  nUR                  R                  U5      (       d  M%  UR                  R	                  U5      nU(       d  MI  UR                  R                  XC" U5      5        Ml     g r5   )rz   rH   r   hasattrrC   r7   )r:   r   r   rH   attrib_namer1   s         r   r   ,_R12StrictRename.translate_entity_attributes   sb     OO--	*K::%%k22::>>+.Dt

{IdO< +r   c                   U R                   R                  nUR                  R                  5        H;  n[	        U5       H)  u  nu  pVUS:X  d  US:X  d  M  [        XR" U5      5      X4'   M+     M=     UR                  5         g )Ni  i  )rz   rH   datar   	enumerater   update_keys)r:   r)   rH   tagsindexcoder   s          r   r    _R12StrictRename.translate_xdata   sm    OO--	JJ%%'D(1$$} 4<44<"(y/?"@DK	 )8 ( 	r   )r   rz   Nr   r	   rc   rd   rb   r*   r
   rc   rd   )r*   r
   r   	list[str]rc   rd   )r   r   r   r   rc   rd   )r)   r   rc   rd   )re   rf   rg   rh   r;   r   r}   r   r   r   r   r   r~   r   r   r   rn   rX   r   r   r   r      sX    .
 
	2	9E72/&E	=	=2;	=		=r   r   r   r   )
__future__r   rj   ezdxfr   ezdxf.lldxf.typesr   ezdxf.entitiesr   r   r   ezdxf.documentr	   ezdxf.sections.tabler
   __all__r   r   r   r   r&   r   r   r   r   r   r   rX   r   r   <module>r      sp    #   $ > > " &
S$0"
3 3l K3 	q qr   