
    hL(                      >   S r SrSSKJr  SSK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Jr  S
rS\\/\4   S\\   S\\\      4S jrS\S\S\4S jr " S S\	5      r\" SS9 " S S\5      5       r\" SS9 " S S\5      5       r0 \R>                  S4\" 5       /_\R>                  S4\" SS9/_\R@                  S4\" SS9/_\RB                  S 4\" S!S"S#9/_\R@                  S4\" 5       /_\RD                  S4\" S$S9/_\RF                  S4\" S%S&S'9\" S(S)S'9/_\RH                  S4\" S%S&S'9\" S*S+S'9/_\RJ                  S4\" S,S-S'9\" S.S/S'9/_\RL                  S4\" S0S9/_\RL                  S4\" 5       /_\RL                  S14\" 5       /_\RN                  S4\" S2S9/_\RN                  S4\" 5       /_\RN                  S14\" S3S49\" S5S49\" S6S49/_\RP                  S4\" S7S9/_\RP                  S4\" 5       /_\RP                  S14\" 5       /\RR                  S4\" S8S9/\RR                  S4\" 5       /\RR                  S14\" S3S49\" S5S49\" S6S49/\RT                  S4\" S9S9\" S3S49\" S6S49/\RV                  S 4\" S:S9/\RX                  S 4\" S;S9/\RZ                  S 4\" 5       /\R\                  S 4\" S<S49/\R^                  S 4\" S=S9/\R`                  S 4\" S>S?S'9/\Rb                  S 4\" S@SAS'9/\Rd                  S 4\" SBSCS'9\" SDSES'9/0Er3\\Rh                  Rj                  SF4   r6SG\Rh                  SH\S\\6   4SI jr7\\\6   \\6   /S 4   r8SG\Rh                  SH\SJ\8S\\6   4SK jr9SL\Rt                  SM\\   4SN jr;g )OzReorder glyphs in a font.zRod Sheeter    )ttLib)otBase)otTables)ABCabstractmethod)	dataclass)deque)OptionalAnyCallableDequeIterableListTupleCoverageget_glyph_idglyphsparallel_listc                    ^  U(       a;  [        S [        X5       5       U 4S jS9n[        [        [        U6 5      u  pEXRS S & O
[        UT S9nXAS S & g )Nc              3   ,   #    U  H
  u  pX4v   M     g 7fN ).0ges      O/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/reorderGlyphs.py	<genexpr>_sort_by_gid.<locals>.<genexpr>$   s     ; :aV :s   c                    > T" U S   5      $ )Nr   r   )tr   s    r   <lambda>_sort_by_gid.<locals>.<lambda>%   s    ,qt,    key)sortedzipmaplist)r   r   r   	reorderedsorted_glyphssorted_parallel_lists   `     r   _sort_by_gidr-      sR    
 ;F :;,
	 /2$Y.H+/av<81Ir#   valuedotted_attrreturnc                     UR                  S5      nU(       d   eU(       a%  UR                  S5      n[        X5      n U(       a  M%  U $ )N.r   )splitpopgetattr)r.   r/   
attr_names	attr_names       r   _get_dotted_attrr8   /   sC    ""3'J:
NN1%	) * Lr#   c                   `    \ rS rSrSr\S\R                  S\R                  SS4S j5       r
Srg)	ReorderRule9   zEA rule to reorder something in a font to match the fonts glyph order.fontr.   r0   Nc                     g r   r   )selfr<   r.   s      r   applyReorderRule.apply<   s    JMr#   r   )__name__
__module____qualname____firstlineno____doc__r   r   TTFontr   	BaseTabler?   __static_attributes__r   r#   r   r:   r:   9   s,    OM%,,Mv/?/?MDM Mr#   r:   T)frozenc                   z    \ rS rSr% SrSr\\   \S'   \	r
\\S'   S\R                  S\R                  SS4S	 jrS
rg)ReorderCoverage@   zNReorder a Coverage table, and optionally a list that is sorted parallel to it.Nparallel_list_attrcoverage_attrr<   r.   r0   c                    [        X R                  5      n[        U5      [        La  S nU R                  (       ad  [        X R                  5      n[        U5      [        L d   U R                   S35       e[        U5      [        UR                  5      :X  d   S5       e[        UR                  UR                  U5        g U R                  (       a
   SU  35       eU H$  n[        UR                  UR                  S 5        M&     g )N should be a listzNothing makes sensez2Can't have multiple coverage AND a parallel list; )	r8   rN   typer)   rM   lenr   r-   
getGlyphID)r>   r<   r.   coverager   coverage_entrys         r   r?   ReorderCoverage.applyH   s    #E+=+=>>% M&& 08O8O P'4/A--..?@A/=)S-AAXCXXA(//=I
 ++KCD6JK+"*T__n.C.CTJ #+r#   r   )rA   rB   rC   rD   rE   rM   r
   str__annotations___COVERAGE_ATTRrN   r   rF   r   rG   r?   rH   r   r#   r   rK   rK   @   sH    X )-,'M3'K%,, Kv/?/? KD Kr#   rK   c                   l    \ rS rSr% Sr\\S'   \\S'   S\R                  S\	R                  SS4S	 jrS
rg)ReorderList`   a+  Reorder the items within a list to match the updated glyph order.

Useful when a list ordered by coverage itself contains something ordered by a gid.
For example, the PairSet table of https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable.
	list_attrr%   r<   r.   r0   Nc                    ^ ^ [        UT R                  5      n[        U[        5      (       d   T R                   S35       eUR	                  UU 4S jS9  g )NrP   c                 N   > TR                  [        U TR                  5      5      $ r   )rS   r5   r%   )vr<   r>   s    r   r!   #ReorderList.apply.<locals>.<lambda>n   s    twq$((/CDr#   r$   )r8   r]   
isinstancer)   sort)r>   r<   r.   lsts   ``  r   r?   ReorderList.applyk   sG    udnn5#t$$J(88I&JJ$DEr#   r   )rA   rB   rC   rD   rE   rW   rX   r   rF   r   rG   r?   rH   r   r#   r   r[   r[   `   s;     N	HF%,, Fv/?/? FD Fr#   r[         Value)rM   PairSetNPairValueRecordSecondGlyphr$   EntryExitRecordMarkCoveragezMarkArray.MarkRecord)rN   rM   BaseCoveragezBaseArray.BaseRecordLigatureCoveragezLigatureArray.LigatureAttachMark1CoveragezMark1Array.MarkRecordMark2CoveragezMark2Array.Mark2Record
PosRuleSet   ChainPosRuleSetBacktrackCoverage)rN   InputCoverageLookAheadCoverage
SubRuleSetChainSubRuleSet
SubstituteAttachPointLigGlyphExtendedShapeCoverageItalicsCorrectionTopAccentCoverageTopAccentAttachmentMathKernCoverageMathKernInfoRecordsVertGlyphCoverageVertGlyphConstructionHorizGlyphCoverageHorizGlyphConstruction.rootroot_accessorc              #   :   #    [        XS 5       S h  vN   g  N7f)Nc                 $    U R                  U5      $ r   )extend)frontiernews     r   r!   !_bfs_base_table.<locals>.<lambda>   s    8??33Gr#   )_traverse_ot_data)r   r   s     r   _bfs_base_tabler      s      !G  s   add_to_frontier_fnc              #   P  #    [        5       nUR                  [        R                  R	                  X5      45        U(       ab  UR                  5       nUS   R                  nUv   / nUR                  5        H  nUR                  XG4-   5        M     U" X65        U(       a  Ma  g g 7f)N)r	   appendr   rG   SubTableEntrypopleftr.   iterSubTables)r   r   r   r   pathcurrentnew_entriessubtable_entrys           r   r   r      s     
 %*GHOOV%%33MHJK
!r(..
%335Nt&778 6 	81 (s   B B&$B&r<   new_glyph_orderc           	      v  ^  T R                  5       n[        U5      [        U5      :w  a$  [        S[        U5       S[        U5       S35      e[        U5      [        U5      :w  a;  [        S[        U5      [        U5      -
   S[        U5      [        U5      -
   35      eT R	                  5         [        U 4S jT R                  5        5       5      nU(       a  [        SU 35      eT R                  U5        1 SknU H  nUT R                  5       ;   d  M  [        T U   R                  S	U S
35       HY  nUS   R                  n[        U5      [        USS 5      4n[        R                  U/ 5       H  n	U	R                  T U5        M     M[     M     ST ;   a  T S   n
U
R                   R"                  S   R$                  R&                  nXR                   R"                  S   l        U Vs0 s H  oUR                  U5      _M     snU
R                   R"                  S   R$                  l        g g s  snf )NzNew glyph order contains z glyphs, but font has z glyphszTNew glyph order does not contain the same set of glyphs as the font:
* only in new: z
* only in old: c              3   X   >#    U  H  nTR                  U5      (       a  M  Uv   M!     g 7fr   )isLoaded)r   r    r<   s     r   r    reorderGlyphs.<locals>.<genexpr>  s     G;admmA6F;s   *	*z/Everything should be loaded, following aren't: >   GDEFGPOSGSUBMATHzfont["z"]r   FormatzCFF r   )getGlyphOrderrR   
ValueErrorsetensureDecompiledr&   keyssetGlyphOrderr   tabler.   rQ   r5   _REORDER_RULESgetr?   cfftopDictIndexCharStringscharStringscharset)r<   r   old_glyph_order
not_loadedcoverage_containerstagr   r.   reorder_keyreorder	cff_tablecharstringsks   `            r   reorderGlyphsr      s   ((*O
?s?33'O(<'= >01:
 	

 ?s?33!/2S5IIJ K!/2S5IIJL
 	
 	G499;GGJJ:,WXX':"$))+'S	6#b9IJR#E{GE8T,JK-11+rBGMM$.  C K # ~L	mm003??KK0?""1%-+:A
+:a{q!!?A
	""1%11=	 A
s   0H6)<rE   
__author__	fontToolsr   fontTools.ttLib.tablesr   r   otabcr   r   dataclassesr   collectionsr	   typingr
   r   r   r   r   r   r   rY   rW   intr-   r8   r:   rK   r[   	SinglePosPairPosri   
CursivePosMarkBasePos
MarkLigPosMarkMarkPos
ContextPosChainContextPosContextSubstChainContextSubstReverseChainSingleSubst
AttachListLigCaretListMarkGlyphSetsDefMathGlyphInfoMathItalicsCorrectionInfoMathTopAccentAttachmentMathKernInfoMathVariantsr   rG   r   SubTablePathr   AddToFrontierFnr   rF   r   r   r#   r   <module>r      s   
  ) 1 # !    C5#:&I DI&$C c c N# N $Kk K K> $F+ F F$X\\1)*X \\17CDX ZZOoCD	X
 ZZ%6MJKX ZZOo'(X ]]A<MNOX ^^Q(=S	
 	(=S	
	X  ]]A(=S	
 	,=	
	!X2 ^^Q)>U	
 	)>V	
	3XB ]]ALIJCXD ]]A*+EXF ]]A*+GXH oARSTIXJ o/0KXL &9:o6&9:MXX __a?lKLYXZ __a?,-[X\ __a?,-1CT UV1 121&9:o6&9: 
 #<8&9:&9:& ]]DO}MN__doLM$/"3!4t=TUV!!4(+>?+ &-BW	
)
 __d,AV	

 __d-6	
 	.7	
	]Xz V%%33S89


+.l E,/l1CDdJK2


2+.2DS2l2*(
 (
tCy (
r#   