
    jke>                        d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	 d dl
Z
 e
j                  d      Zd Zd	 Zd
 Zd Zd Zd Zd edej&                  _        d d dej*                  _        ed dej.                  _        eedej2                  _        eedej6                  _        eedej:                  _        eeedej<                  _        eeedej>                  _        e eedejB                  _        deiejD                  _        eedejF                  _        ee$dxejJ                  _        xejL                  _        xejN                  _        xejP                  _        xejR                  _        ejT                  _         e+e       edx ejX                  d      _        x ejX                  d       _        x ejX                  d!      _        x ejX                  d"      _        x ejX                  d#      _         ejX                  d$      _         e ejX                  d             d%        Z- eej\                  ej^                  ej`                  ejb                  ejd                  ejf                  ejh                  ejj                  ejl                  ejn                  ejp                        d&        Z9 eejt                  ejv                  ejx                  ejz                        d'        Z> eejt                  ejv                  ejx                  ejz                        d(        Z9 eej~                  ej                        d)        Z9 eej                        d*        Z9 eej2                        d+        Z9 eej                        d,        ZB eej2                        d-        ZB eej                        d.        Z9 eej.                        d/        Z9 eej                  ej                        d0        ZF eej                        d1        ZF eej&                        d2        ZFd3 ZHd4 ZIy)5    )ttLib)DefaultTable)otTables)
add_methodmergeObjects)*NzfontTools.mergec                     t        |       S N)sumListslsts    8/usr/lib/python3/dist-packages/fontTools/merge/layout.pymergeLookupListsr      s    C=    c                     | sJ t        j                         }d |_        t        | D cg c]  }|j                  s|j                   c}      |_        t        |j                        |_        |S c c}w r
   )r   FeatureFeatureParamsr   LookupListIndexlenLookupCountr   selfls      r   mergeFeaturesr      sg    J3DD+$'=q1+<+<		=D 4//0DK 	>s
   A1A1c                 J   i }| D ]<  }|D ]5  }|j                   }||vrg ||<   ||   j                  |j                         7 > g }t        |j	                               D ]A  }t        j                         }||_         t        ||         |_        |j                  |       C |S r
   )
FeatureTagappendr   sortedkeysr   FeatureRecordr   )r   dr   ftagretrecs          r   mergeFeatureListsr&       s    
A % 	%A,,C!|#cFMM!))$		%% Caffh $$&#AcF+

3	
 Jr   c                 "   | sJ t        d | D              sJ t        j                         }d |_        d|_        t        | D cg c]  }|j                  s|j                   c}      |_        t        |j                        |_        |S c c}w )Nc              3   :   K   | ]  }|j                   d k(    yw)  N)ReqFeatureIndex).0r   s     r   	<genexpr>z!mergeLangSyses.<locals>.<genexpr>5   s     8qq  F*8s   r)   )	allr   LangSysLookupOrderr*   r&   FeatureIndexr   FeatureCountr   s      r   mergeLangSysesr2   1   s    J3 8C8888DD!D)!$7A7D D--.DK 	8s   BBc                    | sJ t        |       dk(  r| d   S i }| D ]X  }|j                  D ]G  }|j                  |vrg ||j                  <   ||j                     j                  |j                         I Z g }t        |j                               D ]A  \  }}t        j                         }t        |      |_        ||_        |j                  |       C t        j                         }||_        t        |      |_
        | D cg c]  }|j                  s|j                   }	}|	rt        |	      |_        |S d |_        |S c c}w )N   r   )r   LangSysRecord
LangSysTagr   r.   r   itemsr   r2   ScriptLangSysCountDefaultLangSys)
r   	langSysessrlsr	lsrecordsr#   langSys_listr   sdfltLangSysess
             r   mergeScriptsrB   A   s@   J3
3x1}1vI :## 	:C~~Y.,.	#..)cnn%,,S[[9	::
 I#IOO$56 \$$&$\2	 ??D"DID/2G!a6F6FQ%%GMG,]; K #K Hs   EEc                 J   i }| D ]<  }|D ]5  }|j                   }||vrg ||<   ||   j                  |j                         7 > g }t        |j	                               D ]A  }t        j                         }||_         t        ||         |_        |j                  |       C |S r
   )	ScriptTagr   r8   r   r   r   ScriptRecordrB   )r   r!   r   r@   r#   r$   r%   s          r   mergeScriptRecordsrF   ^   s    
A $ 	$A++C!|#cFMM!((#		$$ Caffh ##%!!C&)


3	
 Jr   c                      y r
    r   s    r   <lambda>rI   p       r   )ScriptCountrE   c                      y r
   rH   r   s    r   rI   rI   t   rJ   r   c                 0    t        t        |       d       S )Nc                     | j                   S r
   )BaseScriptTagr@   s    r   rI   z<lambda>.<locals>.<lambda>w   s
    Q__ r   keyr   r   r   s    r   rI   rI   v   s    F4% r   )BaseScriptCountBaseScriptRecordc                 0    t        t        |       d       S )Nc                     | j                   S r
   r   rP   s    r   rI   z<lambda>.<locals>.<lambda>}   s
    Q\\ r   rQ   rS   r   s    r   rI   rI   }   s    ;Q!R r   )r1   r    )r   Lookup)Formatglyphs)rZ   	classDefs)CoverageLigGlyphCountLigGlyph)r]   
GlyphCountAttachPoint)MarkSetTableFormatMarkSetCountr]   r   )BaseTagCountBaselineTag)r   Version)tableTagtableGDEFGSUBGPOSBASEJSTFMATHc                    t        |      t        |j                        k(  sJ t        t        ||j                              D ]^  \  }\  }}|s||t        u r/t
        j                  d|j                  |   j                  |       Fd }d }|j                  j                  j                  D ]  }|j                  dk(  r|j                  j                  g|j                  j                  D 	cg c]  }	|	j                    c}	z   D ]  }
|
|
j"                  D cg c]  }|j$                  dk(  s| }}t        |      dk  sJ |r|d   }n|st'        j(                         }d|_        t'        j*                         x}|_        d |_        d|_        g |_        |j                  j2                  j(                  j5                  |       |j                  j2                  xj6                  dz  c_        |}|
j"                  j5                  |       |
j"                  j9                  d        |st'        j:                         }||_        t'        j>                         }d|_         d|_!        d|_"        |g|_#        |j                  jH                  Yt'        jH                         |j                  _$        g |j                  jH                  _        d|j                  jH                  _        |j                  jH                  j>                  j5                  |       |j                  jH                  xj.                  dz  c_        |j*                  j0                  d d |gk7  s\|g|j*                  j0                  d d |j*                  xj.                  dz  c_          a tK        jL                  | ||       | S c c}	w c c}w )Nz[Have non-identical duplicates to resolve for '%s' but no GSUB. Are duplicates intended?: %sDFLTloclr4   r   c                     | j                   S r
   rX   )vs    r   rI   zmerge.<locals>.<lambda>   s
    ALL r   rQ   )'r   duplicateGlyphsPerFont	enumeratezipNotImplementedlogwarningfonts_merger__namerh   
ScriptListrE   rD   r8   r:   r5   r.   r0   r   r   r    r   r   r   r   FeatureListr   r1   sortSingleSubstmappingrY   
LookupFlag
LookupTypeSubTableCountSubTable
LookupListr   merge)r   mtablesirh   dupssynthFeaturesynthLookupscriptr   langsysrs   featurer"   subtables                  r   r   r      s4   v;#a667777%c&!2J2J&KL ;5=E4=E^3KKm
((
 kk,,99 .	5F6)"MM889#)==#>#>=		=  +5 ?&-&:&:Uallf>T1UU7|q(((%ajG''/'='='?28/3;3C3C3EEL0*.(),.)//==DD\R//<<A<*G((//8((--2H-I"'335H'+H$"*//"3K-.K*-.K*01K-,4:K({{--5 2:1D1D1F.8:..5=>..:KK**1188EKK**66!;6??222A6;-G;F-GOO33BQ7OO//14/W+5.	5;5z tQ'K]=
 Vs   /N>
O
1O
c                      y r
   rH   r   	lookupMaps     r   
mapLookupsr     s     	r   c                     G d dt               }| j                  dvry t        | j                  d      si | j                  _        | j                  | j                  j                  vr@ || j                  | j                        }|| j                  j                  | j                  <   | j                  j                  | j                     S )Nc                       e Zd Zd Zy)/__merge_classify_context.<locals>.ContextHelperc                 J   |j                   j                  d      rd}d}nd}d}|j                   j                  d      rd}nd}||z   }|| _        || _        || _        || _        |dz   | _        |dk(  r|dz   | _        |d	z   | _	        y |d
k(  r|dz   | _        |dz   | _	        y y )NSubstSubPosChain LookupRecordr4   RuleRuleSet   	ClassRuleClassSet)
__name__endswith
startswithTypTyper   ChainTypr   r   r   )r   klassrZ   r   r   r   r   s          r   __init__z8__merge_classify_context.<locals>.ContextHelper.__init__!  s    ~~&&w/~~((1s{HDHDIDJ$DM $~ 5D{$v-	')31${2	'*4 r   N)r   
__module____qualname__r   rH   r   r   ContextHelperr      s    	5r   r   )r4   r      _merge__ContextHelpers)objectrZ   hasattr	__class__r   )r   r   helpers      r   __merge_classify_contextr     s    5 58 {{)#4>>#;<02-{{$..???t~~t{{;=C--dkk:>>00==r   c                    | j                         }| j                  dv rot        | |j                        D ]U  }|st        ||j                        D ]7  }|st        ||j
                        D ]  }|s||j                     |_         9 W y | j                  dk(  r3t        | |j
                        D ]  }|s||j                     |_         y J d| j                  z         )N)r4   r   r   unknown format: %s)r   rZ   getattrr   r   r   r   )r   r   crsrlls         r   r   r   F  s     	%%'A{{f$		* 		GBR( G!!Q^^4 GB )223E3E)FB&GG		G 
	$/ 	?B!*2+=+=!>B	?
 	5&44qr   c                     | j                   dk(  r| j                  j                  |       y J d| j                   z         )Nr4   r   )rZ   ExtSubTabler   r   s     r   r   r   c  s6    {{a##I.4&44qr   c                 N    | j                   D ]  }|s|j                  |        y r
   )r   r   )r   r   sts      r   r   r   k  s'    mm !
i !r   c                 N    | j                   D ]  }|s|j                  |        y r
   )rY   r   )r   r   r   s      r   r   r   s  s'    [[  	Y r   c                 L    | j                   dz  r|| j                     | _        y y )N   )r   MarkFilteringSet)r   markFilteringSetMaps     r   mapMarkFilteringSetsr   {  s&     3D4I4I J  r   c                 N    | j                   D ]  }|s|j                  |        y r
   )rY   r   )r   r   r   s      r   r   r     s*    [[ 4	234r   c                 R    | j                   D cg c]  }||   	 c}| _         y c c}w r
   )r   )r   r   r   s      r   r   r     s"    262F2FGQIaLGDGs   $c                 z    | j                   D ],  }|r|j                  s|j                  j                  |       . y r
   )r    r   r   )r   r   r"   s      r   r   r     s5     (					Y'(r   c                     | j                   D cg c]  }||   	 c}| _         | j                  dk7  r|| j                     | _        y y c c}w )Nr)   )r0   r*   )r   
featureMapr   s      r   mapFeaturesr     sK    040A0AB1ABDu$)$*>*>? % Cs   Ac                     | j                   r| j                   j                  |       | j                  D ],  }|r|j                  s|j                  j                  |       . y r
   )r:   r   r5   r.   )r   r   r   s      r   r   r     sR    ''
3 *					j)*r   c                 z    | j                   D ],  }|r|j                  s|j                  j                  |       . y r
   )rE   r8   r   )r   r   r@   s      r   r   r     s5     )	Z()r   c                 *   | j                  d      }| j                  d      }| j                  d      }||fD ]  }|s|j                  j                  rt        |j                  j                  j                        D ci c]  \  }}||
 }}}|j                  j                  j                  |       |j                  j                  j                  |       |r|j                  j                  dk\  rw|j                  j                  rat        |j                  j                  j                        D ci c]  \  }}||
 }}}|j                  j                  j                  |       |j                  j                  sN|j                  j                  sft        |j                  j                  j                        D ci c]  \  }}||
 }	}}|j                  j                  j                  |	        y c c}}w c c}}w c c}}w Nri   rj   rk   i  )getrh   r   ru   rY   r   r}   rf   MarkGlyphSetsDefr]   r   r|   r    r   )
fontri   rj   rk   tr   rs   r   r   r   s
             r   layoutPreMerger     s    88FD88FD88FDD\ 777*3AGG4F4F4M4M*NO$!QAOIOGG)))4GG**95 JJ&&*4JJ// &/tzz/J/J/S/S%T'!QAqD'# ' ""778KL77177#5#5+4QWW5H5H5V5V+WX41a!Q$XJXGG**:6+7
 P' Ys   H9H	
Hc                 (	   | j                  d      }| j                  d      }| j                  d      }||fD ]K  }|s|j                  j                  r|j                  j                  rt	        |j                  j                  j
                        }|j                  j                  j                  |       t        |j                  j                  j
                        }|j                  j                  j                  |       |j                  }t        |j                  j                  j
                        D cg c]  \  }}||v r| c}}|j                  j                  _        t        |j                  j                  j
                        }|j                  j                  j                  |       t        |j                  j                  j
                        |j                  j                  _        |j                  j                  st	        |j                  j                  j                        }	|j                  j                  j                  |	       |j                  j                  j                  |	       t        |j                  j                  j                        }	|j                  j                  j                  |	       |j                  j                  j                  |	       |	j                  }t        |j                  j                  j                        D 
cg c]  \  }}
||v s|
 c}
}|j                  j                  _        t        |j                  j                  j                        }	|j                  j                  j                  |	       |j                  j                  j                  |	       t        |j                  j                  j                        |j                  j                  _        |s|j                  j"                  dk\  st        |j                  j$                  j&                        }|j                  j                  j)                  |       N y c c}}w c c}
}w r   )r   rh   r}   r|   GregariousIdentityDictr    r   AttendanceRecordingIdentityDictr@   ru   NonhashableDictr   r1   r   rY   r   r   rf   r   r]   r   )r   ri   rj   rk   r   r   usedIndicesr   r"   r   r   r   s               r   layoutPostMerger     s4    88FD88FD88FDD\ 9M77177#5#5/0C0C0Q0QRJGG**:6 9##11J GG**:6$,,K
 &agg&9&9&G&GH1Aq# 1AGG- ))<)<)J)JKJGG**:6/21773F3F3T3T/UAGG,77.qww/A/A/H/HIIGG**95GG)))4 88J8J8Q8QRIGG**95GG)))4#++K ((:(:(A(AB)aa;FV)AGG%
 ((:(:(A(ABIGG**95GG)))4-01C1C1J1J-KAGG*

**j8&5JJ//88'# ""778KLs9M"12)s   R4RR)J	fontToolsr   #fontTools.ttLib.tables.DefaultTabler   fontTools.ttLib.tablesr   fontTools.merge.baser   r   fontTools.merge.utillogging	getLoggerrx   r   r   r&   r2   rB   rF   r|   mergeMapBaseScriptListsumr}   r   r   minr]   sumDictsClassDefLigCaretList
AttachListequalr   AxisBaseTagListmaxri   rj   rk   rl   rm   rn   onlyExistinggetTableClassr   r   MultipleSubstAlternateSubstLigatureSubstReverseChainSingleSubst	SinglePosPairPos
CursivePosMarkBasePos
MarkLigPosMarkMarkPosr   ContextSubstChainContextSubst
ContextPosChainContextPosr   ExtensionSubstExtensionPosrY   r   r   r:   r.   r   r8   r   r   rH   r   r   <module>r     s  
  < + 9 "  g)*
" :$ $&    
 ($     R!                 "          &   "   !    
P	  MM MM MM	 &]]3hmm6L U#   F  $ ':u':':
(
 U  (14GE4G4G
5
	 !U  

 U  

 E'(@ )@F $$		
 	$>$>N 	55. H##X%:%:;5 <5 HOO! ! H   !  HOOK K
 H 4 !4 HH H H  !( "( H##X%5%56@ 7@ HOO* * H ) !)7B@Mr   