+
    K<in                       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|]}! ]{4      ]|8X  g   Q h/ 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]}! ]4      ]8X  g   Q h. 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]}! ]4      ]8X  g   Q h. 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^Wt]}! ]4      ]8X  g   Q hR
# (\  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                   ~   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                   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
                  R	9   g   Q R4       h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Unknown CFF formatBc              3   8   "   T F  p\        V4      x  K  	  R # 5iNr
   ).0ss   & ;/usr/lib/python3/dist-packages/fontTools/cffLib/__init__.py	<genexpr>'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cff2GetGlyphOrders   &&&&  r   	decompileCFFFontSet.decompileF   s    		!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   )lenr2   r;   s   &r   __len__CFFFontSet.__len__s   s    4>>""rA   c                ,    \        V P                  4      # r   )r0   r2   rD   s   &r   keysCFFFontSet.keysv   s    DNN##rA   c                    V P                   # r   )r4   rD   s   &r   valuesCFFFontSet.valuesy   s       rA   c                "   \        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__)
hasattrrN   
isinstancestrr2   indexr+   KeyError	TypeErrorr4   )r;   nameOrIndexrR   names   &&  r   __getitem__CFFFontSet.__getitem__|   s     ;,,))+ES))D,,,T2 K((  ''	  ,{++,s   A7 7Bc                &   W n         Ve<   V'       d   ^M^pV P                  V8w  d   \        RW@P                  3,          4      hM'V P                  R9   g   Q R4       h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!   r   charsetr#   )r&   r*   r+   recalcBBoxesr4   recalcFontBBoxr5   	CFFWritergetCompilerr/   addr   packr(   getDataLengthr7   r,   r-   r1   r2   appendr:   rO   rZ   r8   getChildrentoFile)r;   r<   r&   r    r=   topDictr6   writertopCompilerr2   rV   rZ   childrenchilds   &&&&          r   compileCFFFontSet.compile   sV    "(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rA   c                   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rV   r:   N)
	simpletagr*   newlinero   r2   begintagr
   toXMLendtagr:   )r;   	xmlWriterfontNamefonts   &&  r   ru   CFFFontSet.toXML   s     	G4::6G4::6HyuX?>DJJy!Y' ' 	=)y)'rA   c                   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*   ro   rp   r-   r/   r:   r2   rV   )r:   Nr"   )r:   r>   VarStorePrivatern   )r&   rO   r*   ro   r-   r/   r9   r:   r2   r3   r4   rb   TopDictrZ   r8   rP   rQ   fromXMLFDArrayvstorer|   r}   r   T2CharStringint)r;   rV   attrscontentr&   rx   re   r>   elementfdArrayfontDictsubrCharStringClasssubrs   &&&&&        r   r   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 rA   c                "    ^RI Hp V! W4       R# )r$   )_convertCFFToCFF2N)	CFFToCFF2r   )r;   r&   r   s   && r   convertCFFToCFF2CFFFontSet.convertCFFToCFF2-      0$'rA   c                "    ^RI Hp V! W4       R# )r$   )_convertCFF2ToCFFN)	CFF2ToCFFr   )r;   r&   r   s   && r   convertCFF2ToCFFCFFFontSet.convertCFF2ToCFF2  r   rA   c                "    ^RI Hp V! V 4       R# )r$   )desubroutinizeN)
transformsr   )r;   r   s   & r   r   CFFFontSet.desubroutinize7  s    .trA   c                "    ^RI Hp V! V 4       R# )r$   )remove_hintsN)r   r   )r;   r   s   & r   r   CFFFontSet.remove_hints<  s    ,TrA   c                "    ^RI Hp V! V 4       R# )r$   )remove_unused_subroutinesN)r   r   )r;   r   s   & r   r   $CFFFontSet.remove_unused_subroutinesA  s    9!$'rA   )
r:   r2   r/   r*   ro   r-   r&   r6   r4   r7   r   )__name__
__module____qualname____firstlineno____doc__r?   rE   rH   rK   rW   rj   ru   r   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r   0   sT     *+9Z#$!( >@:B-H(
(


( (rA   r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )r]   iG  zTHelper class for serializing CFF data to binary. Used by
:meth:`CFFFontSet.compile`.c                     . V n         Wn        R # r   )datar    r;   r    s   &&r   __init__CFFWriter.__init__K  s    	rA   c                <    V P                   P                  V4       R # r   )r   rb   )r;   tables   &&r   r_   CFFWriter.addO  s    		rA   c                L   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`  	  WR8X  g   Q hR # )	Nz CFFWriter.toFile() iteration: %dra   setPosz#CFFWriter.toFile() writing to file.r!   r   rd   )logDEBUGr   rO   ra   rP   TopDictIndexCompilerr    r7   rC   r   rb   tellr,   r`   calcOffSizer-   rd   write)	r;   r<   lastPosListcountposposListitemendPosbegins	   &&       r   rd   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;./  %%%rA   )r   r    r-   r7   N)
r   r   r   r   r   r   r_   rd   r   r   r   s   @r   r]   r]   G  s     # $& $&rA   r]   c                 L    V R 8  d   ^pV# V R8  d   ^pV# V R8  d   ^pV# ^pV# )   i   i    )largestOffsetr-   s   & r   r   r   y  sN    u N 
	 
 N	 
	" N NrA   c                   F   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                    Vf%   \        VR4      '       d   VP                  pVf   Q hW@n        V P                  W4      V n        W0n        R # Nr    )rO   r    getItemsitemsparent)r;   r   r6   r   r    s   &&&&&r   r   IndexCompiler.__init__  sB    >gfh77]]F%%%]]52
rA   c                    V# r   r   r;   r   r6   s   &&&r   r   IndexCompiler.getItems      rA   c                    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# )r$   ra   )r   rO   ra   rC   rb   )r;   r   offsetsr   s   &   r   
getOffsetsIndexCompiler.getOffsets  so    :::CeG

411 2 2 44CD	/Cs# #  GrA   c                "   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   rC   )r;   	countSize
lastOffsetr-   
dataLengths   &    r   ra   IndexCompiler.getDataLength  s    ;;;II:::*2.J!*-Gtzz?Q&'12  	   #JrA   c                n   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 F3  pV! RV4      VR p\        V4      V) 8X  g   Q hVP                  V4       K5  	  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# )r$   >lNrd   latin1encodingr   )r   r    writeCard32rC   r   writeCard16r   
writeCard8r,   r`   r   rO   rd   r	   )	r;   r<   r   r-   r`   offset	binOffsetr   r   s	   &&       r   rd   IndexCompiler.toFile  s    //#;;;c$**o.c$**o.:::!'"+.Gt%hG;;D! v.wx8	9~'111

9% " 

4**KK%"4(;DJJt$ # rA   )r    r   r   r   )r   r   r   r   r   r   r   r   ra   rd   r   r   r   s   @r   r   r     s(     ,% %rA   r   c                   &   a  ] tR tRt o R tRtV tR# )IndexedStringsCompileri  c                    VP                   # r   r6   r   s   &&&r   r   IndexedStringsCompiler.getItems  s    }}rA   r   N)r   r   r   r   r   r   r   r   s   @r   r   r     s      rA   r   c                   Z   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   rb   r^   r;   r   r6   outr   s   &&&  r   r   TopDictIndexCompiler.getItems  -    DJJt''67 
rA   c                p    . pV P                    F#  pVP                  VP                  V4      4       K%  	  V# r   r   extendrc   )r;   r6   rh   re   s   &&  r   rc    TopDictIndexCompiler.getChildren  s1    zzGOOG//89 "rA   c                   < V P                   '       d&   ^ V P                  ^ ,          P                  4       .pV# \        \        V `  4       #     )r    r   ra   superr   r   )r;   r   	__class__s   & r   r   TopDictIndexCompiler.getOffsets  s=    ;;;$**Q-5578GN-t?AArA   c                   < V P                   '       d$   V P                  ^ ,          P                  4       pV# \        \        V `  4       # r   )r    r   ra   r   r   )r;   r   r   s   & r   ra   "TopDictIndexCompiler.getDataLength  s9    ;;;A446J-tBDDrA   c                   < V P                   '       d%   V P                  ^ ,          P                  V4       R# \        \        V `  V4       R# r   N)r    r   rd   r   r   )r;   r<   r   s   &&r   rd   TopDictIndexCompiler.toFile  s2    ;;;JJqM  &&4T:rA   r   )r   r   r   r   r   r   rc   r   ra   rd   r   r   __classcell__r   r   s   @@r   r   r     s(     9BE; ;rA   r   c                   <   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                \    . pV F#  pVP                  VP                  W 4      4       K%  	  V# r   r   r   s   &&&  r   r   FDArrayIndexCompiler.getItems  r   rA   c                p    . pV P                    F#  pVP                  VP                  V4      4       K%  	  V# r   r   )r;   r6   rh   r   s   &&  r   rc    FDArrayIndexCompiler.getChildren  s1    

HOOH009: #rA   c                ,   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 F3  pV! RV4      VR p\        V4      V) 8X  g   Q hVP                  V4       K5  	  V P                   F9  p\        VR4      '       d   VP                  V4       K(  VP                  V4       K;  	  R# )r$   r   Nrd   r   )r   r    r   rC   r   r   r   r   r,   r`   r   rO   rd   )r;   r<   r   r-   r`   r   r   r   s   &&      r   rd   FDArrayIndexCompiler.toFile  s    //#;;;c$**o.c$**o.gbk*4!({{FT6*784Iy>gX---JJy!  JJDtX&&D!

4 	 rA   c                6    WP                   P                  R &   R# )r   Nr   rawDictr;   r   r   s   &&&r   r   FDArrayIndexCompiler.setPos      ),I&rA   r   N)r   r   r   r   r   r   rc   rd   r   r   r   r   s   @r   r  r    s#     !(- -rA   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   rj   r    rb   bytecoder;   r   r6   r   css   &&&  r   r   GlobalSubrsCompiler.getItems'  8    BJJt{{#JJr{{#  
rA   r   N)r   r   r   r   r   r   r   r   r   s   @r   r  r  #  s      rA   r  c                   *   a  ] tR tRt o RtR tRtV t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                n    WP                   P                  ,
          pW0P                   P                  R &   R# )SubrsN)r   r   r  )r;   r   r   r   s   &&& r   r   SubrsCompiler.setPos3  s$    {{&'-G$rA   r   N)r   r   r   r   r   r   r   r   r   s   @r   r  r  /  s     . .rA   r  c                   0   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                    . pV F9  pVP                  V P                  4       VP                  VP                  4       K;  	  V# r   r  r  s   &&&  r   r   CharStringsCompiler.getItems<  r  rA   c                6    WP                   P                  R &   R# CharStringsNr  r  s   &&&r   r   CharStringsCompiler.setPosC  s    -0M*rA   r   N)	r   r   r   r   r   r   r   r   r   r   s   @r   r$  r$  8  s     1 1rA   r$  c                   `   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# )r1   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                r   . 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       V^8:  g   Q RV,          4       h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: %szoffSize too large: %s    >L    end of %s at %sr   )r   r   r   r   _isCFF2r   r   r   r<   
readCard32
readCard16	readCard8ranger)   r,   r'   rb   r   
offsetBaser.   )r;   r<   r    r   rV   r   r-   padrR   chunkr   s   &&&        r   r   Index.__init__N  sG   
!##w~~&&<)4=	t$Et$EA:Ve^
D/8%I!|>4w>>|q7{#519%EIIg&EKEdE2IVNN3v;'	 &
 ))+/		$//GBK/0,dIIK@rA   c                ,    \        V P                  4      # r   )rC   r   rD   s   &r   rE   Index.__len__k  s    4::rA   c                   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4      V8X  g   Q hV P                  WWS4      pW P                   V&   V# r   )r   r   r6  r<   r.   r)   rC   produceItem)r;   rR   r   r   sizer<   r   s   &&     r   rW   Index.__getitem__n  s    zz% Ke$t6||EAI&e)<<yy		&yy4yD   T: 

5rA   c                "    W P                   V&   R # r   r   )r;   rR   r   s   &&&r   __setitem__Index.__setitem__|  s     

5rA   c                    V# r   r   )r;   rR   r   r<   r   s   &&&&&r   r=  Index.produceItem  s    rA   c                <    V P                   P                  V4       R# )zAdd an item to an INDEX.N)r   rb   )r;   r   s   &&r   rb   Index.append  s    

$rA   c                (    V P                  WW#R 7      # r   compilerClassr;   r6   r   r    s   &&&&r   r^   Index.getCompiler      !!$!GGrA   c                     V P                   R R# )zEmpty the INDEX.NNNNrA  rD   s   &r   clearIndex.clear  s    JJqMrA   )r1  r<   r   r6  r   NNr   )r   r   r   r   r   r   rK  r   rE   rW   rB  r=  rb   r^   rQ  r   r   r   s   @r   r1   r1   G  s@      "MA:! H rA   r1   c                      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# )
r9   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                   < \         \        V `  WR 7       W n        W0n        V'       d   W@n        V'       d	   WPn        R# R# r   N)r   r9   r   globalSubrsprivatefdSelectr   )r;   r<   rW  rX  rY  r   r    r   s   &&&&&&&r   r   GlobalSubrsIndex.__init__  s8     	.t.C&$M"L rA   c                ^   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      # )Nr   rY  rX  rW  )rX  rO   r   rY  r}   	subrClassrW  )r;   rR   r   r<   r   rX  fdIndexs   &&&&&  r   r=  GlobalSubrsIndex.produceItem  s    <<#llGT9%%$,,*BtZ((T]]-F--.ll7+33GG~~dAQAQ~RRrA   c                   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)rR   rawrR   N)commentrs   r5  rC   needsDecompilationrt   ru   rv   )r;   rw   ir   s   &&  r   ru   GlobalSubrsIndex.toXML  s     	U	
 	s4y!A7D&&((""<qa"@""<q"9JJy!\* "rA   c                ~    VR 8w  d   R# V P                  4       pVP                  WV4       V P                  V4       R# )ra  N)r]  r   rb   )r;   rV   r   r   r   s   &&&& r   r   GlobalSubrsIndex.fromXML  s3    <~~T'*DrA   c                d    R p\        V R4      '       d   V P                  V,          pW,          V3# )NrY  )rO   rY  )r;   rR   sels   && r   getItemAndSelector#GlobalSubrsIndex.getItemAndSelector  s/    4$$--&C{CrA   )r   rY  rW  rX  NNNNNN)r   r   r   r   r   r  rK  r   r   r]  charStringClassr   r=  ru   r   rl  r   r   r  r  s   @@r   r9   r9     sG     B (M**I#00O#"S 2   rA   r9   c                       ] 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  rK  r   r   rA   r   rq  rq    s    $ "MrA   rq  c                   J   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# )r3   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                  < 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-  r0  r   )r>   r1  r   r   r   r   r   r   r<   r   r6  r.   r   r3   r   )r;   r<   r>   topSizer    rV   r   r   s   &&&&&  r   r   TopDictIndex.__init__  s    !2!LDJ>>**DGGE-tYY[AIE%DJw<DL"iikDOIIdoo/0GGE0$		D,.t.CrA   c           	         \        V P                  VVV P                  V P                  V P                  R 7      pVP                  V4       V# rI  )r~   r6   r:   r>   r1  r?   )r;   rR   r   r<   r   tops   &&&&& r   r=  TopDictIndex.produceItem#  sE    LL""<<
 	d
rA   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# FontDictrc  Nr5  rC   rt   rs   ru   rv   r;   rw   rf  s   && r   ru   TopDictIndex.toXML/  \    s4y!Az3GMM)$Z( "rA   )r1  r>   r<   r   r6  r   )NNr   N)r   r   r   r   r   r   rK  r   r=  ru   r   r   r  r  s   @@r   r3   r3     s&      )MD$
   rA   r3   c                   6   a  ] tR tRt o ]tR tR tR tRt	V t
R# )FDArrayIndexi8  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# rz  r|  r}  s   && r   ru   FDArrayIndex.toXML;  r  rA   c           	         \        V P                  VVV P                  V P                  V P                  R 7      pVP                  V4       V# )r    r   )r{  r6   r:   r1  r   r?   )r;   rR   r   r<   r   r   s   &&&&& r   r=  FDArrayIndex.produceItemC  sE    LL<<;;
 	4 rA   c                    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{  rP   rQ   r   rb   )r;   rV   r   r   r   r   s   &&&&  r   r   FDArrayIndex.fromXMLO  sV    ::G'3''#* DT'2	 
 	HrA   r   N)r   r   r   r   r  rK  ru   r=  r   r   r   r   s   @r   r  r  8  s     (M 
	 	rA   r  c                   N   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                J    Wn         R V n        W n        \        4       V n        R # r   )r<   r   
otVarStorer   ry   )r;   r<   r  s   &&&r   r   VarStoreData.__init__\  s    		$H	rA   c                   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)
r<   r3  r)   r   r   otr|   r  r?   ry   )r;   lengthglobalStatereaders   &   r   r?   VarStoreData.decompileb  s    999		*F IINN,	 IINN62	K"499k:F kkmDOOO%%fii8DIrA   c                    \        4       pV P                  P                  WP                  4       VP	                  4       V n        R # r   )r   r  rj   ry   
getAllDatar   )r;   rf   s   & r   rj   VarStoreData.compiler  s1    		2 %%'	rA   c                P    V P                   P                  WP                  4       R # r   )r  ru   ry   )r;   rw   rV   s   &&&r   writeXMLVarStoreData.writeXMLy  s    i3rA   c                    \         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  r|   r  rP   tupler   ry   )r;   rV   r   r   r   r   s   &&&&& r   xmlReadVarStoreData.xmlRead|  sP    ++-G'5))'.$W''WiiH  rA   c                ,    \        V P                  4      # r   rC   r   rD   s   &r   rE   VarStoreData.__len__      499~rA   c                d    Vf   ^ pV P                   P                  V,          pVP                  pV# r   )r  VarDataVarRegionCount)r;   vsIndexvarData
numRegionss   &&  r   getNumRegionsVarStoreData.getNumRegions  s1    ?G//))'2++
rA   )r   r<   ry   r  rS  )r   r   r   r   r   r?   rj   r  r  rE   r  r   r   r   s   @r   r  r  [  s-      (4 rA   r  c                   B   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                b   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# Q RT,          4       hW0n        . V n        R# )r   )arrayr   Nzunsupported FDSelect format: %s)	r4  formatr  r)   tolistgidArrayr3  r5  r2  )r;   r<   	numGlyphsr  r  r  nRangesfdprevrf  firstglyphIDs   &&&&        r   r   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 (H?&HHu !KDMrA   c                ,    \        V P                  4      # r   )rC   r  rD   s   &r   rE   FDSelect.__len__  s    4==!!rA   c                (    V P                   V,          # r   r  r;   rR   s   &&r   rW   FDSelect.__getitem__  s    }}U##rA   c                "    W P                   V&   R # r   r  )r;   rR   fdSelectValues   &&&r   rB  FDSelect.__setitem__  s    ,erA   c                <    V P                   P                  V4       R # r   )r  rb   )r;   r  s   &&r   rb   FDSelect.append  s    ]+rA   )r  r  )NNN)r   r   r   r   r   rE   rW   rB  rb   r   r   r   s   @r   r  r    s$     0d"$-, ,rA   r  c                   h   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	           	        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   )rW  varStorerq  charStringsIndexcharStringsr5  rC   charStringsAreIndexedrX  rY  r   )r;   r<   rZ   rW  rX  rY  r   r    r  r  rf  s   &&&&&&&&&  r   r   CharStrings.__init__  s     ' $.7g%D! .0/D{3w<(*+GJ' ) *+D&!D)*D&"L# ("& #rA   c                H    \        V P                  P                  4       4      # r   )r0   r  rH   rD   s   &r   rH   CharStrings.keys  s    D$$))+,,rA   c                    V P                   '       d   V P                  # \        V P                  P	                  4       4      # r   )r  r  r0   r  rK   rD   s   &r   rK   CharStrings.values  s4    %%%(((((//122rA   c                    WP                   9   # r   )r  )r;   rV   s   &&r   has_keyCharStrings.has_key  s    ''''rA   c                ,    \        V P                  4      # r   )rC   r  rD   s   &r   rE   CharStrings.__len__  s    4##$$rA   c                v    V P                   V,          pV P                  '       d   V P                  V,          pV# r   )r  r  r  )r;   rV   
charStrings   && r   rW   CharStrings.__getitem__  s4    %%d+
%%%..z:JrA   c                    V P                   '       d$   V P                  V,          pW P                  V&   R # W P                  V&   R # r   )r  r  r  )r;   rV   r  rR   s   &&& r   rB  CharStrings.__setitem__  s:    %%%$$T*E+5!!%(%/T"rA   c                :   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# )r   rY  N)r  r  r  rl  rO   fdSelectIndex)r;   rV   rR   rk  s   &&  r   rl  CharStrings.getItemAndSelector   s    %%%$$T*E((;;EBBtY''4,,**40>>CC##D)3..rA   c                   \        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# )rb  Nra  rV   r  )rb  r$   )sortedrH   rl  re  rt   rs   ru   rv   )r;   rw   namesrV   charStrr  rb  s   &&     r   ru   CharStrings.toXML.  s    tyy{#D%)%<%<T%B"G))++!l$""<64.1AC1GH"" d^o}%EFL MM)$\*! rA   c                   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)ra  r   r  rV   r\  Nr   )rP   rQ   rO   r   rS   r   r}   rX  r   r   rW  r   r  )
r;   rV   r   r   r   fdIDrX  	glyphNamero  r  s
   &&&&      r   r   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  r   rY  rW  rX  r  rS  )r   r   r   r   r   r   rH   rK   r  __contains__rE   rW   rB  rl  ru   r   r   r   r   s   @r   r)  r)    sI     'B-3( L%0/ () )rA   r)  c                 6    \        V P                  ^4      4      # r$   )r   r)   r<   s   &r   r4  r4  \  s    499Q<  rA   c                 V    \         P                  ! R V P                  ^4      4      w  pV# r!   r,   r'   r)   r<   rn   s   & r   r3  r3  `  !    }}T499Q<0HULrA   c                 V    \         P                  ! R V P                  ^4      4      w  pV# r/  r  r  s   & r   r2  r2  e  r  rA   c                 :    V P                  \        V4      4       R # r   )r   r   r  s   &&r   r   r   j  s    JJwu~rA   c                 R    V P                  \        P                  ! R V4      4       R# )r!   Nr   r,   r`   r  s   &&r   r   r   n      JJv{{4'(rA   c                 R    V P                  \        P                  ! R V4      4       R# )r/  Nr  r  s   &&r   r   r   r  r  rA   c                     \        V 4      # r   )r   rm   s   &r   	packCard8r  v  s    5>rA   c                 0    \         P                  ! R V 4      # r  r,   r`   rm   s   &r   
packCard16r  z      ;;tU##rA   c                 0    \         P                  ! R V 4      # r  r  rm   s   &r   
packCard32r  ~  r  rA   c                 .    / pV  F  w  r#rEpW43W&   K  	  V# r   r   r   doprV   argdefaultconvs   &      r   buildOperatorDictr    s&    
A(-$# ).HrA   c                     / pV  FW  w  r#rEp\        V\        4      '       d+   \        V^ ,          4      \        V^,          4      ,           pM\        V4      pW$3W&   KY  	  V# r   )rP   r  r   r  s   &      r   buildOpcodeDictr    sX    
A(-$#b%  A'"Q%.0BB) ). HrA   c                 F    . pV  F  w  r#rEpVP                  V4       K  	  V# r   )rb   )r   lr  rV   r  r  r  s   &      r   
buildOrderr
    s(    
A(-$#	 ).HrA   c                 8    / pV  F  w  r#rEpVf   K  WQV&   K  	  V# r   r   r  s   &      r   buildDefaultsr    s,    
A(-$#dG ). HrA   c                 ,    / pV  F  w  r#rEpWaV&   K  	  V# r   r   r  s   &      r   buildConvertersr    s$    
A(-$#$ ).HrA   c                   >   a  ] tR tRt o R tR tR tR tR tRt	V t
R# )	SimpleConverteri  c                    \        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r  )rO   _readr<   r   r.   )r;   r   rn   r<   r   s   &&&  r   r)   SimpleConverter.read  sZ    vv&&::f,,{{iik	::f,IIcNDIIcNs   A# #A6c                    V# r   r   r;   r   rn   s   &&&r   r  SimpleConverter._read  r   rA   c                    V# r   r   r  s   &&&r   r   SimpleConverter.write  r   rA   c                J    VP                  W#R 7       VP                  4        R# )rm   N)rr   rs   r;   rw   rV   rn   s   &&&&r   xmlWriteSimpleConverter.xmlWrite  s    D.rA   c                    VR ,          # rm   r   r;   rV   r   r   r   s   &&&&&r   r  SimpleConverter.xmlRead  s    W~rA   r   N)r   r   r   r   r)   r  r   r  r  r   r   r   s   @r   r  r    s#      rA   r  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   r  s   &&&r   r  ASCIIConverter._read  s    UW--rA   c                    \        VR R7      # r#  r	   r  s   &&&r   r   ASCIIConverter.write  s    uw//rA   c                b    VP                  V\        VR R7      R7       VP                  4        R# )r$  r   rm   Nrr   r
   rs   r  s   &&&&r   r  ASCIIConverter.xmlWrite  s(    Deg(FGrA   c                *    \        VR ,          RR7      # )rn   r$  r   r'  r  s   &&&&&r   r  ASCIIConverter.xmlRead  s    uW~::rA   r   N
r   r   r   r   r  r   r  r  r   r   r   s   @r   r!  r!    s     .0; ;rA   r!  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )Latin1Converteri  c                    \        VR R7      # r   r   r   r  s   &&&r   r  Latin1Converter._read  s    UX..rA   c                    \        VR R7      # r2  r'  r  s   &&&r   r   Latin1Converter.write  s    ux00rA   c                    \        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+ rm   N)Notice	Copyright)r
   resubrr   rs   r  s   &&&&r   r  Latin1Converter.xmlWrite  sF    eh/**FF<e4ED.rA   c                *    \        VR ,          RR7      # )rn   r   r   r'  r  s   &&&&&r   r  Latin1Converter.xmlRead  s    uW~;;rA   r   Nr.  r   s   @r   r0  r0    s     /1< <rA   r0  c                 D     \        V 4      pV#    \        T 4      p T# ; ir   )r   float)r   rn   s   & r   parseNumrA    s,    A LaLs    c                    . 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 rm   )rP   rQ   splitevalrb   rC   )r   	valueListr   rV   r   r   	blendListvals   &       r   parseBlendListrH    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                   \        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 )r7  rm   NrP   r0   rt   rs   indentjoinrQ   rr   kBlendDictOpNamededentrv   )r;   rw   rV   rn   rG  
blendValues   &&&&  r   r  NumberConverter.xmlWrite  s    eT""t$u"=u3s8u"=>J 0
CT"2 #>s   C0c                p    VP                  R R4      pVf   \        V4      pV# \        VR ,          4      pV# rn   N)getrH  rA  )r;   rV   r   r   r   valueStringrn   s   &&&&&  r   r  NumberConverter.xmlRead
  s>    ii."7+E  U7^,ErA   r   Nr   r   r   r   r  r  r   r   r   s   @r   rJ  rJ    s       rA   rJ  c                   ,   a  ] tR tRt o R tR tRtV tR# )ArrayConverteri  c           	     x   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   r7  rm   NrL  )r;   rw   rV   rn   rE  rG  rQ  s   &&&&   r   r  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                    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 rT  )rU  rH  rC  rA  )	r;   rV   r   r   r   rV  rE  rK   rn   s	   &&&&&    r   r  ArrayConverter.xmlRead%  s]    ii.&w/I  !&&(F6<=fU%fI= >s   Ar   NrX  r   s   @r   rZ  rZ    s      " rA   rZ  c                   ,   a  ] tR tRt o R tR tRtV tR# )TableConverteri/  c                    VP                  V4       VP                  4        VP                  V4       VP                  V4       VP                  4        R # r   )rt   rs   ru   rv   r  s   &&&&r   r  TableConverter.xmlWrite0  sB    4 IrA   c                    V P                  4       ! 4       pV F2  p\        V\        4      '       d   K  Vw  rpVP                  WV4       K4  	  V# r   )getClassrP   rQ   r   )r;   rV   r   r   r   obr   s   &&&&&  r   r  TableConverter.xmlRead7  sI    ]]_G'3''#* DJJtG,	 
 	rA   r   NrX  r   s   @r   r`  r`  /  s      rA   r`  c                   2   a  ] tR tRt o R tR tR tRtV tR# )PrivateDictConverteriA  c                    \         # r   )PrivateDictrD   s   &r   rd  PrivateDictConverter.getClassB  s    rA   c                8   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	4      V8X  g   Q hVP                  V	4       V#   \         d    R p Lni ; i)Nr  )
r<   r1  r   AttributeErrorrj  r6   r.   r)   rC   r?   )
r;   r   rn   r>  r   r<   r    r   privr   s
   &&&       r   r  PrivateDictConverter._readE  s    {{	]]F 6>>4V		&yy4yD   t  	F	s   B	 	BBc                    R# )r   )r   r   r   r  s   &&&r   r   PrivateDictConverter.writeT  s    rA   r   N	r   r   r   r   rd  r  r   r   r   r   s   @r   rh  rh  A  s      rA   rh  c                   2   a  ] tR tRt o R tR tR tRtV tR# )SubrsConverteriX  c                    \         # r   )rq  rD   s   &r   rd  SubrsConverter.getClassY  s    rA   c                    VP                   pVP                  pVP                  VP                  V,           4       \	        W4R 7      # rI  )r<   r1  r.   r   rq  )r;   r   rn   r<   r    s   &&&  r   r  SubrsConverter._read\  s4    {{		&--%'($..rA   c                    ^ # r   r   r  s   &&&r   r   SubrsConverter.writeb      rA   r   Nrr  r   s   @r   rt  rt  X  s     / rA   rt  c                   2   a  ] tR tRt o R tR tR tRtV tR# )CharStringsConverterif  c                j   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# )r|   Nr   r  )r    r  )r<   r1  rZ   getattrr:   rO   r   r  r}   r.   r)  )r;   r   rn   r<   r    rZ   r  rW  r   rY  rX  r  s   &&&         r   r  CharStringsConverter._readg  s    {{..6:t4((69%%nnGvz**!??G $dgnnG		%!	
 rA   c                    ^ # r   r   r  s   &&&r   r   CharStringsConverter.write  r{  rA   c                   \        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# )r   r  Nr|   )r  )rO   r   r  r}   r)  r:   r  r   )	r;   rV   r   r   r   r   rY  rX  r  s	   &&&&&    r   r  CharStringsConverter.xmlRead  s    69%% nnGvz**!??G
 *0twG!VZ6
 	D1rA   r   N	r   r   r   r   r  r   r  r   r   r   s   @r   r}  r}  f  s     : rA   r}  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )CharsetConverteri  c                   \        VR 4      pV^8  Edq   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\        V4      V8X  g   Q 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MNV'       g   RVP                   9  d   V^ 8X  g   Q h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 %s.r)  N)rO   r  r<   r.   r   r   r4  parseCharset0r6   parseCharsetNotImplementedErrorrC   r   setrQ   rb   r  cffISOAdobeStringscffIExpertStringscffExpertSubsetStrings)r;   r   rn   isCIDr  r<   r  rZ   allNames
newCharsetr  nr  s   &&&          r   r  CharsetConverter._read  s   &19((I;;DIIeGGE2E:t_F{'	O1!&yV))w<9,,,GGE2DIIK@HJ$	( +AMCL8E$s?SV3=Q*+a%H' )C#a& 8I&'#!!), % !GV^^; z!z!,!+!0G(8(880 0 01GrA   c                    ^ # r   r   r  s   &&&r   r   CharsetConverter.write  r{  rA   c                H    VP                  R 4       VP                  4        R# )z8charset is dumped separately as the 'GlyphOrder' elementN)rd  rs   r  s   &&&&r   r  CharsetConverter.xmlWrite  s     	TUrA   c                    R # r   r   r  s   &&&&&r   r  CharsetConverter.xmlRead      rA   r   Nr.  r   s   @r   r  r    s     -^ rA   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )CharsetCompileri  c                    V^ ,          R8X  g   Q h\        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   .notdefr  N)rO   dictObjpackCharset0packCharsetrC   r   r   )r;   r6   rZ   r   r  data0r   s   &&&&   r   r   CharsetCompiler.__init__  s[    qzY&&&.WW5773t9s5z!IIrA   c                6    WP                   P                  R &   R# )rZ   Nr  r  s   &&&r   r   CharsetCompiler.setPos  r  rA   c                ,    \        V P                  4      # r   r  rD   s   &r   ra   CharsetCompiler.getDataLength  r  rA   c                <    VP                  V P                  4       R # r   r   r   r;   r<   s   &&r   rd   CharsetCompiler.toFile      

499rA   r   r   N
r   r   r   r   r   r   ra   rd   r   r   r   s   @r   r  r    s     	- rA   r  c                     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  rC   r5  )rZ   predefinedCharSetValpredefinedCharSetslcscntpcscsvrf  s   &       r   getStdCharSetr    s    	!3Q7	0!4	#%;Q?
 g,C+#+   9"sAzSV#'+$  ,  rA   c                 &    \        V R ,          4      # ):   NN)r   rV   r6   s   &&r   getCIDfromNamer    s    tBx=rA   c                 $    VP                  V 4      # r   )getSIDr  s   &&r   getSIDfromNamer    s    >>$rA   c           	          ^ p\        V4      .pV'       d   \        pM\        pV R,           F#  pVP                  \	        V! Wb4      4      4       K%  	  \        V4      # )r   r$   NN)r  r  r  rb   r  r   )rZ   r  r6   fmtr   	getNameIDrV   s   &&&    r   r  r    sP    
CcND"	"	Jy789 T?rA   c                    ^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      # )r$   Nr  )r  r  rb   r  r  r   )rZ   r  r6   r  rangesr  endr  rV   SIDnLeftr   	nLeftFuncs   &&&          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?rA   c                 >   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# r  cid)r5  r3  rb   rQ   zfill)r  r<   r6   r  rZ   rf  CIDr  s   &&&&    r   r  r  G  s    kGy1}%AT"CNN53s8>>!#445 & N y1}%AT"CNN7<( & NrA   c                    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  )r4  r3  r5  rb   rQ   r  )r  r<   r6   r  r  rZ   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!NrA   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )EncodingCompilerih  c                6   \        V\        4      '       d   Q h\        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   )
rP   rQ   packEncoding0r  rZ   r6   packEncoding1rC   r   r   )r;   r6   r   r   r  data1s   &&&&  r   r   EncodingCompiler.__init__i  sh    h,,,,fnn44hOfnn44hOu:E
"IIrA   c                6    WP                   P                  R &   R# )EncodingNr  r  s   &&&r   r   EncodingCompiler.setPoss      *-J'rA   c                ,    \        V P                  4      # r   r  rD   s   &r   ra   EncodingCompiler.getDataLengthv  r  rA   c                <    VP                  V P                  4       R # r   r  r  s   &&r   rd   EncodingCompiler.toFiley  r  rA   r  Nr  r   s   @r   r  r  h  s     . rA   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )EncodingConverteri}  c                   V^ 8X  d   R# V^8X  d   R# V^8  g   Q h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: )r<   r.   r   r   r4  boolparseEncoding0rZ   parseEncoding1r+   parseEncodingSupplementr6   )r;   r   rn   r<   r  haveSupplementr   s   &&&    r   r  EncodingConverter._read~  s    A:%aZ#qyy{{		%/7ocDj)Dj!8%fnnd;HAX%fnnd;H8>??#DFNNCrA   c                *    VR 8X  d   ^ # VR8X  d   ^# ^ # r  r  r   r  s   &&&r   r   EncodingConverter.write  s    &&&&rA   c                   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  rq   Nr  map)coderV   r  )rr   rs   rt   r5  rC   hexrv   )r;   rw   rV   rn   r  r  s   &&&&  r   r  EncodingConverter.xmlWrite  s    ::14 #e*%DII%##ED		#J!!#	 &
 	rA   c                    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# )rV   r  r   r  )rP   rQ   r   )	r;   rV   r   r   r   r   r   r  r  s	   &&&&&    r   r  EncodingConverter.xmlRead  sh    U?= ;$G'3''#* DE&M*DfI&TN  rA   r   Nr.  r   s   @r   r  r  }  s     4 rA   r  c                    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)   rC   EOFErrorr,   r'   )r<   r   s   & r   readSIDr    s<    99Q<D
4yA~ABB==t$Q''rA   c                    \        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)r4  r5  r  )r<   r   r6   nSups_r  sidrV   s   &&&     r   r  r    s;     dOE5\dm|	 rA   c                    \        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   r4  r5  )rZ   r<   nCodesr   r  r  s   &&    r   r  r    sO    
 t_F{S HFQJ'19$-HN (
 OrA   c                    \        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   )rZ   r<   r  r   r  r  r  r  s   &&      r   r  r    st    
 oG{S HG7^$uqy!A$-HNAIDqLG "  OrA   c                    ^ 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   r5  rC   rU  rb   popr  r   )	rZ   r   r6   r  mr  rV   codesr   s	   &&&      r   r  r    s    
C
Ac(m$~9dG % EuuT{T  E"I%		cNIc%j12D<DIdO$  T?rA   c                    ^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      # )r$   r  Nr  r   r  )rZ   r   r6   r  r  r  rV   r  r  r  r  r   s   &&&         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?rA   c                   2   a  ] tR tRt o R tR tR tRtV tR# )FDArrayConverteri.  c                     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  )	r|   rm  r<   r1  r.   r  r   r6   r:   )r;   r   rn   r   r<   r    r   s   &&&    r   r  FDArrayConverter._read/  ss    	__F {{		%t3 ..$00  	F	s   A- -A=<A=c                    ^ # r   r   r  s   &&&r   r   FDArrayConverter.write=  r{  rA   c                    \        4       pV F2  p\        V\        4      '       d   K  Vw  rpVP                  WV4       K4  	  V# r   )r  rP   rQ   r   )r;   rV   r   r   r   r   r   s   &&&&&  r   r  FDArrayConverter.xmlRead@  sB    .G'3''#* DOOD1	 
 rA   r   Nr  r   s   @r   r
  r
  .  s      rA   r
  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )FDSelectConverteriJ  c                j    VP                   pVP                  V4       \        W1P                  4      pV# r   )r<   r.   r  r  )r;   r   rn   r<   rY  s   &&&  r   r  FDSelectConverter._readK  s,    {{		%D"2"23rA   c                    ^ # r   r   r  s   &&&r   r   FDSelectConverter.writeQ  r{  rA   c                d    VP                  VR VP                  3.4       VP                  4        R# r  N)rr   r  rs   r  s   &&&&r   r  FDSelectConverter.xmlWriteV  s*    DHell#;"<=rA   c                J    \        VR ,          4      pRpRp\        WgV4      pV# r  )r   r  )	r;   rV   r   r   r   r  r<   r  rY  s	   &&&&&    r   r  FDSelectConverter.xmlReadZ  s+    uX'	DS1rA   r   Nr.  r   s   @r   r  r  J  s     
 rA   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )VarStoreConverterib  c                v    VP                   pVP                  V4       \        V4      pVP                  4        V# r   )r<   r.   r  r?   )r;   r   rn   r<   r  s   &&&  r   r  VarStoreConverter._readc  s2    {{		%%rA   c                    ^ # r   r   r  s   &&&r   r   VarStoreConverter.writej  r{  rA   c                (    VP                  W4       R # r   )r  r  s   &&&&r   r  VarStoreConverter.xmlWritem  s    y'rA   c                >    \        4       pVP                  WW44       V# r   )r  r  )r;   rV   r   r   r   r  s   &&&&& r   r  VarStoreConverter.xmlReadp  s    >g6rA   r   Nr.  r   s   @r   r  r  b  s     ( rA   r  c                 z    ^ p\        V4      .pV  F  pVP                  \        V4      4       K  	  \        V4      # r   )r  rb   r   )fdSelectArrayr  r   rR   s   &   r   packFDSelect0r(  v  s8    
CcNDIe$% T?rA   c                    ^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   )rC   r5  rb   r  r  r   
r'  r  fdRangeslenArraylastFDIndexrf  r^  sentinelGIDr   fdRanges
   &         r   packFDSelect3r0  ~  s    
CH=!HK8_"!OOQL)!K	 
 a%KcNDKK
3x=)*Jwqz*+Igaj)*  	KK
;'(T?rA   c                    ^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   )rC   r5  rb   r  r  r  r   r*  s
   &         r   packFDSelect4r2    s    
CH=!HK8_"!OOQL)!K	 
 a%KcNDKK
3x=)*Jwqz*+Jwqz*+  	KK
;'(T?rA   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )FDSelectCompileri  c                f   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   r0  r2  rC   r   )r;   rY  r   r  r'  r  data3s   &&&    r   r   FDSelectCompiler.__init__  s    oo ))!8%m4DIAX%m4DIAX%m4DI "-0E!-0E5zCJ&!	"#!	"#rA   c                6    WP                   P                  R &   R# )r  Nr  r  s   &&&r   r   FDSelectCompiler.setPos  r  rA   c                ,    \        V P                  4      # r   r  rD   s   &r   ra   FDSelectCompiler.getDataLength  r  rA   c                <    VP                  V P                  4       R # r   r  r  s   &&r   rd   FDSelectCompiler.toFile  r  rA   r  Nr  r   s   @r   r4  r4    s     ,. rA   r4  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )VarStoreCompileri  c                    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   rj   minrC   r  r   )r;   varStoreDatar   varStoreDataLenr   s   &&&  r   r   VarStoreCompiler.__init__  sV         "fc,*;*;&<=?+\->->?dO	rA   c                6    WP                   P                  R &   R# )r|   Nr  r  s   &&&r   r   VarStoreCompiler.setPos  r  rA   c                ,    \        V P                  4      # r   r  rD   s   &r   ra   VarStoreCompiler.getDataLength  r  rA   c                <    VP                  V P                  4       R # r   r  r  s   &&r   rd   VarStoreCompiler.toFile  r  rA   r  Nr  r   s   @r   r?  r?    s     $. rA   r?  c                   ,   a  ] tR tRt o R tR tRtV tR# )ROSConverteri  c                    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*  )r;   rw   rV   rn   registryorder
supplements   &&&&   r   r  ROSConverter.xmlWrite  sP    &+#U8_-%,'z*	
 	rA   c                H    VR ,          VR,          \        VR,          4      3# )rN  rO  rP  )r   r  s   &&&&&r   r  ROSConverter.xmlRead  s"    j!5>8E,<O3PQQrA   r   NrX  r   s   @r   rL  rL    s     
R RrA   rL  numberr  r  r8  r9  FullNameFontName
FamilyName
FontMatrixr  FontBBoxrZ   r  r}   r   r|   blendrF  r!  c                     \        \        V 4      4       F^  pW,          w  r#rEpVe   K  VR9   d   \        4       pM0VR8X  d   \        4       pMVR8X  d   \	        4       pMVR8X  d   R pMQ hW#WEV3W&   K`  	  R # )NrW  r  rF  )deltar  )r5  rC   rZ  rJ  r!  )r   rf  r  rV   r  r  r  s   &      r   addConvertersr`  `  s{    3u:',x$#$$!#DH_"$DE\!#DKD5S4/ rA   c                   &    ] tR tRt]! ]4      tRtR# )TopDictDecompileriv  r   N)r   r   r   r   r  topDictOperators	operatorsr   r   rA   r   rb  rb  v  s    !"23IrA   rb  c                   &    ] tR tRt]! ]4      tRtR# )PrivateDictDecompileriz  r   N)r   r   r   r   r  privateDictOperatorsrd  r   r   rA   r   rf  rf  z  s    !"67IrA   rf  c                   d   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                   V'       d   \        V\        4      '       g   Q hVf%   \        VR4      '       d   VP                  pVf   Q h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   )rP   r5   rO   r    r  r6   r   rR  r  
convertersr   defaultsrU  r  )	r;   r  r6   r   r    r  rV   rn   r  s	   &&&&&    r   r   DictCompiler.__init__  s    g~6666>gfh77]]F%%%MMDG40E}%%d+DJJw.E((,,T22!DM " rA   c                    R # r   r   r  s   &&&r   r   DictCompiler.setPos  r  rA   c                6    \        V P                  R 4      4      # )ra   )rC   rj   rD   s   &r   ra   DictCompiler.getDataLength  s    4<<011rA   c                   \         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      '       dp   \        V4      p\        V4      V8X  g   Q R4       h\        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value doesn't match arg typearg_)r   r   r   r   r  r  rR  rU  opcodesrP   r  rC   r5  r  rb   r   )r;   reasonr  r   rV   rn   r  argTyper	  rf  r  v
arghandlers   &&           r   rj   DictCompiler.compile  s   /1H1H&Q,,LL&&DKK%E},,t,KB'5))L5zQF(FFqA!*CA!(v|!<JKK
1.	 " %T6G+;<
Ju-.KKO! '" rA   c                J    V P                  R 4      pVP                  V4       R# )rd   N)rj   r   )r;   r<   r   s   && r   rd   DictCompiler.toFile  s    ||H%

4rA   c                   \        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 r  )rP   r0   encodeNumberrb   r   blendOpr   )r;   numrG  r   datums   &&   r   
arg_numberDictCompiler.arg_number  so    c4  145#L%D5KKQ(KK()dOE  !%E 6s   Bc                `    \         P                  ! V P                  P                  V4      4      # r   )r   encodeIntCFFr6   r  )r;   r   s   &&r   arg_SIDDictCompiler.arg_SID  s"    ))$,,*=*=a*@AArA   c                n    . pV F#  pVP                  V P                  V4      4       K%  	  \        V4      # r   )rb   r  r   )r;   rn   r   r  s   &&  r   	arg_arrayDictCompiler.arg_array  s0    CKK,- rA   c                $   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      # )rA   )rP   r0   arg_delta_blendrb   r}  r   )r;   rn   val0r   r   lastrw  r  s   &&      r   	arg_deltaDictCompiler.arg_delta  s    QxdD!!''.DCD

18$  DL-. rA   c                   \        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  )
rC   maxBlendStackr   rA  r  r   r}  rb   r   r~  )r;   rn   
numMasters	numBlendsnumStacknumBlendValuesr   numValvalListout1	firstList	deltaListrf  prevValdefaultValuerelValueListrF  rG  s   &&                r   r  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  r6   r   )r   r   r   r   r  r   r   ra   rj   rd   r  r  r  r  r  r   r   r   s   @r   ri  ri  ~  sD     M,20B"D DrA   ri  c                     \        V \        4      '       d   \        P                  ! V 4      # \        P                  ! V 4      # r   )rP   r@  r   encodeFloatr  )r  s   &r   r}  r}  $	  s1    #u((--))#..rA   c                   6   a  ] tR tRt o ]! ]4      tR tRtV t	R# )TopDictCompileri+	  c                   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# )
NrZ   r  r  r|   r  r)  r   r   r}   )r    r  r>   rO   rZ   r  rb   r  r  r  rP   rQ   r  r|   r?  r  rC   r)  r  r4  r$  r   r^   r   rc   r}   )r;   r6   r    rh   charsetCoder   rB  varStoreComprY  r  rV   fdSelectCompr   charStringsCompfdArrayIndexCompprivComps   &&              r   rc   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:rA   r   N)
r   r   r   r   r  rc  rt  rc   r   r   r   s   @r   r  r  +	  s     ./G7 7rA   r  c                   L   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                \  < \         \        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: r7  )r   r  r   r  r  r  rk  rR  r  rb   rl  rU  r)   r  r   warningrN  )
r;   r  r6   r   r    ignoredNamesrV   r  r  r   s
   &&&&&    r   r   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 rA   c                    . 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# )r}   )rO   r  r}   r^   rb   r   rc   )r;   r6   rh   r  s   &&  r   rc   FontDictCompiler.getChildren	  sZ    4<<++||++77FHOOH%OOH009:rA   r   r   )r   r   r   r   r  rc  rt  r   rc   r   r   r  r  s   @@r   r  r  h	  s      ./GB rA   r  c                   @   a  ] tR tRt o ]t]! ]4      tR t	R t
RtV tR# )PrivateDictCompileri	  c                V    W!,
          pW13V P                   P                  R &   Wn        R# )r}   N)r   r  r   )r;   r   r   r>  s   &&& r   r   PrivateDictCompiler.setPos	  s$    |)-I&rA   c                    . p\        V P                  R 4      '       d5   VP                  V P                  P                  P	                  W4      4       V# )r!  )rO   r  rb   r!  r^   )r;   r6   rh   s   && r   rc   PrivateDictCompiler.getChildren	  s>    4<<))OODLL..::7IJrA   )r   N)r   r   r   r   maxStackLimitr  r  rg  rt  r   rc   r   r   r   s   @r   r  r  	  s$     !M23G
 rA   r  c                   R   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                    VR J VR J 8X  g   Q h/ 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  	skipNamesr6   r1  r<   r   r   r   r   r   )r;   r6   r<   r   r    s   &&&&&r   r   BaseDict.__init__	  sj    $DDL111<	GGE-t~~/F/FO K rA   c                   \         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   rC   decompilerClassr6   r?   getDictr  postDecompile)r;   r   decs   && r   r?   BaseDict.decompile	  s^    ,dnn.E.Es4yQ""4<<6d{{}rA   c                    R # r   r   rD   s   &r   r  BaseDict.postDecompile	  r  rA   c                (    V P                  WW#R 7      # rI  rJ  rL  s   &&&&r   r^   BaseDict.getCompiler	  rN  rA   c                H   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# ):Nr%   NN__)rm  r  rU  rl  rk  r)   setattr)r;   rV   rn   r  s   &&  r   __getattr__BaseDict.__getattr__	  s    8tBCy(D(
 !&&  t,=MM%%d+E= &&t$		$&E"rA   c                   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 # )NrZ   zsome keys were ignored: %sr7  )rR  r  r  rk  r  r  r  rd  rN  r  rs   )r;   rw   rV   rn   r  r  s   &&    r   ru   BaseDict.toXML	  s    JJD~~%D-E }!2??4(DMM)51! " 4<<(3tzz?:,sxx|8L/MM 	 rA   c                h    V P                   V,          pVP                  WW04      p\        WV4       R # r   )rk  r  r  )r;   rV   r   r   r  rn   s   &&&&  r   r   BaseDict.fromXML	  s*    t$T'8E"rA   )r1  r<   r   r  r  r6   )NNNNr   )r   r   r   r   r   r?   r  r^   r  ru   r   r   r   r   s   @r   r  r  	  s.     !H" 2# #rA   r  c                      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# )r~   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                  < \         \        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# rV  )r   r~   r   r>   r:   r  topDictOperators2rl  rZ   r
  rR  rc  )r;   r6   r<   r   r:   r>   r    r   s   &&&&&&&r   r   TopDict.__init__
  sf     	gt%gV%K!2&)*;<DM,.DL#$56DJ)*:;DM#$45DJrA   c                    V P                   # )z.Returns a list of glyph names in the CFF font.)rZ   rD   s   &r   r8   TopDict.getGlyphOrder$
      ||rA   c                   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  rU  r<   r.   r1  r2  r  r3  )r;   r   s   & r   r  TopDict.postDecompile(
  sW    !!-0>		v<<<'		2DN'		2DNrA   c                   \        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)rO   decompileAllCharStringsr  r  ru   )r;   rw   s   &&r   ru   TopDict.toXML3
  sa    4''((*4(\DNtU##74+G+GDN 	t'rA   c                    \        V P                  P                  4       4       F  w  r VP                  4        K  	  R#    \        P                  R T4       h ; i)zError in charstring %sN)	enumerater)  rK   r?   r   error)r;   rf  r  s   &  r   r  TopDict.decompileAllCharStringsC
  sM    &t'7'7'>'>'@AMA$$& B		2A6s   A  Ac                0   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\  rP  )r)  rK   
calcBoundsr   rl  r\  r0   r   )r;   fontBBoxr  boundss   &   r   r\   TopDict.recalcFontBBoxL
  s    **113J**4+;+;<F!'(:H%H 4  MM*5a8DM !23DMrA   )r\  r:   r>   rZ   rl  r  rR  r  rn  )r   r   r   r   r   r  rc  rl  r  rk  r  rK  r
  rR  rb  r  r   r8   r  ru   r  r\   r   r   r  r  s   @@r   r~   r~   	  sZ     2 -.H !12J#M'(E'O6(	3( 4 4rA   r~   c                   f   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\
  r}   c                `   < \         \        V `  WW5R 7       W`n        V P	                  V4       R# rV  )r   r{  r   r   setCFF2)r;   r6   r<   r   r:   r    r   r   s   &&&&&&&r   r   FontDict.__init__
  s*     	h&wf&LVrA   c                z    V'       d   V P                   V n        R V n        R# V P                  V n        RV n        R# )TFN)	orderCFF2rR  r1  orderCFFr   s   &&r   r  FontDict.setCFF2
  s)    DJDLDJ DLrA   )r1  rR  r   )rY  r[  Weightr}   rn  )r   r   r   r   rl  r  rc  rk  r  rK  r  r  rb  r  r   r  r   r   r  r  s   @@r   r{  r{  \
  s<     8 H !12J$M>HI'O! !rA   r{  c                      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# )rj  i
  c                *  < \         \        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   rj  r   r   r  privateDictOperators2rl  r
  rR  nominalWidthXdefaultWidthXr1  rg  )r;   r6   r<   r   r    r   r   s   &&&&&&r   r   PrivateDict.__init__
  ss    k4)')O)*?@DM#$9:DJ 7;:D!3DL)*>?DM#$89DJ DLrA   c                    V P                   # r   )r1  rD   s   &r   in_cff2PrivateDict.in_cff2
  r  rA   c                    Vf"   \        V R4      '       d   V P                  pM^ pV P                  P                  V4      pV# )Nvsindex)rO   r  r   r  )r;   vir  s   && r   r  PrivateDict.getNumRegions
  s<    :tY''\\[[..r2
rA   )r1  r  rl  r  rR  r   )NNNNNr   )r   r   r   r   r  rg  rl  r  rk  r
  rR  rf  r  r  rK  r   propertyr  r  r   r   r  r  s   @@r   rj  rj  
  sS     12H !56J+,E+O'M!   rA   rj  c                   R   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# )r5   i
  zSID -> string mapping.Nc                x    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   )r1   r
   r6   )r;   r<   r6   r   s   &&  r   r   IndexedStrings.__init__
  s;    <G<A$u<UV<UquQ2<UGV Ws   7c                     \        V R V RR7      # )NFr   )r   rD   s   &r   r^   IndexedStrings.getCompiler
  s    %dD$uEErA   c                ,    \        V P                  4      # r   )rC   r6   rD   s   &r   rE   IndexedStrings.__len__
  s    4<<  rA   c                n    V\         8  d   \        V,          # V P                  V\         ,
          ,          # r   )cffStandardStringCountcffStandardStringsr6   )r;   r  s   &&r   rW   IndexedStrings.__getitem__
  s+    ''%c**<<&< <==rA   c                t   \        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   )	rO   buildStringMappingr
   cffStandardStringMappingr  rC   r6   r  rb   )r;   r   r  s   && r   r  IndexedStrings.getSID
  s    t_--##%!h'((*1-C 
 $$$$$Q'C
 
 dll#&<<CLL"$'q!
rA   c                    V P                   # r   r   rD   s   &r   
getStringsIndexedStrings.getStrings
  s    ||rA   c                    / V n         \        \        V P                  4      4       F.  pV\        ,           V P                   V P                  V,          &   K0  	  R # r   )r  r5  rC   r6   r  r  s   & r   r  !IndexedStrings.buildStringMapping
  sA    3t||,-E6;>T6TDt||E23 .rA   )r  r6   r   )r   r   r   r   r   r   r^   rE   rW   r  r  r  r   r   r   s   @r   r5   r5   
  s3      F!>U UrA   r5   r  spaceexclamquotedbl
numbersigndollarpercent	ampersand
quoteright	parenleft
parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon	semicolonlessequalgreaterquestionatAr   CDEFGHIJKLMNOPQRSTUVWXYZbracketleft	backslashbracketrightasciicircum
underscore	quoteleftabcr   efghrf  jkr	  r  r  opqrr   turw  wxyz	braceleftbar
braceright
asciitilde
exclamdowncentsterlingfractionyenflorinsectioncurrencyquotesinglequotedblleftguillemotleftguilsinglleftguilsinglrightfiflendashdagger	daggerdblperiodcentered	paragraphbulletquotesinglbasequotedblbasequotedblrightguillemotrightellipsisperthousandquestiondowngraveacute
circumflextildemacronbreve	dotaccentdieresisringcedillahungarumlautogonekcaronemdashAEordfeminineLslashOslashOEordmasculineaedotlessilslashoslashoe
germandblsonesuperior
logicalnotmu	trademarkEthonehalf	plusminusThorn
onequarterdivide	brokenbardegreethornthreequarterstwosuperior
registeredminusethmultiplythreesuperior	copyrightAacuteAcircumflex	AdieresisAgraveAringAtildeCcedillaEacuteEcircumflex	EdieresisEgraveIacuteIcircumflex	IdieresisIgraveNtildeOacuteOcircumflex	OdieresisOgraveOtildeScaronUacuteUcircumflex	UdieresisUgraveYacute	YdieresisZcaronaacuteacircumflex	adieresisagravearingatildeccedillaeacuteecircumflex	edieresisegraveiacuteicircumflex	idieresisigraventildeoacuteocircumflex	odieresisograveotildescaronuacuteucircumflex	udieresisugraveyacute	ydieresiszcaronexclamsmallHungarumlautsmalldollaroldstyledollarsuperiorampersandsmall
Acutesmallparenleftsuperiorparenrightsuperiortwodotenleaderonedotenleaderzerooldstyleoneoldstyletwooldstylethreeoldstylefouroldstylefiveoldstylesixoldstylesevenoldstyleeightoldstylenineoldstylecommasuperiorthreequartersemdashperiodsuperiorquestionsmall	asuperior	bsuperiorcentsuperior	dsuperior	esuperior	isuperior	lsuperior	msuperior	nsuperior	osuperior	rsuperior	ssuperior	tsuperiorffffifflparenleftinferiorparenrightinferiorCircumflexsmallhyphensuperior
GravesmallAsmallBsmallCsmallDsmallEsmallFsmallGsmallHsmallIsmallJsmallKsmallLsmallMsmallNsmallOsmallPsmallQsmallRsmallSsmallTsmallUsmallVsmallWsmallXsmallYsmallZsmallcolonmonetary	onefittedrupiah
TildesmallexclamdownsmallcentoldstyleLslashsmallScaronsmallZcaronsmallDieresissmall
Brevesmall
CaronsmallDotaccentsmallMacronsmall
figuredashhypheninferiorOgoneksmall	RingsmallCedillasmallquestiondownsmall	oneeighththreeeighthsfiveeighthsseveneighthsonethird	twothirdszerosuperiorfoursuperiorfivesuperiorsixsuperiorsevensuperioreightsuperiorninesuperiorzeroinferioroneinferiortwoinferiorthreeinferiorfourinferiorfiveinferiorsixinferiorseveninferioreightinferiornineinferiorcentinferiordollarinferiorperiodinferiorcommainferiorAgravesmallAacutesmallAcircumflexsmallAtildesmallAdieresissmall
AringsmallAEsmallCcedillasmallEgravesmallEacutesmallEcircumflexsmallEdieresissmallIgravesmallIacutesmallIcircumflexsmallIdieresissmallEthsmallNtildesmallOgravesmallOacutesmallOcircumflexsmallOtildesmallOdieresissmallOEsmallOslashsmallUgravesmallUacutesmallUcircumflexsmallUdieresissmallYacutesmall
ThornsmallYdieresissmallz001.000z001.001z001.002z001.003BlackBoldBookLightMediumRegularRomanSemiboldi  )   maxstackrW  NN)      )r  r  rW  ))r     SyntheticBaserW  NN)r   versionr  NN)r  r   )r  &   )r   r  r  NN))r  r$   isFixedPitchrW  r   N))r  r%   ItalicAnglerW  r   N))r  r  UnderlinePositionrW  iN))r  r   UnderlineThicknessrW  2   N))r     	PaintTyperW  r   N))r     CharstringTyperW  r%   N)r     )MbP?r   r   r  r   r   )   UniqueIDrW  NN)r   r   r   r   ))r     StrokeWidthrW  r   N)   XUIDr  NN))r     
PostScriptr  NN))r     BaseFontNamer  NN))r     BaseFontBlendr_  NN))r     r  rW  r   N))r      r  rW  r   N))r  !   r  rW  r   N))r  "   r  rW  i"  N))r  #   UIDBaserW  NN)rW  rW  )r  %   )r  $   )r  r  rW  NN)r  
BlueValuesr_  NN)r  
OtherBluesr_  NN)r  FamilyBluesr_  NN)	   FamilyOtherBluesr_  NN))r  r  	BlueScalerW  g}?5^I?N))r  
   	BlueShiftrW  r  N))r     BlueFuzzrW  r$   N)r  StdHWrW  NN)r  StdVWrW  NN))r  r  	StemSnapHr_  NN))r  r  	StemSnapVr_  NN))r  r  	ForceBoldrW  r   N))r     ForceBoldThresholdrW  NN))r     lenIVrW  NN))r     LanguageGrouprW  r   N))r     ExpansionFactorrW  gQ?N))r     initialRandomSeedrW  r   N)r  r  rW  r   N)r  r  rW  r   N)r   fontTools.miscr   r   fontTools.misc.arrayToolsr   r   fontTools.misc.textToolsr   r   r   r	   r
   r   fontTools.ttLibr   fontTools.ttLib.tables.otBaser   r   fontTools.ttLib.tablesr   r  ior   r,   loggingr:  r   	getLoggerr   r   r(   r  objectr   r]   r   r   r   r   r  r  r  r$  r1   r9   rq  r3   r  r  r  r)  r4  r3  r2  r   r   r   r  r  r  r  r  r
  r  r  r  r!  r0  rA  rH  rJ  rZ  r`  rh  rt  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r(  r0  r2  r4  r?  rL  rc  r  rO  r~  rg  r  r`  DictDecompilerrb  rf  ri  r}  r  r  r  r  r~   r{  rj  r5   r  r  rC   r  r5  _ir  r  r  r  r  r  r   rA   r   <module>r     s53   # ( 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  
"88 88 
&
'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  
"88 88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  
!55 55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   
!"&@@ @@rA   