
    Og.-                    $   d dl mZ d dlmZmZmZmZmZmZm	Z	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 d d	lmZmZ e	rd d
lmZ  ej:                  d      ZdZ G d d      Z ddZ! G d d      Z"	 	 	 	 	 	 ddZ# G d d      Z$y)    )annotations)AnyIterableIteratorKeysViewOptionalSequenceTYPE_CHECKINGUnionN)OrderedDict)const)
group_tagsTagsDXFTag)strtag)header_validator)HEADER_VAR_MAPversion_specific_group_code)AbstractTagWriterezdxfzc  0
SECTION
  2
HEADER
  9
$ACADVER
  1
AC1009
  9
$DWGCODEPAGE
  3
ANSI_1252
  9
$HANDSEED
  5
FF
c                  d    e Zd ZdZddZddZddZddZddZdddZ	dd	Z
ddd
ZddZddZy)
CustomVarsa*  The :class:`CustomVars` class stores custom properties in the DXF header as
    $CUSTOMPROPERTYTAG and $CUSTOMPROPERTY values. Custom properties require DXF R2004
    or later, `ezdxf` can create custom properties for older DXF versions as well, but
    AutoCAD will not show that properties.

    c                "    t               | _        y N)list
propertiesselfs    Z/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/sections/header.py__init__zCustomVars.__init__I   s    15    c                ,    t        | j                        S )zCount of custom properties.)lenr   r   s    r   __len__zCustomVars.__len__L   s    4??##r!   c                ,    t        | j                        S )z>Iterate over all custom properties as ``(tag, value)`` tuples.)iterr   r   s    r   __iter__zCustomVars.__iter__P   s    DOO$$r!   c                8    | j                   j                          y)zRemove all custom properties.N)r   clearr   s    r   r)   zCustomVars.clearT   s    r!   c                P    | j                   j                  |t        |      f       y)z.Add custom property as ``(tag, value)`` tuple.N)r   appendstr)r   tagvalues      r   r+   zCustomVars.appendX   s     	SZ01r!   Nc                @    | j                   D ]  \  }}||k(  s|c S  |S )z5Returns the value of the first custom property `tag`.)r   )r   r-   defaultkeyr.   s        r   getzCustomVars.get]   s,    // 	JCcz	 Nr!   c                (    | j                  |      duS )z0Returns ``True`` if custom property `tag` exist.N)r2   r   r-   s     r   has_tagzCustomVars.has_tage   s    xx}D((r!   c                    d}| j                   D ],  }|d   |k(  s| j                   j                  |       d}|r, y |st        j                  d| d      y)zRemoves the first occurrence of custom property `tag`, removes all
        occurrences if `all` is ``True``.

        Raises `:class:`DXFValueError` if `tag`  does not exist.

        Fr   TNTag '' does not exist)r   remover   DXFValueError)r   r-   all	found_tagitems        r   r9   zCustomVars.removei   si     	OO 	DAw#~&&t, 		 %%cU2B&CDD r!   c                    | j                   }t        t        |            D ]  }||   d   }||k(  s||f||<    y t        j                  d| d      )zReplaces the value of the first custom property `tag` by a new
        `value`.

        Raises :class:`DXFValueError` if `tag`  does not exist.

        r   Nr7   r8   )r   ranger#   r   r:   )r   r-   r.   r   indexnames         r   replacezCustomVars.replacez   si     __
3z?+ 	Ee$Q'Ds{%)5M
5!		 !!E#.>"?@@r!   c                `    | j                   D ]  \  }}d| d| d}|j                  |       ! y)z4Export custom properties as DXF tags. (internal API)z  9
$CUSTOMPROPERTYTAG
  1
z
  9
$CUSTOMPROPERTY
  1

N)r   	write_str)r   	tagwriterr-   r.   ss        r   writezCustomVars.write   s?    // 	#JC05RSXRYY[\A"	#r!   returnNonerJ   int)rJ   zIterator[tuple[str, str]])r-   r,   r.   r,   rJ   rK   r   )r-   r,   r0   zOptional[str])r-   r,   rJ   bool)F)r-   r,   r;   rN   rJ   rK   rF   r   rJ   rK   )__name__
__module____qualname____doc__r    r$   r'   r)   r+   r2   r5   r9   rB   rH    r!   r   r   r   A   s;    8$% 2
)E"A #r!   r   c                     t               } t        j                         D ]8  }t        t	        |j
                  |j                              | |j                  <   : | S r   )r   r   values	HeaderVarr   coder0   rA   )varsvardefs     r   default_varsr[      sJ    =D '') K%fV[[&..&IJV[[KKr!   c                      e Zd Z ej                  e      ZdZddZe	ddd       Z
e	ej                  fdd       ZddZe	dd       ZddZdd	Zdd
ZddZddZdddZddZddZd dZd Zy)!HeaderSectionHEADERc                @    t               | _        t               | _        y r   )r   hdrvarsr   custom_varsr   s    r   r    zHeaderSection.__init__   s    -8]%<r!   Nc                    | | j                  t        j                        S  |        }|j                  t	        |             |S )zConstructor to generate header variables loaded from DXF files
        (untrusted environment).

        Args:
            tags: DXF tags as Tags() or ExtendedTags()

        (internal API)
        )
dxfversion)newr   DXF12	load_tagsr&   )clstagssections      r   loadzHeaderSection.load   s<     <77ekk722%$t*%r!   c                B    t               }t               |_        ||d<   |S )N$ACADVER)r]   r[   r`   )rg   rc   ri   s      r   rd   zHeaderSection.new   s!    /&.(
r!   c                j   t        |      xs t        | j                        }t        |      }t        |      }|dk7  s|dk7  rt        j                  d      t        t        |      d      }g }|D ]N  }|d   j                  }|d   }	|dv r|j                  |	j                         7t        |	      | j                  |<   P |j                          t        |      rG	 | j                  j                  |j                         |j                         	       t        |      rFy
y
# t        $ r Y y
w xY w)zConstructor to generate header variables loaded from DXF files
        (untrusted environment).

        Args:
            tags: DXF tags as Tags() or ExtendedTags()

        )r   SECTION)   r^   z+Critical structure error in HEADER section.	   )	splitcoder      )z$CUSTOMPROPERTYTAGz$CUSTOMPROPERTY)r-   r.   N)r&   MIN_HEADER_TAGSnextr   DXFStructureErrorr   r   r.   r+   rW   r`   reverser#   ra   pop
IndexError)
r   rh   _tagssection_tagname_taggroupscustom_property_stackgrouprA   r.   s
             r   rf   zHeaderSection.load_tags   s'    T
8d4#7#785k;.(H,E))*WXX,U3qA " 	6E8>>D!HE@@%,,U[[9%.u%5T"	6 	%%''(  ''-113/335 (  '(  s   9D& &	D21D2c                J    | j                  t        j                  |            S )z&Load constructor from text for testing)rj   r   	from_text)rg   texts     r   r   zHeaderSection.from_text   s     xxt,--r!   c                z    |t         v rt         |   j                  } ||      S t        j                  d| d      )NzInvalid header variable .)r   factoryr   DXFKeyError)r   r1   r.   r   s       r   _headervar_factoryz HeaderSection._headervar_factory   s?    . $S)11G5>!##&>se1$EFFr!   c                ,    t        | j                        S )z"Returns count of header variables.)r#   r`   r   s    r   r$   zHeaderSection.__len__   s    4<<  r!   c                    || j                   v S )z0Returns ``True`` if header variable `key` exist.)r`   r   r1   s     r   __contains__zHeaderSection.__contains__   s    dll""r!   c                6    | j                   j                         S )z1Returns an iterable of all header variable names.)r`   keysr   s    r   varnameszHeaderSection.varnames   s    ||  ""r!   c                H   dfd}j                   j                  }j                  d       | d   }| d<   t        | j                        D ]7  \  }}|s|dk(  r |||       |dk(  s| j
                  j                         9 || d<   j                  d       y)	z2Exports header section as DXF tags. (internal API)c                   |j                   t        j                  d|  d       y j                  d|        t	        |       }||j
                  k7  rt        ||j                   f      }j                  t        |             y )Nzdid not write header var z, value is None.rp   )	r.   loggerinfo
write_tag2r   rX   rW   rE   r,   )rA   r.   
group_coderc   rF   s      r   _writez(HeaderSection.export_dxf.<locals>._write   st    {{"7v=MNO  D)4T:FJUZZ'!:u{{";<E
+r!   z  0
SECTION
  2
HEADER
rl   z	$HANDSEEDz$LASTSAVEDBYz  0
ENDSEC
N)rA   r,   r.   r   rJ   rK   )rc   write_handlesrE   header_vars_by_priorityr`   ra   rH   )r   rF   r   r   saverA   r.   rc   s    `     @r   
export_dxfzHeaderSection.export_dxf   s    		, $..
!//9:J%Z24<<L 	2KD% T[%84~%  &&y1	2  ZO,r!   c                D    || j                   v r| j                  |      S |S )z\Returns value of header variable `key` if exist, else the `default`
        value.

        )r`   __getitem__)r   r1   r0   s      r   r2   zHeaderSection.get  s&    
 $,,##C((Nr!   c                    	 | j                   |   j                  S # t        $ r t        j                  t        |            w xY w)zfGet header variable `key` by index operator like:
        :code:`drawing.header['$ACADVER']`

        )r`   r.   KeyErrorr   r   r,   r   s     r   r   zHeaderSection.__getitem__  s@    
	.<<$*** 	.##CH--	.s	    (Ac                    	 | j                  ||      }t        |      | j                  |<   y# t        t        f$ r t        j                  t        |            w xY w)ztSet header variable `key` to `value` by index operator like:
        :code:`drawing.header['$ANGDIR'] = 1`

        N)r   rx   
ValueErrorr   r:   r,   rW   r`   )r   r1   r.   rh   s       r   __setitem__zHeaderSection.__setitem__$  sX    
	2**36D &dOS J' 	2%%c%j11	2s	   - .Ac                v    	 | j                   |= y# t        $ r t        j                  t	        |            w xY w)zlDelete header variable `key` by index operator like:
        :code:`del drawing.header['$ANGDIR']`

        N)r`   r   r   r   r,   r   s     r   __delitem__zHeaderSection.__delitem__/  s7    
	.S! 	.##CH--	.s    (8c                    d| d<   d| d<   d| d<   d| d<   d| d	<   d| d
<   d| d<   d| d<   d| d<   d| d<   d| d<   d| d<   d| d<   y)z1Reset the current UCS settings to the :ref:`WCS`. z$UCSBASEz$UCSNAME)r   r   r   z$UCSORG)rr   r   r   z$UCSXDIR)r   rr   r   z$UCSYDIRz$UCSORTHOREFr   z$UCSORTHOVIEWz
$UCSORGTOPz$UCSORGBOTTOMz$UCSORGLEFTz$UCSORGRIGHTz$UCSORGFRONTz$UCSORGBACKNrT   r   s    r   	reset_wcszHeaderSection.reset_wcs9  s    ZZ#Y$Z$Z!^ !_&\ )_'](^(^']r!   rI   r   )rh   zOptional[Iterable[DXFTag]]rJ   r]   )rJ   r]   )rh   zIterable[DXFTag]rJ   rK   )r   r,   rJ   r]   )r1   r,   r.   r   rJ   r   rL   rJ   rN   )rJ   r   rO   )r1   r,   r0   r   rJ   r   )r1   r,   rJ   r   )r1   r,   r.   r   rJ   rK   )r1   r,   rJ   rK   )rP   rQ   rR   r   r   MIN_HEADER_TEXTrs   rA   r    classmethodrj   r   LATEST_DXF_VERSIONrd   rf   r   r$   r   r   r   r2   r   r   r   r   rT   r!   r   r]   r]      s    $dnn_5OD(    !44  !F . .G!##-:.	,.(r!   r]   c              #  j  K   g }| j                         D ]|  \  }}t        j                  |d       }|t        j	                  d| d| d       ;|j
                  |cxk  r|j                  k  s[n ^|j                  |j                  ||ff       ~ |j                          |D ]	  \  }}|  y w)NzHeader variable z ignored, dxfversion=r   )
itemsr   r2   r   r   mindxfmaxdxfr+   prioritysort)header_varsrc   orderrA   r.   rZ   r   r-   s           r   r   r   J  s      E"((* ;e##D$/>KK*4&0Ej\QRST==J7&--7LL&//D%=9:; 
JJL #	s   A-B30AB3c                  R    e Zd ZddZedd       Zed	d       Zed
d       ZddZy)rW   c                    || _         y r   r-   r4   s     r   r    zHeaderVar.__init__[  s	    r!   c                     | j                   d   S )Nr   r   r   s    r   rX   zHeaderVar.code^      xx{r!   c                     | j                   d   S )Nrr   r   r   s    r   r.   zHeaderVar.valueb  r   r!   c                     | j                   dk(  S )N
   )rX   r   s    r   ispointzHeaderVar.ispointf  s    yyBr!   c                    | j                   rJ| j                  \  }}g }|D ]#  }|j                  t        ||f             |dz  }% dj	                  |      S t        | j                        S )Nr   r   )r   r-   r+   r   join)r   rX   r.   rG   coords        r   __str__zHeaderVar.__str__j  sg    <<((KD%A u./
 771:$((##r!   N)r-   zUnion[DXFTag, Sequence]rL   )rJ   r   r   )rJ   r,   )	rP   rQ   rR   r    propertyrX   r.   r   r   rT   r!   r   rW   rW   Z  sH          	$r!   rW   )rJ   r   )r   zdict[str, HeaderVar]rc   r,   rJ   zIterable[tuple])%
__future__r   typingr   r   r   r   r   r	   r
   r   loggingcollectionsr   ezdxf.lldxfr   ezdxf.lldxf.tagsr   r   r   ezdxf.lldxf.typesr   ezdxf.lldxf.validatorr   ezdxf.sections.headervarsr   r   ezdxf.lldxf.tagwriterr   	getLoggerr   r   r   r[   r]   r   rW   rT   r!   r   <module>r      s    #	 	 	  #  5 5 $ 2
 7			7	#DM# M#`o( o(d%36 $ $r!   