
    h.-                    2   S SK Jr  S SKJrJrJrJrJrJrJ	r	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 S	KJrJr  \	(       a  S S
KJr  \R:                  " S5      rSr " S S5      r SS jr! " S S5      r"      SS jr# " S S5      r$g)    )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                      \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SSS	 jjr
SS
 jrSSS jjrSS jrSS jrSrg)
CustomVarsA   a  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                "    [        5       U l        g N)list
propertiesselfs    G/var/www/html/env/lib/python3.13/site-packages/ezdxf/sections/header.py__init__CustomVars.__init__I   s    15    c                ,    [        U R                  5      $ )zCount of custom properties.)lenr   r   s    r    __len__CustomVars.__len__L   s    4??##r#   c                ,    [        U R                  5      $ )z>Iterate over all custom properties as ``(tag, value)`` tuples.)iterr   r   s    r    __iter__CustomVars.__iter__P   s    DOO$$r#   c                8    U R                   R                  5         g)zRemove all custom properties.N)r   clearr   s    r    r-   CustomVars.clearT   s    r#   c                P    U R                   R                  U[        U5      45        g)z.Add custom property as ``(tag, value)`` tuple.N)r   appendstr)r   tagvalues      r    r0   CustomVars.appendX   s     	SZ01r#   Nc                B    U R                    H  u  p4X1:X  d  M  Us  $    U$ )z5Returns the value of the first custom property `tag`.r   )r   r2   defaultkeyr3   s        r    getCustomVars.get]   s#    //JCz * Nr#   c                (    U R                  U5      SL$ )z0Returns ``True`` if custom property `tag` exist.N)r9   r   r2   s     r    has_tagCustomVars.has_tage   s    xx}D((r#   c                    SnU R                    H4  nUS   U:X  d  M  U R                   R                  U5        SnU(       a  M4    g   U(       d  [        R                  " SU S35      eg)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   r2   all	found_tagitems        r    rB   CustomVars.removei   sf     	OODAw#~&&t, 	s $ %%cU2B&CDD r#   c                    U R                   n[        [        U5      5       H  nX4   S   nXQ:X  d  M  XR4X4'     g   [        R                  " SU S35      e)zReplaces the value of the first custom property `tag` by a new
`value`.

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

r   Nr@   rA   )r   ranger%   r   rC   )r   r2   r3   r   indexnames         r    replaceCustomVars.replacez   s\     __
3z?+E$Q'D{%)M
!	 , !!E#.>"?@@r#   c                b    U R                    H  u  p#SU SU S3nUR                  U5        M!     g)z4Export custom properties as DXF tags. (internal API)z  9
$CUSTOMPROPERTYTAG
  1
z
  9
$CUSTOMPROPERTY
  1

N)r   	write_str)r   	tagwriterr2   r3   ss        r    writeCustomVars.write   s8    //JC05RSXRYY[\A" *r#   r6   returnNonerV   int)rV   zIterator[tuple[str, str]])r2   r1   r3   r1   rV   rW   r   )r2   r1   r7   zOptional[str])r2   r1   rV   bool)F)r2   r1   rD   rZ   rV   rW   rQ   r   rV   rW   )__name__
__module____qualname____firstlineno____doc__r!   r&   r*   r-   r0   r9   r=   rB   rL   rS   __static_attributes__ r#   r    r   r   A   s;    8$% 2
)E"A #r#   r   c                     [        5       n [        R                  " 5        H8  n[        [	        UR
                  UR                  5      5      XR                  '   M:     U $ r   )r   r   values	HeaderVarr   coder7   rK   )varsvardefs     r    default_varsri      sA    =D '')%fV[[&..&IJ[[ *Kr#   c                     \ rS rSr\R
                  " \5      rSrSS jr	\
SSS jj5       r\
\R                  4SS jj5       rSS jr\
SS j5       rSS	 jrSS
 jrSS jrSS jrSS jrSSS jjrS S jrS!S jrS"S jrS rSrg)#HeaderSection   HEADERc                @    [        5       U l        [        5       U l        g r   )r   hdrvarsr   custom_varsr   s    r    r!   HeaderSection.__init__   s    -8]%<r#   Nc                    Uc  U R                  [        R                  S9$ U " 5       nUR                  [	        U5      5        U$ )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    loadHeaderSection.load   s<     <77ekk722%$t*%r#   c                @    [        5       n[        5       Ul        XS'   U$ )N$ACADVER)rk   ri   ro   )rw   rs   ry   s      r    rt   HeaderSection.new   s    /&.(
r#   c                   [        U5      =(       d    [        U R                  5      n[        U5      n[        U5      nUS:w  d  US:w  a  [        R                  " S5      e[        [        U5      SS9n/ nU HR  nUS   R                  nUS   n	US;   a  UR                  U	R                  5        M:  [        U	5      U R                  U'   MT     UR                  5         [        U5      (       aJ   U R                  R                  UR                  5       UR                  5       S	9  [        U5      (       a  MI  g
g
! [         a     g
f = f)zConstructor to generate header variables loaded from DXF files
(untrusted environment).

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

)r   SECTION)   rm   z+Critical structure error in HEADER section.	   )	splitcoder      )z$CUSTOMPROPERTYTAGz$CUSTOMPROPERTY)r2   r3   N)r)   MIN_HEADER_TAGSnextr   DXFStructureErrorr   r   r3   r0   re   ro   reverser%   rp   pop
IndexError)
r   rx   _tagssection_tagname_taggroupscustom_property_stackgrouprK   r3   s
             r    rv   HeaderSection.load_tags   s(    T
8d4#7#785k;.(H,E))*WXX,U3qA "E8>>D!HE@@%,,U[[9%.u%5T"  	%%''((  ''-113/335 (  '((  s   .6D8 8
EEc                L    U R                  [        R                  " U5      5      $ )z&Load constructor from text for testing)rz   r   	from_text)rw   texts     r    r   HeaderSection.from_text   s     xxt,--r#   c                    U[         ;   a  [         U   R                  nU" U5      $ [        R                  " SU S35      e)NzInvalid header variable .)r   factoryr   DXFKeyError)r   r8   r3   r   s       r    _headervar_factory HeaderSection._headervar_factory   s?    . $S)11G5>!##&>se1$EFFr#   c                ,    [        U R                  5      $ )z"Returns count of header variables.)r%   ro   r   s    r    r&   HeaderSection.__len__   s    4<<  r#   c                    XR                   ;   $ )z0Returns ``True`` if header variable `key` exist.)ro   r   r8   s     r    __contains__HeaderSection.__contains__   s    ll""r#   c                6    U R                   R                  5       $ )z1Returns an iterable of all header variable names.)ro   keysr   s    r    varnamesHeaderSection.varnames   s    ||  ""r#   c                \  ^^ SUU4S jjnTR                   mTR                  nTR                  S5        U S   nTU S'   [        U R                  T5       H?  u  pVU(       d  US:X  a  M  U" XV5        US:X  d  M$  U R
                  R                  T5        MA     X@S'   TR                  S5        g)	z2Exports header section as DXF tags. (internal API)c                  > UR                   c  [        R                  SU  S35        g TR                  SU 5        [	        U T5      nX!R
                  :w  a  [        X!R                   45      nTR                  [        U5      5        g )Nzdid not write header var z, value is None.r   )	r3   loggerinfo
write_tag2r   rf   re   rP   r1   )rK   r3   
group_coders   rQ   s      r    _write(HeaderSection.export_dxf.<locals>._write   sp    {{"7v=MNO  D)4T:FJZZ'!:{{";<E
+r#   z  0
SECTION
  2
HEADER
r}   z	$HANDSEEDz$LASTSAVEDBYz  0
ENDSEC
N)rK   r1   r3   r   rV   rW   )rs   write_handlesrP   header_vars_by_priorityro   rp   rS   )r   rQ   r   r   saverK   r3   rs   s    `     @r    
export_dxfHeaderSection.export_dxf   s    		, 		, $..
!//9:J%Z24<<LKD T[%84~%  &&y1 M  ZO,r#   c                F    XR                   ;   a  U R                  U5      $ U$ )zLReturns value of header variable `key` if exist, else the `default`
value.

)ro   __getitem__)r   r8   r7   s      r    r9   HeaderSection.get  s$    
 ,,##C((Nr#   c                     U R                   U   R                  $ ! [         a     [        R                  " [        U5      5      ef = f)zVGet header variable `key` by index operator like:
:code:`drawing.header['$ACADVER']`

)ro   r3   KeyErrorr   r   r1   r   s     r    r   HeaderSection.__getitem__  s@    
	.<<$*** 	.##CH--	.s	    *Ac                     U R                  X5      n[        U5      U R                  U'   g! [        [        4 a     [        R                  " [        U5      5      ef = f)zdSet header variable `key` to `value` by index operator like:
:code:`drawing.header['$ANGDIR'] = 1`

N)r   r   
ValueErrorr   rC   r1   re   ro   )r   r8   r3   rx   s       r    __setitem__HeaderSection.__setitem__$  sV    
	2**36D &dOS J' 	2%%c%j11	2s	   , 0Ac                z     U R                   U	 g! [         a     [        R                  " [	        U5      5      ef = f)z\Delete header variable `key` by index operator like:
:code:`del drawing.header['$ANGDIR']`

N)ro   r   r   r   r1   r   s     r    __delitem__HeaderSection.__delitem__/  s7    
	.S! 	.##CH--	.s    *:c                    SU S'   SU S'   SU S'   SU S'   SU S	'   SU S
'   SU S'   SU S'   SU S'   SU S'   SU S'   SU S'   SU S'   g)z1Reset the current UCS settings to the :ref:`WCS`. z$UCSBASEz$UCSNAME)r   r   r   z$UCSORG)r   r   r   z$UCSXDIR)r   r   r   z$UCSYDIRz$UCSORTHOREFr   z$UCSORTHOVIEWz
$UCSORGTOPz$UCSORGBOTTOMz$UCSORGLEFTz$UCSORGRIGHTz$UCSORGFRONTz$UCSORGBACKNrb   r   s    r    	reset_wcsHeaderSection.reset_wcs9  s    ZZ#Y$Z$Z!^ !_&\ )_'](^(^']r#   )rp   ro   rU   r   )rx   zOptional[Iterable[DXFTag]]rV   rk   )rV   rk   )rx   zIterable[DXFTag]rV   rW   )r   r1   rV   rk   )r8   r1   r3   r   rV   r   rX   rV   rZ   )rV   r   r[   )r8   r1   r7   r   rV   r   )r8   r1   rV   r   )r8   r1   r3   r   rV   rW   )r8   r1   rV   rW   )r\   r]   r^   r_   r   r   MIN_HEADER_TEXTr   rK   r!   classmethodrz   r   LATEST_DXF_VERSIONrt   rv   r   r&   r   r   r   r9   r   r   r   r   ra   rb   r#   r    rk   rk      s    nn_5OD(    !44  !F . .G!##-:.	,.(r#   rk   c              #  z  #    / nU R                  5        H  u  p4[        R                  " US 5      nUc  [        R	                  SU SU S35        M=  UR
                  Us=::  a  UR                  ::  d  M`  O  Md  UR                  UR                  X4445        M     UR                  5         U H	  u  pgUv   M     g 7f)NzHeader variable z ignored, dxfversion=r   )
itemsr   r9   r   r   mindxfmaxdxfr0   prioritysort)header_varsrs   orderrK   r3   rh   r   r2   s           r    r   r   J  s      E"((*##D$/>KK*4&0Ej\QRST==J7&--77LL&//D=9: + 
JJL	 s   A/B;5AB;c                  d    \ rS rSrS	S jr\S
S j5       r\SS j5       r\SS j5       rSS jr	Sr
g)re   iZ  c                    Xl         g r   r2   r<   s     r    r!   HeaderVar.__init__[  s    r#   c                     U R                   S   $ )Nr   r   r   s    r    rf   HeaderVar.code^      xx{r#   c                     U R                   S   $ )Nr   r   r   s    r    r3   HeaderVar.valueb  r   r#   c                     U R                   S:H  $ )N
   )rf   r   s    r    ispointHeaderVar.ispointf  s    yyBr#   c                    U R                   (       aJ  U R                  u  p/ nU H#  nUR                  [        X45      5        US-  nM%     SR	                  U5      $ [        U R                  5      $ )Nr   r   )r   r2   r0   r   join)r   rf   r3   rR   coords        r    __str__HeaderVar.__str__j  s^    <<((KDA./
  771:$((##r#   r   N)r2   zUnion[DXFTag, Sequence]rX   )rV   r   r   )rV   r1   )r\   r]   r^   r_   r!   propertyrf   r3   r   r   ra   rb   r#   r    re   re   Z  sH          	$r#   re   )rV   r   )r   zdict[str, HeaderVar]rs   r1   rV   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   ri   rk   r   re   rb   r#   r    <module>r      s    #	 	 	  #  5 5 $ 2
 7			7	#DM# M#`o( o(d%36 $ $r#   