
    hH              
       :   S SK r S SKrS SKJrJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJrJrJrJrJr  S SKJr  S SKJrJr  S S	KJr  S S
KJrJr  \ R8                  " \5      r\\ S3   rSr \!" \RD                  5      r#S\$4S jr%S\S\$S\4S jr&S\S\$S\RN                  SS4S jr(S\S\$S\RN                  SS4S jr)S\S\$S\\RT                     S\\RT                     4S jr+S\S\$S\RT                  S\\RT                     4S jr,S\RZ                  S\.4S jr/\\\\!S4   \\!S4   4   \\R`                  \R`                  4   4   r1S\\$   4S jr2 S(S\\\\\$\$4      \$\$4      S\\$   4S  jjr3\" S!/ S"Q5      r4 " S# S$5      r5 S)S\S%\1S&\$S\\1   4S' jjr6g)*    N)defaultdict
namedtuple)reduce)chain)log2)DefaultDictDictIterableListSequenceTuple)OPTIONS)	bit_countbit_indices)TTFont)otBaseotTablesz:COMPRESSION_LEVELFONTTOOLS_GPOS_COMPACT_MODEreturnc                     [         n [        [        R                  ;   a9  SS KnUR                  S[         S3[        5        [        R                  [           n [        U 5      S:X  a  U S;   a  [        U 5      $ [        S[         SU  35      e)Nr   'z}' environment variable is deprecated. Please set the 'fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL' option in TTFont.cfg.   
0123456789zBad =)
GPOS_COMPACT_MODE_DEFAULTGPOS_COMPACT_MODE_ENV_KEYosenvironwarningswarnDeprecationWarninglenint
ValueError)	env_levelr   s     P/var/www/html/env/lib/python3.13/site-packages/fontTools/otlLib/optimize/gpos.py_compression_level_from_envr'      s    )I BJJ.)* +  		
 JJ89	
9~yL89~
t56a	{C
DD    fontlevelc                 6   U R                  S5      nUc  U $ UR                  R                  R                   H^  nUR                  S:X  a  [        XU5        M!  UR                  S:X  d  M3  UR                  S   R                  S:X  d  MR  [        XU5        M`     U $ )NGPOS   	   r   )	gettable
LookupListLookup
LookupTypecompact_lookupSubTableExtensionLookupTypecompact_ext_lookup)r)   r*   gposlookups       r&   compactr:   *   s     88FD |**''..!4/!#(:(N(NRS(StF3	 / Kr(   r9   c                 \    [        XUR                  5      nX2l        [        U5      Ul        g N)compact_pair_posr5   r"   SubTableCount)r)   r*   r9   new_subtabless       r&   r4   r4   G   s$    $T&//BM#O}-Fr(   c                    [        XUR                   Vs/ s H  o3R                  PM     sn5      n/ nU H6  n[        R                  " 5       nSUl        Xcl        UR                  U5        M8     XRl        [        U5      Ul        g s  snf Nr   )	r=   r5   ExtSubTabler   ExtensionPosFormatappendr"   r>   )r)   r*   r9   ext_subtabler?   new_ext_subtablessubtables          r&   r7   r7   M   s    $6??S?<..?SM !,,.#+   .	 "
 (O01F Ts   B	subtablesc                     / nU HS  nUR                   S:X  a  UR                  U5        M&  UR                   S:X  d  M8  UR                  [        XU5      5        MU     U$ )Nr   r-   )rD   rE   extendcompact_class_pairs)r)   r*   rI   r?   rH   s        r&   r=   r=   [   sW     M??a  *__!  !4T(!KL  r(   rH   c                    SSK Jn  / n[        [        5      nUR                  R
                   H:  nXRR                  R                  R                  US5         R                  U5        M<     [        [        5      nUR                  R                  R                  5        H  u  phXx   R                  U5        M     0 n	[        UR                  5       H|  u  p[        U
R                  5       H^  u  p[        U5      (       a  M  [!        USS 5      [!        USS 5      4U	[#        [%        XX   5      5      [#        [%        X{   5      5      4'   M`     M~     ['        X	U5      nU H(  nUR                  U" XR)                  5       5      5        M*     U$ )Nr   )buildPairPosClassesSubtableValue1Value2)fontTools.otlLib.builderrN   r   listCoverageglyphs	ClassDef1	classDefsr/   rE   	ClassDef2items	enumerateClass1RecordClass2Recordis_really_zerogetattrtuplesorted,cluster_pairs_by_class2_coverage_custom_costgetReverseGlyphMap)r)   r*   rH   rN   rI   classes1gclasses2i	all_pairsclass1jclass2grouped_pairspairss                  r&   rL   rL   h   sR    EI,7,=H%%##--11!Q78??B &,7,=H"",,2241 5Ix445	"6#6#67IAf%%$/$/SIuVHK0159L3MNO 8 6 ARWXM4U<S<S<UVW r(   ri   c                     [        U SS 5      n[        U SS 5      nUS L =(       d    UR                  5       S:H  =(       a    US L =(       d    UR                  5       S:H  $ )NrO   rP   r   )r]   getEffectiveFormat)ri   v1v2s      r&   r\   r\      s\    	4	(B	4	(B$J6"//1Q6 
d
2b++-2r(   .glyphIDsc                     [        U 5      n U S   nU//nU SS   H3  nX1S-   :w  a&  US   R                  U5        UR                  U/5        UnM5     US   R                  U5        X S   U S   4$ )Nr   r   )r_   rE   )rp   lastrangesglyphIDs       r&   _getClassRangesrv      s    hHA;DfXFAB<Qh2Jd#MM7)$	  
 2JdA;,,r(   
class_data	class_idsc                     U(       d  gXS      u  p4n[        U5      nUSS   H4  nX   nU[        US   5      -  n[        XHS   5      n[        XXS   5      nM6     XT-
  S-   n	SU	S-  -   n
SUS-  -   n[        X5      $ )Nr   r   r-         )r"   minmax)rw   rx   coveragefirst_rangesmin_glyph_idmax_glyph_idrange_countre   data
glyphCountformat1_bytesformat2_bytess               r&   _classDef_bytesr      s    
 /9A,/G,Ll#Kqr]}s47|#<a1<a1	 
 ,q0J
Q&Ma'M},,r(   ClusteringContext)lines
all_class1all_class1_dataall_class2_datavalueFormat1_bytesvalueFormat2_bytesc                       \ rS rSrSrS\S\4S jr\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       rSrg)Cluster   ctxindices_bitmask_indices_column_indices_costr   r   c                 F    Xl         X l        S U l        S U l        S U l        g r<   r   )selfr   r   s      r&   __init__Cluster.__init__   s#    .#
r(   c                 h    U R                   c  [        U R                  5      U l         U R                   $ r<   )r   r   r   r   s    r&   indicesCluster.indices   s(    == '(<(<=DM}}r(   c                    ^  T R                   c>  [        [        R                  U 4S jT R                   5       5      n[        U5      T l         T R                   $ )Nc              3   V   >#    U  H  nTR                   R                  U   v   M      g 7fr<   )r   r   .0re   r   s     r&   	<genexpr>)Cluster.column_indices.<locals>.<genexpr>   s     )R\$((..*;\s   &))r   r   r#   __or__r   r   )r   bitmasks   ` r&   column_indicesCluster.column_indices   sD    ' SZZ)RT\\)RSG#.w#7D ###r(   c                 2    [        U R                  5      S-   $ rA   )r"   r   r   s    r&   widthCluster.width   s     4&&'!++r(   c                 V   U R                   c  SU R                  -   S-   S-   S-   U R                  -   S-   U R                  -   S-   S-   U R                  R
                  U R                  R                  -   [        U R                  5      -  U R                  -  -   U l         U R                   $ )Nrz   r-   )
r   coverage_bytesclassDef1_bytesclassDef2_bytesr   r   r   r"   r   r   r   s    r&   costCluster.cost   s    :: %%& 	   &&'  !" &&#'& '* +. 88..1L1LLdll#$**/ J: zzr(   c                   ^  S[        U 4S jT R                   5       5      S-  -   n[        [        R                  " U 4S jT R                   5       5      5      nSnS nU H  u  pVUb  XTS-   :w  a  US-  nUnM     SUS-  -   n[        X5      $ )Nr{   c              3   h   >#    U  H'  n[        TR                  R                  U   5      v   M)     g 7fr<   r"   r   r   r   s     r&   r   )Cluster.coverage_bytes.<locals>.<genexpr>  s(     D|!#dhh))!,--|s   /2r-   c              3   \   >#    U  H!  nTR                   R                  U   S    v   M#     g7fr   N)r   r   r   s     r&   r   r     s%     U1 8 8 ;A >s   ),r   r   rz   )sumr   r_   r   from_iterabler|   )r   r   rt   merged_range_countrs   startendr   s   `       r&   r   Cluster.coverage_bytes  s     Dt||DDqHI	 	 UUU
  JEEAX$5"a'"D ! 
 !1$%	 	 =00r(   c                    ^  [        T R                  U 4S jS9n[        T R                  R                  T R                   Vs/ s H  o"U:w  d  M
  UPM     sn5      $ s  snf )Nc                 H   > [        TR                  R                  U    5      $ r<   r   )re   r   s    r&   <lambda>)Cluster.classDef1_bytes.<locals>.<lambda>4  s    DHH<O<OPQ<R8Sr(   )key)r}   r   r   r   r   )r   biggest_indexre   s   `  r&   r   Cluster.classDef1_bytes-  sM     DLL.STHH$$$,,&U,Q}BTq,&U
 	
&Us   	A
A
c                 V    [        U R                  R                  U R                  5      $ r<   )r   r   r   r   r   s    r&   r   Cluster.classDef2_bytes9  s!     txx779L9LMMr(   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__	__slots__r   r#   r   propertyr   r   r   r   r   r   r   __static_attributes__ r(   r&   r   r      s     QI-    
 $ $ , ,  B 1 1> 	
 	
 N Nr(   r   rk   compressionc           	        ^^^$^%^&^' T(       d  T/$ [        [        S T 5       5      5      n[        [        S T 5       5      5      nU V^s/ s H"  m[        UU4S j[        U5       5       5      PM$     nnU R	                  5       m'U Vs/ s H  n[        U'4S jU 5       5      PM     nnU Vs/ s H  n[        U'4S jU 5       5      PM     n	nSn
SnTR                  5        HG  u  pXS   (       a  US   R                  5       OS-  n
XS   (       a  US   R                  5       OS-  nMI     [        U
5      S-  n[        U5      S-  n[        UUUU	UU5      m%0 m$S	[        S
[        4U$U%4S jjm&S[        S[        S
[        4U&4S jjn[        [        U5      5       Vs/ s H  nT&" SU-  5      PM     nnT&" S[        U5      -  S-
  5      R                  n[        R!                  S[        U5       35        [        U5      S:  Ga-  S nS nS nS n[        U5       Hi  u  nn[        UUS-   S  5       HN  u  nnU" UU5      nUR                  UR                  -
  UR                  -
  nUb  UU:  d  M@  UnUnUS-   U-   nUnMP     Mk     Uc   eUc   eUc   eUc   eUS:  ay  [        S U 5       5      nSUU-  -
  n[#        SU-
  5      * U-  n[        R!                  S[        U5      S SUS SU 35        US:X  a  [        U5      n[        U5      US-   ::  a  OUU	 UUU'   [        U5      S:  a  GM-  [%        [&        5      n TR                  5        H  u  nn!U!U US      U'   M     / n"U HJ  n['        5       n#UR(                   H  nUU   mU#R+                  U T   5        M     U"R-                  U#5        ML     U"$ s  snf s  snf s  snf s  snf )Nc              3   *   #    U  H	  oS    v   M     g7fr   r   r   pairs     r&   r   ?cluster_pairs_by_class2_coverage_custom_cost.<locals>.<genexpr>I       6G   c              3   *   #    U  H	  oS    v   M     g7f)r   Nr   r   s     r&   r   r   J  r   r   c              3   F   >#    U  H  u  pTU4T;   a  S U-  OSv   M     g7f)r   r   Nr   )r   re   ri   rg   rk   s      r&   r   r   N  s/      
2	 v&%/AFQ62s   !c              3   .   >#    U  H
  nTU   v   M     g 7fr<   r   r   name
name_to_ids     r&   r   r   Y       9ST
4(S   c              3   .   >#    U  H
  nTU   v   M     g 7fr<   r   r   s     r&   r   r   \  r   r   r   r   r-   r   r   c                 X   > TR                  U S 5      nUb  U$ [        TU 5      nUTU '   U$ r<   )r/   r   )r   clustercluster_cacher   s     r&   make_clusterBcluster_pairs_by_class2_coverage_custom_cost.<locals>.make_clusterr  s;    ##GT2N#w'!(gr(   r   otherc                 B   > T" U R                   UR                   -  5      $ r<   )r   )r   r   r   s     r&   merge;cluster_pairs_by_class2_coverage_custom_cost.<locals>.mergez  s    G33e6K6KKLLr(   z        len(clusters) = c              3   8   #    U  H  oR                   v   M     g 7fr<   )r   )r   cs     r&   r   r     s     &@x!vvxs   z            len(clusters) = 3dz    size_reduction=z5.2fz    max_new_subtables=r.   )r_   setr   rY   ra   rv   rX   rm   r   r   r#   r   ranger"   r   logdebugr   r   dictr   updaterE   )(r)   rk   r   r   
all_class2rg   r   clsr   r   format1format2r   valuer   r   r   re   clusterscost_before_splittinglowest_cost_changebest_cluster_indexbest_other_indexbest_mergedr   rh   r   mergedcost_changecost_after_splittingsize_reductionmax_new_subtablespairs_by_class1valuespairs_groupspairs_groupr   r   r   r   s(    `   `                              @@@@r&   r`   r`   ?  sh   
 w 6667J6667J !
 !F	 	 
&z2
 	
 ! 
  ((*J FPEOc9S99Z   FPEOc9S99Z   GG{{}!H58..0!C!H58..0!C % #7+a/"7+a/
C )+Mc g  Mw Mw M7 M /4CJ.?@.?Q!V$.?H@ )!s5z/Q)>?DDII(X89
h-!
!!#H-JAw%hq1uw&785w.$kkGLL85::E%-?Q1Q)4&)*&'(1uqy$"(K 9 . "---!---+++&&& ! $'&@x&@#@  !58M!MMN "&a.&8!9 9K GII.s8}R.@@STbcgShh~  @Q  R  S a$'M! 8} 1A 55 %&'2#$m h-!
r 5@4EOf)/Q & & "L!VA]Fv67 ! 	K(  }L As   )OO0O#O)F)   )7loggingr   collectionsr   r   	functoolsr   	itertoolsr   mathr   typingr   r	   r
   r   r   r   fontTools.configr   fontTools.misc.intToolsr   r   fontTools.ttLibr   fontTools.ttLib.tablesr   r   	getLoggerr   r   COMPRESSION_LEVELr   strdefaultr   r#   r'   r:   r2   r4   r7   PairPosr=   rL   r[   boolr\   ValueRecordPairsrv   r   r   r   r`   r   r(   r&   <module>r     sP    	 /    E E $ : " 3!xj(:;<  :  1 9 9: ES E$&   :. . .X__ . .2V 2C 2 2T 2



)1(2B2B)C
h

(0(8(8	(

6800 T  		%S/5c?
*+	&

f00
013	
-hsm 
-" -U4c3h0#s:;<-Cy-, 
 yN yN~ L
LL L 
%[	Lr(   