o
    &h5                     @   s   d dl 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mZ ddlmZmZmZmZ dZd ZdZdZdZeeG d	d
 d
eZeeG dd deZeeG dd deZeeG dd deZeeG dd deZdS )    N   )	NSArrayNSDictionaryNSMutableArrayNSMutableDictionaryNSStringObjCInstancefor_objcclass
ns_from_py
py_from_ns)objc_idsend_message)
NSNotFoundNSRange
NSUIntegerunichar      c                       s   e Zd ZdZdd Zdd Z f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d Zd d! Zd1d#d$Zd1d%d&Zd1d'd(Zd1d)d*Zd1d+d,Zd1d-d.Z fd/d0Z  ZS )2ObjCStrInstanceaw  Provides Pythonic operations on NSString objects that mimic those of Python's
    str.

    Note that str objects consist of Unicode code points, whereas NSString objects
    consist of UTF-16 code units. These are not equivalent for code points greater than
    U+FFFF. For performance and simplicity, ObjCStrInstance objects behave as sequences
    of UTF-16 code units, like NSString. (Individual UTF-16 code units are represented
    as Python str objects of length 1.) If you need to access or iterate over code
    points instead of UTF-16 code units, use str(nsstring) to convert the NSString to a
    Python str first.
    c                 C   s   | j dS )Nzutf-8)Z
UTF8Stringdecodeself r   o/Users/merlin/projects/employee-monitoring-system/venv/lib/python3.10/site-packages/rubicon/objc/collections.py__str__*      zObjCStrInstance.__str__c                 C      |   S N)r   r   r   r   r   
__fspath__-      zObjCStrInstance.__fspath__c                    s8   t |tr| t|S t |tr| |S t |S r   )
isinstancestrZisEqualToStringr
   r   super__eq__r   other	__class__r   r   r$   0   s
   


zObjCStrInstance.__eq__c                 C      |  | S r   r$   r%   r   r   r   __ne__8   r   zObjCStrInstance.__ne__c                 C   s:   t |tr
t|}n
t |tr|}ntS | j|td|v S )a#  Helper method used to implement the comparison operators.

        If other is a str or NSString, it is compared to self, and True or False is
        returned depending on whether the result is one of the wanted values. If other
        is not a string, NotImplemented is returned.
        )options)r!   r"   r
   r   NotImplementedcompareNSLiteralSearch)r   r&   ZwantZns_otherr   r   r   _compareC   s   


zObjCStrInstance._comparec                 C      |  |thS r   )r0   NSOrderedAscendingr%   r   r   r   __lt__T      zObjCStrInstance.__lt__c                 C      |  |tthS r   )r0   r2   NSOrderedSamer%   r   r   r   __le__W      zObjCStrInstance.__le__c                 C   r5   r   )r0   r6   NSOrderedDescendingr%   r   r   r   __ge__Z   r8   zObjCStrInstance.__ge__c                 C   r1   r   )r0   r9   r%   r   r   r   __gt__]   r4   zObjCStrInstance.__gt__c                 C   s<   t |ttfstdt|j dt|j | |dkS )Nz>'in <NSString>' requires str or NSString as left operand, not .r   )r!   r"   r   	TypeErrortype
__module____qualname__findr   valuer   r   r   __contains__`   s   zObjCStrInstance.__contains__c                 C      | j S r   lengthr   r   r   r   __len__i      zObjCStrInstance.__len__c           
      C   s   t |trD|t| \}}}|dkr| t||| S t|||}tt|  }t|D ]\}}t	| | ||< q.t
j|t|dS |dk rNt| | n|}	|	tt| vrbtt| j dt| |	S )Nr   rF   r    index out of range)r!   sliceindiceslenZsubstringWithRanger   ranger   	enumerateordr   ZstringWithCharacters
IndexErrorr>   __name__chrZcharacterAtIndex)
r   keystartstopsteprngcharsZchars_iZself_iindexr   r   r   __getitem__l   s   
zObjCStrInstance.__getitem__c                 C   s   t |ttfr| |S tS r   )r!   r"   r   stringByAppendingStringr-   r%   r   r   r   __add__   s   
zObjCStrInstance.__add__c                 C   s    t |ttfrt|| S tS r   )r!   r"   r   r
   r\   r-   r%   r   r   r   __radd__   s   zObjCStrInstance.__radd__c                 C   sN   zt |}W n ty   t Y S w |dkrtdS | j|t|  | ddS )Nr    )Z
withStringZstartingAtIndex)operatorrZ   AttributeErrorr-   r
   ZstringByPaddingToLengthrM   )r   r&   countr   r   r   __mul__   s   
zObjCStrInstance.__mul__c                 C   
   |  |S r   )rc   r%   r   r   r   __rmul__      
zObjCStrInstance.__rmul__Nc                C   s   t |ttfstdt|j dt|j t||t	| \}}}|s,|r*|S |S t
}|r4|tO }| j||t||| d}|jtkrHdS |jS )Nzmust be str or NSString, not r<   )r,   rN   r   )r!   r"   r   r=   r>   r?   r@   rK   rL   rM   r/   NSBackwardsSearchZrangeOfStringr   locationr   )r   subrU   endreverse_r,   Zfound_ranger   r   r   _find   s(   
zObjCStrInstance._findc                C   s&   | j ||||d}|dkrtd|S )Nrk   r   zsubstring not found)rm   
ValueError)r   ri   rU   rj   rk   foundr   r   r   _index   s   zObjCStrInstance._indexc                 C      | j |||ddS NFrU   rj   rk   rm   r   ri   rU   rj   r   r   r   rA         zObjCStrInstance.findc                 C   rr   rs   rq   rv   r   r   r   rZ      rw   zObjCStrInstance.indexc                 C   rr   NTrt   ru   rv   r   r   r   rfind   rw   zObjCStrInstance.rfindc                 C   rr   ry   rx   rv   r   r   r   rindex   rw   zObjCStrInstance.rindexc                    s0   zt  |W S  ty   t|  | Y S w r   )r#   __getattr__ra   getattrr   )r   attrr'   r   r   r|      s
   zObjCStrInstance.__getattr__)NN)rR   r?   r@   __doc__r   r   r$   r+   r0   r3   r7   r:   r;   rD   rH   r[   r]   r^   rc   re   rm   rq   rA   rZ   rz   r{   r|   __classcell__r   r   r'   r   r      s2    	





r   c                   @   sT   e Z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 )ObjCListInstancec                    s   t |tr,|t \}}}|dkr t||| S t fddt|||D S |dk r6t | n|}|tt vrJtt	 j
 d |S )Nr   c                    s   g | ]}  |qS r   )objectAtIndex.0xr   r   r   
<listcomp>   s    z0ObjCListInstance.__getitem__.<locals>.<listcomp>r   rJ   )r!   rK   rL   rM   ZsubarrayWithRanger   r
   rN   rQ   r>   rR   r   )r   itemrU   rV   rW   rZ   r   r   r   r[      s   

zObjCListInstance.__getitem__c                 C   s   t | jdtg dS )Nrb   restypeargtypes)r   Zptrr   r   r   r   r   rH      rw   zObjCListInstance.__len__c                 c   s$    t t| D ]}| |V  qd S r   )rN   rM   r   )r   ir   r   r   __iter__   s   zObjCListInstance.__iter__c                 C   rd   r   )ZcontainsObject_r   r   r   r   r   rD      rf   zObjCListInstance.__contains__c                 C      t | |kS r   )listr%   r   r   r   r$      r   zObjCListInstance.__eq__c                 C   r)   r   r*   r%   r   r   r   r+      r   zObjCListInstance.__ne__c                 C   s$   |  |}|tkrt|d|S )Nz is not in list)ZindexOfObject_r   ro   )r   rC   idxr   r   r   rZ      s   
zObjCListInstance.indexc                    s   t  fdd| D S )Nc                    s   g | ]}| kr|qS r   r   r   rC   r   r   r     s    z*ObjCListInstance.count.<locals>.<listcomp>)rM   rB   r   r   r   rb         zObjCListInstance.countc                 C      t t| dtg dS Ncopyr   r   r   r   r   r   r   r   r        zObjCListInstance.copyN)rR   r?   r@   r[   rH   r   rD   r$   r+   rZ   rb   r   r   r   r   r   r      s    r   c                   @   s^   e Zd Z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S )ObjCMutableListInstancec                 C   s   t |trit|}t |tstt|j dt|j d|t	| \}}}|dkr:| j
t||| |d d S t|||}t	|t	|krVtdt	| dt	| t||D ]\}}	| j||	d q[d S |dk rst	| | n|}
|
tt	| vrtt| j d	| j|
|d d S )
Nr<   z is not convertible to NSArrayr   )ZwithObjectsFromArrayz#attempt to assign sequence of size z to extended slice of size )Z
withObjectr    assignment index out of range)r!   rK   r
   r   r=   r>   r?   r@   rL   rM   ZreplaceObjectsInRanger   rN   ro   zipZreplaceObjectAtIndexrQ   rR   )r   r   rC   ZarrrU   rV   rW   rL   r   objrZ   r   r   r   __setitem__	  s2   


z#ObjCMutableListInstance.__setitem__c                 C   s   t |tr3|t| \}}}|dkr| t|||  d S tt|||ddD ]}| | q)d S |dk r=t| | n|}|tt| vrQt	t
| j d| | d S )Nr   Trn   r   r   )r!   rK   rL   rM   ZremoveObjectsInRanger   sortedrN   ZremoveObjectAtIndexrQ   r>   rR   ZremoveObjectAtIndex_)r   r   rU   rV   rW   r   rZ   r   r   r   __delitem__)  s   
z#ObjCMutableListInstance.__delitem__c                 C   r   r   ZmutableCopyr   r   r   r   r   9  r    zObjCMutableListInstance.copyc                 C   s   |  | d S r   Z
addObject_rB   r   r   r   append<  r4   zObjCMutableListInstance.appendc                 C   s   |D ]}|  | qd S r   r   )r   valuesrC   r   r   r   extend?  s   zObjCMutableListInstance.extendc                 C      |    d S r   ZremoveAllObjectsr   r   r   r   clearC  r   zObjCMutableListInstance.clearr   c                 C   s   | | }| |= |S r   r   r   r   rC   r   r   r   popF  s   zObjCMutableListInstance.popc                 C   s   | |  |= d S r   )rZ   rB   r   r   r   removeK  r8   zObjCMutableListInstance.removec                 C   s   |  |    d S r   )ZsetArrayZreverseObjectEnumeratorZ
allObjectsr   r   r   r   rk   N  r   zObjCMutableListInstance.reversec                 C      |  || d S r   )ZinsertObject_atIndex_)r   r   rC   r   r   r   insertQ  r8   zObjCMutableListInstance.insertN)r   )rR   r?   r@   r   r   r   r   r   r   r   r   rk   r   r   r   r   r   r     s     
r   c                   @   sf   e Zd Z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d ZdS )ObjCDictInstancec                 C   s   |  |}|d u rt||S r   )objectForKey_KeyError)r   r   vr   r   r   r[   W  s   
zObjCDictInstance.__getitem__c                 C   rE   r   )rb   r   r   r   r   rH   ]  rI   zObjCDictInstance.__len__c                 c   s    |   E d H  d S r   allKeysr   r   r   r   r   `  s   zObjCDictInstance.__iter__c                 C   s   |  |d uS r   r   r   r   r   r   rD   c  r4   zObjCDictInstance.__contains__c                 C   r   r   )r   r%   r   r   r   r$   f  r   zObjCDictInstance.__eq__c                 C   r)   r   r*   r%   r   r   r   r+   i  r   zObjCDictInstance.__ne__Nc                 C   s   |  |}|d u r|S |S r   r   )r   r   defaultr   r   r   r   getl  s   
zObjCDictInstance.getc                 C   r   r   r   r   r   r   r   keysr  r    zObjCDictInstance.keysc                 C   r   r   )Z	allValuesr   r   r   r   r   u  r    zObjCDictInstance.valuesc                 c   s$    |   D ]
}|| |fV  qd S r   )r   r   )r   rT   r   r   r   itemsx  s   zObjCDictInstance.itemsc                 C   r   r   r   r   r   r   r   r   |  r   zObjCDictInstance.copyr   )rR   r?   r@   r[   rH   r   rD   r$   r+   r   r   r   r   r   r   r   r   r   r   U  s    
r   c                   @   sZ   e Zd Ze Zdd Zdd Zdd Zdd Zefd	d
Z	dd Z
dddZdddZdS )ObjCMutableDictInstancec                 C   r   r   )setObject_forKey_r   r   r   r   r     r8   z#ObjCMutableDictInstance.__setitem__c                 C   s   || vrt || | d S r   )r   removeObjectForKey_r   r   r   r   r     s   z#ObjCMutableDictInstance.__delitem__c                 C   r   r   r   r   r   r   r   r     r    zObjCMutableDictInstance.copyc                 C   r   r   r   r   r   r   r   r     r   zObjCMutableDictInstance.clearc                 C   s6   || vr|| j ur|S t|| |}| | |S r   )no_pop_defaultr   r   r   )r   r   r   rC   r   r   r   r     s   


zObjCMutableDictInstance.popc                 C   sJ   t | dkrtdt| j d|   }| |}| | ||fS )Nr   zpopitem(): z	 is empty)rM   r   r>   rR   r   ZfirstObjectr   r   )r   rT   rC   r   r   r   popitem  s   

zObjCMutableDictInstance.popitemNc                 C   s.   |  |}|d u r|}|d ur| || |S r   )r   r   )r   rT   r   rC   r   r   r   
setdefault  s   
z"ObjCMutableDictInstance.setdefaultc                 K   s4   |d ur	| | | D ]
\}}| || qd S r   )updater   r   )r   newkwargskr   r   r   r   r     s
   
zObjCMutableDictInstance.updater   )rR   r?   r@   objectr   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
	r   )r`   apir   r   r   r   r   r   r	   r
   r   Zruntimer   r   typesr   r   r   r   r2   r6   r9   r/   rg   r   r   r   r   r   r   r   r   r   <module>   s(    , ;/M*