
    'jd                       d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlZd dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# erd d	l$m%Z% d d
l&m'Z' d dl(m)Z)  ej*        d          Z+ edd          Z, G d dee,                   Z- G d de-e                   Z. G d de-e                   Z/ G d de-e                   Z0 G d de-e                   Z1 G d de-e                   Z2 G d de-e                   Z3 G d de-e!                   Z4 G d  d!e-e"                   Z5 G d" d#e-e                    Z6dS )$    )annotations)	GenericIteratorListOptionalTYPE_CHECKINGTypeVarUnioncastSequence)OrderedDictN)Auditor
AuditError)const	validator)	TableHead)factory	DXFEntityLayerLinetype	TextstyleVPortViewAppIDUCSTableEntryBlockRecordDimStyleis_graphic_entity)Drawing)AbstractTagWriter)EntityDBezdxfTr   )boundc                  @   e Zd ZdZd6dZd7d	Zd8dZd9d:dZed             Z	ed;d            Z
ed<d            Zd=dZeZd>dZd?dZd9d@dZd@dZdAdZd<dZdBd ZdCd"ZdBd#ZdDd%ZedEd'            ZdFd(ZdGd)ZdGd*ZdHd-ZdHd.Zd6d/ZdId0Z dJd3Z!dJd4Z"dJd5Z#dS )KTableUNKNOWNreturnNonec                `    d | _         t                      | _        t                      | _        d S N)docr   entriesr   _headselfs    N/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/sections/table.py__init__zTable.__init__2   s#    &*%0]][[


    r,   r   entitiesIterator[DXFEntity]c                   || _         t          |          }t          |t                    r|| _        nt          j        d          | j        }|D ]{}|                                |k    r)| 	                    t          t          |                     Ct                              d|                                 d| j         d           |dS )z!Loading interface. (internal API)z+Critical structure error in TABLES section.z!Ignored invalid DXF entity type 'z' in z table.N)r,   next
isinstancer   r.   r   DXFStructureError
TABLE_TYPEdxftype_appendr   r#   loggerwarning)r0   r,   r4   
table_headexpected_entry_dxftypetable_entrys         r1   loadz
Table.load7   s    (^^
j),, 	Y#DJJ)*WXXX!%# 	 	K""$$(>>>T![11222248K8K8M8M 4 4?4 4 4   		 	r3   handlestrc                |    || _         |                     | j        |           | j                                         dS )zReset table. (internal API)N)r,   	_set_headr:   r-   clear)r0   r,   rC   s      r1   resetzTable.resetI   s9    t///r3   NnameOptional[str]c                N    t          j        |dd|i| j                  | _        d S )N0rI   )owner
dxfattribsr,   )r   newr,   r.   )r0   rI   rC   s      r1   rF   zTable._set_headO   s-    ]#64.dh
 
 



r3   c                    | j         S )zReturns table head entry.)r.   r/   s    r1   headz
Table.headT   s     zr3   c                    | j         S r+   )r:   r/   s    r1   rI   z
Table.nameY   s
    r3   c                *    t          j        |           S )zUnified table entry key.)r   make_table_key)rI   s    r1   keyz	Table.key]   s     '---r3   boolc                :    |                      |          | j        v S )z/Returns ``True`` if a table entry `name` exist.)rU   r-   r0   rI   s     r1   	has_entryzTable.has_entryb   s    xx~~--r3   intc                *    t          | j                  S )zCount of table entries.)lenr-   r/   s    r1   __len__zTable.__len__h   s    4<   r3   Iterator[T]c              #  X   K   | j                                         D ]}|j        r|V  dS )zIterable of all table entries.N)r-   valuesis_alive)r0   es     r1   __iter__zTable.__iter__l   sA      $$&& 	 	Az 	 	r3   r#   c                    |                      |          rt          j        | j         d| d          |pi }||d<   | j        j        j        |d<   |                     |          S )zCreate a new table entry `name`.

        Args:
            name: name of table entry
            dxfattribs: additional DXF attributes for table entry

        z '' already exists!rI   rM   )rY   r   DXFTableEntryErrorr:   r.   dxfrC   	new_entryr0   rI   rN   s      r1   rO   z	Table.newr   s|     >>$ 	*?==d===    %2
!
6"jn3
7~~j)))r3   c                    | j                             |                     |                    }|r|S t          j        |          )zReturns table entry `name`.

        Args:
            name: name of table entry, case-insensitive

        Raises:
            DXFTableEntryError: table entry does not exist

        )r-   getrU   r   rf   r0   rI   entrys      r1   rk   z	Table.get   sA       $00 	1L*4000r3   Optional[T]c                    | j         j                            |          }|r|                                | j        k    r|S dS )zcReturns table entry by handle or ``None`` if entry does not exist.

        (internal API)
        N)r,   entitydbrk   r;   r:   )r0   rC   rm   s      r1   get_entry_by_handlezTable.get_entry_by_handle   sB    
 !%%f-- 	U]]__77Ltr3   c                |    | j                             |                     |                    }||j        j        S dS )zReturns the handle of table entry by `name`, returns an empty string if no
        entry for the given name exist.

        Args:
            name: name of table entry, case-insensitive

        (internal API)
        N )r-   rk   rU   rg   rC   rl   s      r1   get_handle_of_entryzTable.get_handle_of_entry   s9       $009##rr3   c                    |                      |          }|                     |          }| j                            |           |                     |           dS )zRemoves table entry `name`.

        Args:
            name: name of table entry, case-insensitive

        Raises:
            DXFTableEntryError: table entry does not exist

        N)rU   rk   rp   delete_entitydiscard)r0   rI   rU   rm   s       r1   removezTable.remove   sP     hhtnn##E***Sr3   new_namec                   |                      |          }| j        }|r|                    |          }n|                                }||j        _        t          t          |          }|                     |           |S )a=  Returns a new table entry `new_name` as copy of `name`,
        replaces entry `new_name` if already exist.

        Args:
            name: name of table entry, case-insensitive
            new_name: name of duplicated table entry

        Raises:
            DXFTableEntryError: table entry does not exist

        )	rk   rp   duplicate_entitycopyrg   rI   r   r#   r<   )r0   rI   ry   rm   rp   rh   s         r1   duplicate_entryzTable.duplicate_entry   st     = 	% 11%88II

I%	Q	""Ur3   c                <    | j         |                     |          = dS )zRemove table entry without destroying object.

        Args:
            name: name of table entry, case-insensitive

        (internal API)
        N)r-   rU   rX   s     r1   rw   zTable.discard   s     L$(((r3   rm   c                Z    |                      |           |                     |           dS )z9Replace table entry `name` by new `entry`. (internal API)N)rw   r<   rl   s      r1   replacezTable.replace   s,    TUr3   r!   c                    | j         j        S r+   )r,   rp   r/   s    r1   rp   zTable.entitydb   s    x  r3   c                    | j         
J d            t          t          t          j        | j        || j                             }|                     |           |S )Create and add new table-entry of type 'self.entry_dxftype'.

        Does not check if an entry dxfattribs['name'] already exists!
        Duplicate entries are possible for Viewports.
        Nzvalid DXF document required)r,   r   r#   r   create_db_entryr:   r<   r0   rN   rm   s      r1   rh   zTable.new_entry   sT     x##%B###Q/TXVVWWUr3   c                    |                                 | j        k    sJ || j        |                     |j        j                  <   dS )]Add a table entry, replaces existing entries with same name.
        (internal API).
        N)r;   r:   r-   rU   rg   rI   r0   rm   s     r1   r<   zTable._append   sA     }}$/111116TXXein--...r3   c                   |                                 | j        k    r1t          j        d|                                  d| j                   |j        j        }|                     |          r)t          j        | j        j        j         d| d          | j	        rt          j        || j	                   | j        j        j        |j        _        |                     |           dS )z]Add a table `entry`, created by other object than this table.
        (internal API)
        zInvalid table entry type z for table  z already exists!N)r;   r:   r   DXFTypeErrorrg   rI   rY   rf   r.   r,   r   bindrC   rM   r<   )r0   rm   rI   s      r1   	add_entryzTable.add_entry   s     ==??do--$/EMMOO / /!_/ /   y~>>$ 	*:>&?????   8 	*L)))*./	Ur3   	tagwriterr    c                   |                                   d| j        j        _        t	          |           | j        j        _        | j                            |           |                     |           |                    dd           dS )z)Export DXF representation. (internal API)rL   r   ENDTABN)	update_owner_handlesr.   rg   rM   r\   count
export_dxfexport_table_entries
write_tag2)r0   r   s     r1   r   zTable.export_dxf
  sz     	!!###"
"4yy

i(((!!),,,Q)))))r3   c                h    | j                                         D ]}|                    |           d S r+   )r-   r`   r   )r0   r   rm   s      r1   r   zTable.export_table_entries  s@    \((** 	( 	(EY''''	( 	(r3   c                    | j         j        j        }| j                                        D ]}|j        r||j        _        d S r+   )r.   rg   rC   r-   r`   ra   rM   )r0   owner_handlerm   s      r1   r   zTable.update_owner_handles  sI    z~,\((** 	/ 	/E~ /".		/ 	/r3   c                v    | j         j        j        '|| j         j        _        |                                  dS dS )zlSet new `handle` for table, updates also :attr:`owner` tag of table
        entries. (internal API)
        N)r.   rg   rC   r   )r0   rC   s     r1   
set_handlezTable.set_handle  s=     :> ($*DJN!%%''''' )(r3   auditorr   c                Z    |                      |           |                     |           d S r+   )_fix_table_head_fix_entry_handles)r0   r   s     r1   auditzTable.audit'  s2     	W%%%(((((r3   c                   | j         }| D ]}|                    |j        j                  }||ur\|                                |j        _        | j                             |           |                    t          j        d|            d S )Nz$Fixed invalid table entry handle in codemessage)	rp   rk   rg   rC   next_handleaddfixed_errorr   INVALID_TABLE_HANDLE)r0   r   rp   rm   entitys        r1   r   zTable._fix_entry_handles-  s    = 
	 
	E\\%)"233FU"" $,#7#7#9#9	 !!%(((###8J5JJ $   
	 
	r3   c                @     fd}j         j        t          j        k     j        dj        _        j        j        } j        ||dk    r |             n( j        	                    |          }|ur
 |              
                                 d S )Nc                                                      j        _                                       r+                     t
          j        dj                    d S d S )Nz)Fixed invalid table head handle in table r   )r   rg   rC   r   r   r   r   rI   )r   rp   rQ   logr0   s   r1   fix_headz'Table._fix_table_head.<locals>.fix_head=  sv    &2244DHOLL ###8S	SS $      r3   rL   )r,   
dxfversionr   DXF12rQ   rg   rM   rC   rp   rk   r   )r0   r   r   rC   rm   rp   rQ   r   s   ``   @@@r1   r   zTable._fix_table_head<  s    	 	 	 	 	 	 	 	 	 k$u{2y =>Vs]]HJJJJ M%%f--ED  


!!#####r3   r(   r)   )r,   r   r4   r5   r(   r)   )r,   r   rC   rD   r(   r)   r+   )rI   rD   rC   rJ   r(   r)   )r(   rD   )rI   rD   r(   rD   )rI   rD   r(   rV   r(   rZ   )r(   r^   )rI   rD   r(   r#   )rC   rD   r(   rn   rI   rD   r(   r)   )rI   rD   ry   rD   r(   r#   rI   rD   rm   r#   r(   r)   )r(   r!   )r(   r#   rm   r#   r(   r)   r   r    r(   r)   )rC   rD   )r   r   )$__name__
__module____qualname__r:   r2   rB   rH   rF   propertyrQ   rI   staticmethodrU   rY   __contains__r]   rc   rO   rk   rq   rt   rx   r}   rw   r   rp   rh   r<   r   r   r   r   r   r   r   r    r3   r1   r&   r&   /   s       J! ! ! !
   $   
 
 
 
 

   X    X . . . \.. . . . L! ! ! !   * * * * *"1 1 1 1             .) ) ) )   
 ! ! ! X!
 
 
 
7 7 7 7   &	* 	* 	* 	*( ( ( (/ / / /( ( ( () ) ) )   $ $ $ $ $ $r3   r&   c                  Z     e Zd ZdZd fdZej        ddej        ddddddZddZ	 xZ
S )
LayerTableLAYERr(   r   c                    t          t          t                                          |                    }| j        r|                                 |S r+   )r   r   superrh   r,   set_required_attributes)r0   rN   layer	__class__s      r1   rh   zLayerTable.new_entry^  sE    UEGG--j99::8 	,))+++r3   N
ContinuousT)color
true_colorlinetype
lineweightplottransparencyrN   rI   rD   r   rZ   r   Optional[int]r   r   r   rV   r   Optional[float]c                  t          |pi           }t          j        |          r||d<   nt          j        d|           ||d<   t          j        |          r||d<   nt          j        d|           |t          |          |d<   t          |          |d<   t          d	|                     ||                    }	|||	_	        |	S )
a  Add a new :class:`~ezdxf.entities.Layer`.

        Args:
            name (str): layer name
            color (int): :ref:`ACI` value, default is BYLAYER
            true_color (int): true color value, use :func:`ezdxf.rgb2int` to
                create ``int`` values from RGB values
            linetype (str): line type name, default is "Continuous"
            lineweight (int): line weight, default is BYLAYER
            plot (bool): plot layer as bool, default is ``True``
            transparency: transparency value in the range [0, 1], where 1 is
                100% transparent and 0 is opaque
            dxfattribs (dict): additional DXF attributes

        r   zinvalid color: r   r   zinvalid lineweight: Nr   r   r   )
dictr   is_valid_aci_colorr   DXFValueErroris_valid_lineweightrZ   r   rO   r   )
r0   rI   r   r   r   r   r   r   rN   r   s
             r1   r   zLayerTable.addd  s    6 **++
'.. 	A"'Jw%&?&?&?@@@!)
:(44 	K'1J|$$%&IZ&I&IJJJ!'*:J|$ YY
6WdhhtZ8899#!-Er3   r)   c                   | j         dS | j         j                                        D ]Y}t          |          s|j                            dd          }|r*|                     |          s|                     |           ZdS )z<Create for all referenced layers table entries if not exist.Nr   rs   )r,   rp   r`   r   rg   rk   rY   r   )r0   rb   
layer_names      r1   create_referenced_layersz#LayerTable.create_referenced_layers  s    8F"))++ 	% 	%A$Q'' 7B//J %$.."<"< %$$$	% 	%r3   )r(   r   )rI   rD   r   rZ   r   r   r   rD   r   rZ   r   rV   r   r   r(   r   r   )r   r   r   r:   rh   r   BYLAYERLINEWEIGHT_BYLAYERr   r   __classcell__r   s   @r1   r   r   [  s        J      ]$($2(,+ + + + + +Z
% 
% 
% 
% 
% 
% 
% 
%r3   r   c                  6     e Zd ZdZd fdZddddddZ xZS )LinetypeTableLTYPEr(   r   c                    |                     ddg          }|                     dd          }t          t          t                                          |                    }|                    ||           |S )Npattern        lengthr   )popr   r   r   rh   setup_pattern)r0   rN   r   r   ltyper   s        r1   rh   zLinetypeTable.new_entry  sg    ..SE22!,,Xuww00<<==GV,,,r3   rs   r   N)descriptionr   rN   rI   rD   r   Union[Sequence[float], str]r   r   floatc                   t          |pi           }|                    |t          |          |t          |          d           |                     |          S )a  Add a new line type entry. The simple line type pattern is a list of
        floats :code:`[total_pattern_length, elem1, elem2, ...]`
        where an element > 0 is a line, an element < 0 is a gap and  an
        element == 0.0 is a dot. The definition for complex line types are
        strings, like: ``'A,.5,-.2,["GAS",STANDARD,S=.1,U=0.0,X=-0.1,Y=-.05],-.25'``
        similar to the line type definitions stored in the line definition
        `.lin` files, for more information see the tutorial about complex line
        types. Be aware that not many CAD applications and DXF viewers support
        complex linetypes.

        .. seealso::

            - `Tutorial for simple line types <https://ezdxf.mozman.at/docs/tutorials/linetypes.html>`_
            - `Tutorial for complex line types <https://ezdxf.mozman.at/docs/tutorials/linetypes.html#tutorial-for-complex-linetypes>`_

        Args:
            name (str): line type  name
            pattern: line type pattern as list of floats or as a string
            description (str): line type description, optional
            length (float): total pattern length, only for complex line types required
            dxfattribs (dict): additional DXF attributes

        )rI   r   r   r   )r   updaterD   r   rh   )r0   rI   r   r   r   rN   s         r1   r   zLinetypeTable.add  sg    @ **++
";//"--	 	
 	
 	
 ~~j)))r3   )r(   r   )
rI   rD   r   r   r   rD   r   r   r(   r   )r   r   r   r:   rh   r   r   r   s   @r1   r   r     sk        J      )* )* )* )* )* )* )* )* )* )*r3   r   c                  x     e Zd ZdZd fdZd fdZdd
Zd fdZddddZddddZ	ddZ
ddZddZ xZS )TextstyleTableSTYLEr(   r)   c                n    t                                                       t                      | _        d S r+   )r   r2   r   	shx_files)r0   r   s    r1   r2   zTextstyleTable.__init__  s(    /3vvr3   r   r    c                    t                                          |           | j                                        D ]}|                    |           d S r+   )r   r   r   r`   r   )r0   r   shx_filer   s      r1   r   z#TextstyleTable.export_table_entries  sY    $$Y///--// 	+ 	+H	****	+ 	+r3   rm   r   c                    |j         j        dk    r8|j         j        dz  r)|| j        |                     |j         j                  <   dS || j        |                     |j         j                  <   dS )r   rs      N)rg   rI   flagsr   rU   fontr-   r   s     r1   r<   zTextstyleTable._append  se     9>RUY_q%87<DN488EIN334445:DL%).11222r3   c                    t                                                       | j        j        j        }| j                                        D ]}||j        _        d S r+   )r   r   r.   rg   rC   r   r`   rM   )r0   r   rm   r   s      r1   r   z#TextstyleTable.update_owner_handles  sW    $$&&&z~,^**,, 	+ 	+E*EIOO	+ 	+r3   NrN   rI   rD   r   c                   t          |pi           }|                    |t          |          dd           |                     |          S )a]  Add a new text style entry for TTF fonts. The entry must not yet
        exist, otherwise an :class:`DXFTableEntryError` exception will be
        raised.

        Finding the TTF font files is the task of the DXF viewer and each
        viewer is different (hint: support files).

        Args:
            name (str): text style name
            font (str): TTF font file name like "Arial.ttf", the real font file
                name from the file system is required and only the Windows filesystem
                is case-insensitive.
            dxfattribs (dict): additional DXF attributes

              @)rI   r   last_height)r   r   rD   rh   )r0   rI   r   rN   s       r1   r   zTextstyleTable.add  s[      **++
D		" 	
 	
 	
 ~~j)))r3   shx_file_namec                   |                      |          )t          j        | j        j        j         d| d          t          |pi           }|                    dd|dd           |                     |          S )a  Add a new shape font (SHX file) entry. These are special text style
        entries and have no name. The entry must not yet exist, otherwise an
        :class:`DXFTableEntryError` exception will be raised.

        Locating the SHX files in the filesystem is the task of the DXF viewer and each
        viewer is different (hint: support files).

        Args:
            shx_file_name (str): shape file name like "gdt.shx"
            dxfattribs (dict): additional DXF attributes

        Nz shape file entry for 're   rs   r   r   )rI   r   r   r   )	find_shxr   rf   r.   rg   rI   r   r   rh   )r0   r   rN   s      r1   add_shxzTextstyleTable.add_shx	  s     ==''3*:>& 5 5!5 5 5  
 **++
%"	 	
 	
 	
 ~~j)))r3   c                ^    |                      |          }||                     |          S |S )a3  Get existing entry for a shape file (SHX file), or create a new
        entry.

        Locating the SHX files in the filesystem is the task of the DXF viewer and each
        viewer is different (hint: support files).

        Args:
            shx_file_name (str): shape file name like "gdt.shx"

        )r   r   )r0   r   
shape_files      r1   get_shxzTextstyleTable.get_shx'  s3     ]]=11
<<...r3   Optional[Textstyle]c                \    | j                             |                     |                    S )a  Find the shape file (SHX file) text style table entry, by a
        case-insensitive search.

        A shape file table entry has no name, so you have to search by the
        font attribute.

        Args:
            shx_file_name (str): shape file name like "gdt.shx"

        )r   rk   rU   r0   r   s     r1   r   zTextstyleTable.find_shx7  s&     ~!!$((="9"9:::r3   c                `    	 | j         |                     |          = dS # t          $ r Y dS w xY w)zDiscard the shape file (SHX file) text style table entry. Does not raise an
        exception if the entry does not exist.

        Args:
            shx_file_name (str): shape file name like "gdt.shx"

        N)r   rU   KeyErrorr  s     r1   discard_shxzTextstyleTable.discard_shxD  sE    	txx66777 	 	 	DD	s    
--r   r   )rm   r   r(   r)   )rI   rD   r   rD   r(   r   )r   rD   r(   r   )r   rD   r(   r   )r   rD   r(   r)   )r   r   r   r:   r2   r   r<   r   r   r   r   r   r  r   r   s   @r1   r   r     s       J6 6 6 6 6 6+ + + + + +
; ; ; ;+ + + + + + 7; * * * * * *4 9= * * * * * *<    ; ; ; ;       r3   r   c                      e Zd ZdZddZd d!dZddd!dZd"dZd#dZd#dZ	d$dZ
d%dZd&dZd'dZd(dZd)dZd*dZd"dZdS )+ViewportTableVPORTr   r    r(   r)   c                    | j                                         D ]3}t          |t                    sJ |D ]}|                    |           4d S r+   )r-   r`   r8   listr   )r0   r   rm   rb   s       r1   r   z"ViewportTable.export_table_entriesW  sh    \((** 	( 	(EeT***** ( (Y''''(	( 	(r3   NrI   rD   r   c                >    |pi }||d<   |                      |          S )zCreate a new table entry.rI   )rh   ri   s      r1   rO   zViewportTable.new]  s(    %2
!
6~~j)))r3   r   c               X    t          |pi           }||d<   |                     |          S )a(  Add a new modelspace viewport entry. A modelspace viewport
        configuration can consist of multiple viewport entries with the same
        name.

        Args:
            name (str): viewport name, multiple entries possible
            dxfattribs (dict): additional DXF attributes

        rI   r   rh   ri   s      r1   r   zViewportTable.addc  s2     **++
!
6~~j)))r3   c                    |                      |          }t          t          t                   |                     |                    }|D ]}| j                            |           | j        |= dS )z3Remove table-entry from table and entitydb by name.N)rU   r   r   r   rk   rp   rv   r-   )r0   rI   rU   r-   rm   s        r1   rx   zViewportTable.removeq  sf    hhtnntI77 	/ 	/EM''....Lr3   Iterator[VPort]c              #  l   K   | j                                         D ]}t          |          E d {V  d S r+   r-   r`   iterr0   r-   s     r1   rc   zViewportTable.__iter__y  N      |**,, 	% 	%GG}}$$$$$$$$	% 	%r3   c              #  l   K   | j                                         D ]}t          |          E d {V  d S r+   r  r  s     r1   _flattenzViewportTable._flatten}  r  r3   rZ   c                ^    t          t          |                                                     S r+   )r\   r	  r  r/   s    r1   r]   zViewportTable.__len__  s     4(()))r3   c                    | j         
J d            t          t          t          j        | j        || j                             }|                     |           |S )r   Nzvalid DXF document expected)r,   r   r   r   r   r:   r<   r   s      r1   rh   zViewportTable.new_entry  s\     x##%B####DOZJJ
 
 	Ur3   ry   c                    t                      r+   )NotImplementedError)r0   rI   ry   s      r1   r}   zViewportTable.duplicate_entry  s    !###r3   rm   r#   c                    |                      |j        j                  }|| j        v r"| j        |                             |           d S |g| j        |<   d S r+   )rU   rg   rI   r-   append)r0   rm   rU   s      r1   r<   zViewportTable._append  sY    hhuy~&&$,L$$U+++++!&DLr3   c                    |                      |           t          |t                    r|}n|g}|sd S |                     |d         j        j                  }|| j        |<   d S )Nr   )rw   r8   r	  rU   rg   rI   r-   )r0   rI   rm   configrU   s        r1   r   zViewportTable.replace  sm    TeT"" 	FFWF 	Fhhvay})**"Sr3   c                    | j         j        j        }| j                                        D ]}|D ]}||j        _        d S r+   )r.   rg   rC   r-   r`   rM   )r0   r   r-   rm   s       r1   r   z"ViewportTable.update_owner_handles  sT    z~,|**,, 	/ 	/G  / /".	/	/ 	/r3   list[VPort]c                    	 | j         |                     |                   S # t          $ r t          j        |          w xY w)zwReturns a list of :class:`~ezdxf.entities.VPort` objects, for
        the multi-viewport configuration `name`.
        )r-   rU   r  r   rf   rX   s     r1   
get_configzViewportTable.get_config  sJ    	1<// 	1 	1 	1*4000	1s	   " Ac                0    |                      |           dS )znDelete all :class:`~ezdxf.entities.VPort` objects of the
        multi-viewport configuration `name`.
        N)rx   rX   s     r1   delete_configzViewportTable.delete_config  s     	Dr3   r   r+   )rI   rD   r(   r   r   )r(   r  r   )r(   r   )rI   rD   ry   rD   r(   r   r   r   r   )rI   rD   r(   r  )r   r   r   r:   r   rO   r   rx   rc   r  r]   rh   r}   r<   r   r   r!  r#  r   r3   r1   r  r  R  sE       J( ( ( (* * * * * ,0 * * * * * *   % % % %% % % %* * * *   $ $ $ $( ( ( (
# 
# 
# 
#/ / / /1 1 1 1     r3   r  c                       e Zd ZdZddd	dZdS )

AppIDTableAPPIDNr   rI   rD   r(   r   c               X    t          |pi           }||d<   |                     |          S )zAdd a new appid table entry.

        Args:
            name (str): appid name
            dxfattribs (dict): DXF attributes

        rI   r  ri   s      r1   r   zAppIDTable.add  2     **++
!
6~~j)))r3   )rI   rD   r(   r   r   r   r   r:   r   r   r3   r1   r%  r%    s:        J+/ 
* 
* 
* 
* 
* 
* 
* 
*r3   r%  c                       e Zd ZdZddd	dZdS )
	ViewTableVIEWNr   rI   rD   r(   r   c               X    t          |pi           }||d<   |                     |          S )zAdd a new view table entry.

        Args:
            name (str): view name
            dxfattribs (dict): DXF attributes

        rI   r  ri   s      r1   r   zViewTable.add  r(  r3   )rI   rD   r(   r   r)  r   r3   r1   r+  r+    s:        J+/ 
* 
* 
* 
* 
* 
* 
* 
*r3   r+  c                       e Zd ZdZddd	dZdS )
BlockRecordTableBLOCK_RECORDNr   rI   rD   r(   r   c               X    t          |pi           }||d<   |                     |          S )zAdd a new block record table entry.

        Args:
            name (str): block record name
            dxfattribs (dict): DXF attributes

        rI   r  ri   s      r1   r   zBlockRecordTable.add  r(  r3   )rI   rD   r(   r   r)  r   r3   r1   r/  r/    s:        J+/ 
* 
* 
* 
* 
* 
* 
* 
*r3   r/  c                       e Zd ZdZddd	dZdS )
DimStyleTableDIMSTYLENr   rI   rD   r(   r   c               X    t          |pi           }||d<   |                     |          S )zAdd a new dimension style table entry.

        Args:
            name (str): dimension style name
            dxfattribs (dict): DXF attributes

        rI   r  ri   s      r1   r   zDimStyleTable.add  r(  r3   )rI   rD   r(   r   r)  r   r3   r1   r3  r3    s:        J+/ 
* 
* 
* 
* 
* 
* 
* 
*r3   r3  c                       e Zd ZdZddd	dZdS )
UCSTableUCSNr   rI   rD   r(   r   c               X    t          |pi           }||d<   |                     |          S )zAdd a new UCS table entry.

        Args:
            name (str): UCS name
            dxfattribs (dict): DXF attributes

        rI   r  ri   s      r1   r   zUCSTable.add  r(  r3   )rI   rD   r(   r   r)  r   r3   r1   r7  r7    s:        J+/ 
* 
* 
* 
* 
* 
* 
* 
*r3   r7  )7
__future__r   typingr   r   r   r   r   r	   r
   r   r   collectionsr   loggingezdxf.auditr   r   ezdxf.lldxfr   r   ezdxf.entities.tabler   ezdxf.entitiesr   r   r   r   r   r   r   r   r   r   r   r   ezdxf.documentr   ezdxf.lldxf.tagwriterr    ezdxf.entitydbr!   	getLoggerr=   r#   r&   r   r   r   r  r%  r+  r/  r3  r7  r   r3   r1   <module>rF     s   # " " " " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 $ # # # # #  + + + + + + + + ( ( ( ( ( ( ( ( * * * * * *                             (&&&&&&777777'''''' 
	7	#	#GC{###i$ i$ i$ i$ i$GAJ i$ i$ i$X	@% @% @% @% @%u @% @% @%F3* 3* 3* 3* 3*E(O 3* 3* 3*l{ { { { {U9% { { {|j j j j jE%L j j jZ* * * * *u * * * * * * * *d * * * * * * * *u[) * * * * * * * *E(O * * * * * * * *u]# * * * * *r3   