+
    f7in c                   s   R t ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtH	t	H
t
HtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
It^ R
It^ R
It]P6                  ^,
          t]P8                  ! ]4      tRtRt  ! R R]!4      t" ! R R]!4      t#R t$ ! R R]!4      t% ! R R]%4      t& ! R R]%4      t' ! R R]%4      t( ! R R]%4      t) ! R R])4      t* ! R R])4      t+ ! R  R!]!4      t, ! R" R#],4      t- ! R$ R%]-4      t. ! R& R'],4      t/ ! R( R)],4      t0 ! R* R+]!4      t1 ! R, R-]!4      t2 ! R. R/]!4      t3R0 t4R1 t5R2 t6R3 t7R4 t8R5 t9R6 t:R7 t;R8 t<R9 t=R: t>R; t?R< t@R= tA ! R> R?]!4      tB ! R@ RA]B4      tC ! RB RC]B4      tDRD tERE tF ! RF RG]B4      tG ! RH RI]B4      tH ! RJ RK]B4      tI ! RL RM]I4      tJ ! RN RO]I4      tK ! RP RQ]I4      tL ! RR RS]B4      tM ! RT RU]!4      tNRV tORW tPRX tQRY tRRZ tSR[ tTR\ tU ! R] R^]!4      tV ! R_ R`]B4      tWRa tXRb tYRc tZRd t[Re t\Rf t] ! Rg Rh]I4      t^ ! Ri Rj]B4      t_ ! Rk Rl]B4      t`Rm taRn tbRo tc ! Rp Rq]!4      td ! Rr Rs]!4      te ! Rt Ru]B4      tf. ER)NER*RwER+R
]f! 4       3NER,NER-N^RyRxR
]D! 4       3NER.RzRxR
]D! 4       3N^R{RxR
]D! 4       3NER/R|RxR
]D! 4       3N^R}RxR
]D! 4       3NER0NER1NER2NER3NER4NER5NER6NER7R~R. ER8OR
3NER9N^RR. ER:OR
3NER;NER<NER=NER>NER?NER@NERANERBNERCN^RRvR
]M! 4       3NERDN^RRv^ ]W! 4       3N^RERER
]J! 4       3NERFR-RvR
]_! 4       3NERGRRvR
]^! 4       3N^R/RvR
]L! 4       3N^RRvR
]`! 4       3NtgER)ER7R~R. ER8OR
3ERFR-RvR
]_! 4       3ERGRRvR
]^! 4       3^R/RvR
]L! 4       3^RRvR
]`! 4       3.thRti^tjERH]j]iRR
R
3ERIERJERKERLERMERNEROERPERQERRERSERTERUERVERWERXERYERZER[^RRvR
]K! 4       3.tkERH]j]iRR
R
3ERIERJERKERLERMERNEROERPERQERRERSERWERX^RRvR
]K! 4       3.tlR tm]m! ]k4       ]m! ]g4        ! R R]P                  4      to ! R R]P                  4      tp ! R R]!4      tqR tr ! R R]q4      ts ! R R]q4      tt ! R R]q4      tu ! R R]!4      tv ! R R]v4      tw ! R R]v4      tx ! R R]v4      ty ! R R]!4      tz. RNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNER NERNERNERNERNERNERNERNERNER	NER
NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NER!NER"NER#NER$NER%NER&NER'NER(NER)NER*NER+NER,NER-NER.NER/NER0NER1NER2NER3NER4NER5NER6NER7NER8NER9NER:NER;NER<NER=NER>NER?NER@NERANERBNERCNERDNERENERFNERGNERHNERINERJNERKNERLNERMNERNNERONERPNERQNERRNERSNERTNERUNERVNERWNERXNERYNERZNER[NER\NER]NER^NER_NER`NERaNERbNERcNERdNEReNERfNERgNERhNERiNERjNERkNERlNERmNERnNERoNERpNERqNERrNERsNERtNERuNERvNERwNERxNERyNERzNER{NER|NER}NER~NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NERNERNERNERNERNERNERNERNER	NER
NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NER!NER"NER#NER$NER%NER&NER'Nt{ER(t|/ t}]~! ]|4       F  t]]}]{],          &   K  	  . RNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNER NERNERNERNERNERNERNERNERNER	NER
NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NER!NER"NER#NER$NER%NER&NER'NER(NER)NER*NER+NER,NER-NER.NER/NER0NER1NER2NER3NER4NER5NER6NER7NER8NER9NER:NER;NER<NER=NER>NER?NER@NERANERBNERCNERDNERENERFNERGNERHNERINERJNERKNERLNERMNERNNERONERPNERQNERRNERSNERTNERUNERVNERWNERXNERYNERZNER[NER\NER]NER^NER_NER`NERaNERbNERcNERdNEReNERfNERgNERhNERiNERjNERkNERlNERmNERnNERoNERpNERqNERrNERsNERtNERuNERvNERwNERxNERyNERzNER{NER|NER}NER~NERNERNERNERNERNERNERNt^t. RNRNERNERNERNERNERNERNERNERNERNERNRNRNRNERNERNERNERNERNERNERNERNERNERNERNRNRNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER?NER<NERDNERNERNERNERNERNERNERNERNER7NERENERJNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NERNERNERNERNERNERNERNERNER	NER
NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNt^t. RNRNERNERNERNERNERNERNRNRNRNERNERNERNERNERNERNERNERNERNERNERNRNRNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER?NER<NERDNERNERNERNERNERNERNERNER7NERENERJNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNt^WtR
# (\  a+  cffLib: read/write Adobe CFF fonts

OpenType fonts with PostScript outlines embed a completely independent
font file in Adobe's *Compact Font Format*. So dealing with OpenType fonts
requires also dealing with CFF. This module allows you to read and write
fonts written in the CFF format.

In 2016, OpenType 1.8 introduced the `CFF2 <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2>`_
format which, along with other changes, extended the CFF format to deal with
the demands of variable fonts. This module parses both original CFF and CFF2.

)sstruct)psCharStrings)	unionRectintRect)bytechrbyteord	bytesjointobytestostrsafeEval)TTFont)OTTableWriter)OTTableReader)otTables)BytesIONz%
	major:   B
	minor:   B
	hdrSize: B
i  c                   s~   a  ] tR t^0t o RtRR ltR tR tR tR t	RR lt
R	 tRR
 ltR tR tR tR tR tRtV tR# )
CFFFontSeta2  A CFF font "file" can contain more than one font, although this is
extremely rare (and not allowed within OpenType fonts).

This class is the entry point for parsing a CFF table. To actually
manipulate the data inside the CFF font, you will want to access the
``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet``
object can either be treated as a dictionary (with appropriate
``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict`
objects, or as a list.

.. code:: python

        from fontTools import ttLib
        tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf")
        tt["CFF "].cff
        # <fontTools.cffLib.CFFFontSet object at 0x101e24c90>
        tt["CFF "].cff[0] # Here's your actual font data
        # <fontTools.cffLib.TopDict object at 0x1020f1fd0>

Nc                s   W n         \        P                  ! \        VP	                  ^4      V 4       Ve<   V'       d   ^M^pV P
                  V8w  d   \        RW@P
                  3,          4      hMV P
                  ^8H  pV'       g   \        P                  ! RVP	                  ^4      4      ^ ,          V n        VP                  V P                  4       \        R \        WR7       4       4      V n        \        WR7      V n        \!        V4      V n        M\        P                  ! RVP	                  ^4      4      ^ ,          V n        VP                  V P                  4       R.V n        VP&                  p\        WV P$                  VR7      V n        RV n        \)        WR7      V n        V P"                  V P                  n        V P*                  V P                  n        R# )a[  Parse a binary CFF file into an internal representation. ``file``
should be a file handle object. ``otFont`` is the top-level
:py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
library makes an assertion that the CFF header is of the appropriate
version.
N2Invalid CFF 'major' version: expected %d, found %dBc              3   s8   "   T F  p\        V4      x  K  	  R # 5iNr   )Z.0s   & @/usr/lib64/python3.14/site-packages/fontTools/cffLib/__init__.pyZ	<genexpr>Z'CFFFontSet.decompile.<locals>.<genexpr>b   s     !O4Nq%((4Ns   isCFF2>HCFF2Font)otFontr    unpackcffHeaderFormatreadmajor
ValueErrorstructoffSizeseekhdrSizelistIndex	fontNamesTopDictIndextopDictIndexIndexedStringsstringstopDictSizegetGlyphOrderGlobalSubrsIndexGlobalSubrs)selffiler   r   expected_majorcff2GetGlyphOrder   &&&&  r   	decompileZCFFFontSet.decompileF   sn    		!d; #)QaNzz^+ H%zz23  , ZZ1_F!==diil;A>DLIIdll#!!OE$4N!OODN ,T AD)$/DL%}}T499Q<@CDIIdll#(\DN & 4 4 ,)9)9&!D  DL+D@$(LL!(,(8(8%    c                ,    \        V P                  4      # r   )lenr'   r0      &r   __len__ZCFFFontSet.__len__s   s    4>>""r6   c                r7   r   )r%   r'   r9   r:   r   keysZCFFFontSet.keysv   s    DNN##r6   c                    V P                   # r   )r)   r9   r:   r   valuesZCFFFontSet.valuesy   s       r6   c                s"   \        VR4      '       d   VP                  4       pM@\        V\        4      '       d    Tp V P                  P                  V4      pM\        V4      hV P                  V,          #   \         d    \        T4      hi ; i)zkReturn TopDict instance identified by name (str) or index (int
or any object that implements `__index__`).
	__index__)
hasattrr?   
isinstancestrr'   indexr    KeyErrorZ	TypeErrorr)   )r0   ZnameOrIndexrC   name   &&  r   __getitem__ZCFFFontSet.__getitem__|   s     ;,,))+ES))D,,,T2 K((  ''	  ,{++,s   A7 7Bc                s   W n         Ve<   V'       d   ^M^pV P                  V8w  d   \        RW@P                  3,          4      hMV P                  ^8H  pVP                  '       d,   V'       g$   V P                   F  pVP                  4        K  	  V'       g   \        4       pMRp\        V4      pV P                  P                  W`VR7      pV'       dx   ^V n	        VP                  \        P                  ! \        V 4      4       VP                  4       V n        VP                  \         P                  ! RV P                  4      4       Mh^V n	        ^V n        VP                  \        P                  ! \        V 4      4       VP                  \         P                  ! RV P"                  4      4       V'       gQ   \%        4       p	V P&                   F  p
V	P)                  V
4       K  	  VP                  V	P                  W`VR7      4       VP                  V4       V'       g    VP                  VP                  4       4       VP                  V P*                  P                  W`VR7      4       V P                   F;  p\-        VR4      '       d   VP.                  e   K%  VP1                  4       pWn        K=  	  VP3                  V4      pV F  pVP                  V4       K  	  VP5                  V4       R# )ah  Write the object back into binary representation onto the given file.
``file`` should be a file handle object. ``otFont`` is the top-level
:py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
library makes an assertion that the CFF header is of the appropriate
version.
Nr   r   r   r   charset)r   r   r    ZrecalcBBoxesr)   recalcFontBBoxr*   	CFFWritergetCompilerr$   addr    packr   getDataLengthr,   r!   r"   r&   r'   appendr/   r@   rH   r-   getChildrentoFile)r0   r1   r   r   r2   topDictr+   writerZtopCompilerr'   rE   rH   childrenZchilds   &&&&          r   compileZCFFFontSet.compile   s>    "(QaNzz^+ H%zz23  , ZZ1_Fv,,&&( - $&GG6"''33G&3QDLJJw||OT:;*88:DJJv{{4)9)9:;DLDLJJw||OT:;JJv{{356I  & 'JJy,,W6,JK

;JJw**,-

4##//f/MN((G7I..'//2I ..0") ) **73EJJu  	dr6   c                s   VP                  RV P                  R7       VP                  4        VP                  RV P                  R7       VP                  4        V P                   Fi  pVP                  R\        V4      R7       VP                  4        W,          pVP                  V4       VP                  R4       VP                  4        Kk  	  VP                  4        VP                  R4       VP                  4        V P                  P                  V4       VP                  R4       VP                  4        R# )zWrite the object into XML representation onto the given
:class:`fontTools.misc.xmlWriter.XMLWriter`.

.. code:: python

        writer = xmlWriter.XMLWriter(sys.stdout)
        tt["CFF "].cff.toXML(writer)

r   valueminorCFFFontrE   r/   N)
	simpletagr   newlinerX   r'   begintagr   toXMLendtagr/   )r0   	xmlWriterfontNamefontrF   r   r^   ZCFFFontSet.toXML   s     	G4::6G4::6HyuX?>DJJy!Y' ' 	=)y)'r6   c                s   W@n         \        V R4      '       g   ^V n        \        V R4      '       g   ^ V n        VR8X  Ed@   V P                  ^8X  d   \        V R4      '       g   ^V n        \        V R4      '       g   ^V n        \        V R4      '       g   \        4       V n        \        V R4      '       g   . V n        \        4       V n
        VR,          pV P                  P                  V4       \        V P                  R	7      pR
Vn        MV P                  ^8X  d   \        V R4      '       g   ^V n        \        V R4      '       g   \        4       V n        \        V R4      '       g	   R.V n        V P                   P                  p\        V P                  VR7      p\        R
V4      V n
        V P                  P                  X4       V F2  p\        V\         4      '       d   K  Vw  rpVP#                  WV4       K4  	  \        VR4      '       dh   VP$                  ^ ,          P&                  fG   VP$                  p	V	 F2  p
\        V
R4      '       g   K  VP(                  V
P*                  n        K4  	  R
# R
# R
# VR8X  d   \,        P.                  p\        V R4      '       g   \        4       V n        V FT  p\        V\         4      '       d   K  Vw  rpV! 4       pVP#                  WV4       V P                  P                  V4       KV  	  R
# VR8X  d   \1        VR,          4      V n        R
# VR8X  d   \1        VR,          4      V n        R
# R
# )z?Reads data from the XML element into the ``CFFFontSet`` object.r   rX   rY   r"   r$   r/   r'   rE   )r/   Nr   )r/   r3   VarStorePrivaterW   )r   r@   r   rX   r"   r$   r.   r/   r'   r(   r)   rO   TopDictrH   r-   rA   rB   fromXMLFDArrayvstorerc   rd   r   T2CharStringint)r0   rE   attrscontentr   ra   rR   r3   elementfdArrayfontDictZsubrCharStringClasssubrs   &&&&&        r   rf   ZCFFFontSet.fromXML   s    tW%%DJtW%%DJ9zzQtY//#$DLtY//#$DLt]33'7'9D$t[11%'DN(4D% =%%h/!d.>.>?"&qtY//#$DLt]33'7'9D$t[11&0\DN$(KK$=$=!! $ 0 0DU %17H$I!$$W-"gs++'.$WW5	 # w
++0B0I0I0Q!// 'Hx33292B2B((/ !( 1R+ ]""/"<"<4//#3#5 "gs++'.$W*,T'2  ''- # W_U7^,DJW_U7^,DJ r6   c                "    ^RI Hp V! W4       R# )   )_convertCFFToCFF2N)Z	CFFToCFF2rs   )r0   r   rs      && r   convertCFFToCFF2ZCFFFontSet.convertCFFToCFF2-      0$'r6   c                rq   )rr   )_convertCFF2ToCFFN)Z	CFF2ToCFFrw   )r0   r   rw   rt   r   convertCFF2ToCFFZCFFFontSet.convertCFF2ToCFF2  rv   r6   c                "    ^RI Hp V! V 4       R# )rr   )desubroutinizeN)
transformsrz   )r0   rz   r   r   rz   ZCFFFontSet.desubroutinize7  s    .tr6   c                ry   )rr   )remove_hintsN)r{   r|   )r0   r|   r   r   r|   ZCFFFontSet.remove_hints<  s    ,Tr6   c                ry   )rr   )remove_unused_subroutinesN)r{   r}   )r0   r}   r   r   r}   Z$CFFFontSet.remove_unused_subroutinesA  s    9!$'r6   )
r/   r'   r$   r   rX   r"   r   r+   r)   r,   r   )__name__
__module____qualname____firstlineno____doc__r5   r;   r<   r>   rG   rU   r^   rf   ru   rx   rz   r|   r}   __static_attributes____classdictcell____classdict__   @r   r   r   0   sT     *+9Z#$!( >@:B-H(
(


( (r6   r   c                   s6   a  ] tR tRt o RtR tR tR tRtV t	R# )rJ   iG  zTHelper class for serializing CFF data to binary. Used by
:meth:`CFFFontSet.compile`.c                s     . V n         Wn        R # r   )datar   r0   r      &&r   __init__ZCFFWriter.__init__K  s    	r6   c                <    V P                   P                  V4       R # r   )r   rO   )r0   tabler   r   rL   ZCFFWriter.addO  s    		r6   c                s<   R p^p \         P                  \        RV4       V^,           p^ pV.pV P                   F  p\        VR4      '       dU   WFP	                  4       ,           p\        V\        4      '       d(   VP                  '       d   VP	                  4       V n        MV\        V4      ,           p\        VR4      '       d   VP                  WG4       TpVP                  V4       K  	  WR8X  d   MTpK  \         P                  \        R4       VP                  4       pV P                  '       d0   \        P                  ! RV P                  4      V P                  ^&   ME\        VR,          4      V n        \        P                  ! RV P                   4      V P                  ^&   ^ .pV P                   F^  p\        VR4      '       d   VP#                  V4       MVP%                  V4       VP                  VP                  4       V,
          4       K`  	  R # )	Nz CFFWriter.toFile() iteration: %drN   setPosz#CFFWriter.toFile() writing to file.r   r   rQ   )logDEBUGr   r@   rN   rA   TopDictIndexCompilerr   r,   r8   r   rO   tellr!   rM   calcOffSizer"   rQ   write)	r0   r1   ZlastPosListcountposZposListitemendPosZbegin	   &&       r   rQ   ZCFFWriter.toFileR  s   GGE=uEAIECeG		411 #5#5#77F!$(<==$++++/+=+=+?( 3t9_F4**KK,s# " %!K<=		;;;!;;tT-=-=>DIIaL&{27DL!;;sDLL9DIIaL#IIDtX&&D!

4 NN499;./ r6   )r   r   r"   r,   N)
r~   r   r   r   r   r   rL   rQ   r   r   r   r   r   rJ   rJ   G  s     # $& $&r6   rJ   c                 sL    V R 8  d   ^pV# V R8  d   ^pV# V R8  d   ^pV# ^pV# )   i   i    )ZlargestOffsetr"   r   r   r   r   y  sN    u N 
	 
 N	 
	" N Nr6   c                   sF   a  ] tR tRt o RtR
R ltR tR tR tR t	R	t
V tR# )IndexCompileri  zBase class for writing CFF `INDEX data <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#5-index-data>`_
to binary.Nc                s    Vf   \        VR4      '       d   VP                  pW@n        V P                  W4      V n        W0n        R # Nr   )r@   r   getItemsitemsparent)r0   r   r+   r   r      &&&&&r   r   ZIndexCompiler.__init__  s6    >gfh77]]F]]52
r6   c                s    V# r   r   r0   r   r+      &&&r   r   ZIndexCompiler.getItems      r6   c                s    V P                   '       dg   ^pV.pV P                    FO  p\        VR4      '       d   WP                  4       ,           pMV\        V4      ,           pVP	                  V4       KQ  	  V# . pV# )rr   rN   )r   r@   rN   r8   rO   )r0   r   offsetsr      &   r   
getOffsetsZIndexCompiler.getOffsets  so    :::CeG

411 2 2 44CD	/Cs# #  Gr6   c                s"   V P                   '       d   ^pM^pV P                  '       dd   V P                  4       R,          p\        V4      pV^,           \	        V P                  4      ^,           V,          ,           V,           ^,
          pV# TpV#    r   )r   r   r   r   r8   )r0   Z	countSizeZ
lastOffsetr"   
dataLengths   &    r   rN   ZIndexCompiler.getDataLength  s    ;;;II:::*2.J!*-Gtzz?Q&'12  	   #Jr6   c                sH   V P                  4       pV P                  '       d!   \        V\        V P                  4      4       M\        V\        V P                  4      4       V P                  '       d   \        VR,          4      p\        W4       V) p\        P                  pV F   pV! RV4      VR pVP                  V4       K"  	  V P                   FF  p\        VR4      '       d   VP                  V4       K(  \        VRR7      pVP                  V4       KH  	  R# R# )rr   >lNrQ   latin1encodingr   )r   r   writeCard32r8   r   writeCard16r   
writeCard8r!   rM   r   r@   rQ   r   )	r0   r1   r   r"   rM   offset	binOffsetr   r   r   r   rQ   ZIndexCompiler.toFile  s    //#;;;c$**o.c$**o.:::!'"+.Gt%hG;;D! v.wx8	

9% " 

4**KK%"4(;DJJt$ # r6   )r   r   r   r   )r~   r   r   r   r   r   r   r   rN   rQ   r   r   r   r   r   r   r     s(     ,% %r6   r   c                   s&   a  ] tR tRt o R tRtV tR# )IndexedStringsCompileri  c                s    VP                   # r   r+   r   r   r   r   ZIndexedStringsCompiler.getItems  s    }}r6   r   N)r~   r   r   r   r   r   r   r   r   r   r   r     s      r6   r   c                   sZ   a a ] tR tRt oRtR tR tV 3R ltV 3R ltV 3R lt	Rt
VtV ;t# )	r   i  z/Helper class for writing the TopDict to binary.c                \    . pV F#  pVP                  VP                  W 4      4       K%  	  V# r   rO   rK   r0   r   r+   outr      &&&  r   r   ZTopDictIndexCompiler.getItems  -    DJJt''67 
r6   c                p    . pV P                    F#  pVP                  VP                  V4      4       K%  	  V# r   r   extendrP   )r0   r+   rT   rR   rF   r   rP   Z TopDictIndexCompiler.getChildren  s1    zzGOOG//89 "r6   c                s   < V P                   '       d&   ^ V P                  ^ ,          P                  4       .pV# \        \        V `  4       #     )r   r   rN   superr   r   )r0   r   	__class__   & r   r   ZTopDictIndexCompiler.getOffsets  s=    ;;;$**Q-5578GN-t?AAr6   c                s   < V P                   '       d$   V P                  ^ ,          P                  4       pV# \        \        V `  4       # r   )r   r   rN   r   r   )r0   r   r   r   r   rN   Z"TopDictIndexCompiler.getDataLength  s9    ;;;A446J-tBDDr6   c                s   < V P                   '       d%   V P                  ^ ,          P                  V4       R# \        \        V `  V4       R# r   N)r   r   rQ   r   r   )r0   r1   r   s   &&r   rQ   ZTopDictIndexCompiler.toFile  s2    ;;;JJqM  &&4T:r6   r   )r~   r   r   r   r   r   rP   r   rN   rQ   r   r   __classcell__r   r      @@r   r   r     s(     9BE; ;r6   r   c                   s<   a  ] tR tRt o RtR tR tR tR tRt	V t
R# )	FDArrayIndexCompileri  zHelper class for writing the
`Font DICT INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#10-font-dict-index-font-dicts-and-fdselect>`_
to binary.c                r   r   r   r   r   r   r   ZFDArrayIndexCompiler.getItems  r   r6   c                r   r   r   )r0   r+   rT   ro   rF   r   rP   Z FDArrayIndexCompiler.getChildren  s1    

HOOH009: #r6   c                s   V P                  4       pV P                  '       d!   \        V\        V P                  4      4       M\        V\        V P                  4      4       \        VR,          4      p\        W4       V) p\        P                  pV F   pV! RV4      VR pVP                  V4       K"  	  V P                   F9  p\        VR4      '       d   VP                  V4       K(  VP                  V4       K;  	  R# )rr   r   NrQ   r   )r   r   r   r8   r   r   r   r   r!   rM   r   r@   rQ   )r0   r1   r   r"   rM   r   r   r      &&      r   rQ   ZFDArrayIndexCompiler.toFile  s    //#;;;c$**o.c$**o.gbk*4!({{FT6*784IJJy!  JJDtX&&D!

4 	 r6   c                6    WP                   P                  R &   R# )rg   Nr   rawDictr0   r   r   r   r   r   ZFDArrayIndexCompiler.setPos      ),I&r6   r   N)r~   r   r   r   r   r   rP   rQ   r   r   r   r   r   r   r   r     s#     !(- -r6   r   c                   *   a  ] tR tRt o RtR tRtV tR# )GlobalSubrsCompileri#  zHelper class for writing the `global subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
to binary.c                    . pV F9  pVP                  V P                  4       VP                  VP                  4       K;  	  V# r   rU   r   rO   Zbytecoder0   r   r+   r   Zcsr   r   r   ZGlobalSubrsCompiler.getItems'  8    BJJt{{#JJr{{#  
r6   r   N)r~   r   r   r   r   r   r   r   r   r   r   r   r   #  s      r6   r   c                   r   )SubrsCompileri/  zHelper class for writing the `local subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
to binary.c                sn    WP                   P                  ,
          pW0P                   P                  R &   R# )SubrsN)r   r   r   )r0   r   r   r      &&& r   r   ZSubrsCompiler.setPos3  s$    {{&'-G$r6   r   N)r~   r   r   r   r   r   r   r   r   r   r   r   r   /  s     . .r6   r   c                   s0   a  ] tR tRt o RtR tR tRtV tR# )CharStringsCompileri8  zHelper class for writing the `CharStrings INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
to binary.c                r   r   r   r   r   r   r   ZCharStringsCompiler.getItems<  r   r6   c                r   CharStringsNr   r   r   r   r   ZCharStringsCompiler.setPosC  s    -0M*r6   r   N)	r~   r   r   r   r   r   r   r   r   r   r   r   r   r   8  s     1 1r6   r   c                   s`   a  ] tR tRt o Rt]tRR ltR tR t	R t
R tR	 tRR
 ltR tRtV tR# )r&   iG  zThis class represents what the CFF spec calls an INDEX (an array of
variable-sized objects). `Index` items can be addressed and set using
Python list indexing.Nc                sH   . V n         . ;V n        pV P                  P                  pVf   R # W n        \
        P                  \        RWAP                  4       4       Wn        V'       d   \        V4      pM\        V4      pV^ 8X  d   R # R .V,          V n         \        V4      p\
        P                  \        RWV4       R^V,
          ,          p\        V^,           4       FO  pVP                  V4      p	Wy,           p	\        P                  ! RV	4      w  p
VP!                  \#        V
4      4       KQ  	  VP                  4       ^,
          V n        VP'                  V P$                  VR,          ,           4       \
        P                  \        RWAP                  4       4       R # )Nloading %s at %sz    index count: %s offSize: %ss    >L    end of %s at %sr   )r   r   r   r~   _isCFF2r   r   r   r1   
readCard32
readCard16	readCard8ranger   r!   r   rO   rj   
offsetBaser#   )r0   r1   r   r   rE   r   r"   ZpadrC   Zchunkr   s   &&&        r   r   ZIndex.__init__N  s0   
!##w~~&&<)4=	t$Et$EA:Ve^
D/8%Iq7{#519%EIIg&EKEdE2IVNN3v;'	 &
 ))+/		$//GBK/0,dIIK@r6   c                r7   r   )r8   r   r9   r:   r   r;   ZIndex.__len__k  s    4::r6   c                s   V P                   V,          pVe   V# V P                  V,          V P                  ,           pV P                  V^,           ,          V P                  V,          ,
          pV P                  pVP	                  V4       VP                  V4      pV P                  WWS4      pW P                   V&   V# r   )r   r   r   r1   r#   r   produceItem)r0   rC   r   r   sizer1   r      &&     r   rG   ZIndex.__getitem__n  s    zz% Ke$t6||EAI&e)<<yy		&yyT: 

5r6   c                "    W P                   V&   R # r   r   )r0   rC   r   r   r   __setitem__ZIndex.__setitem__|  s     

5r6   c                    V# r   r   )r0   rC   r   r1   r   r   r   r   ZIndex.produceItem  s    r6   c                s<    V P                   P                  V4       R# )zAdd an item to an INDEX.N)r   rO   )r0   r   r   r   rO   ZIndex.append  s    

$r6   c                (    V P                  WW#R 7      # r   compilerClassr0   r+   r   r      &&&&r   rK   ZIndex.getCompiler      !!$!GGr6   c                s     V P                   R R# )zEmpty the INDEX.NNNNr   r9   r:   r   clearZIndex.clear  s    JJqMr6   )r   r1   r   r   r   NNr   )r~   r   r   r   r   r   r   r   r;   rG   r   r   rO   rK   r   r   r   r   r   r   r&   r&   G  s@      "MA:! H r6   r&   c                   s   a a ] tR tRt oRt]t]P                  t	]P                  t
R	V 3R lltR tR tR tR tRtVtV ;t# )
r.   i  a  This index contains all the global subroutines in the font. A global
subroutine is a set of ``CharString`` data which is accessible to any
glyph in the font, and are used to store repeated instructions - for
example, components may be encoded as global subroutines, but so could
hinting instructions.

Remember that when interpreting a ``callgsubr`` instruction (or indeed
a ``callsubr`` instruction) that you will need to add the "subroutine
number bias" to number given:

.. code:: python

        tt = ttLib.TTFont("Almendra-Bold.otf")
        u = tt["CFF "].cff[0].CharStrings["udieresis"]
        u.decompile()

        u.toXML(XMLWriter(sys.stdout))
        # <some stuff>
        # -64 callgsubr <-- Subroutine which implements the dieresis mark
        # <other stuff>

        tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG
        # <T2CharString (bytecode) at 103451d10>

        tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT
        # <T2CharString (source) at 103451390>

("The bias applied depends on the number of subrs (gsubrs). If the number of
subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less
than 33900, it is 1131; otherwise it is 32768.",
`Subroutine Operators <https://docs.microsoft.com/en-us/typography/opentype/otspec180/cff2charstr#section4.4>`)
c                s   < \         \        V `  WR 7       W n        W0n        V'       d   W@n        V'       d	   WPn        R# R# r   N)r   r.   r   globalSubrsprivatefdSelectrn   )r0   r1   r   r   r   rn   r   r      &&&&&&&r   r   ZGlobalSubrsIndex.__init__  s8     	.t.C&$M"L r6   c                s^   V P                   e   V P                   pMv\        V R4      '       dc   V P                  eU   \        V R4      '       d#   V P                  e   V P                  V,          pM^ pV P                  V,          P                  pMR pV P                  W%V P                  R7      # )Nrn   r   r   r   )r   r@   rn   r   rd   	subrClassr   )r0   rC   r   r1   r   r   fdIndex   &&&&&  r   r   ZGlobalSubrsIndex.produceItem  s    <<#llGT9%%$,,*BtZ((T]]-F--.ll7+33GG~~dAQAQ~RRr6   c                s   VP                  R4       VP                  4        \        \        V 4      4       F  pW,          pVP	                  4       '       d   VP                  RV^R7       MVP                  RVR7       VP                  4        VP                  V4       VP                  R4       VP                  4        K  	  R# )zWrite the subroutines index into XML representation onto the given
:class:`fontTools.misc.xmlWriter.XMLWriter`.

.. code:: python

        writer = xmlWriter.XMLWriter(sys.stdout)
        tt["CFF "].cff[0].GlobalSubrs.toXML(writer)

zDThe 'index' attribute is only for humans; it is ignored when parsed.
CharString)rC   rawrC   N)commentr\   r   r8   needsDecompilationr]   r^   r_   )r0   r`   irp   rF   r   r^   ZGlobalSubrsIndex.toXML  s     	U	
 	s4y!A7D&&((""<qa"@""<q"9JJy!\* "r6   c                s~    VR 8w  d   R# V P                  4       pVP                  WV4       V P                  V4       R# )r   N)r   rf   rO   )r0   rE   rk   rl   rp   s   &&&& r   rf   ZGlobalSubrsIndex.fromXML  s3    <~~T'*Dr6   c                sd    R p\        V R4      '       d   V P                  V,          pW,          V3# )Nr   )r@   r   )r0   rC   selrt   r   getItemAndSelectorZ#GlobalSubrsIndex.getItemAndSelector  s/    4$$--&C{Cr6   )rn   r   r   r   NNNNNN)r~   r   r   r   r   r   r   r   ri   r   charStringClassr   r   r^   rf   r  r   r   r   r   r   r   r.   r.     sG     B (M**I#00O#"S 2   r6   r.   c                   s    ] tR tRtRt]tRtR# )
SubrsIndexi  zThis index contains a glyph's local subroutines. A local subroutine is a
private set of ``CharString`` data which is accessible only to the glyph to
which the index is attached.r   N)r~   r   r   r   r   r   r   r   r   r6   r   r	  r	    s    $ "Mr6   r	  c                   sJ   a a ] tR tRt oRt]tRV 3R lltR tR t	Rt
VtV ;t# )r(   i  ag  This index represents the array of ``TopDict`` structures in the font
(again, usually only one entry is present). Hence the following calls are
equivalent:

.. code:: python

        tt["CFF "].cff[0]
        # <fontTools.cffLib.TopDict object at 0x102ed6e50>
        tt["CFF "].cff.topDictIndex[0]
        # <fontTools.cffLib.TopDict object at 0x102ed6e50>

c                s  < W n         Ve   V'       d   W@n        . V n        V P                  P                  p\
        P                  \        RWQP                  4       4       Wn        ^pR .V,          V n        ^ V.V n	        VP                  4       V n
        VP                  V P                  V,           4       \
        P                  \        RWQP                  4       4       R # \        \        V `;  WR7       R # )Nr   r   r   )r3   r   r   r   r~   r   r   r   r1   r   r   r#   r   r(   r   )r0   r1   r3   ZtopSizer   rE   r   r   s   &&&&&  r   r   ZTopDictIndex.__init__  s    !2!LDJ>>**DGGE-tYY[AIE%DJw<DL"iikDOIIdoo/0GGE0$		D,.t.Cr6   c           	         \        V P                  VVV P                  V P                  V P                  R 7      pVP                  V4       V# r   )re   r+   r/   r3   r   r5   )r0   rC   r   r1   r   Ztop   &&&&& r   r   ZTopDictIndex.produceItem#  sE    LL""<<
 	d
r6   c                    \        \        V 4      4       F^  pVP                  R VR7       VP                  4        W,          P	                  V4       VP                  R 4       VP                  4        K`  	  R# FontDictr  Nr   r8   r]   r\   r^   r_   r0   r`   r  rt   r   r^   ZTopDictIndex.toXML/  \    s4y!Az3GMM)$Z( "r6   )r   r3   r1   r   r   r   )NNr   N)r~   r   r   r   r   r   r   r   r   r^   r   r   r   r   r   r   r(   r(     s&      )MD$
   r6   r(   c                   s6   a  ] tR tRt o ]tR tR tR tRt	V t
R# )FDArrayIndexi8  c                r  r  r  r  rt   r   r^   ZFDArrayIndex.toXML;  r  r6   c           	     r
  )r   rh   )r  r+   r/   r   rh   r5   )r0   rC   r   r1   r   ro   r  r   r   ZFDArrayIndex.produceItemC  sE    LL<<;;
 	4 r6   c                s    VR 8w  d   R# \        4       pV F2  p\        V\        4      '       d   K  Vw  rpVP                  WV4       K4  	  V P	                  V4       R# )r  N)r  rA   rB   rf   rO   )r0   rE   rk   rl   ro   rm   r4   r   rf   ZFDArrayIndex.fromXMLO  sV    ::G'3''#* DT'2	 
 	Hr6   r   N)r~   r   r   r   r   r   r^   r   rf   r   r   r   r   r   r  r  8  s     (M 
	 	r6   r  c                   sN   a  ] tR tRt o RR ltR tR tR tR tR t	R	 t
R
tV tR# )VarStoreDatai[  Nc                sJ    Wn         R V n        W n        \        4       V n        R # r   )r1   r   
otVarStorer
   rb   )r0   r1   r  r   r   r   ZVarStoreData.__init__\  s    		$H	r6   c                s   V P                   '       d   \        V P                   4      pVR 8X  d!   V P                   P                  4       V n        M V P                   P                  V4      V n        / p\	        V P                  V4      p\
        P                  ! 4       V n        V P                  P                  W0P                  4       RV n        V # i  N)
r1   r   r   r   r   otrc   r  r5   rb   )r0   ZlengthZglobalStateZreaderr   r   r5   ZVarStoreData.decompileb  s    999		*F IINN,	 IINN62	K"499k:F kkmDOOO%%fii8DIr6   c                s    \        4       pV P                  P                  WP                  4       VP	                  4       V n        R # r   )r   r  rU   rb   Z
getAllDatar   )r0   rS   r   r   rU   ZVarStoreData.compiler  s1    		2 %%'	r6   c                sP    V P                   P                  WP                  4       R # r   )r  r^   rb   )r0   r`   rE   r   r   writeXMLZVarStoreData.writeXMLy  s    i3r6   c                s    \         P                  ! 4       V n        V FF  p\        V\        4      '       d.   Vw  rpV P                  P                  WW0P                  4       KF  KH  	  R # r   )r  rc   r  rA   tuplerf   rb   )r0   rE   rk   rl   r   rm   r  r   xmlReadZVarStoreData.xmlRead|  sP    ++-G'5))'.$W''WiiH  r6   c                r7   r   r8   r   r9   r:   r   r;   ZVarStoreData.__len__      499~r6   c                sd    Vf   ^ pV P                   P                  V,          pVP                  pV# r   )r  ZVarDataZVarRegionCount)r0   ZvsIndexZvarData
numRegionsrF   r   getNumRegionsZVarStoreData.getNumRegions  s1    ?G//))'2++
r6   )r   r1   rb   r  r   )r~   r   r   r   r   r5   rU   r  r  r;   r  r   r   r   r   r   r  r  [  s-      (4 r6   r  c                   sB   a  ] tR tRt o R	R ltR tR tR tR tRt	V t
R# )
FDSelecti  Nc                sJ   V'       Ed   \        V4      V n        V P                  ^ 8X  d4   ^ RIHp V! RVP                  V4      4      P	                  4       V n        R# V P                  ^8X  d   R.V,          p\        V4      pRpRp\        V4       F5  p	\        V4      p
Ve   \        W4       F  pWuV&   K	  	  T
p\        V4      pK7  	  Ve"   \        V4      p
\        W4       F  pWuV&   K	  	  WPn        R# V P                  ^8X  d   R.V,          p\        V4      pRpRp\        V4       F5  p	\        V4      p
Ve   \        W4       F  pWuV&   K	  	  T
p\        V4      pK7  	  Ve"   \        V4      p
\        W4       F  pWuV&   K	  	  WPn        R# R# W0n        . V n        R# )r   )arrayr   N)	r   formatr   r   ZtolistgidArrayr   r   r   )r0   r1   	numGlyphsr!  r   r"  nRangesZfdZprevr  firstglyphIDs   &&&&        r   r   ZFDSelect.__init__  s   4#D/DK{{a' %c499Y+? @ G G I! 6I-$T*wA&t,E'',T'9G02W- (: D"4B ( #&t,E#(#5,.) $6 (! 6I-$T*wA&t,E'',T'9G02W- (: D#D)B ( #&t,E#(#5,.) $6 (! ", !KDMr6   c                r7   r   )r8   r"  r9   r:   r   r;   ZFDSelect.__len__  s    4==!!r6   c                s(    V P                   V,          # r   r"  r0   rC   r   r   rG   ZFDSelect.__getitem__  s    }}U##r6   c                r   r   r'  )r0   rC   fdSelectValuer   r   r   ZFDSelect.__setitem__  s    ,er6   c                r   r   )r"  rO   )r0   r)  r   r   rO   ZFDSelect.append  s    ]+r6   )r!  r"  )NNN)r~   r   r   r   r   r;   rG   r   rO   r   r   r   r   r   r  r    s$     0d"$-, ,r6   r  c                   sh   a  ] tR tRt o RtRR ltR tR tR t]t	R t
R	 tR
 tR tR tR tRtV tR# )r   i  a  The ``CharStrings`` in the font represent the instructions for drawing
each glyph. This object presents a dictionary interface to the font's
CharStrings, indexed by glyph name:

.. code:: python

        tt["CFF "].cff[0].CharStrings["a"]
        # <T2CharString (bytecode) at 103451e90>

See :class:`fontTools.misc.psCharStrings.T1CharString` and
:class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile,
compile and interpret the glyph drawing instructions in the returned objects.

Nc	           	     s   W0n         Wn        VeK   \        WWEWgR7      V n        / ;V n        p	\        \        V4      4       F  p
WW*,          &   K  	  ^V n        R # / V n        ^ V n        W@n        Ve   WPn	        Ve	   W`n
        R # R # Nr   )r   varStorer	  charStringsIndexcharStringsr   r8   charStringsAreIndexedr   r   rn   )r0   r1   rH   r   r   r   rn   r   r+  r-  r  s   &&&&&&&&&  r   r   ZCharStrings.__init__  s     ' $.7g%D! .0/D{3w<(*+GJ' ) *+D&!D)*D&"L# ("& #r6   c                sH    \        V P                  P                  4       4      # r   )r%   r-  r<   r9   r:   r   r<   ZCharStrings.keys  s    D$$))+,,r6   c                s    V P                   '       d   V P                  # \        V P                  P	                  4       4      # r   )r.  r,  r%   r-  r>   r9   r:   r   r>   ZCharStrings.values  s4    %%%(((((//122r6   c                s    WP                   9   # r   )r-  )r0   rE   r   r   has_keyZCharStrings.has_key  s    ''''r6   c                r7   r   )r8   r-  r9   r:   r   r;   ZCharStrings.__len__  s    4##$$r6   c                sv    V P                   V,          pV P                  '       d   V P                  V,          pV# r   )r-  r.  r,  )r0   rE   
charStringrt   r   rG   ZCharStrings.__getitem__  s4    %%d+
%%%..z:Jr6   c                s    V P                   '       d$   V P                  V,          pW P                  V&   R # W P                  V&   R # r   )r.  r-  r,  )r0   rE   r0  rC   r   r   r   ZCharStrings.__setitem__  s:    %%%$$T*E+5!!%(%/T"r6   c                s:   V P                   '       d/   V P                  V,          pV P                  P                  V4      # \	        V R 4      '       d4   \	        V R4      '       d   V P                  V,          P
                  pM^ pMRpV P                  V,          V3# )rn   r   N)r.  r-  r,  r  r@   fdSelectIndex)r0   rE   rC   r  rF   r   r  ZCharStrings.getItemAndSelector   s    %%%$$T*E((;;EBBtY''4,,**40>>CC##D)3..r6   c                s   \        V P                  4       4      pV F  pV P                  V4      w  rEVP                  4       '       d   R.pM. pVf   VP	                  RRV3.V,           4       MVP	                  RRV3RV3.V,           4       VP                  4        VP                  V4       VP                  R4       VP                  4        K  	  R# )r   Nr   rE   r1  )r   rr   )sortedr<   r  r  r]   r\   r^   r_   )r0   r`   namesrE   ZcharStrr1  r   r   r   r^   ZCharStrings.toXML.  s    tyy{#D%)%<%<T%B"G))++!l$""<64.1AC1GH"" d^o}%EFL MM)$\*! r6   c                s   V F  p\        V\        4      '       d   K  Vw  rpVR 8w  d   K)  Rp\        V R4      '       d2    \        VR,          4      pV P
                  V,          P                  pMV P                  pVR,          p\        P                  pV! W`P                  R7      p	V	P                  WV4       V^ 8  d   WYn        WV&   K  	  R#   \         d    ^ p Li ; i)r   rn   r1  rE   r   Nr   )rA   rB   r@   r	   rD   rn   rd   r   r   ri   r   rf   r1  )
r0   rE   rk   rl   rm   ZfdIDr   	glyphNamer  r0  s
   &&&&      r   rf   ZCharStrings.fromXMLB  s    G'3''#* D|#DtY''#E/$:;D ,,t,44,,fI+88O(FVFVWJtG4qy+/((O-    Ds   CC"!C")r-  r.  r,  rn   r   r   r   r+  r   )r~   r   r   r   r   r   r<   r>   r/  Z__contains__r;   rG   r   r  r^   rf   r   r   r   r   r   r   r     sI     'B-3( L%0/ () )r6   r   c                 s6    \        V P                  ^4      4      # rr   )r   r   r1   r:   r   r   r   \  s    499Q<  r6   c                 sV    \         P                  ! R V P                  ^4      4      w  pV# r   r!   r   r   r1   rW   r   r   r   r   `  !    }}T499Q<0HULr6   c                 sV    \         P                  ! R V P                  ^4      4      w  pV# r   r8  r9  r   r   r   r   e  r:  r6   c                 s:    V P                  \        V4      4       R # r   )r   r   r9  r   r   r   r   j  s    JJwu~r6   c                 R    V P                  \        P                  ! R V4      4       R# )r   Nr   r!   rM   r9  r   r   r   r   n      JJv{{4'(r6   c                 r<  )r   Nr=  r9  r   r   r   r   r  r>  r6   c                 s    \        V 4      # r   )r   rV   r:   r   	packCard8r?  v  s    5>r6   c                 0    \         P                  ! R V 4      # r7  r!   rM   rV   r:   r   
packCard16rB  z      ;;tU##r6   c                 r@  r;  rA  rV   r:   r   
packCard32rD  ~  rC  r6   c                 s.    / pV  F  w  r#rEpW43W&   K  	  V# r   r   r   doprE   argdefaultconv   &      r   buildOperatorDictrL    s&    
A(-$# ).Hr6   c                 s    / pV  FW  w  r#rEp\        V\        4      '       d+   \        V^ ,          4      \        V^,          4      ,           pM\        V4      pW$3W&   KY  	  V# r   )rA   r  r   rE  rK  r   buildOpcodeDictrM    sX    
A(-$#b%  A'"Q%.0BB) ). Hr6   c                 sF    . pV  F  w  r#rEpVP                  V4       K  	  V# r   )rO   )r   lrG  rE   rH  rI  rJ  rK  r   
buildOrderrO    s(    
A(-$#	 ).Hr6   c                 s8    / pV  F  w  r#rEpVf   K  WQV&   K  	  V# r   r   rE  rK  r   buildDefaultsrP    s,    
A(-$#dG ). Hr6   c                 s,    / pV  F  w  r#rEpWaV&   K  	  V# r   r   rE  rK  r   buildConvertersrQ    s$    
A(-$#$ ).Hr6   c                   s>   a  ] tR tRt o R tR tR tR tR tRt	V t
R# )	SimpleConverteri  c                s    \        VR 4      '       g   V P                  W4      # VP                  pVP                  4       p V P                  W4      VP	                  V4       #   TP	                  T4       i ; ir6  )r@   _readr1   r   r#   )r0   r   rW   r1   r   r   r   r   ZSimpleConverter.read  sZ    vv&&::f,,{{iik	::f,IIcNDIIcNs   A# #A6c                r   r   r   r0   r   rW   r   r   rS  ZSimpleConverter._read  r   r6   c                r   r   r   rT  r   r   r   ZSimpleConverter.write  r   r6   c                sJ    VP                  W#R 7       VP                  4        R# )rV   N)r[   r\   r0   r`   rE   rW   r   r   xmlWriteZSimpleConverter.xmlWrite  s    D.r6   c                s    VR ,          # rV   r   r0   rE   rk   rl   r   r   r   r  ZSimpleConverter.xmlRead  s    W~r6   r   N)r~   r   r   r   r   rS  r   rV  r  r   r   r   r   r   rR  rR    s#      r6   rR  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )ASCIIConverteri  c                    \        VR R7      # asciir   r   rT  r   r   rS  ZASCIIConverter._read  s    UW--r6   c                rZ  r[  r   rT  r   r   r   ZASCIIConverter.write  s    uw//r6   c                sb    VP                  V\        VR R7      R7       VP                  4        R# )r\  r   rV   Nr[   r   r\   rU  r   r   rV  ZASCIIConverter.xmlWrite  s(    Deg(FGr6   c                *    \        VR ,          RR7      # )rW   r\  r   r]  rW  r   r   r  ZASCIIConverter.xmlRead  s    uW~::r6   r   N
r~   r   r   r   rS  r   rV  r  r   r   r   r   r   rY  rY    s     .0; ;r6   rY  c                   rX  )Latin1Converteri  c                rZ  r   r   r   rT  r   r   rS  ZLatin1Converter._read  s    UX..r6   c                rZ  rb  r]  rT  r   r   r   ZLatin1Converter.write  s    ux00r6   c                s    \        VR R7      pVR9   d   \        P                  ! RRV4      pVP                  W#R7       VP	                  4        R# )r   r   z	[\r\n]\s+ rV   N)Notice	Copyright)r   reZsubr[   r\   rU  r   r   rV  ZLatin1Converter.xmlWrite  sF    eh/**FF<e4ED.r6   c                r_  )rW   r   r   r]  rW  r   r   r  ZLatin1Converter.xmlRead  s    uW~;;r6   r   Nr`  r   r   r   ra  ra    s     /1< <r6   ra  c                 sD     \        V 4      pV#    \        T 4      p T# ; ir   )rj   float)r   rW   r   r   parseNumrh    s,    A LaLs    c                 s   . pV  Fb  p\        V\        4      '       d   K  Vw  r4pVR ,          P                  4       pV Uu. uF  p\        V4      NK  	  ppVP	                  V4       Kd  	  \        V4      ^8X  d
   V^ ,          pV# u upi rV   )rA   rB   splitZevalrO   r8   )r   	valueListrm   rE   rk   rl   	blendListval   &       r   parseBlendListrn    s    Igs##&W'N((*	*34)3T#Y)	4#  9~aL		 5s    Bc                   ,   a  ] tR tRt o R tR tRtV tR# )NumberConverteri  c                s   \        V\        4      '       d   VP                  V4       VP                  4        VP	                  4        R P                  V Uu. uF  p\        V4      NK  	  up4      pVP                  \        VR7       VP                  4        VP                  4        VP                  V4       VP                  4        R# VP                  W#R7       VP                  4        R# u upi )rc  rV   NrA   r%   r]   r\   ZindentjoinrB   r[   kBlendDictOpNameZdedentr_   )r0   r`   rE   rW   rl  
blendValuer4   r   rV  ZNumberConverter.xmlWrite  s    eT""t$u"=u3s8u"=>J 0
CT"2 #>s   C0c                sp    VP                  R R4      pVf   \        V4      pV# \        VR ,          4      pV# rW   N)getrn  rh  )r0   rE   rk   rl   r   valueStringrW   r   r   r  ZNumberConverter.xmlRead
  s>    ii."7+E  U7^,Er6   r   Nr~   r   r   r   rV  r  r   r   r   r   r   rp  rp    s       r6   rp  c                   ro  )ArrayConverteri  c           	     sx   V'       d   \        V^ ,          \        4      '       d   VP                  V4       VP                  4        VP	                  4        V FT  pRP                  V Uu. uF  p\        V4      NK  	  up4      pVP                  \        VR7       VP                  4        KV  	  VP                  4        VP                  V4       VP                  4        R# RP                  V Uu. uF  p\        V4      NK  	  up4      pVP                  W#R7       VP                  4        R# u upi u upi )r   rc  rV   Nrq  )r0   r`   rE   rW   rj  rl  rt     &&&&   r   rV  ZArrayConverter.xmlWrite  s    Za$//t$"	 XX9&E9Cs3x9&EF
##$4J#G!!# # T"HH%8%3c#h%89E2 'F 9s   +D2
3D7c                s    VP                  R R4      pVf   \        V4      pV# VP                  4       pV Uu. uF  p\        V4      NK  	  ppV# u upi ru  )rv  rn  ri  rh  )	r0   rE   rk   rl   r   rw  rj  r>   rW   	   &&&&&    r   r  ZArrayConverter.xmlRead%  s]    ii.&w/I  !&&(F6<=fU%fI= >s   Ar   Nrx  r   r   r   ry  ry    s      " r6   ry  c                   ro  )TableConverteri/  c                s    VP                  V4       VP                  4        VP                  V4       VP                  V4       VP                  4        R # r   )r]   r\   r^   r_   rU  r   r   rV  ZTableConverter.xmlWrite0  sB    4 Ir6   c                s    V P                  4       ! 4       pV F2  p\        V\        4      '       d   K  Vw  rpVP                  WV4       K4  	  V# r   )getClassrA   rB   rf   )r0   rE   rk   rl   r   Zobrm   r   r   r  ZTableConverter.xmlRead7  sI    ]]_G'3''#* DJJtG,	 
 	r6   r   Nrx  r   r   r   r|  r|  /  s      r6   r|  c                   2   a  ] tR tRt o R tR tR tRtV tR# )PrivateDictConverteriA  c                    \         # r   )PrivateDictr9   r:   r   r}  ZPrivateDictConverter.getClassB  s    r6   c                s   Vw  r4VP                   pVP                  p VP                  p\	        VP
                  WTWgR7      pVP                  V4       VP                  V4      p	VP                  V	4       V#   \         d    R p L\i ; i)Nr  )	r1   r   rh   AttributeErrorr  r+   r#   r   r5   )
r0   r   rW   r   r   r1   r   rh   Zprivr   s
   &&&       r   rS  ZPrivateDictConverter._readE  s}    {{	]]F 6>>4V		&yyt  	F	s   A7 7BBc                s    R# )r   )r   r   r   rT  r   r   r   ZPrivateDictConverter.writeT  s    r6   r   N	r~   r   r   r   r}  rS  r   r   r   r   r   r   r  r  A  s      r6   r  c                   r~  )SubrsConverteriX  c                r  r   )r	  r9   r:   r   r}  ZSubrsConverter.getClassY  s    r6   c                s    VP                   pVP                  pVP                  VP                  V,           4       \	        W4R 7      # r   )r1   r   r#   r   r	  )r0   r   rW   r1   r   r   r   rS  ZSubrsConverter._read\  s4    {{		&--%'($..r6   c                    ^ # r   r   rT  r   r   r   ZSubrsConverter.writeb      r6   r   Nr  r   r   r   r  r  X  s     / r6   r  c                   r~  )CharStringsConverterif  c                sj   VP                   pVP                  pVP                  p\        VR R4      pVP                  p\        VR4      '       d1   VP                  p\        VR4      '       d   VP                  p	MRp	Rp
MRRrVP                  p
VP                  V4       \        VVVV
V	VVVR7      pV# )rc   Nrg   r  )r   r+  )r1   r   rH   getattrr/   r@   rg   r  rd   r#   r   )r0   r   rW   r1   r   rH   r+  r   rn   r   r   r-     &&&         r   rS  ZCharStringsConverter._readg  s    {{..6:t4((69%%nnGvz**!??G $dgnnG		%!	
 r6   c                r  r   r   rT  r   r   r   ZCharStringsConverter.write  r  r6   c                s   \        VR 4      '       d1   VP                  p\        VR4      '       d   VP                  pMRpRpMVP                  RRrVp\	        RRVP
                  VVV\        VRR4      R7      pVP                  WV4       V# )rg   r  Nrc   )r+  )r@   rg   r  rd   r   r/   r  rf   )	r0   rE   rk   rl   r   rn   r   r   r-  r{  r   r  ZCharStringsConverter.xmlRead  s    69%% nnGvz**!??G
 *0twG!VZ6
 	D1r6   r   N	r~   r   r   r   rS  r   r  r   r   r   r   r   r  r  f  s     : r6   r  c                   rX  )CharsetConverteri  c                s   \        VR 4      pV^8  Ed_   VP                  pVP                  pVP                  V4       \        P	                  \
        RV4       \        V4      pV^ 8X  d   \        WEVP                  V4      pM,V^8X  g   V^8X  d   \        WEVP                  W64      pM\        h\        P	                  \
        RVP                  4       4       / p. p	V F  p
W9   dq   W,          p\        V4      \        V4      ,          pV
R,           \        V4      ,           V9   d   V^,          pK)  V^,           W&   V
R,           \        V4      ,           p
^W&   V	P                  V
4       K  	  T	pMEV'       g   RVP                  9  d   RpM)V^ 8X  d   \         pMV^8X  d   \"        pMV^8X  d   \$        pX'       d*   \'        V4      VP                  8w  d   VRVP                   pV# )ROSzloading charset at %sz    charset end at %sZ.r   N)r@   r#  r1   r#   r   r   r   parseCharset0r+   parseCharsetZNotImplementedErrorr   setrB   rO   r   cffISOAdobeStringscffIExpertStringscffExpertSubsetStringsr8   )r0   r   rW   isCIDr#  r1   r!  rH   ZallNamesZ
newCharsetr4  nr3     &&&          r   rS  ZCharsetConverter._read  s   &19((I;;DIIeGGE2E:t_F{'	O1!&yV))GGE2DIIK@HJ$	( +AMCL8E$s?SV3=Q*+a%H' )C#a& 8I&'#!!), % !GV^^; !,!+!0G(8(880 0 01Gr6   c                r  r   r   rT  r   r   r   ZCharsetConverter.write  r  r6   c                sH    VP                  R 4       VP                  4        R# )z8charset is dumped separately as the 'GlyphOrder' elementN)r  r\   rU  r   r   rV  ZCharsetConverter.xmlWrite  s     	TUr6   c                    R # r   r   rW  r   r   r  ZCharsetConverter.xmlRead      r6   r   Nr`  r   r   r   r  r    s     -^ r6   r  c                   rX  )CharsetCompileri  c                s    \        VP                  R 4      p\        W$V4      p\        W$V4      p\	        V4      \	        V4      8  d   W`n        MWPn        W0n        R# )r  N)r@   dictObjpackCharset0packCharsetr8   r   r   )r0   r+   rH   r   r  data0r   rz  r   r   ZCharsetCompiler.__init__  sI    .WW5773t9s5z!IIr6   c                r   )rH   Nr   r   r   r   r   ZCharsetCompiler.setPos  r   r6   c                r7   r   r  r9   r:   r   rN   ZCharsetCompiler.getDataLength  r  r6   c                <    VP                  V P                  4       R # r   r   r   r0   r1   r   r   rQ   ZCharsetCompiler.toFile      

499r6   r   r   N
r~   r   r   r   r   r   rN   rQ   r   r   r   r   r   r  r    s     	- r6   r  c                 s    R p\         \        ^ 3\        \        ^3\        \
        ^3.p\        V 4      pV FA  w  rEpVe    V# W48  d   K  Tp\        V4       F  pW,          WW,          8w  g   K  R p K?  	  KC  	  V# r   )cffISOAdobeStringCountr  cffExpertStringCountr  cffExpertSubsetStringCountr  r8   r   )rH   ZpredefinedCharSetValZpredefinedCharSetsZlcsZcntZpcsZcsvr  rm  r   getStdCharSetr    s    	!3Q7	0!4	#%;Q?
 g,C+#+   9"sAzSV#'+$  ,  r6   c                 s&    \        V R ,          4      # ):   NN)rj   rE   r+   r   r   getCIDfromNamer    s    tBx=r6   c                 s$    VP                  V 4      # r   )getSIDr  r   r   getSIDfromNamer    s    >>$r6   c           	      s    ^ p\        V4      .pV'       d   \        pM\        pV R,           F#  pVP                  \	        V! Wb4      4      4       K%  	  \        V4      # )r   rr   NN)r?  r  r  rO   rB  r   )rH   r  r+   fmtr   	getNameIDrE      &&&    r   r  r    sP    
CcND"	"	Jy789 T?r6   c                 s   ^p. pRp^ pV'       d   \         pM\        pV R,           FG  pV! W4      p	Vf   T	pM3V^,           V	8w  d&   We,
          p
V
^8  d   ^pVP                  WZ34       T	pT	pKI  	  V'       d$   We,
          p
V
^8  d   ^pVP                  WZ34       \        V4      .pV^8X  d   \        pM\        pV F,  w  rZVP                  \	        V4      V! V
4      ,           4       K.  	  \        V4      # )rr   Nr  )r  r  rO   r?  rB  r   )rH   r  r+   r  rangesr%  endr  rE   SIDnLeftr   	nLeftFuncr  r   r  r  "  s    
CFE
C"	"	&=E1W^KEs{MM5.)E  3;Cun%cND
ax		Ju%	%(889 T?r6   c                 s>   R .pV'       dW   \        V ^,
          4       F>  p\        V4      pVP                  R\        V4      P	                  ^4      ,           4       K@  	  V# \        V ^,
          4       F%  p\        V4      pVP                  W',          4       K'  	  V# .notdefZcid)r   r   rO   rB   zfill)r#  r1   r+   r  rH   r  CIDr  s   &&&&    r   r  r  G  s    kGy1}%AT"CNN53s8>>!#445 & N y1}%AT"CNN7<( & Nr6   c                 s   R .p^pV^8X  d   \         pM\        pW`8  d   \        V4      pV! V4      p	V'       dR   \        WV	,           ^,           4       F3  p
VP                  R\	        V
4      P                  ^4      ,           4       K5  	  M7\        WV	,           ^,           4       F  pVP                  W+,          4       K  	  Wi,           ^,           pK  V# r  )r   r   r   rO   rB   r  )r#  r1   r+   r  r  rH   r   r  r%  r  r  r  s   &&&&&       r   r  r  T  s    kGE
ax		

4 $UEMA$56us3x~~a'889 7 UEMA$56w|, 7!Nr6   c                   rX  )EncodingCompilerih  c                s   \        VP                  P                  W#P                  4      p\	        VP                  P                  W#P                  4      p\        V4      \        V4      8  d   W@n        MWPn        W0n        R # r   )packEncoding0r  rH   r+   packEncoding1r8   r   r   )r0   r+   r   r   r  Zdata1r4   r   r   ZEncodingCompiler.__init__i  sU    fnn44hOfnn44hOu:E
"IIr6   c                r   )EncodingNr   r   r   r   r   ZEncodingCompiler.setPoss      *-J'r6   c                r7   r   r  r9   r:   r   rN   ZEncodingCompiler.getDataLengthv  r  r6   c                r  r   r  r  r   r   rQ   ZEncodingCompiler.toFiley  r  r6   r  Nr  r   r   r   r  r  h  s     . r6   r  c                   rX  )EncodingConverteri}  c                s   V^ 8X  d   R# V^8X  d   R# VP                   pVP                  V4       \        P                  \        RV4       \	        V4      p\        V^,          4      pV^,          pV^ 8X  d   \        VP                  V4      pM,V^8X  d   \        VP                  V4      pM\        RV 24      hV'       d   \        W6VP                  4       V# )r   StandardEncodingExpertEncodingzloading Encoding at %szUnknown Encoding format: )r1   r#   r   r   r   ZboolparseEncoding0rH   parseEncoding1r    parseEncodingSupplementr+   )r0   r   rW   r1   r  ZhaveSupplementr   r  r   rS  ZEncodingConverter._read~  s    A:%aZ# {{		%/7ocDj)Dj!8%fnnd;HAX%fnnd;H8>??#DFNNCr6   c                s*    VR 8X  d   ^ # VR8X  d   ^# ^ # r  r  r   rT  r   r   r   ZEncodingConverter.write  s    &&&&r6   c                s   VR9   d%   VP                  W#R7       VP                  4        R# VP                  V4       VP                  4        \        \	        V4      4       FA  pW4,          pVR8w  g   K  VP                  R\        V4      VR7       VP                  4        KC  	  VP                  V4       VP                  4        R# )r  rZ   Nr  Zmap)coderE   r  )r[   r\   r]   r   r8   Zhexr_   )r0   r`   rE   rW   r  r4  r4   r   rV  ZEncodingConverter.xmlWrite  s    ::14 #e*%DII%##ED		#J!!#	 &
 	r6   c                s    R V9   d
   VR ,          # R.R,          pV F?  p\        V\        4      '       d   K  Vw  rp\        VR,          4      pVR ,          pWV&   KA  	  V# )rE   r  r   r  )rA   rB   r	   )	r0   rE   rk   rl   r   r   rm   r  r4  r{  r   r  ZEncodingConverter.xmlRead  sh    U?= ;$G'3''#* DE&M*DfI&TN  r6   r   Nr`  r   r   r   r  r  }  s     4 r6   r  c                s    V P                  ^4      p\        V4      ^8w  d   \        R4      h\        P                  ! RV4      ^ ,          # )u3   Read a String ID (SID) — 2-byte unsigned integer.z(Unexpected end of file while reading SIDr   )r   r8   ZEOFErrorr!   r   )r1   r   r   r   readSIDr    s<    99Q<D
4yA~ABB==t$Q''r6   c                s    \        V 4      p\        V4       F%  p\        V 4      p\        V 4      pW&,          pWqV&   K'  	  R# )z
Parse the CFF Encoding supplement data:
  - nSups: number of supplementary mappings
  - each mapping: (code, SID) pair
and apply them to the `encoding` list in place.
N)r   r   r  )r1   r   r+   ZnSups_r  ZsidrE   s   &&&     r   r  r    s;     dOE5\dm|	 r6   c                s    \        V4      pR.R,          p\        ^V^,           4       F!  p\        V4      pV^ 8w  g   K  W,          W5&   K#  	  V# )z`
Format 0: simple list of codes.
After reading the base table, optionally parse the supplement.
r  r   r   r   )rH   r1   ZnCodesr   r&  r     &&    r   r  r    sO    
 t_F{S HFQJ'19$-HN (
 Or6   c                s    \        V4      pR.R,          p^p\        V4       FN  p\        V4      p\        V4      p\        V^,           4       F  pW,          W6&   V^,          pV^,          pK!  	  KP  	  V# )ub   
Format 1: range-based encoding.
After reading the base ranges, optionally parse the supplement.
r  r   r  )rH   r1   r$  r   r&  r  r  r  r   r   r  r    st    
 oG{S HG7^$uqy!A$-HNAIDqLG "  Or6   c                 s   ^ p/ p\        \        V4      4       F  pW,          pVR8w  g   K  WTV&   K  	  . pV R,           F%  pVP                  V4      pVP                  V4       K'  	  V'       d   VR,          f   VP	                  4        K%  \        V4      \        \        V4      4      .pV F#  pVf   ^ pVP                  \        V4      4       K%  	  \        V4      # )r   r  r  r   r   r8   rv  rO   Zpopr?  r   )	rH   r   r+   r  mr  rE   Zcodesr   s	   &&&      r   r  r    s    
C
Ac(m$~9dG % EuuT{T  E"I%		cNIc%j12D<DIdO$  T?r6   c                 s   ^p/ p\        \        V4      4       F  pW,          pVR8w  g   K  WTV&   K  	  . pRp^ p	V R,           FH  pVP                  VR4      pVf   TpM*V	^,           V8w  d   W,
          p
VP                  W34       TpTp	KJ  	  W,
          p
VP                  W34       V'       d(   VR,          ^ ,          R8X  d   VP	                  4        K/  \        V4      \        \        V4      4      .pV F8  w  rVR8X  d   ^ pVP                  \        V4      \        V
4      ,           4       K:  	  \        V4      # )rr   r  Nr  r   r  )rH   r   r+   r  r  r  rE   r  r%  r  r  r   r  r   r  r    s#   
C
Ac(m$~9dG % FE
CuuT2=E1W_KEMM5.)E  KE
MM5.! VBZ]b(

cNIc&k23DB;EIe$y'778  T?r6   c                   r~  )FDArrayConverteri.  c                s     VP                   pVP                  pVP                  pVP	                  V4       \        WER7      pW6n        VP                  Vn        VP                  Vn        V#   \         d    R p Lni ; ir*  )	rc   r  r1   r   r#   r  rh   r+   r/   )r0   r   rW   rh   r1   r   rn   r  r   rS  ZFDArrayConverter._read/  ss    	__F {{		%t3 ..$00  	F	s   A- -A=<A=c                r  r   r   rT  r   r   r   ZFDArrayConverter.write=  r  r6   c                s    \        4       pV F2  p\        V\        4      '       d   K  Vw  rpVP                  WV4       K4  	  V# r   )r  rA   rB   rf   )r0   rE   rk   rl   r   rn   rm   r   r   r  ZFDArrayConverter.xmlRead@  sB    .G'3''#* DOOD1	 
 r6   r   Nr  r   r   r   r  r  .  s      r6   r  c                   rX  )FDSelectConverteriJ  c                sj    VP                   pVP                  V4       \        W1P                  4      pV# r   )r1   r#   r  r#  )r0   r   rW   r1   r   r   r   rS  ZFDSelectConverter._readK  s,    {{		%D"2"23r6   c                r  r   r   rT  r   r   r   ZFDSelectConverter.writeQ  r  r6   c                sd    VP                  VR VP                  3.4       VP                  4        R# r!  N)r[   r!  r\   rU  r   r   rV  ZFDSelectConverter.xmlWriteV  s*    DHell#;"<=r6   c                sJ    \        VR ,          4      pRpRp\        WgV4      pV# r  )r	   r  )	r0   rE   rk   rl   r   r  r1   r#  r   r{  r   r  ZFDSelectConverter.xmlReadZ  s+    uX'	DS1r6   r   Nr`  r   r   r   r  r  J  s     
 r6   r  c                   rX  )VarStoreConverterib  c                sv    VP                   pVP                  V4       \        V4      pVP                  4        V# r   )r1   r#   r  r5   )r0   r   rW   r1   r+  r   r   rS  ZVarStoreConverter._readc  s2    {{		%%r6   c                r  r   r   rT  r   r   r   ZVarStoreConverter.writej  r  r6   c                s(    VP                  W4       R # r   )r  rU  r   r   rV  ZVarStoreConverter.xmlWritem  s    y'r6   c                s>    \        4       pVP                  WW44       V# r   )r  r  )r0   rE   rk   rl   r   r+  r  r   r  ZVarStoreConverter.xmlReadp  s    >g6r6   r   Nr`  r   r   r   r  r  b  s     ( r6   r  c                 sz    ^ p\        V4      .pV  F  pVP                  \        V4      4       K  	  \        V4      # r   )r?  rO   r   )fdSelectArrayr  r   rC   r   r   packFDSelect0r  v  s8    
CcNDIe$% T?r6   c                 s   ^p. p\        V 4      pRp\        V4       F'  pW,          pWF8w  g   K  VP                  WV.4       TpK)  	  X^,           p\        V4      .pVP                  \	        \        V4      4      4       V FE  p	VP                  \	        V	^ ,          4      4       VP                  \        V	^,          4      4       KG  	  VP                  \	        V4      4       \        V4      # )r  r   )r8   r   rO   r?  rB  r   
r  r  ZfdRangesZlenArrayZlastFDIndexr  r   ZsentinelGIDr   ZfdRange
   &         r   packFDSelect3r  ~  s    
CH=!HK8_"!OOQL)!K	 
 a%KcNDKK
3x=)*Jwqz*+Igaj)*  	KK
;'(T?r6   c                 s   ^p. p\        V 4      pRp\        V4       F'  pW,          pWF8w  g   K  VP                  WV.4       TpK)  	  X^,           p\        V4      .pVP                  \	        \        V4      4      4       V FE  p	VP                  \	        V	^ ,          4      4       VP                  \        V	^,          4      4       KG  	  VP                  \	        V4      4       \        V4      # r   )r8   r   rO   r?  rD  rB  r   r  r  r   packFDSelect4r    s    
CH=!HK8_"!OOQL)!K	 
 a%KcNDKK
3x=)*Jwqz*+Jwqz*+  	KK
;'(T?r6   c                   rX  )FDSelectCompileri  c                sf   VP                   pVP                  pV^ 8X  d   \        V4      V n        MzV^8X  d   \	        V4      V n        MbV^8X  d   \        V4      V n        MJ\        V4      p\	        V4      p\        V4      \        V4      8  d   WPn        ^ Vn         MW`n        ^Vn         W n        R# r   )r!  r"  r  r   r  r  r8   r   )r0   r   r   r  r  r  Zdata3r  r   r   ZFDSelectCompiler.__init__  s    oo ))!8%m4DIAX%m4DIAX%m4DI "-0E!-0E5zCJ&!	"#!	"#r6   c                r   )r  Nr   r   r   r   r   ZFDSelectCompiler.setPos  r  r6   c                r7   r   r  r9   r:   r   rN   ZFDSelectCompiler.getDataLength  r  r6   c                r  r   r  r  r   r   rQ   ZFDSelectCompiler.toFile  r  r6   r  Nr  r   r   r   r  r    s     ,. r6   r  c                   rX  )VarStoreCompileri  c                s    W n         VP                  '       g   VP                  4        \        R \	        VP                  4      4      p\        V4      VP                  .p\        V4      V n        R# r  )r   r   rU   minr8   rB  r   )r0   varStoreDatar   ZvarStoreDataLenr   r   r   r   ZVarStoreCompiler.__init__  sV         "fc,*;*;&<=?+\->->?dO	r6   c                r   )rc   Nr   r   r   r   r   ZVarStoreCompiler.setPos  r  r6   c                r7   r   r  r9   r:   r   rN   ZVarStoreCompiler.getDataLength  r  r6   c                r  r   r  r  r   r   rQ   ZVarStoreCompiler.toFile  r  r6   r  Nr  r   r   r   r  r    s     $. r6   r  c                   ro  )ROSConverteri  c                s    Vw  rEpVP                  VR \        V4      3R\        V4      3RV3.4       VP                  4        R# )RegistryOrder
SupplementNr^  )r0   r`   rE   rW   ZregistryorderZ
supplementrz  r   rV  ZROSConverter.xmlWrite  sP    &+#U8_-%,'z*	
 	r6   c                sH    VR ,          VR,          \        VR,          4      3# )r  r  r  )r	   rW  r   r   r  ZROSConverter.xmlRead  s"    j!5>8E,<O3PQQr6   r   Nrx  r   r   r   r  r    s     
R Rr6   r  numberr  r  rd  re  ZFullNameFontNameZ
FamilyName
FontMatrixr   FontBBoxrH   r  rd   rg   rc   Zblendrk  r   c                 s    \        \        V 4      4       F[  pW,          w  r#rEpVe   K  VR9   d   \        4       pM-VR8X  d   \        4       pMVR8X  d   \	        4       pM	VR8X  d   R pW#WEV3W&   K]  	  R # )Nr  r  rk  )deltar   )r   r8   ry  rp  rY  )r   r  rG  rE   rH  rI  rJ  rK  r   addConvertersr  `  sx    3u:',x$#$$!#DH_"$DE\!#DKD S4/ r6   c                   &    ] tR tRt]! ]4      tRtR# )TopDictDecompileriv  r   N)r~   r   r   r   rL  topDictOperators	operatorsr   r   r6   r   r  r  v  s    !"23Ir6   r  c                   r  )PrivateDictDecompileriz  r   N)r~   r   r   r   rL  privateDictOperatorsr  r   r   r6   r   r  r  z  s    !"67Ir6   r  c                   sd   a  ] tR tRt o ^ tRR ltR tR tR tR t	R t
R	 tR
 tR tR tRtV tR# )DictCompileri~  Nc                sv   V'       d   Vf   \        VR4      '       d   VP                  pW@n        Wn        W n        W0n        / pVP
                   F^  p\        WR 4      pVf   K  VP                  V,          pVP                  W4      pWqP                  P                  V4      8X  d   KZ  WuV&   K`  	  WPn        R # r   )r@   r   r  r+   r   r  r  
convertersr   defaultsrv  r   )	r0   r  r+   r   r   r   rE   rW   rJ  r{  r   r   ZDictCompiler.__init__  s    >gfh77]]FMMDG40E}%%d+DJJw.E((,,T22!DM " r6   c                r  r   r   r   r   r   r   ZDictCompiler.setPos  r  r6   c                s6    \        V P                  R 4      4      # )rN   )r8   rU   r9   r:   r   rN   ZDictCompiler.getDataLength  s    4<<011r6   c                s|   \         P                  \        R V P                  P                  V4       V P                  p. pV P
                  P                   F  pVP                  V4      pVf   K  V P                  V,          w  rg\        V\        4      '       dY   \        V4      p\        V4       F=  p	Wy,          p
WY,          p\        V RV
,           4      pVP                  V! V4      4       K?  	  M*\        V RV,           4      pVP                  V! V4      4       VP                  V4       K  	  \        V4      pV# )z-- compiling %s for %sZarg_)r   r   r   r~   r   r  r  rv  opcodesrA   r  r8   r   r  rO   r   )r0   Zreasonr   r   rE   rW   rG  ZargTyperN  r  rH  vZ
arghandlers   &&           r   rU   ZDictCompiler.compile  s    /1H1H&Q,,LL&&DKK%E},,t,KB'5))LqA!*CA!(v|!<JKK
1.	 " %T6G+;<
Ju-.KKO! '" r6   c                sJ    V P                  R 4      pVP                  V4       R# )rQ   N)rU   r   )r0   r1   r   rt   r   rQ   ZDictCompiler.toFile  s    ||H%

4r6   c                s   \        V\        4      '       d`   V Uu. uF  p\        V4      NK  	  ppVP                  \        ^4      4       VP                  \	        \
        4      4       \        V4      pV# \        V4      pV# u upi r5  )rA   r%   encodeNumberrO   r   blendOpr   )r0   numrl  r   Zdatums   &&   r   
arg_numberZDictCompiler.arg_number  so    c4  145#L%D5KKQ(KK()dOE  !%E 6s   Bc                s`    \         P                  ! V P                  P                  V4      4      # r   )r   encodeIntCFFr+   r  )r0   r   r   r   arg_SIDZDictCompiler.arg_SID  s"    ))$,,*=*=a*@AAr6   c                sn    . pV F#  pVP                  V P                  V4      4       K%  	  \        V4      # r   )rO   r  r   )r0   rW   r   r  rF   r   	arg_arrayZDictCompiler.arg_array  s0    CKK,- r6   c                s$   V'       g   R # V^ ,          p\        V\        4      '       d   V P                  V4      pMK. p^ pV F  pVP                  We,
          4       TpK  	  . pV F  pVP                  \	        V4      4       K  	  \        V4      # )r6   )rA   r%   arg_delta_blendrO   r  r   )r0   rW   Zval0r   r   Zlastr  r  r   r   	arg_deltaZDictCompiler.arg_delta  s    QxdD!!''.DCD

18$  DL-. r6   c                s   \        V^ ,          4      p\        V4      pW2,          ^,           pW@P                  8  ds   \        V P                  ^,
          V,          4      p. p \        \        V4      V4      pV^ 8X  d    V# V^ V pV P	                  V4      p	VP                  V	4       WR pKM  ^ .V,          p
R.V,          p^ p^ pW8  d8   W,          ^ ,          pW,
          W&   TpW,          R,          W&   V^,          pK=  T
pV F  pVP                  V4       K  	  V Uu. uF  p\        V4      NK  	  ppVP                  \        V4      4       VP                  \        \        4      4       V# u upi )a  A delta list with blend lists has to be *all* blend lists.

The value is a list is arranged as follows::

        [
                [V0, d0..dn]
                [V1, d0..dn]
                ...
                [Vm, d0..dn]
        ]

``V`` is the absolute coordinate value from the default font, and ``d0-dn``
are the delta values from the *n* regions. Each ``V`` is an absolute
coordinate from the default font.

We want to return a list::

        [
                [v0, v1..vm]
                [d0..dn]
                ...
                [d0..dn]
                numBlends
                blendOp
        ]

where each ``v`` is relative to the previous default font value.
Nr  )
r8   maxBlendStackrj   r  r  r   r  rO   r   r  )r0   rW   Z
numMastersZ	numBlendsZnumStackZnumBlendValuesr   ZnumValZvalListZout1Z	firstListZ	deltaListr  ZprevValZdefaultValueZrelValueListrk  rl  s   &&                r   r  ZDictCompiler.arg_delta_blend  sd   : q]
J	*a/((( !$"4"4q"8J!FGNCSZ8Q;6 
5  &/++G4

4 giI*IAG-
  %x{+5	&$x|	Q$L&	##I. '0<=<$C=JJ|I./JJww'(
 >s   $E4)r  r   r   r   r+   r   )r~   r   r   r   r  r   r   rN   rU   rQ   r  r  r  r  r  r   r   r   r   r   r  r  ~  sD     M,20B"D Dr6   r  c                 s    \        V \        4      '       d   \        P                  ! V 4      # \        P                  ! V 4      # r   )rA   rg  r   ZencodeFloatr  )r  r:   r   r  r  $	  s1    #u((--))#..r6   c                   s6   a  ] tR tRt o ]! ]4      tR tRtV t	R# )TopDictCompileri+	  c                s   V P                   p. pV P                  P                  Ef9   \        V P                  R4      '       d   V P                  P                  '       d   \        V P                  R4      '       d   R pM\        V P                  P                  4      pVf1   VP                  \        WP                  P                  V 4      4       MW@P                  R&   \        V P                  R4      '       dd   V P                  P                  '       dH   V P                  P                  p\        V\        4      '       g   VP                  \        WV 4      4       MN\        V P                  R4      '       d3   V P                  P                  p\        W`4      pVP                  V4       \        V P                  R4      '       d   V P                  P                  p\!        V4      ^ 8X  dU   V P                  P"                  p	V P                  P                   F$  p
VP                  W,          P$                  4       K&  	  \'        W4      pVP                  V4       \        V P                  R4      '       dk   . pV P                  P"                  p	V P                  P                   F  p
VP                  W,          4       K  	  \)        WWR7      pVP                  V4       \        V P                  R4      '       dW   V P                  P*                  P-                  W4      pVP                  V4       VP/                  VP1                  V4      4       \        V P                  R	4      '       dW   V P                  P2                  P-                  W4      pVP                  V4       VP/                  VP1                  V4      4       V# )
NrH   r  r  rc   r  r   r   rg   rd   )r   r  r3   r@   rH   r  rO   r  r   r  rA   rB   r  rc   r  r  r8   r   r1  r  r   rg   rK   r   rP   rd   )r0   r+   r   rT   ZcharsetCoder   r  ZvarStoreCompr   r-  rE   ZfdSelectCompr   ZcharStringsCompZfdArrayIndexCompprivComps   &&              r   rP   ZTopDictCompiler.getChildren.	  s   <<))1t||Y//DLL4H4H4H4<<//"&K"/0D0D"EK&OO'1E1EtL /:LL+t||Z00T\\5J5J5J<<00!(C00OO$4W$MNt||Z00#||44/C-4<<,,
 ||,,H8}!"ll66 LL00DOOK$5$C$CD 1+H;LOOL)4<<//E,,22K,,[./ -1%$VOOOO,4<<++  $||33??NOO,-OO,88AB4<<++||++77FHOOH%OOH009:r6   r   N)
r~   r   r   r   rM  r  r  rP   r   r   r   r   r   r  r  +	  s     ./G7 7r6   r  c                   sL   a a ] tR tRt o]! ]4      tRV 3R lltR tRt	Vt
V ;t# )FontDictCompilerih	  c                s\  < \         \        V `  WW4R 7       . pV P                  p\	        \        VP                  4      \        VP                  4      ,
          4       F  pWaP                  9   d   VP                  V4       K&  VP                  P                  V4      pVe%   VP                  V,          pVP                  W4      p\        WR4      V8w  g   K|  VP                  V4       K  	  V'       d7   \        P                  RRP!                  \	        V4      4      ,           4       R# R# )r   Nz:Some CFF FDArray/FontDict keys were ignored upon compile: rc  )r   r  r   r  r2  r  r  r  r   rO   r  rv  r   r  r   Zwarningrr  )
r0   r  r+   r   r   ignoredNamesrE   rI  rJ  r   s
   &&&&&    r   r   ZFontDictCompiler.__init__k	  s    .w.W ,,3w112S5GGHD&
 ##D) "**..t4&"--d3D"ii9G7$/7: ''-# I$ KKL((6,/01 r6   c                s    . p\        V P                  R 4      '       dW   V P                  P                  P                  W4      pVP	                  V4       VP                  VP                  V4      4       V# )rd   )r@   r  rd   rK   rO   r   rP   )r0   r+   rT   r  rF   r   rP   ZFontDictCompiler.getChildren	  sZ    4<<++||++77FHOOH%OOH009:r6   r   r   )r~   r   r   r   rM  r  r  r   rP   r   r   r   r   r   r   r  r  h	  s      ./GB r6   r  c                   s@   a  ] tR tRt o ]t]! ]4      tR t	R t
RtV tR# )PrivateDictCompileri	  c                sV    W!,
          pW13V P                   P                  R &   Wn        R# )rd   N)r   r   r   )r0   r   r   r   r   r   r   ZPrivateDictCompiler.setPos	  s$    |)-I&r6   c                s    . p\        V P                  R 4      '       d5   VP                  V P                  P                  P	                  W4      4       V# )r   )r@   r  rO   r   rK   )r0   r+   rT   rt   r   rP   ZPrivateDictCompiler.getChildren	  s>    4<<))OODLL..::7IJr6   )r   N)r~   r   r   r   maxStackLimitr  rM  r  r  r   rP   r   r   r   r   r   r  r  	  s$     !M23G
 r6   r  c                   sR   a  ] tR tRt o RR ltR tR tRR ltR tR t	R	 t
R
tV tR# )BaseDicti	  Nc                s    / V n         . V n        Wn        Vf   R # W@n        W n        Ve9   \
        P                  \        RV P                  P                  V4       W0n	        R # R # )Nr   )
r   	skipNamesr+   r   r1   r   r   r   r~   r   )r0   r+   r1   r   r   r   r   r   ZBaseDict.__init__	  sT    <	GGE-t~~/F/FO K r6   c                s   \         P                  \        R V P                  P                  \	        V4      4       V P                  V P                  V 4      pVP                  V4       VP                  4       V n	        V P                  4        R# )z    length %s is %dN)r   r   r   r~   r8   decompilerClassr+   r5   ZgetDictr   postDecompile)r0   r   Zdecrt   r   r5   ZBaseDict.decompile	  s^    ,dnn.E.Es4yQ""4<<6d{{}r6   c                r  r   r   r9   r:   r   r  ZBaseDict.postDecompile	  r  r6   c                r   r   r   r   r   r   rK   ZBaseDict.getCompiler	  r   r6   c                sH   VR ,          VRR u;8X  d   R8X  d   M M\        V4      hV P                  P                  VR4      pVf   V P                  P                  V4      pVf   \        V4      hV P                  V,          pVP                  W4      p\        WV4       V# ):N   NNZ__i)r  r   rv  r  r  r   setattr)r0   rE   rW   rJ  rF   r   __getattr__ZBaseDict.__getattr__	  s    8tBCy(D(
 !&&  t,=MM%%d+E= &&t$		$&E"r6   c                s   V P                    FS  pW P                  9   d   K  \        WR 4      pVf
   VR8w  d   K.  V P                  V,          pVP	                  WV4       KU  	  \        V P                  4      \        V P                   4      ,
          pV'       dC   VP                  RRP                  \        V4      4      ,          4       VP                  4        R # R # )NrH   zsome keys were ignored: %src  )r  r  r  r  rV  r  r   r  rr  r2  r\   )r0   r`   rE   rW   rJ  r  r  r   r^   ZBaseDict.toXML	  s    JJD~~%D-E }!2??4(DMM)51! " 4<<(3tzz?:,sxx|8L/MM 	 r6   c                sh    V P                   V,          pVP                  WW04      p\        WV4       R # r   )r  r  r  )r0   rE   rk   rl   rJ  rW   r4   r   rf   ZBaseDict.fromXML	  s*    t$T'8E"r6   )r   r1   r   r   r  r+   )NNNNr   )r~   r   r   r   r   r5   r  rK   r  r^   rf   r   r   r   r   r   r   r   	  s.     !H" 2# #r6   r   c                   s   a a ] tR tRt oRt]! ]4      t]! ]4      t	]
t]! ]4      t]tR
V 3R lltR tR tR tR tR tR	tVtV ;t# )re   i	  a   The ``TopDict`` represents the top-level dictionary holding font
information. CFF2 tables contain a restricted set of top-level entries
as described `here <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#7-top-dict-data>`_,
but CFF tables may contain a wider range of information. This information
can be accessed through attributes or through the dictionary returned
through the ``rawDict`` property:

.. code:: python

        font = tt["CFF "].cff[0]
        font.FamilyName
        # 'Linux Libertine O'
        font.rawDict["FamilyName"]
        # 'Linux Libertine O'

More information is available in the CFF file's private dictionary, accessed
via the ``Private`` property:

.. code:: python

        tt["CFF "].cff[0].Private.BlueValues
        # [-15, 0, 515, 515, 666, 666]

c                s  < \         \        V `  WW6R 7       WPn        W@n        V'       d7   \        \        4      V n        V! 4       V n        \        \        4      V n
        R# \        \        4      V n        \        \        4      V n
        R# r   )r   re   r   r3   r/   rP  topDictOperators2r  rH   rO  r  r  )r0   r+   r1   r   r/   r3   r   r   r   r   r   ZTopDict.__init__
  sf     	gt%gV%K!2&)*;<DM,.DL#$56DJ)*:;DM#$45DJr6   c                r=   )z.Returns a list of glyph names in the CFF font.)rH   r9   r:   r   r-   ZTopDict.getGlyphOrder$
      ||r6   c                s   V P                   P                  R 4      pVf   R# V P                  P                  V4       V P                  '       d   \        V P                  4      V n        R# \        V P                  4      V n        R# r   )r   rv  r1   r#   r   r   r#  r   )r0   r   r   r   r  ZTopDict.postDecompile(
  sW    !!-0>		v<<<'		2DN'		2DNr6   c                s   \        V R 4      '       d   V P                  4        \        V R4      '       d	   R.V n        \        V R4      '       d   \        V R 4      '       g
   . ROV n        \        P	                  W4       R# )r   r  r  N)CIDFontVersionCIDFontRevisionCIDFontTypeCIDCount)r@   decompileAllCharStringsr  r   r^   )r0   r`   r   r   r^   ZTopDict.toXML3
  sa    4''((*4(\DNtU##74+G+GDN 	t'r6   c                s    \        V P                  P                  4       4       F  w  r VP                  4        K  	  R#    \        P                  R T4       h ; i)zError in charstring %sN)Z	enumerater   r>   r5   r   Zerror)r0   r  r0  s   &  r   r  ZTopDict.decompileAllCharStringsC
  sM    &t'7'7'>'>'@AMA$$& B		2A6s   A  Ac                s0   R pV P                   P                  4        F7  pVP                  V P                   4      pVf   K$  Ve   \        W4      pK5  TpK9  	  Vf"   V P                  R,          R,          V n        R # \        \        V4      4      V n        R # )Nr  r   )r   r>   Z
calcBoundsr   r  r  r%   r   )r0   ZfontBBoxr0  Zboundsr   r   rI   ZTopDict.recalcFontBBoxL
  s    **113J**4+;+;<F!'(:H%H 4  MM*5a8DM !23DMr6   )r  r/   r3   rH   r  r#  r  r  r  )r~   r   r   r   r   rP  r  r  rQ  r  r  r   rO  r  r  r  r   r-   r  r^   r  rI   r   r   r   r   r   r   re   re   	  sZ     2 -.H !12J#M'(E'O6(	3( 4 4r6   re   c                   sf   a a ] tR tRt o/ t]! ]4      t]t	. ROt
R.t]tRV 3R lltR tRtVtV ;t# )r  i\
  rd   c                s`   < \         \        V `  WW5R 7       W`n        V P	                  V4       R# r   )r   r  r   rh   setCFF2)r0   r+   r1   r   r/   r   rh   r   r   r   r   ZFontDict.__init__
  s*     	h&wf&LVr6   c                sz    V'       d   V P                   V n        R V n        R# V P                  V n        RV n        R# )TFN)	orderCFF2r  r   orderCFFr   r   r   r  ZFontDict.setCFF2
  s)    DJDLDJ DLr6   )r   r  rh   )r  r  Weightrd   r  )r~   r   r   r   r  rQ  r  r  r  r   r  r  r  r  r   r  r   r   r   r   r   r   r  r  \
  s<     8 H !12J$M>HI'O! !r6   r  c                   s   a a ] tR tRt o]! ]4      t]! ]4      t]	! ]4      t
]t]tRV 3R llt]R 4       tRR ltRtVtV ;t# )r  i
  c                s*  < \         \        V `  WW4R 7       WPn        V'       d@   \	        \
        4      V n        \        \
        4      V n        R;V n	        V n
        RV n        R# \	        \        4      V n        \        \        4      V n        RV n        R# )r   NTF)r   r  r   rh   rP  privateDictOperators2r  rO  r  nominalWidthXdefaultWidthXr   r  )r0   r+   r1   r   r   rh   r   s   &&&&&&r   r   ZPrivateDict.__init__
  ss    k4)')O)*?@DM#$9:DJ 7;:D!3DL)*>?DM#$89DJ DLr6   c                r=   r   )r   r9   r:   r   in_cff2ZPrivateDict.in_cff2
  r  r6   c                s    Vf"   \        V R4      '       d   V P                  pM^ pV P                  P                  V4      pV# )Nvsindex)r@   r  rh   r  )r0   Zvir  rt   r   r  ZPrivateDict.getNumRegions
  s<    :tY''\\[[..r2
r6   )r   r  r  r  r  rh   )NNNNNr   )r~   r   r   r   rP  r  r  rQ  r  rO  r  r  r  r  r   r   Zpropertyr  r  r   r   r   r   r   r   r  r  
  sS     12H !56J+,E+O'M!   r6   r  c                   sR   a  ] tR tRt o RtRR ltR tR tR tR t	R	 t
R
 tRtV tR# )r*   i
  zSID -> string mapping.Nc                sx    Vf   . pM'\        VRR7       Uu. uF  p\        VRR7      NK  	  ppW n        R # u upi )NFr   r   r   )r&   r   r+   )r0   r1   r+   r   rF   r   r   ZIndexedStrings.__init__
  s;    <G<A$u<UV<UquQ2<UGV Ws   7c                s     \        V R V RR7      # )NFr   )r   r9   r:   r   rK   ZIndexedStrings.getCompiler
  s    %dD$uEEr6   c                r7   r   )r8   r+   r9   r:   r   r;   ZIndexedStrings.__len__
  s    4<<  r6   c                sn    V\         8  d   \        V,          # V P                  V\         ,
          ,          # r   )cffStandardStringCountcffStandardStringsr+   )r0   r  r   r   rG   ZIndexedStrings.__getitem__
  s+    ''%c**<<&< <==r6   c                st   \        V R 4      '       g   V P                  4        \        VRR7      pV\        9   d   \        V,          pV# WP                  9   d   V P                  V,          pV# \        V P                  4      \        ,           pV P                  P                  V4       W P                  V&   V# )stringMappingr   r   )	r@   buildStringMappingr   cffStandardStringMappingr  r8   r+   r  rO   )r0   r   r  rt   r   r  ZIndexedStrings.getSID
  s    t_--##%!h'((*1-C 
 $$$$$Q'C
 
 dll#&<<CLL"$'q!
r6   c                r=   r   r   r9   r:   r   
getStringsZIndexedStrings.getStrings
  s    ||r6   c                s    / V n         \        \        V P                  4      4       F.  pV\        ,           V P                   V P                  V,          &   K0  	  R # r   )r  r   r8   r+   r  r(  r   r   r  Z!IndexedStrings.buildStringMapping
  sA    3t||,-E6;>T6TDt||E23 .r6   )r  r+   r   )r~   r   r   r   r   r   rK   r;   rG   r  r  r  r   r   r   r   r   r*   r*   
  s3      F!>U Ur6   r*   r  ZspaceZexclamZquotedblZ
numbersignZdollarZpercentZ	ampersandZ
quoterightZ	parenleftZ
parenrightZasteriskZplusZcommaZhyphenZperiodZslashZzeroZoneZtwoZthreeZfourZfiveZsixZsevenZeightZnineZcolonZ	semicolonZlessZequalZgreaterZquestionZatZAr   ZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZbracketleftZ	backslashZbracketrightZasciicircumZ
underscoreZ	quoteleftZaZbZcrF  ZeZfZgZhr  ZjZkrN  r  r  ZoZpZqZrr   ZtZur  ZwZxZyZzZ	braceleftZbarZ
bracerightZ
asciitildeZ
exclamdownZcentZsterlingZfractionZyenZflorinZsectionZcurrencyZquotesingleZquotedblleftZguillemotleftZguilsinglleftZguilsinglrightZfiZflZendashZdaggerZ	daggerdblZperiodcenteredZ	paragraphZbulletZquotesinglbaseZquotedblbaseZquotedblrightZguillemotrightZellipsisZperthousandZquestiondownZgraveZacuteZ
circumflexZtildeZmacronZbreveZ	dotaccentZdieresisZringZcedillaZhungarumlautZogonekZcaronZemdashZAEZordfeminineZLslashZOslashZOEZordmasculineZaeZdotlessiZlslashZoslashZoeZ
germandblsZonesuperiorZ
logicalnotZmuZ	trademarkZEthZonehalfZ	plusminusZThornZ
onequarterZdivideZ	brokenbarZdegreeZthornZthreequartersZtwosuperiorZ
registeredZminusZethZmultiplyZthreesuperiorZ	copyrightZAacuteZAcircumflexZ	AdieresisZAgraveZAringZAtildeZCcedillaZEacuteZEcircumflexZ	EdieresisZEgraveZIacuteZIcircumflexZ	IdieresisZIgraveZNtildeZOacuteZOcircumflexZ	OdieresisZOgraveZOtildeZScaronZUacuteZUcircumflexZ	UdieresisZUgraveZYacuteZ	YdieresisZZcaronZaacuteZacircumflexZ	adieresisZagraveZaringZatildeZccedillaZeacuteZecircumflexZ	edieresisZegraveZiacuteZicircumflexZ	idieresisZigraveZntildeZoacuteZocircumflexZ	odieresisZograveZotildeZscaronZuacuteZucircumflexZ	udieresisZugraveZyacuteZ	ydieresisZzcaronZexclamsmallZHungarumlautsmallZdollaroldstyleZdollarsuperiorZampersandsmallZ
AcutesmallZparenleftsuperiorZparenrightsuperiorZtwodotenleaderZonedotenleaderZzerooldstyleZoneoldstyleZtwooldstyleZthreeoldstyleZfouroldstyleZfiveoldstyleZsixoldstyleZsevenoldstyleZeightoldstyleZnineoldstyleZcommasuperiorZthreequartersemdashZperiodsuperiorZquestionsmallZ	asuperiorZ	bsuperiorZcentsuperiorZ	dsuperiorZ	esuperiorZ	isuperiorZ	lsuperiorZ	msuperiorZ	nsuperiorZ	osuperiorZ	rsuperiorZ	ssuperiorZ	tsuperiorZffZffiZfflZparenleftinferiorZparenrightinferiorZCircumflexsmallZhyphensuperiorZ
GravesmallZAsmallZBsmallZCsmallZDsmallZEsmallZFsmallZGsmallZHsmallZIsmallZJsmallZKsmallZLsmallZMsmallZNsmallZOsmallZPsmallZQsmallZRsmallZSsmallZTsmallZUsmallZVsmallZWsmallZXsmallZYsmallZZsmallZcolonmonetaryZ	onefittedZrupiahZ
TildesmallZexclamdownsmallZcentoldstyleZLslashsmallZScaronsmallZZcaronsmallZDieresissmallZ
BrevesmallZ
CaronsmallZDotaccentsmallZMacronsmallZ
figuredashZhypheninferiorZOgoneksmallZ	RingsmallZCedillasmallZquestiondownsmallZ	oneeighthZthreeeighthsZfiveeighthsZseveneighthsZonethirdZ	twothirdsZzerosuperiorZfoursuperiorZfivesuperiorZsixsuperiorZsevensuperiorZeightsuperiorZninesuperiorZzeroinferiorZoneinferiorZtwoinferiorZthreeinferiorZfourinferiorZfiveinferiorZsixinferiorZseveninferiorZeightinferiorZnineinferiorZcentinferiorZdollarinferiorZperiodinferiorZcommainferiorZAgravesmallZAacutesmallZAcircumflexsmallZAtildesmallZAdieresissmallZ
AringsmallZAEsmallZCcedillasmallZEgravesmallZEacutesmallZEcircumflexsmallZEdieresissmallZIgravesmallZIacutesmallZIcircumflexsmallZIdieresissmallZEthsmallZNtildesmallZOgravesmallZOacutesmallZOcircumflexsmallZOtildesmallZOdieresissmallZOEsmallZOslashsmallZUgravesmallZUacutesmallZUcircumflexsmallZUdieresissmallZYacutesmallZ
ThornsmallZYdieresissmallz001.000z001.001z001.002z001.003ZBlackZBoldZBookZLightZMediumZRegularZRomanZSemiboldi  )i   Zmaxstackr  NN)   i   )r  r  r  ))r     ZSyntheticBaser  NN)r   Zversionr  NN)r  r   )r  i&   )r   r  r  NN))r  rr   ZisFixedPitchr  r   N))r  r  ZItalicAngler  r   N))r  r  ZUnderlinePositionr  iN))r  r   ZUnderlineThicknessr  i2   N))r  i   Z	PaintTyper  r   N))r     ZCharstringTyper  r  N)r     )MbP?r   r   r!  r   r   )   ZUniqueIDr  NN)r   r   r   r   ))r     ZStrokeWidthr  r   N)   ZXUIDr   NN))r     Z
PostScriptr  NN))r     ZBaseFontNamer  NN))r  i   ZBaseFontBlendr  NN))r  i   r	  r  r   N))r  i    r
  r  r   N))r  i!   r  r  r   N))r  i"   r  r  i"  N))r  i#   ZUIDBaser  NN)r  r  )r  i%   )r  i$   )r&  r  r  NN)r  Z
BlueValuesr  NN)r   Z
OtherBluesr  NN)r#  ZFamilyBluesr  NN)	   ZFamilyOtherBluesr  NN))r  r'  Z	BlueScaler  g}?5^I?N))r  
   Z	BlueShiftr  r   N))r     ZBlueFuzzr  rr   N)r(  ZStdHWr  NN)r)  ZStdVWr  NN))r  r  Z	StemSnapHr  NN))r  r"  Z	StemSnapVr  NN))r  r$  Z	ForceBoldr  r   N))r  i   ZForceBoldThresholdr  NN))r  i   ZlenIVr  NN))r  i   ZLanguageGroupr  r   N))r  i   ZExpansionFactorr  gQ?N))r  i   ZinitialRandomSeedr  r   N)r  r  r  r   N)r%  r  r  r   N)r   ZfontTools.miscr    r   ZfontTools.misc.arrayToolsr   r   ZfontTools.misc.textToolsr   r   r   r   r   r	   ZfontTools.ttLibr
   ZfontTools.ttLib.tables.otBaser   r   ZfontTools.ttLib.tablesr   r  Zior   r!   Zloggingrf  r   Z	getLoggerr~   r   r   r  Zobjectr   rJ   r   r   r   r   r   r   r   r   r&   r.   r	  r(   r  r  r  r   r   r   r   r   r   r   r?  rB  rD  rL  rM  rO  rP  rQ  rR  rY  ra  rh  rn  rp  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs  r  r  r  r  ZDictDecompilerr  r  r  r  r  r  r  r   re   r  r  r*   r  r  r  r   Z_ir  r  r  r  r  r  r   r6   r   <module>r*     s2   # ( 8  # 7 7 1    	 	! T( T(n/& /&d	I%F I%X] 
!;= !;H&-= &-R	- 	.' .1- 1DF DNh u h V"! "4 5 4 n 5  F36 3l=,v =,@H)& H)V!

))$$f 2;_ ;<o <$o 2_ 8_ $> .^ :> :z; ;|f , , 
"J
(v *< <~(&.D~ 8 0 (**v Bv &R? R"&*& u.lnE& 6	&
 && %01& k5$(9:& 
E4!23& z5$(9:& eT?#45& %& 1& 0& 9& 8&  .!&" 3#&$ lG%?F%&& +'&( 
G\40)&* 0+&, &-&. 0/&0 21&2 53&4 45&6 57&8 19&: 1;&< Hd$4$67=&> 0?&@ Xq"3"56A&B ($0D0FGC&D z8T+<+>?E&F y(D*:*<=G&H $(<(>?I&J Xt%6%89K& T +lG%?Fz8T+<+>?y(D*:*<=$(<(>?Xt%6%89   
 * +*+04.-''00.:-276,,(D."23; D * +*+04.-''0027(D."23/ 60$ " #  444 48M88 8c6 cL/:l :z*| *Z,  H#v H#Vi4h i4X7!x 7!t"( "J*UV *U`HHH H 	H
 H H H H H H H H H H H  !H" #H$ %H& 
'H( 
)H* +H, -H. /H0 
1H2 3H4 5H6 7H8 9H: ;H< =H> ?H@ AHB CHD 	EHF GHH IHJ KHL MHN OHP QHR SHT UHV WHX YHZ [H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OHP QHR SHT UHV WHX YHZ [H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| 
}H~ H@ AHB CHD EHF GHH IHJ 
KHL MHN OHP QHR SHT UHV WHX YHZ [H\ 	]H^ 	_H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OHP QHR SHT UHV 	WHX YHZ [H\ ]H^ 	_H` aHb 	cHd eHf gHh iHj 	kHl mHn oHp qHr 	sHt uHv 
wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OHP 
QHR SHT UHV WHX YHZ [H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OHP QHR SHT UHV WHX YHZ [H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OHP QHR SHT UHV WHX YHZ [H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OHP QHR SHT UHV 	WHX 
YHZ 
[H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@	 A	HB	 C	HD	 E	HF	 G	HH	 I	HJ	 K	HL	 M	HN	 O	HP	 Q	HR	 S	HT	 U	HV	 W	HX	 Y	HZ	 [	H\	 ]	H^	 _	H`	 a	Hb	 c	Hd	 e	Hf	 g	Hh	 i	Hj	 k	Hl	 m	Hn	 o	Hp	 q	Hr	 s	Ht	 u	Hv	 w	Hx	 y	Hz	 {	H|	 }	H~	 	H@
 A
HB
 C
HD
 E
HF
 G
HH
 I
HJ
 K
HL
 M
HN
 O
HP
 Q
HR
 S
HT
 U
HV
 W
HX
 Y
HZ
 [
H\
 ]
H^
 _
H`
 a
Hb
 c
Hd
 e
Hf
 g
Hh
 i
Hj
 k
Hl
 m
Hn
 o
Hp
 q
Hr
 s
Ht
 u
Hv
 w
Hx
 y
Hz
 {
H|
 }
H~
 
H@ AHB CHD EHF GHH IHJ KHL MHN OHP QHR SHT UHV WHX YHZ [H\ ]H^ _H` aHb cHd eHf gHh iHj kHl mHn oHp qHr sHt uHv wHx yHz {H| }H~ H@ AHB CHD EHF GHH IHJ KHL MHN OH T    
&
'B79/34 (fff f 	f
 f f f f f f f f f f f  !f" #f$ %f& 
'f( 
)f* +f, -f. /f0 
1f2 3f4 5f6 7f8 9f: ;f< =f> ?f@ AfB CfD 	EfF GfH IfJ KfL MfN OfP QfR SfT UfV WfX YfZ [f\ ]f^ _f` afb cfd eff gfh ifj kfl mfn ofp qfr sft ufv wfx yfz {f| }f~ f@ AfB CfD EfF GfH IfJ KfL MfN OfP QfR SfT UfV WfX YfZ [f\ ]f^ _f` afb cfd eff gfh ifj kfl mfn ofp qfr sft ufv wfx yfz {f| 
}f~ f@ AfB CfD EfF GfH IfJ 
KfL MfN OfP QfR SfT UfV WfX YfZ [f\ 	]f^ 	_f` afb cfd eff gfh ifj kfl mfn ofp qfr sft ufv wfx yfz {f| }f~ f@ AfB CfD EfF GfH IfJ KfL MfN OfP QfR SfT UfV 	WfX YfZ [f\ ]f^ 	_f` afb 	cfd eff gfh ifj 	kfl mfn ofp qfr 	sft ufv 
wfx yfz {f| }f~ f@ AfB CfD EfF GfH IfJ KfL MfN OfP 
QfR SfT UfV WfX YfZ [f\ ]f^ _f` afb cfd eff gfh ifj kfl mfn ofp qfr sft ufv wfx yfz {f| }f~ f@ AfB CfD EfF GfH IfJ KfL MfN OfP QfR SfT UfV WfX YfZ [f\ ]f^ _f` afb cfd eff gfh ifj kfl mfn ofp qfr sft ufv wfx yfz {f| }f~ f@ AfB CfD EfF GfH IfJ Kf P  ggg g 	g
 g g g g g g g g g g g  !g" #g$ %g& 'g( )g* +g, -g. /g0 1g2 3g4 5g6 7g8 9g: ;g< =g> ?g@ AgB CgD EgF GgH IgJ KgL MgN OgP QgR SgT UgV WgX YgZ [g\ 	]g^ 	_g` 	agb 
cgd 
egf ggh igj kgl mgn ogp qgr sgt ugv wgx ygz {g| }g~ g@ AgB CgD EgF GgH IgJ KgL MgN OgP QgR SgT UgV WgX YgZ [g\ ]g^ _g` agb cgd egf ggh igj kgl mgn ogp qgr sgt ugv wgx ygz {g| }g~ g@ AgB CgD EgF GgH IgJ KgL MgN OgP QgR SgT UgV WgX YgZ [g\ ]g^ _g` agb cgd egf ggh igj kgl mgn ogp qgr sgt ugv wgx ygz {g| }g~ g@ AgB CgD EgF GgH IgJ KgL MgN OgP QgR SgT UgV WgX YgZ [g\ ]g^ _g` agb cgd egf ggh igj kgl mgn ogp qgr sgt ugv wgx ygz {g| }g~ g@ AgB CgD EgF GgH IgJ KgL Mg R  XXX X 	X
 X X X X X X X X X X X  !X" #X$ %X& 'X( )X* +X, -X. /X0 1X2 3X4 5X6 7X8 9X: ;X< =X> ?X@ AXB CXD EXF GXH IXJ KXL MXN OXP QXR 	SXT 	UXV 	WXX 
YXZ 
[X\ ]X^ _X` aXb cXd eXf gXh iXj kXl mXn oXp qXr sXt uXv wXx yXz {X| }X~ X@ AXB CXD EXF GXH IXJ KXL MXN OXP QXR SXT UXV WXX YXZ [X\ ]X^ _X` aXb cXd eXf gXh iXj kXl mXn oX t   r6   