L iI#ddlmZddlmZmZddlZddlmZddlm Z m Z m Z  ddl ddlmZmZmZmZmZgd Zd Zd Zd Zefd Zej6dZdZej<j?Dcic]\}}e||c}}Z efdZ!hdZ"e dZ#e dZ$e ddZ%e ef ddZ%ef ddZ%dZ&dZ'dZ(y#e $rddlYwxYwcc}}w)) annotations)byteordtostrN) bisect_right)LiteralTypeVaroverload)*)BlocksMirroredScriptsScriptExtensionsOTTags)lookupnamedecimaldigitnumericcategory bidirectional combiningeast_asian_widthmirrored decomposition normalizeunidata_version ucd_3_2_0blockscriptscript_extension script_name script_codescript_horizontal_directionot_tags_from_scriptot_tag_to_scriptc@tjj|S)zNIf code (unicode codepoint) has a mirrored version returns it, otherwise None.)r MIRROREDget)codes d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/unicodedata/__init__.pyrr0s     &&cxt|}ttj|}tj|dz S)zReturn the four-letter script code assigned to the Unicode character 'char' as string. >>> script("a") 'Latn' >>> script(",") 'Zyyy' >>> script(chr(0x10FFFF)) 'Zzzz' r )rrrRANGESVALUEScharr*is r+r r 5s2 4=D W^^T*A >>!a%  r,ct|}ttj|}tj|dz }| t |hS|S)aFReturn 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 )rrrr.r/r )r1r*r2values r+r!r!NsL 4=D%,,d3A  # #AE *E }t ~ Lr,c ttj|jddS#t$r&t |t rt|tr|cYSwxYw)aReturn 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. _ )strrNAMESreplaceKeyError isinstancetype issubclass)r*defaults r+r"r"csR7==&..sC899  gt $GX)F s+.,AAz[-_ ]+cJtjd|jS)z9Remove case, strip space, '-' and '_' for loose matching.) _normalize_resublower)strings r+_normalize_property_namerFws   R ( . . 00r,ct|} t|S#t$r&t|trt |tr|cYSwxYw)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. )rF _SCRIPT_CODESr;r<r=r>)r"r?normalized_names r+r#r#sH/{;O_--  gt $GX)F s,AA>$AdlmArabArmiAvstChrsCprtElymGaraHatrHebrHungKharLydiMandManiMendMercMeroNarbNbatNkooOrkhOugrPalmPhliPhlpPhnxPrtiRohgSamrSarbSogdSogoSyrcThaaYezi)RTLLTRTcyNr#r?s r+r$r$sUXr,cyrrrsrts r+r$r$sr,c|tjvr*t|trt |t r|||S|t vrdSdS)zReturn "RTL" for scripts that contain right-to-left characters according to the Bidi_Class property. Otherwise return "LTR". rnro)rr9r<r=r>r; RTL_SCRIPTSrts r+r$r$sE '--' gt $GX)F+& &;.59E9r,cxt|}ttj|}tj|dz S)zReturn 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 )rrr r.r/r0s r+rrs0 4=DV]]D)A ==Q r,cT|tjvrtj|gS|tjvrtjgS|dj |ddzg}|tj vr2|jtj ||j|S)zReturn a list of OpenType script tags associated with a given Unicode script code. Return ['DFLT'] script tag for invalid/unknown script codes. rr N) rSCRIPT_EXCEPTIONSrr9DEFAULT_SCRIPTrDNEW_SCRIPT_TAGSextendreverse)r# script_tagss r+r%r%s f...((566'--'%%&&q>'')KO;? r,ct|j}|rd|vst|dkDrtd|z|tj vrtj |}t|dk7r|t dz }t|dk7r|tjk(ry|tjvrtj|S|tjvrtj|S|dj|dz}tddD]}|||dk(r||dz n||z }|tjvry|S)zReturn 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. r7zinvalid OpenType tag: %rNrr )rstriplen ValueErrorrSCRIPT_ALIASESr8r{NEW_SCRIPT_TAGS_REVERSEDSCRIPT_EXCEPTIONS_REVERSEDupperrangerr9)tagr#r2s r+r&r& s; *   C #*C1 3c9:: f#####C( c(a- s3x c(a- f### f---..s33 f///0055a&,,.3q6)K 1a[GSVs]{1q5)AF G'--' r,)r#r8r?rpreturnHorizDirection | T)r#r8r?ztype[KeyError]rHorizDirection)r#r8r?zT | type[KeyError]rr)) __future__rfontTools.misc.textToolsrrrebisectrtypingrrr unicodedata2 ImportError unicodedatarAr r rrr__all__rr r!r;r"compilerBrFr9itemsrHr#rwrrpr$rr%r&)kvs00r+rsB"3 -- BA 8' !2*'" 9% 1 =DMM