U
    ª…7hå   ã                   @   sB   d dl Z d dlmZ d dlmZ G dd„ deƒZG dd„ dƒZdS )é    N)ÚEnum)ÚOptionalc                   @   s    e Zd ZdZdZdZdZdZdS )ÚUrlTypesz4
    Enum to represent different types of URLS.
    r   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚUNKNOWNÚURLÚINTERNALÚEXTERNAL© r   r   úH/var/www/formularioweb/env/lib/python3.8/site-packages/xlsxwriter/url.pyr      s
   r   c                   @   sî   e Zd ZdZdZdZedœdd„Zdd„ Ze	e
ed  d	œd
d„ƒZeedœdd„ƒZejedœdd„ƒZeedœdd„ƒZejedœdd„ƒZdd„ Zdd„ Zdd„ Zedœdd„Zedœdd„Zeeedœdd „ƒZeeedœd!d"„ƒZd#S )$ÚUrlz.
    A class to represent URLs in Excel.

    i   éÿ   )Úlinkc                 C   s”   t j| _|| _|| _|| _d| _d| _d| _d| _	d| _
|  ¡  t| jƒ| jkrXtdƒ‚t| jƒ| jkrptdƒ‚t| jƒ| jkrˆtdƒ‚|  ¡  d S )NÚ Fr   z#URL exceeds Excel's maximum length.z5Anchor segment or url exceeds Excel's maximum length.z2Hyperlink tool tip exceeds Excel's maximum length.)r   r   Ú
_link_typeÚ_original_urlÚ_linkÚ_relationship_linkÚ_textÚ_tipÚ_anchorÚ_is_object_linkÚ
_rel_indexÚ
_parse_urlÚlenÚMAX_URL_LENÚ
ValueErrorÚMAX_PARAMETER_LENÚ_escape_strings)Úselfr   r   r   r   Ú__init__$   s"    zUrl.__init__c                 C   sP   d| j j› d| j› d| j› d| j› d| j› d| j› d| j› d| j› d	| j	› d
S )zF
        Return a string representation of the Url instance.

        z
Url:
  _link_type         = z
  _original_url      = z
  _link              = z
  _relationship_link = z
  _text              = z
  _tip               = z
  _anchor            = z
  _is_object_link    = z
  _rel_index         = Ú
)
r   Únamer   r   r   r   r   r   r   r   ©r%   r   r   r   Ú__repr__<   s    NÿzUrl.__repr__)ÚoptionsÚreturnc                 C   sJ   t |tƒstdƒ‚| d¡}t |tƒrF| |d ƒ}| d¡rF|d |_|S )aM  
        For backward compatibility, convert the 'url' key and 'tip' keys in an
        options dictionary to a Url object, or return the Url object if already
        an instance.

        Args:
            options (dict): A dictionary that may contain a 'url' key.

        Returns:
            url: A Url object or None.

        z-The 'options' parameter must be a dictionary.ÚurlÚtip)Ú
isinstanceÚdictÚ	TypeErrorÚgetÚstrr   )Úclsr+   r-   r   r   r   Úfrom_optionsO   s    




zUrl.from_options)r,   c                 C   s   | j S )z5Get the alternative, user-friendly, text for the URL.©r   r)   r   r   r   Útexti   s    zUrl.text)Úvaluec                 C   s
   || _ dS )z5Set the alternative, user-friendly, text for the URL.Nr6   ©r%   r8   r   r   r   r7   n   s    c                 C   s   | j S )zGet the screen tip for the URL.©r   r)   r   r   r   r.   s   s    zUrl.tipc                 C   s
   || _ dS )zSet the screen tip for the URL.Nr:   r9   r   r   r   r.   x   s    c                 C   sø  | j  d¡r^tj| _| js"| j | _d| j krB| j  dd¡\| _ | _| jrR| j	| _
n| j | _
n–| j  d¡rŽtj| _| jsŠ| j  ddd¡| _nf| j  d¡ràtj| _| j  ddd¡| _
| j  ddd¡| _ | j | _| jsÜ| j| _n| j  d¡sú| j  d¡rätj| _| j	 dd	d¡}|}| d	dd¡}| ddd¡}| d
d¡}|  |¡rR|| _ n
d	| | _ | jsj|| _d| j krŒ| j  dd¡\| _ | _| jrº|  |¡r²| j  dd
¡| _
n|| _
n| j | _
| j
 d¡rô| j
 ddd¡| _
ntd| j	› ƒ‚dS )z%Parse the URL and determine its type.)zhttp://zhttps://zftp://zftps://ú#r   zmailto:r   z	internal:zfile://z	external:zfile:///ú/ú\z.\zUnknown URL type: N)r   Ú
startswithr   r   r   r   Úsplitr   r   r   r   Úreplacer   r   Ú_is_relative_pathr"   )r%   Úfile_urlÚ	link_pathr   r   r   r   }   sT    


zUrl._parse_urlc                 C   s"   d| _ | j| _|  ¡  |  ¡  dS )z‡
        Set the _is_object_link flag and re-parse the URL since the relationship
        link is different for object links.

        TN)r   r   r   r   r$   r)   r   r   r   Ú_set_object_linkË   s    zUrl._set_object_linkc                 C   sH   | j tjkr(|  | j¡| _|  | j¡| _| j tjkrD| j dd¡| _dS )z-Escape special characters in the URL strings.r;   z%23N)r   r   r   Ú_escape_urlr   r   r   r@   r)   r   r   r   r$   Ö   s
    zUrl._escape_stringsc                 C   s   | j S )z$Get the target for relationship IDs.)r   r)   r   r   r   Ú_targetá   s    zUrl._targetc                 C   s   | j tjkrdS dS )z)Get the target mode for relationship IDs.r   ZExternal)r   r   r   r)   r   r   r   Ú_target_modeå   s    zUrl._target_mode)r-   r,   c                 C   s.   |   d¡rdS | d  ¡ r*| d dkr*dS dS )z"Check if a URL is a relative path.z\\Fr   r   ú:T)r>   Úisalpha©r-   r   r   r   rA   ì   s
    
zUrl._is_relative_pathc                 C   sl   t  d| ¡r| S |  dd¡ dd¡ dd¡ dd	¡ d
d¡ dd¡ dd¡ dd¡ dd¡ dd¡ dd¡S )z#Escape special characters in a URL.z%[0-9a-fA-F]{2}ú%z%25ú"z%22ú z%20ú<z%3cú>z%3eú[z%5bú]z%5dú^z%5eú`z%60Ú{z%7bÚ}z%7d)ÚreÚsearchr@   rJ   r   r   r   rE   ÷   sD     ÿ þ ý ü û ú ù ø	 ÷
 öÿzUrl._escape_urlN)r   r	   r
   r   r!   r#   r3   r&   r*   Úclassmethodr0   r   r5   Úpropertyr7   Úsetterr.   r   rD   r$   rF   rG   ÚstaticmethodÚboolrA   rE   r   r   r   r   r      s0   N
r   )rV   Úenumr   Útypingr   r   r   r   r   r   r   Ú<module>   s   