+
    f7ia  c                   s   R t ^ RIHt R tR tR:R ltR tR tR t ! R	 R
]	4      t
R tR;R ltR:R ltR tR tR tR tR tR tR<R ltR:R lt]R8X  Ed   ^ RIt]! ]P2                  4      ^8X  d0   ^ RIt]P6                  ! ]P8                  ! 4       P:                  4       ^ RIt]P>                  ! RRR7      t ] PC                  RRRRR7       ] PC                  R R!RRR"R#7       ] PC                  R$R%RR&R'7       ] PC                  R(R)]"R*R+7       ] PG                  ]P2                  R,,          4      t$]$PJ                  '       d   ]$PL                  f   RMR- t']! ]$PJ                  4      t%](! R.4       ](! ]! ]%4      4       ]! ]%]'4      t)](! R/4       ](! ])4       ]! ])4      t*](! R04       ](! ]! ]*4      4       ](! R14       ](! ]! ]! ]%]'4      4      4       ](! R24       ](! ]! ]! ]%]'4      4      4       ]$PV                  '       Ed   ^ R3I,H-t- ]-! ]$PV                  4      t+]+R4,          P\                  P^                  ^ ,          t0]0Pb                  t2]2Pg                  4        FL  t4]2]4,          t5]5Pm                  4        ]5Pn                  PN                  t']! ]5PJ                  ]']R57      ]5n%        KN  	  ]$Pp                  f   ^ R6I9H:t: ]:! ]$PV                  RR7R87      t;M]$Pp                  t;];'       d   ](! R9];4       ]+Py                  ];4       R# R# R# R# )=aZ  T2CharString operator specializer and generalizer.

PostScript glyph drawing operations can be expressed in multiple different
ways. For example, as well as the ``lineto`` operator, there is also a
``hlineto`` operator which draws a horizontal line, removing the need to
specify a ``dx`` coordinate, and a ``vlineto`` operator which draws a
vertical line, removing the need to specify a ``dy`` coordinate. As well
as decompiling :class:`fontTools.misc.psCharStrings.T2CharString` objects
into lists of operations, this module allows for conversion between general
and specific forms of the operation.

)maxStackLimitc                 s    \        V \        4      '       d   V P                  4       p . pV  F   p \        V4      pTP                  T4       K"  	  V#   \         d"     \        T4      p L0  \         d      L>i ; ii ; iN)
isinstancestrZsplitint
ValueErrorZfloatappend)Zstringprogramtoken   &  C/usr/lib64/python3.14/site-packages/fontTools/cffLib/specializer.pystringToProgramr      s}    &#G	JE 	u  N  	e 	s)   AA=A**A95A=8A99A=c                 s2    R P                  R V  4       4      # )Z c              3   s8   "   T F  p\        V4      x  K  	  R # 5ir   )r   ).0Zx   & r
   	<genexpr>Z"programToString.<locals>.<genexpr>$   s     ,GqCFFGs   )Zjoin)r      &r
   programToStringr   #   s    88,G,,,    Nc                s|   Rp^ p^ p^ p. p. p\        V 4      pV EF  p	\        V	\        4      '       g   VP                  V	4       K-  V	R8X  dV   ^V! V4      ,           p
VR,          pW,          ^,           pW|) R .W|) R% \	        V4      pWKV,           ^,
          ,          pTpK  V	R8X  d   VR,          pMV'       gz   V	R9   ds   RpV	R	9   pV'       d   V\	        WuR 4      ,           pM\	        V4      pV'       d<   V^,          V,          '       d&   VP                  ^ 4      pVP                  RV.34       V	R
9   dM   V'       d   VP                  RV34       VP                  V	. 34       VP                  R\        V4      .34       MVP                  W34       . pEK  	  V'       d   VP                  RV34       V# )u  Takes a T2CharString program list and returns list of commands.
Each command is a two-tuple of commandname,arg-list.  The commandname might
be empty string if no commandname shall be emitted (used for glyph width,
hintmask/cntrmask argument, as well as stray arguments at the end of the
program (🤷).
'getNumRegions' may be None, or a callable object. It must return the
number of regions. 'getNumRegions' takes a single argument, vsindex. It
returns the numRegions for the vsindex.
The Charstring may or may not start with a width value. If the first
non-blend operator has an odd number of arguments, then the first argument is
a width, and is popped off. This is complicated with blend operators, as
there may be more than one before the first hint or moveto operator, and each
one reduces several arguments to just one list argument. We have to sum the
number of arguments that are not part of the blend arguments, and all the
'numBlends' values. We could instead have said that by definition, if there
is a blend operator, there is no width value, since CFF2 Charstrings don't
have width values. I discussed this with Behdad, and we are allowing for an
initial width value in this case because developers may assemble a CFF2
charstring from CFF Charstrings, which could have width values.
FblendNZvsindexT >
   ZhstemZvstemZendcharhmovetoZhstemhmrmovetovmovetoZvstemhmcntrmaskhintmask>   r   r   >   r   r   )iterr   r   r   lenZpopnext)r   getNumRegionsZseenWidthOpvsIndexZlenBlendStackZlastBlendIndexcommandsZstackitr   ZnumSourceFonts	numBlendsZnumBlendArgsZlenStackZparityZnumArgsZwidths   &&               r
   programToCommandsr"   '   s   , KGMNHE	gB%%%LLGw!77N b	I$59L%*=>%:$;E-.!5zH1A55M%NiBiG 5 -
 $
 K44F (#eO.D*EEe*GaK611		!eW.,,U,OOUBK(OOR$r(,-OOUN+q r U$Or   c                 s    . pV  FN  p\        V\        4      '       d%   VP                  V4       VP                  R 4       K=  VP                  V4       KP  	  V# )r   )r   listextendr   )argsZ
token_listargr	   r
   _flattenBlendArgsr'      sP    Jc4  c"g&c"  r   c                s   . pV  Fv  w  r#\         ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        V4      pVP                  V4       V'       g   Ke  VP                  V4       Kx  	  V# )zmTakes a commands list as returned by programToCommands() and converts
it back to a T2CharString program list.c              3   B   "   T F  p\        V\        4      x  K  	  R # 5ir   r   r#   r   r&   r   r
   r   Z$commandsToProgram.<locals>.<genexpr>        5z#t$$   TF)anyr'   r$   r   )r   r   opr%      &   r
   commandsToProgramr0      sd     G3553335555$T*Dt2NN2  Nr   c              #  s   "   \        V 4      pW!,          ^ 8w  d   \        V 4      h\        ^ W!4       F  pWW1,            x  K  	  R# 5i)z'Group the list el into groups of size nN)r   r   range)Zelnli   &&  r
   _everyNr6      s=     BAuzn1a^QUm s   AAc                   s   a  ] tR t^t o ]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t	]R 4       t
]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       t]R 4       tRtV tR# )!_GeneralizerDecombinerCommandsMapc              #  sP   "   \        V 4      ^8w  d   \        V 4      hRV 3x  R# 5i)   r   Nr   r   r%   r   r
   r   Z)_GeneralizerDecombinerCommandsMap.rmoveto   s&     t9>T""$s   $&c              #  sb   "   \        V 4      ^8w  d   \        V 4      hRV ^ ,          ^ .3x  R# 5i   r   Nr9   r:   r   r
   r   Z)_GeneralizerDecombinerCommandsMap.hmoveto   s.     t9>T""47A,''   -/c              #  sb   "   \        V 4      ^8w  d   \        V 4      hR^ V ^ ,          .3x  R# 5ir;   r9   r:   r   r
   r   Z)_GeneralizerDecombinerCommandsMap.vmoveto   s.     t9>T""1d1g,''r=   c              #  sf   "   V '       g   \        V 4      h\        V ^4       F	  p RV 3x  K  	  R# 5i)r8   rlinetoNr   r6   r:   r   r
   r>   Z)_GeneralizerDecombinerCommandsMap.rlineto   s/     T""D!$Dd## %   /1c              #  s   "   V '       g   \        V 4      h\        V 4      p  R\        V4      ^ .3x  R^ \        V4      .3x  K%    \         d     R# i ; i5iTr>   Nr   r   r   StopIterationr%   r    r   r
   hlinetoZ)_GeneralizerDecombinerCommandsMap.hlineto   s[     T""$Z	 48Q-00 1d2h-00 		"   A%A AAAAc              #  s   "   V '       g   \        V 4      h\        V 4      p  R^ \        V4      .3x  R\        V4      ^ .3x  K%    \         d     R# i ; i5irA   rB   rD   r   r
   vlinetoZ)_GeneralizerDecombinerCommandsMap.vlineto   s[     T""$Z	 1d2h-00 48Q-00 		rF   c              #  sf   "   V '       g   \        V 4      h\        V ^4       F	  p RV 3x  K  	  R# 5i)i   	rrcurvetoNr?   r:   r   r
   rH   Z+_GeneralizerDecombinerCommandsMap.rrcurveto   s/     T""D!$D%% %r@   c              #  sf  "   \        V 4      pV^8  g   V^,          ^8  d   \        V 4      hV^,          ^8X  d9   RV ^,          V ^ ,          V ^,          V ^,          V ^,          ^ .3x  V R,          p \        V ^4       F+  p RV ^ ,          ^ V ^,          V ^,          V ^,          ^ .3x  K-  	  R# 5i   rH   :   NNNr   r   r6   r%   r3   r   r
   	hhcurvetoZ+_GeneralizerDecombinerCommandsMap.hhcurveto   s     Iq5AEAIT""q5A:a$q'47DGT!Wa PQQ8DD!$Da!T!Wd1gtAw JKK %   B/B1c           	   #  sf  "   \        V 4      pV^8  g   V^,          ^8  d   \        V 4      hV^,          ^8X  d9   RV ^ ,          V ^,          V ^,          V ^,          ^ V ^,          .3x  V R,          p \        V ^4       F+  p R^ V ^ ,          V ^,          V ^,          ^ V ^,          .3x  K-  	  R# 5irI   rL   rM   r   r
   	vvcurvetoZ+_GeneralizerDecombinerCommandsMap.vvcurveto   s     Iq5AEAIT""q5A:a$q'47DGQQ PQQ8DD!$DDGT!Wd1gq$q' JKK %rO   c              #  s  "   \        V 4      pV^8  g   V^,          R9  d   \        V 4      hRpV^,          ^8X  d   V^,          ^8H  pV RR V RR r \        V ^4      p  \        V4      p RV ^ ,          ^ V ^,          V ^,          ^ V ^,          .3x  \        V4      p R^ V ^ ,          V ^,          V ^,          V ^,          ^ .3x  Ki    \         d     Mi ; iT'       dm   Tp X'       d2   RT ^ ,          ^ T ^,          T ^,          T ^,          T ^,          .3x  R# R^ T ^ ,          T ^,          T ^,          T ^,          T ^,          .3x  R# R# 5irJ   NrH   >       r<   rJ   rK   ir   r   r6   r   rC   r%   r3   	last_argsZlastStraightr       &    r
   	hvcurvetoZ+_GeneralizerDecombinerCommandsMap.hvcurveto   sM    Iq5AE-T""	q5A:q5A:L"3Bibc)T1	Bx"T!Waa$q'1d1g$NOOBx"QQa$q'47A$NOO 		D"T!Waa$q'47DQRG$TUU"QQa$q'47DQRG$TUU 2   AE A)C	 	CEC
E"	E,A$Ec              #  s  "   \        V 4      pV^8  g   V^,          R9  d   \        V 4      hRpV^,          ^8X  d   V^,          ^8H  pV RR V RR r \        V ^4      p  \        V4      p R^ V ^ ,          V ^,          V ^,          V ^,          ^ .3x  \        V4      p RV ^ ,          ^ V ^,          V ^,          ^ V ^,          .3x  Ki    \         d     Mi ; iT'       dm   Tp X'       d2   R^ T ^ ,          T ^,          T ^,          T ^,          T ^,          .3x  R# RT ^ ,          ^ T ^,          T ^,          T ^,          T ^,          .3x  R# R# 5irQ   rS   rT   rV   r
   	vhcurvetoZ+_GeneralizerDecombinerCommandsMap.vhcurveto  sM    Iq5AE-T""	q5A:q5A:L"3Bibc)T1	Bx"QQa$q'47A$NOOBx"T!Waa$q'1d1g$NOO 		D"QQa$q'47DQRG$TUU"T!Waa$q'47DQRG$TUU rX   c              #  s   "   \        V 4      pV^8  g   V^,          ^8w  d   \        V 4      hV RR V RR r \        V ^4       F	  p RV 3x  K  	  RV3x  R# 5i)   NrH   r>   rL   r%   r3   rU   r	   r
   
rcurvelineZ,_GeneralizerDecombinerCommandsMap.rcurveline%  sd     Iq5AEQJT""s)T"#YiD!$D%% %)$$   AAc              #  s   "   \        V 4      pV^8  g   V^,          ^ 8w  d   \        V 4      hV RR V RR r \        V ^4       F	  p RV 3x  K  	  RV3x  R# 5i)rZ   Nr>   rH   irL   r\   r	   r
   
rlinecurveZ,_GeneralizerDecombinerCommandsMap.rlinecurve/  sd     Iq5AEQJT""s)T"#YiD!$Dd## %I&&r^    N)__name__Z
__module__Z__qualname__Z__firstlineno__Zstaticmethodr   r   r   r>   rE   rG   rH   rN   rP   rW   rY   r]   r_   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r
   r7   r7      s       
 ( (
 ( (
 $ $ 	 	 	 	 & & L L L L V V0 V V0 % % ' 'r   r7   c           	      s   \        V  Uu. uF  p\        V\        4      NK  	  up4      '       d@   V  UUu. uF0  p\        V\        4      '       d   \        V4      MV. F  pVNK  	  K2  	  pppMT pVR,          pVRR p\	        V4      pWe,          ^,
          pWW^,           ,          V8X  g   \        V 4      hVRV  Uu. uF  q.NK  	  ppWER p	\	        V	4      p
\        ^ W4       Uu. uF  q9W3V,            NK  	  pp\        W4       UUu. uF  w  rW,           ^.,           NK  	  pppV# u upi u uppi u upi u upi u uppi )r<   Nr   )r-   r   r#   _convertBlendOpToArgsr   r   r1   zip)Z	blendListr&   Zer4   r%   r!   r3   Z
numRegionsZdefaultArgsZ	deltaArgsZnumDeltaValuesZ	deltaListab
blend_argss   &              r
   rb   rb   :  sb   
 Y7YcJsD!Y788 
2<Q2E2E+A.A3N N  	 
  RI 9DD	A!#Ja(A-##$()$45$4S5$4K5Z I^N/4Q/S/S!!*n%/S   +.k*EF*E$!!%1#++*EJFE 8
4 6 Gs   D,6D1?D7)D<Ec           
      s   . p\         pV  F  w  rE\        V Uu. uF  p\        V\        4      NK  	  up4      '       d@    V UUu. uF0  p\        V\        4      '       d   \	        V4      MV. F  pVNK  	  K2  	  ppp\        W4R4      pVf   VP                  WE34       K   V! V4       F  p	VP                  V	4       K  	  K  	  V# u upi u uppi   \
         d4    T'       d*   TP                  R T34       TP                  R T.34        Lh i ; i  \
         d6    T'       d,   TP                  R T34       TP                  R T.34        EKH  h i ; i)r   N)r7   r-   r   r#   rb   r   r   Zgetattr)
r   ignoreErrorsZresultZmappingr.   r%   r&   r2   Zfunccommands
   &&        r
   generalizeCommandsri   d  s\   F/G6#
3%677  $#6@d6K6K-c2RUQVV   W #    wD)<MM2*%
	:g& &3 F MC 7   MM2t*-MM2t*-   	 r4j)rB4j))	sG   C	
 C6C;C# DCD''DDE('EEc                 >    \        \        \        W4      3/ VB 4      # r   )r0   ri   r"   r   r   Zkwargs   &&,r
   generalizeProgramrm     "    ,WDOO r   c                s    V ^ ,          '       g&   V ^,          '       g   RV R,          3# RV R,          3# V ^,          '       g   RV R,          3# RV 3# )aV  
Takes X,Y vector v and returns one of r, h, v, or 0 depending on which
of X and/or Y are zero, plus tuple of nonzero ones.  If both are zero,
it returns a single zero still.

>>> _categorizeVector((0,0))
('0', (0,))
>>> _categorizeVector((1,0))
('h', (1,))
>>> _categorizeVector((0,2))
('v', (2,))
>>> _categorizeVector((1,2))
('r', (1, 2))
0Nr<   Nvr<   NNhrr`   )rq   r   r
   _categorizeVectorru     sR     Q44tt":":tt":6Mr   c                 s:    V R 8X  d   V# VR 8X  d   V # W8X  d   V # R# )ro   Nr`   )rd   re   s   &&r
   _mergeCategoriesrv     s'    CxCxvr   c                 s*    V R 8X  d   R# V R8X  d   R # V # )rs   rq   r`   )rd   r   r
   _negateCategoryrw     s    CxCxHr   c                 s   \        V 4      p^ p. p^ pWA8  Ed@   W,          pV^,          p\        V\        4      '       g   VP                  V4       V^,          pKJ  Tp\        V4      ^,
          pV.pV^V,           ,          pWA8  dX   \        W,          \        4      '       d<   W',           \        8  d+   VP                  W,          4       V^,          pW',          pK]  \        V4      p	. p
V F  pV
P                  V^ ,          4       K  	  V F  pV
P                  V^R 4       K  	  V
P                  V	4       VP                  V
4       Wi,           pEKF  V# rR   r   )r   r   r#   r   r    r$   )r%   Znum_argsZ	stack_usenew_argsr4   r&   Zprev_stack_useZnum_sourcesZ	blendlistZ
num_blendsrf   s   &          r
   _convertToBlendCmdsrz     s1    4yHIH	A
,g	Q#t$$OOC NI&N
 c(Q,KI[(I tw--+m;  )Q(	 YJJ !!#a&) ! !!#a), ! j)OOJ'&3IOr   c                 s   \        V\        4      '       d   \        V \        4      '       dw   \        V 4      \        V4      8w  g   V R,          VR,          8w  d   \        4       h\	        V RR VRR 4       UUu. uF  w  r#\        W#4      NK  	  uppV R,          .,           # Yr\        V \        4      '       d#   \        V ^ ,          V4      .V R,          ,           # W,           # u uppi )r<   Nrr   r   )r   r#   r   r   rc   _addArgs)rd   re   ZvaZvbr5   r
   r{   r{     s    !Ta1vQ1R5AbE> l"36q"vq"v3FG3FHR$3FG1R5'QQq!T1q!"QrU**5L Hs   :C%c                 s    ^ p^ pV  FK  p\        V4      \        J d-   \        W!\        V4      ,           4      pWR,          ,          pKB  V^,          pKM  	  \        W4      # rx   )typer#   max_argsStackUse)r%   ZstackLenZmaxLenr&   r/   r
   r~   r~   	  sX    HF9M#,>!>?FBHMH  x  r   Tc                 s   V'       d   \        WR 7      p M\        V 4      p \        \        V 4      ^,
          ^ R4       F  pRW,          ^ ,          u;8X  d   W^,
          ,          ^ ,          8X  g   K5  M K9  W^,
          ,          ^,          W,          ^,          rvR\	        V^ ,          V^ ,          4      \	        V^,          V^,          4      .3W^,
          &   W K  	  \        \        V 4      4       F  pW,          w  rVR9   d#   \        V	4      w  rWR,          ,           V	3W&   K6  VR8X  g   K?  \        V	R,          4      w  r\        V	RR 4      w  rW,           R,           WR,          ,           V,           3W&   K  	  V'       g   \        \        V 4      ^,
          RR4       F  pW,          w  rVR	8X  d#   \        V	R
,          4      w  rV
R,           pW3W&   VR8X  d   W KA  V'       g   KK  VR9   g   KT  WV^,
          ,          ^ ,          8X  g   Kq  W^,
          ,          w  pp \	        V	^ ,          V^ ,          4      .pTT3Y^,
          &   Y K  	  \        ^\        V 4      ^,
          4       EF  pW,          w  rW^,
          ,          ^ ,          W^,           ,          ^ ,          ppVR9   d?   VTu;8X  d   R8X  d0   M M,V^ ,          R8X  d   ^ V	^ ,          .M
V	^ ,          ^ .p	RV	3W&   K  VR,          R8X  g   K  \        V	4      ^8X  g   K  VTu;8X  d
   R8X  g   K  M K  V^ ,          R8X  d   ^ pM$V^ ,          R8w  d   ^pMV^,          R8X  d   ^pM^pV	RV \        V	4      ! R 4      ,           V	VR ,           p	RV	3W&   EK  	  V '       d   \        V R,          ^,          4      M^ p\        \        V 4      ^,
          ^ R4       EF  pW^,
          ,          w  ppW,          w  ppRpVV0RR08:  d4   VV8X  d   TpEM0\        V4      pVR8X  d   V^8X  d   RpEMV^8X  d   RpEMVV3R!9   d   TpMVV0RR08X  d   TpMRVR,          u;8X  d   VR,          8X  d   M MVR,          w  ppVR,          w  ppVR8X  g   VR8X  g   VTu;8X  d   R8X  d   M MK  \        VV4      pVf   K  VR8X  d%   \        VV4      pVf   EK  RV,           R,           pMWVR8X  d.   \        V\        V4      4      pVf   EK5  VR,           R,           pM#\        VV4      pVf   EKY  VV,           R,           p\        V4      p\        V\        V4      V,           4      p V'       d"   V V8  d   VW,           3W^,
          &   W T pEK  TpEK  	  \        \        V 4      4       EF0  pW,          w  rVR"9   d   RVR,          ,           V	3W&   K+  VR,          R8X  g   K;  VR,          R#9  g   KK  \        V	4      pVR,          w  p!pV!R8H  VR8H  ,          '       d   V!R8X  d   Rp!VR8X  d   RpV!R8X  d   Tp!VR8X  d   \        V!4      pV^,          '       dj   V!V8w  d7   V!R8H  V^,          ^8H  ,          '       d   V	RR V	RR ,           V	RR ,           p	M,V!R8X  d&   V	R,          V	R,          ,           V	R,          ,           p	V!V,           R,           V	3W&   EK3  	  \        \        V 4      4       FX  pW,          w  r\        ;QJ d    R V	 4       F  '       g   K   RM	  RM! R V	 4       4      '       g   KI  V\        V	4      3W&   KZ  	  V #   \         d     EK  i ; i)$)rg   r   r>   rr   rH   :Nr8   NNZcurveto:r8   rJ   NZ	00curveto:r<   i   NZlineto0linetorE   rG   rq   :r8   NNrt   r_   r]   rs   ro   :r<   r8   Nrp   c              3   r(   r   r)   r*   r   r
   r   Z%specializeCommands.<locals>.<genexpr>>  r+   r,   TFr   >   r>   r   r[   >   rE   rG   >   r   rE   rG   )rR   >   )r>   r_   )rH   r]   >   r   Z0moveto>   ZhhZhvZrrZvhZvv)ri   r#   r1   r   r{   ru   r   r|   r~   rv   rw   r}   r-   rz   )"r   rg   ZgeneralizeFirstZpreserveTopologymaxstackr4   Zv1Zv2r.   r%   ZcZc1Zargs1Zc2Zargs2Z_Z
other_argsry   ZprvZnxtZposZstackUseZop1Zop2Znew_opr3   Zd0Zd1Zd2Zd3ZdZargs1StackUseZcombinedStackUseZop0s"   &&&&&                             r
   specializeCommandsr     s   P %hJ> 3x=1$a,A<(q5/!*<<<!e_Q'Q"Q%A'"Q%A)?@HUO  -n 3x=!;'''-GAf*d*HK)$r(3IB)$rs)4IB'I-uCy/@5/HHHK "F s8}q("b1A{HB [ +DI6\ h YK qR11ra!e_Q=O7O (Q: (a*Q- @AH $&x.QK; 2B 1c(ma'(;E?1%xAq'9S22sc7NY7N#%a5C<AtAw<d1gq\D$d+HKb6Y3t9>cS6OK6O6O!u|A#A#:T
4 004:=D&-HK/ )4 2:}Xb\!_-qH3x=1$a,!e_
U[
U :)[11czJ+%!q&)F!V)F3ZSSF3ZIy11F#b',SW,WFBWFBSyB#IrS R(AySy$Q+9q9,s%b/!*<=:cI-%b"-:a)+ &e,}c%j8.CD&1%u}5HUO'H$Hs -x 3x=!;''2,,HKb6Y2b61O#OD	A"vHCs
scz**czczczcz%c* 1uu#:s
q1uz22#CRy494tBr{Bcz#Cy483d2h>)i/5HKE "J 3x=!;35533355551$77HK "
 OS " s   +]]]c                 rj   r   )r0   r   r"   rk   rl   r
   specializeProgramr   D  rn   r   Z__main__zfonttools cffLib.specializerz&CFF CharString generalizer/specializer)Zdescriptionr   rh   Z*z	Commands.)metavarnargshelpz--num-regionsZ
NumRegionsz5Number of variable-font regions for blend opertaions.)r   r   defaultr   z--fontZFONTFILEzCFF2 font to specialize.)r   r   r   z-oz--output-filezOutput font file name.)r|   r   rr   c                 sb    \        \        P                  V f   ^ ,          4      # T ,          4      # r   )r   optionsnum_regions)r   r   r
   <lambda>r   s  s&    ##AF">EF"r   zProgram:z	Commands:zProgram from commands:zGeneralized program:zSpecialized program:)TTFontZCFF2)r   )makeOutputFileNamez.specialized)Z	overWriteZsuffixZSavingr   )F)FTFi0   )=Z__doc__ZfontTools.cffLibr    r   r   r"   r'   r0   r6   Zobjectr7   rb   ri   rm   ru   rv   rw   rz   r{   r~   r   r   ra   Zsysr   ZargvZdoctestZexitZtestmodZfailedZargparseZArgumentParserZparserZadd_argumentr   Z
parse_argsr   r   r   r   Zprintr   Zprogram2ZfontZfontTools.ttLibr   ZcffZtopDictIndexZcff2ZCharStringsZcharstringsZkeysZ	glyphNameZ
charstringZ	decompileZprivateZoutput_fileZfontTools.misc.cliToolsr   ZoutfileZsaver`   r   r
   <module>r      s   + -Yx
S' S'l'T&R67t
!k\	 z
388}"))*$$&<F 	9CkR
D   '	   %	   -G ""*  	 "'//2jog&'$Wm<kh$X.&'oh'($%o/GHI$%o/GHI|||*gll#F|,,Q/&&$))+I$Y/J  "&..<<M!2""MM"J	 , &B(^G ))G(G$IIg - { r   