
    h                        S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
JrJr  S SKJrJr  \(       a  S SKJr  S SKJrJr  SS jr\" SS	S
9r " S S\\   5      rg)    )annotations)TYPE_CHECKINGIteratorcastOptionalTypeVarGeneric)DXFValueErrorDXFKeyErrorINVALID_NAME_CHARACTERS)make_table_keyis_valid_table_name)Drawing)	DXFObject
Dictionaryc                Z    U S S n [        U 5      (       d  [        SU  S[         35      eU $ )N   ztable name 'z' contains invalid characters: )r   r
   r   )names    Q/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/objectcollection.pyvalidate_namer      s?    :Dt$$4& ?@W?XY
 	
 K    Tr   )boundc                      \ rS rSrSr  S     SS jjrSS jrSS jrSS jrSS jr	SS jr
SS	 jr\SS
 j5       r\SS j5       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#S jrSS jrSrg)$ObjectCollection$   a  
Note:
ObjectCollections may contain entries where the name stored in the entity as
"name" attribute diverges from the key in the DICTIONARY object e.g. MLEADERSTYLE
collection may have entries for "Standard" and "Annotative" but both MLEADERSTYLE
objects have the name "Standard".

c                h    Xl         X l        X0l        UR                  R	                  U5      U l        g N)docobject_dict_nameobject_typerootdictget_required_dictobject_dict)selfr   	dict_namer!   s       r   __init__ObjectCollection.__init__.   s,       ) +'*||'E'Ei'Pr   c                l    U R                   R                  R                  U R                  5      U l        g r   )r   r"   r#   r    r$   r%   s    r   update_object_dict#ObjectCollection.update_object_dict9   s%    88,,>>t?T?TUr   c                    g r    r*   s    r   create_required_entries(ObjectCollection.create_required_entries<   s    r   c                6    U R                   R                  5       $ r   )r$   itemsr*   s    r   __iter__ObjectCollection.__iter__?   s    %%''r   c                ,    [        U R                  5      $ r   )lenr$   r*   s    r   __len__ObjectCollection.__len__B   s    4##$$r   c                $    U R                  U5      $ r   )	has_entryr%   r   s     r   __contains__ObjectCollection.__contains__E   s    ~~d##r   c                D    U R                  U5      nUc  [        U5      eU$ r   )getr   )r%   r   entrys      r   __getitem__ObjectCollection.__getitem__H   s$    =d##r   c                B    U R                   R                  R                  $ )z0Returns the DXF handle of the DICTIONARY object.)r$   dxfhandler*   s    r   rE   ObjectCollection.handleN   s     ##***r   c                .    U R                   R                  $ )zReturns ``True`` if the collection is hard owner of entities.
Hard owned entities will be destroyed by deleting the dictionary.
)r$   is_hard_ownerr*   s    r   rH   ObjectCollection.is_hard_ownerS   s    
 ---r   c                (    U R                  U5      S L$ r   )r?   r;   s     r   r:   ObjectCollection.has_entryZ   s    xx~T))r   c                ~    [        U5      nU R                  R                  5        H  n[        U5      U:X  d  M    g   g)NFT)r   r$   keys)r%   r   
entry_names      r   is_unique_nameObjectCollection.is_unique_name]   s:    d#**//1Jj)T1 2 r   Nc                    [        U5      nU R                  R                  5        H  u  p4[        U5      U:X  d  M  Us  $    U$ )zGet object by name. Object collection entries are case-insensitive.

Args:
    name: object name as string
    default: default value

)r   r$   r2   )r%   r   defaultrN   objs        r   r?   ObjectCollection.getd   sB     d##//557OJj)T1
  8 r   c                    [        U5      nU R                  U5      (       d  [        U R                   SU S35      eU R	                  USU0S9$ )as  Create a new object of type `self.object_type` and store its handle
in the object manager dictionary.  Object collection entry names are
case-insensitive and limited to 255 characters.

Args:
    name: name of new object as string

Returns:
    new object of type `self.object_type`

Raises:
    DXFValueError: if object name already exist or is invalid

(internal API)

z entry z already exists.r   
dxfattribs)r   rO   r
   r!   _newr;   s     r   newObjectCollection.newr   sV    " T"""4((4#3#3"4GD6AQ RSSyy64.y99r   c                D   U R                  U5      nUc  [        SU S35      e[        U5      nU R                  U5      nUb  U R                  U5        U R                  R
                  nU(       a  UR                  U5      nOUR                  5       nUR                  R                  S5      (       a  X&R                  l
        U R                  R                  X&5        U R                  R                  R                  nXvR                  l        UR                  U/5        U$ )zReturns a new table entry `new_name` as copy of `name`,
replaces entry `new_name` if already exist.

Raises:
     DXFValueError: `name` does not exist

zentry 'z' does not existr   )r?   r
   r   deleter   entitydbduplicate_entitycopyrD   is_supportedr   r$   addrE   ownerset_reactors)r%   r   new_namer@   existing_entryr]   	new_entryowner_handles           r   duplicate_entry ObjectCollection.duplicate_entry   s     ='$/? @AA *(+%KK!88$$ 11%8I

I==%%f--!)MMX1''++22*~.r   c                
   U R                   R                  nUc   eU R                  R                  R                  nXBS'   UR                  U R                  US9nU R                  R                  X5        [        [        U5      $ )Nrb   rV   )
r   objectsr$   rD   rE   add_dxf_object_with_reactorr!   ra   r   r   )r%   r   rW   rk   rb   rS   s         r   rX   ObjectCollection._new   s~    (("""""  $$++#711 2 
 	T'As|r   c                4   U R                   R                  nUc   eU R                  U5      nUbi  UR                  R	                  S5      (       a  UR                  R                  SU5      nU R
                  R                  U5        UR                  U5        g g )Nr   )r   rk   r?   rD   r`   r$   discarddelete_entity)r%   r   rk   rS   s       r   r\   ObjectCollection.delete   s    (("""""hhtn? ww##F++ww{{640$$T*!!#& r   c                8    U R                   R                  5         g)zDelete all entries.N)r$   clearr*   s    r   rs   ObjectCollection.clear   s     r   )r   r$   r    r!   )ACAD_MATERIALMATERIAL)r   r   r&   strr!   rw   )returnNone)rx   zIterator[tuple[str, T]])rx   int)r   rw   rx   bool)r   rw   rx   r   )rx   rw   )rx   r{   r   )r   rw   rR   Optional[T]rx   r|   )r   rw   rd   rw   rx   r   )r   rw   rW   dictrx   r   )r   rw   rx   ry   )__name__
__module____qualname____firstlineno____doc__r'   r+   r/   r3   r7   r<   rA   propertyrE   rH   r:   rO   r?   rY   rh   rX   r\   rs   __static_attributes__r.   r   r   r   r   $   s     )%		Q	Q 	Q 		QV(%$ + + . .*:,<
'!r   r   N)r   rw   rx   rw   )
__future__r   typingr   r   r   r   r   r	   ezdxf.lldxf.constr
   r   r   ezdxf.lldxf.validatorr   r   ezdxf.documentr   ezdxf.entitiesr   r   r   r   r   r.   r   r   <module>r      sR    #  
 F&4 C{#]!wqz ]!r   