o |nh3 @sfddlZddlZddlZddlmZmZddlmZddlm Z dZ dZ e dZ Gd d d eZGd d d eZGd ddeZGdddeZdedefddZdededefddZdedefddZdedefddZdeeefdefddZdeeefd edefd!d"ZdEded$edefd%d&Zdedefd'd(Zdedefd)d*Zdeddfd+d,Z ded-edefd.d/Z!dEded-ed0edefd1d2Z"deeee#fddfd3d4Z$dedefd5d6Z%deeee#fdefd7d8Z&dFd:ed;edZ' # # # #dGdeeee#fd?ed@ed;edr?r@zGInvalid direction for codepoint at position {} in a left-to-right label)r9r:z0Label ends with illegal codepoint directionality) enumerater bidirectionalrr(repr) r*r4 bidi_labelidxr directionrtl valid_ending number_typerrr check_bidiFsV   rJcCs"t|dddkrtddS)NrMz0Label begins with an illegal combining characterT)rcategoryr r.rrrcheck_initial_combinersrMcCs<|dddkr td|ddks|ddkrtdd S) Nz--z4Label has disallowed hyphens in 3rd and 4th positionr-z)Label must not start or end with a hyphenT)r r.rrrcheck_hyphen_oks rRcCstd||kr tddS)NNFCz%Label must be in Normalization Form C)r normalizer r.rrr check_nfcsrUposcCs0t||}|dkr~|dkrtt||dtkrdSd}t|dddD]!}tjt||}|tdkr9q&|tdtd fvrGd}n|sLdSd}t|dt|D]$}tjt||}|tdkrjqW|td td fvryd}|S|S|S|d kr|dkrtt||dtkrdSdSdS) Ni rrTFrQTr9Dr6i )rr_virama_combining_classranger joining_typesgetr-)r*rVcp_valueoki joining_typerrrvalid_contextjsB   ra exceptioncCst||}|dkr3d|krt|dkr1ndSt||ddkr1t||ddkr1dSdS|dkrP|t|dkrNt|dkrNt||ddSdS|d ksX|d krg|dkret||dd SdS|d kr|D]}|d krtqmt|dst|dst|drdSqmdSd|krdkrnn|D]}dt|krdkrdSqqdSd|krdkrndS|D]}dt|krdkrdSqqdSdS)NrrlTFiuGreekiiHebrewi0u・HiraganaKatakanaHani`iiii)rr-r!)r*rVrbr]rrrrvalid_contextosJ (rjc Cs<t|ttfr |d}t|dkrtdt|t|t|t |D]q\}}t |}t |t j dr7q&t |t j drlzt||sTtdt||dt|Wq&tyktdt||dt|wt |t j d rt||std t||dt|q&td t||dt|t|dS) Nzutf-8rz Empty LabelPVALIDCONTEXTJz*Joiner {} not allowed at position {} in {}rzsx   F,*'$  )