
    (phE              
       T   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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  \ R>                  " \ 5      r!\\  S3   r"Sr#\$" \"RJ                  5      r&S\'4S jr(S\S\'S\4S jr)S\S\'S\RT                  SS4S jr+S\S\'S\RT                  SS4S jr,S\S\'S\\RZ                     S\\RZ                     4S jr.S\S\'S\RZ                  S\\RZ                     4S jr/S\R`                  S\14S jr2\\\\$S4   \\$S4   4   \\Rf                  \Rf                  4   4   r4S\\'   4S jr5 S)S\\\\\'\'4      \'\'4      S \\'   4S! jjr6\" S"/ S#Q5      r7\ " S$ S%5      5       r8 S*S\S&\4S'\'S\\4   4S( jjr9g)+    N)defaultdict
namedtuple)	dataclass)cached_property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     Q/var/www/html/venv/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*   r;   c                 \    [        XUR                  5      nX2l        [        U5      Ul        g N)compact_pair_posr7   r$   SubTableCount)r+   r,   r;   new_subtabless       r(   r6   r6   H   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?   r7   ExtSubTabler   ExtensionPosFormatappendr$   r@   )r+   r,   r;   ext_subtablerA   new_ext_subtablessubtables          r(   r9   r9   N   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/   )rF   rG   extendcompact_class_pairs)r+   r,   rK   rA   rJ   s        r(   r?   r?   \   sW     M??a  *__!  !4T(!KL  r*   rJ   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.builderrP   r   listCoverageglyphs	ClassDef1	classDefsr1   rG   	ClassDef2items	enumerateClass1RecordClass2Recordis_really_zerogetattrtuplesorted,cluster_pairs_by_class2_coverage_custom_costgetReverseGlyphMap)r+   r,   rJ   rP   rK   classes1gclasses2i	all_pairsclass1jclass2grouped_pairspairss                  r(   rN   rN   i   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*   rk   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  $ )NrQ   rR   r   )r_   getEffectiveFormat)rk   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   )ra   rG   )rr   lastrangesglyphIDs       r(   _getClassRangesrx      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)ry   rz   coveragefirst_rangesmin_glyph_idmax_glyph_idrange_countrg   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'   \\S'   \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_bitmaskc                 ,    [        U R                  5      $ r>   )r   r   selfs    r(   indicesCluster.indices   s    4//00r*   c                 v   ^  [        [        R                  U 4S jT R                   5       5      n[	        U5      $ )Nc              3   V   >#    U  H  nTR                   R                  U   v   M      g 7fr>   )r   r   .0rg   r   s     r(   	<genexpr>)Cluster.column_indices.<locals>.<genexpr>   s     %NAdhhnnQ&7s   &))r   r%   __or__r   r   )r   bitmasks   ` r(   column_indicesCluster.column_indices   s*     %N%NO7##r*   c                 2    [        U R                  5      S-   $ rC   )r$   r   r   s    r(   widthCluster.width   s     4&&'!++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                  -  -   $ )Nr|   r/   )	coverage_bytesclassDef1_bytesclassDef2_bytesr   r   r   r$   r   r   r   s    r(   costCluster.cost   s     !!" 	   ""#  !" ""##& '* +. xx**TXX-H-HH$,, jj/	
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   r|   )sumr   ra   r   from_iterabler~   )r   r   rv   merged_range_countru   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   )rg   r   s    r(   <lambda>)Cluster.classDef1_bytes.<locals>.<lambda>   s    DHH<O<OPQ<R8Sr*   )key)r   r   r   r   r   )r   biggest_indexrg   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_bytes%  s!     txx779L9LMMr*    N)__name__
__module____qualname____firstlineno__r   __annotations__r%   r   r   r   propertyr   r   r   r   r   __static_attributes__r   r*   r(   r   r      s    	1 1 $ $ , , 
 
> 1 1> 	
 	
 N Nr*   r   rm   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>5       6G   c              3   *   #    U  H	  oS    v   M     g7f)r   Nr   r   s     r(   r   r   6  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   rg   rk   ri   rm   s      r(   r   r   :  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   E       9ST
4(S   c              3   .   >#    U  H
  nTU   v   M     g 7fr>   r   r   s     r(   r   r   H  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>   )r1   r   )r   clustercluster_cacher   s     r(   make_clusterBcluster_pairs_by_class2_coverage_custom_cost.<locals>.make_cluster^  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>.mergef  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=r0   )ra   setr   r[   rc   rx   rZ   ro   r   r   r%   r   ranger$   r   logdebugr	   r   dictr   updaterG   )(r+   rm   r   r   
all_class2ri   r   clsr   r   format1format2r   valuer   r   r   rg   clusterscost_before_splittinglowest_cost_changebest_cluster_indexbest_other_indexbest_mergedr   rj   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(   rb   rb   +  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)   ):loggingr   collectionsr   r   dataclassesr   	functoolsr   r   	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<   r4   r6   r9   PairPosr?   rN   r]   boolr^   ValueRecordPairsrx   r   r   r   rb   r   r*   r(   <module>r     sd    	 / ! -   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-, 
  cN cN cNR L
LL L 
%[	Lr*   