
    Og                        d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
mZmZ d dlmZmZ erd dlmZ d dlmZmZ ddZ edd	
      Z G d dee         Zy)    )annotations)TYPE_CHECKINGIteratorcastOptionalTypeVarGeneric)DXFValueErrorDXFKeyErrorINVALID_NAME_CHARACTERS)make_table_keyis_valid_table_name)Drawing)	DXFObject
Dictionaryc                P    | d d } t        |       st        d|  dt               | S )N   ztable name 'z' contains invalid characters: )r   r
   r   )names    d/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/objectcollection.pyvalidate_namer      s<    :Dt$4& ?@W?XY
 	
 K    Tr   )boundc                      e Zd ZdZ	 	 d	 	 	 	 	 ddZddZddZddZddZddZ	ddZ
edd	       Zedd
       ZddZddZdddZddZddZd dZd!dZddZy)"ObjectCollectiona3  
    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                n    || _         || _        || _        |j                  j	                  |      | _        y N)docobject_dict_nameobject_typerootdictget_required_dictobject_dict)selfr   	dict_namer    s       r   __init__zObjectCollection.__init__.   s2       ) +'*||'E'Ei'Pr   c                l    | j                   j                  j                  | j                        | _        y r   )r   r!   r"   r   r#   r$   s    r   update_object_dictz#ObjectCollection.update_object_dict9   s%    88,,>>t?T?TUr   c                     y r    r(   s    r   create_required_entriesz(ObjectCollection.create_required_entries<   s    r   c                6    | j                   j                         S r   )r#   itemsr(   s    r   __iter__zObjectCollection.__iter__?   s    %%''r   c                ,    t        | j                        S r   )lenr#   r(   s    r   __len__zObjectCollection.__len__B   s    4##$$r   c                $    | j                  |      S r   )	has_entryr$   r   s     r   __contains__zObjectCollection.__contains__E   s    ~~d##r   c                B    | j                  |      }|t        |      |S r   )getr   )r$   r   entrys      r   __getitem__zObjectCollection.__getitem__H   s$    =d##r   c                B    | j                   j                  j                  S )z0Returns the DXF handle of the DICTIONARY object.)r#   dxfhandler(   s    r   r=   zObjectCollection.handleN   s     ##***r   c                .    | j                   j                  S )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   r?   zObjectCollection.is_hard_ownerS   s    
 ---r   c                (    | j                  |      d uS r   )r8   r5   s     r   r4   zObjectCollection.has_entryZ   s    xx~T))r   c                x    t        |      }| j                  j                         D ]  }t        |      |k(  s y y)NFT)r   r#   keys)r$   r   
entry_names      r   is_unique_namezObjectCollection.is_unique_name]   s?    d#**//1 	Jj)T1	 r   Nc                    t        |      }| j                  j                         D ]  \  }}t        |      |k(  s|c S  |S )zGet object by name. Object collection entries are case-insensitive.

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

        )r   r#   r.   )r$   r   defaultrC   objs        r   r8   zObjectCollection.getd   sI     d##//557 	OJj)T1
	 r   c                    t        |      }| j                  |      st        | j                   d| d      | j	                  |d|i      S )a  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   rD   r
   r    _newr5   s     r   newzObjectCollection.newr   sS    " T"""4(4#3#3"4GD6AQ RSSyy64.y99r   c                2   | j                  |      }|t        d| d      t        |      }| j                  |      }|| j                  |       | j                  j
                  }|r|j                  |      }n|j                         }|j                  j                  d      r||j                  _
        | j                  j                  ||       | j                  j                  j                  }||j                  _        |j                  |g       |S )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   )r8   r
   r   deleter   entitydbduplicate_entitycopyr<   is_supportedr   r#   addr=   ownerset_reactors)r$   r   new_namer9   existing_entryrO   	new_entryowner_handles           r   duplicate_entryz ObjectCollection.duplicate_entry   s     ='$/? @AA *(+%KK!88$$ 11%8I

I==%%f-!)IMMXy1''++22*	~.r   c                   | j                   j                  }|J | j                  j                  j                  }||d<   |j                  | j                  |      }| j                  j                  ||       t        t        |      S )NrT   rI   )
r   objectsr#   r<   r=   add_dxf_object_with_reactorr    rS   r   r   )r$   r   rJ   r\   rT   rG   s         r   rK   zObjectCollection._new   s    (("""""  $$++#
711 2 
 	T3'As|r   c                &   | j                   j                  }|J | j                  |      }|d|j                  j	                  d      r|j                  j                  d|      }| j
                  j                  |       |j                  |       y y )Nr   )r   r\   r8   r<   rR   r#   discarddelete_entity)r$   r   r\   rG   s       r   rN   zObjectCollection.delete   s~    (("""""hhtn? ww##F+ww{{640$$T*!!#& r   c                8    | j                   j                          y)zDelete all entries.N)r#   clearr(   s    r   rb   zObjectCollection.clear   s     r   )ACAD_MATERIALMATERIAL)r   r   r%   strr    re   )returnNone)rf   zIterator[tuple[str, T]])rf   int)r   re   rf   bool)r   re   rf   r   )rf   re   )rf   ri   r   )r   re   rF   Optional[T]rf   rj   )r   re   rV   re   rf   r   )r   re   rJ   dictrf   r   )r   re   rf   rg   )__name__
__module____qualname____doc__r&   r)   r,   r/   r2   r6   r:   propertyr=   r?   r4   rD   r8   rL   rZ   rK   rN   rb   r+   r   r   r   r   $   s     )%		Q	Q 	Q 		QV(%$ + + . .*:,<
'!r   r   N)r   re   rf   re   )
__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>rw      sR    #  
 F&4 C{#]!wqz ]!r   