o
    ¼Çhx"  ã                   @  s<  d dl mZ d dlmZmZ d dlZd dlmZ d dlm	Z	m
Z
mZ zd dlT W n ey5   d dlT Y nw ddlmZmZmZmZ g d	¢Zd
d„ Zdd„ Zefdd„Ze d¡Zdd„ Zdd„ ej ¡ D ƒZefdd„Zh d£Z e	d Z!e
dƒZ"ed+dd„ƒZ#eefd,d"d„ƒZ#efd-d$d„Z#d%d&„ Z$d'd(„ Z%d)d*„ Z&dS ).é    )Úannotations)ÚbyteordÚtostrN)Úbisect_right)ÚLiteralÚTypeVarÚoverload)Ú*é   )ÚBlocksÚScriptsÚScriptExtensionsÚOTTags)ÚlookupÚnameÚdecimalÚdigitÚnumericÚcategoryÚbidirectionalÚ	combiningÚeast_asian_widthÚmirroredÚdecompositionÚ	normalizeÚunidata_versionÚ	ucd_3_2_0ÚblockÚscriptÚscript_extensionÚscript_nameÚscript_codeÚscript_horizontal_directionÚot_tags_from_scriptÚot_tag_to_scriptc                 C  ó"   t | ƒ}ttj|ƒ}tj|d  S )zÇReturn the four-letter script code assigned to the Unicode character
    'char' as string.

    >>> script("a")
    'Latn'
    >>> script(",")
    'Zyyy'
    >>> script(chr(0x10FFFF))
    'Zzzz'
    r
   )r   r   r   ÚRANGESÚVALUES©ÚcharÚcodeÚi© r,   úr/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fontTools/unicodedata/__init__.pyr   1   s   
r   c                 C  s8   t | ƒ}ttj|ƒ}tj|d  }|du rt| ƒhS |S )aF  Return the script extension property assigned to the Unicode character
    'char' as a set of string.

    >>> script_extension("a") == {'Latn'}
    True
    >>> script_extension(chr(0x060C)) == {'Nkoo', 'Arab', 'Rohg', 'Thaa', 'Syrc', 'Gara', 'Yezi'}
    True
    >>> script_extension(chr(0x10FFFF)) == {'Zzzz'}
    True
    r
   N)r   r   r   r&   r'   r   )r)   r*   r+   Úvaluer,   r,   r-   r   J   s   
r   c                 C  sF   zt tj|   dd¡ƒW S  ty"   t|tƒrt|tƒr‚ | Y S w )a  Return the long, human-readable script name given a four-letter
    Unicode script code.

    If no matching name is found, a KeyError is raised by default.

    You can use the 'default' argument to return a fallback value (e.g.
    'Unknown' or None) instead of throwing an error.
    Ú_ú )Ústrr   ÚNAMESÚreplaceÚKeyErrorÚ
isinstanceÚtypeÚ
issubclass)r*   Údefaultr,   r,   r-   r    _   s   	ýr    z[-_ ]+c                 C  s   t  d| ¡ ¡ S )z9Remove case, strip space, '-' and '_' for loose matching.Ú )Ú_normalize_reÚsubÚlower)Ústringr,   r,   r-   Ú_normalize_property_names   s   r>   c                 C  s   i | ]	\}}t |ƒ|“qS r,   )r>   )Ú.0ÚkÚvr,   r,   r-   Ú
<dictcomp>x   s    rB   c                 C  s@   t | ƒ}zt| W S  ty   t|tƒrt|tƒr‚ | Y S w )a
  Returns the four-letter Unicode script code from its long name

    If no matching script code is found, a KeyError is raised by default.

    You can use the 'default' argument to return a fallback string (e.g.
    'Zzzz' or None) instead of throwing an error.
    )r>   Ú_SCRIPT_CODESr4   r5   r6   r7   )r    r8   Únormalized_namer,   r,   r-   r!   {   s   
ýr!   >#   ÚAdlmÚArabÚArmiÚAvstÚChrsÚCprtÚElymÚHatrÚHebrÚHungÚKharÚLydiÚMandÚManiÚMendÚMercÚMeroÚNarbÚNbatÚNkooÚOrkhÚOugrÚPalmÚPhliÚPhlpÚPhnxÚPrtiÚRohgÚSamrÚSarbÚSogdÚSogoÚSyrcÚThaaÚYezi)ÚRTLÚLTRÚTr1   r8   ÚreturnúHorizDirection | Tc                 C  ó   d S ©Nr,   ©r!   r8   r,   r,   r-   r"   Ë   s   r"   útype[KeyError]ÚHorizDirectionc                 C  rm   rn   r,   ro   r,   r,   r-   r"   Ï   s   úT | type[KeyError]c                 C  s:   | t jvrt|tƒrt|tƒr|| ƒ‚|S | tv rdS dS )z…Return "RTL" for scripts that contain right-to-left characters
    according to the Bidi_Class property. Otherwise return "LTR".
    rh   ri   )r   r2   r5   r6   r7   r4   ÚRTL_SCRIPTSro   r,   r,   r-   r"   Õ   s
   
c                 C  r%   )zÑReturn the block property assigned to the Unicode character 'char'
    as a string.

    >>> block("a")
    'Basic Latin'
    >>> block(chr(0x060C))
    'Arabic'
    >>> block(chr(0xEFFFF))
    'No_Block'
    r
   )r   r   r   r&   r'   r(   r,   r,   r-   r   â   s   r   c                 C  sh   | t jv rt j|  gS | tjvrt jgS | d  ¡ | dd…  g}| t jv r2| t j|  ¡ | ¡  |S )zœReturn a list of OpenType script tags associated with a given
    Unicode script code.
    Return ['DFLT'] script tag for invalid/unknown script codes.
    r   r
   N)	r   ÚSCRIPT_EXCEPTIONSr   r2   ÚDEFAULT_SCRIPTr<   ÚNEW_SCRIPT_TAGSÚextendÚreverse)r!   Úscript_tagsr,   r,   r-   r#   ò   s   


r#   c                 C  sø   t | ƒ ¡ } | rd| v st| ƒdkrtd|  ƒ‚| tjv r"tj|  } t| ƒdkr4| tdƒ7 } t| ƒdks(| tjkr;dS | tjv rEtj|  S | tj	v rOtj	|  S | d  
¡ | d  }tddƒD ]}|| | dkrm||d  n| | 7 }q^|tjvrzdS |S )zÃReturn the Unicode script code for the given OpenType script tag, or
    None for "DFLT" tag or if there is no Unicode script associated with it.
    Raises ValueError if the tag is invalid.
    r0   é   zinvalid OpenType tag: %rNr   r
   é   )r   ÚstripÚlenÚ
ValueErrorr   ÚSCRIPT_ALIASESr1   ru   ÚNEW_SCRIPT_TAGS_REVERSEDÚSCRIPT_EXCEPTIONS_REVERSEDÚupperÚranger   r2   )Útagr!   r+   r,   r,   r-   r$     s(   

ÿ




&
r$   )r!   r1   r8   rj   rk   rl   )r!   r1   r8   rp   rk   rq   )r!   r1   r8   rr   rk   rl   )'Ú
__future__r   ÚfontTools.misc.textToolsr   r   ÚreÚbisectr   Útypingr   r   r   Úunicodedata2ÚImportErrorÚunicodedatar9   r   r   r   r   Ú__all__r   r   r4   r    Úcompiler:   r>   r2   ÚitemsrC   r!   rs   rq   rj   r"   r   r#   r$   r,   r,   r,   r-   Ú<module>   s@    þ
7ÿÿ