
    ]Mha                        d Z ddlmZ d Zd Zd=dZd Zd Zd	 Z G d
 de	          Z
d Zd>dZd=dZd Zd Zd Zd Zd Zd Z	 	 	 	 d?dZd=dZedk    rddlZ eej                  dk    r&ddlZ ej         ej                    j                   ddlZ ej        dd          Z e !                    dd d!d"#           e !                    d$d%d!dd&'           e !                    d(d)dd*+           e !                    d,d-e"d./           e #                    ej        dd                   Z$e$j%        re$j&        dnd0 Z' ee$j%                  Z% e(d1            e( ee%                      ee%e'          Z) e(d2            e(e)            ee)          Z* e(d3            e( ee*                     e%e*k    sJ  e(d4            e( e ee%e'                                e(d5            e( e ee%e'                               e$j+        rdd6l,m-Z-  e-e$j+                  Z+e+d7         j.        j/        d         Z0e0j1        Z2e23                                D ]BZ4e2e4         Z5e56                                 e5j7        j'        Z' ee5j%        e'e8          e5_%        Ce$j8        dd9l9m:Z:  e:e$j+        dd:;          Z;ne$j8        Z;e;r' e(d<e;           e+<                    e;           dS dS dS dS )@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                    t          | t                    r|                                 } g }| D ]Y}	 t          |          }n1# t          $ r$ 	 t          |          }n# t          $ r Y nw xY wY nw xY w|                    |           Z|S N)
isinstancestrsplitint
ValueErrorfloatappend)stringprogramtokens      \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/cffLib/specializer.pystringToProgramr      s    &#  G  	JJEE 	 	 	e   	
 	uNs5   A
A/AA/
A)&A/(A))A/.A/c                 @    d                     d | D                       S )N c              3   4   K   | ]}t          |          V  d S r   )r   ).0xs     r   	<genexpr>z"programToString.<locals>.<genexpr>$   s(      ,,qCFF,,,,,,    )join)r   s    r   programToStringr   #   s#    88,,G,,,,,,r   Nc                    d}d}d}d}g }g }t          |           }|D ]}	t          |	t                    s|                    |	           .|	dk    rQ|J d ||          z   }
|d         }||
z  dz   }|| d         g|| d<   t	          |          }|||z   dz
  z  }|}|	dk    r!|d         }t          |          t          u sJ no|sm|	dv rid	}|	d
v }|r|t	          ||d                   z   }nt	          |          }|r5|dz  |z  r-|                    d          }|                    d|gf           |	dv rV|r|                    d|f           |                    |	g f           |                    dt          |          gf           n|                    |	|f           g }|r|                    d|f           |S )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.
    Fr   blendN   vsindex>
   hstemvstemendcharhmovetohstemhmrmovetovmovetovstemhmcntrmaskhintmaskT>   r#   r&       >   r(   r)   )	iterr   r   r   lentyper	   popnext)r   getNumRegionsseenWidthOpvsIndexlenBlendStacklastBlendIndexcommandsstackitr   numSourceFonts	numBlendsnumBlendArgslenStackparitynumArgswidths                    r   programToCommandsr@   '   sY   , KGMNHE	gB 8 8%%% 	LLG ,,,w!7!77N b	I$~59L%*L=>>%:$;E<-..!5zzHY1A55M%NiBiG==C''''' 	/5 -
 $
 $
 K44F % (#eNOO.D*E*EEe** /GaK61 /		!eW...,,, -U,,,OOUBK(((OOR$r((,----OOUEN+++ %U$$$Or   c                     g }| D ]W}t          |t                    r+|                    |           |                    d           B|                    |           X|S )Nr   )r   listextendr   )args
token_listargs      r   _flattenBlendArgsrG      sp    J # #c4   	#c"""g&&&&c""""r   c                     g }| D ]Y\  }}t          d |D                       rt          |          }|                    |           |r|                    |           Z|S )zqTakes a commands list as returned by programToCommands() and converts
    it back to a T2CharString program list.c              3   @   K   | ]}t          |t                    V  d S r   r   rB   r   rF   s     r   r   z$commandsToProgram.<locals>.<genexpr>   ,      55z#t$$555555r   )anyrG   rC   r   )r6   r   oprD   s       r   commandsToProgramrO      sz     G  D5555555 	+$T**Dt 	NN2Nr   c              #      K   t          |           }||z  dk    rt          |           t          d||          D ]}| |||z            V  dS )z'Group the list el into groups of size nr   N)r-   r
   range)elnlis       r   _everyNrV      sh      BA1uzznn1a^^  QUm r   c                   ,   e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             ZdS )!_GeneralizerDecombinerCommandsMapc              #   Z   K   t          |           dk    rt          |           d| fV  d S )Nr*   r%   r-   r
   rD   s    r   r%   z)_GeneralizerDecombinerCommandsMap.rmoveto   s:      t99>>T"""$r   c              #   j   K   t          |           dk    rt          |           d| d         dgfV  d S Nr   r%   r   rZ   r[   s    r   r#   z)_GeneralizerDecombinerCommandsMap.hmoveto   sB      t99>>T"""47A,''''''r   c              #   j   K   t          |           dk    rt          |           dd| d         gfV  d S r]   rZ   r[   s    r   r&   z)_GeneralizerDecombinerCommandsMap.vmoveto   sB      t99>>T"""1d1g,''''''r   c              #   ^   K   | st          |           t          | d          D ]} d| fV  	d S )Nr*   rlinetor
   rV   r[   s    r   r`   z)_GeneralizerDecombinerCommandsMap.rlineto   sS       	#T"""D!$$ 	$ 	$Dd#####	$ 	$r   c              #      K   | st          |           t          |           }	 	 dt          |          dgfV  ddt          |          gfV  +# t          $ r Y d S w xY wNTr`   r   r
   r,   r0   StopIterationrD   r8   s     r   hlinetoz)_GeneralizerDecombinerCommandsMap.hlineto   s       	#T"""$ZZ	1 488Q-0000 1d2hh-00001  	 	 	DD	   ,A 
AAc              #      K   | st          |           t          |           }	 	 ddt          |          gfV  dt          |          dgfV  +# t          $ r Y d S w xY wrc   rd   rf   s     r   vlinetoz)_GeneralizerDecombinerCommandsMap.vlineto   s       	#T"""$ZZ	1 1d2hh-0000 488Q-00001  	 	 	DD	rh   c              #   ^   K   | st          |           t          | d          D ]} d| fV  	d S )N   	rrcurvetora   r[   s    r   rm   z+_GeneralizerDecombinerCommandsMap.rrcurveto   sS       	#T"""D!$$ 	& 	&D%%%%%	& 	&r   c              #   L  K   t          |           }|dk     s	|dz  dk    rt          |           |dz  dk    r4d| d         | d         | d         | d         | d         dgfV  | dd          } t          | d          D ]&} d| d         d| d         | d         | d         dgfV  'd S N   r   r*   rm   r         r-   r
   rV   rD   rT   s     r   	hhcurvetoz+_GeneralizerDecombinerCommandsMap.hhcurveto   s      IIq55AEAIIT"""q5A::a$q'47DGT!Wa PQQQQ8DD!$$ 	L 	LDa!T!Wd1gtAw JKKKKK	L 	Lr   c           	   #   L  K   t          |           }|dk     s	|dz  dk    rt          |           |dz  dk    r4d| d         | d         | d         | d         d| d         gfV  | dd          } t          | d          D ]&} dd| d         | d         | d         d| d         gfV  'd S ro   rs   rt   s     r   	vvcurvetoz+_GeneralizerDecombinerCommandsMap.vvcurveto   s      IIq55AEAIIT"""q5A::a$q'47DGQQ PQQQQ8DD!$$ 	L 	LDDGT!Wd1gq$q' JKKKKK	L 	Lr   c              #   ~  K   t          |           }|dk     s|dz  dvrt          |           d }|dz  dk    r|dz  dk    }| d d         | dd          }} t          | d          }	 	 t          |          } d	| d
         d
| d         | d         d
| d         gfV  t          |          } d	d
| d
         | d         | d         | d         d
gfV  g# t          $ r Y nw xY w|r\|} |r,d	| d
         d
| d         | d         | d         | d         gfV  d S d	d
| d
         | d         | d         | d         | d         gfV  d S d S Nrp      >   r   r   rp   rr   r*   r   rr   Trm   r   rq   r-   r
   rV   r0   re   rD   rT   	last_argslastStraightr8   s        r   	hvcurvetoz+_GeneralizerDecombinerCommandsMap.hvcurveto   s     IIq55AE--T"""	q5A::q5A:L"3B3ibcc)DT1	PBxx"T!Waa$q'1d1g$NOOOOBxx"QQa$q'47A$NOOOO	P
  	 	 	D	 	VD V"T!Waa$q'47DQRG$TUUUUUU"QQa$q'47DQRG$TUUUUUU	V 	V   'A(C 
CCc              #   ~  K   t          |           }|dk     s|dz  dvrt          |           d }|dz  dk    r|dz  dk    }| d d         | dd          }} t          | d          }	 	 t          |          } d	d
| d
         | d         | d         | d         d
gfV  t          |          } d	| d
         d
| d         | d         d
| d         gfV  g# t          $ r Y nw xY w|r\|} |r,d	d
| d
         | d         | d         | d         | d         gfV  d S d	| d
         d
| d         | d         | d         | d         gfV  d S d S ry   r|   r}   s        r   	vhcurvetoz+_GeneralizerDecombinerCommandsMap.vhcurveto  s     IIq55AE--T"""	q5A::q5A:L"3B3ibcc)DT1	PBxx"QQa$q'47A$NOOOOBxx"T!Waa$q'1d1g$NOOOO	P
  	 	 	D	 	VD V"QQa$q'47DQRG$TUUUUUU"T!Waa$q'47DQRG$TUUUUUU	V 	Vr   c              #      K   t          |           }|dk     s	|dz  dk    rt          |           | d d         | dd          }} t          | d          D ]} d| fV  	d|fV  d S )Nrz   rl   r*   rm   r`   rs   rD   rT   r~   s      r   
rcurvelinez,_GeneralizerDecombinerCommandsMap.rcurveline%  s      IIq55AEQJJT"""ss)T"##YiD!$$ 	& 	&D%%%%%)$$$$$$r   c              #      K   t          |           }|dk     s	|dz  dk    rt          |           | d d         | dd          }} t          | d          D ]} d| fV  	d|fV  d S )Nrz   r*   r   ir`   rm   rs   r   s      r   
rlinecurvez,_GeneralizerDecombinerCommandsMap.rlinecurve/  s      IIq55AEQJJT"""ss)T"##YiD!$$ 	$ 	$Dd#####I&&&&&&r   N)__name__
__module____qualname__staticmethodr%   r#   r&   r`   rg   rj   rm   ru   rw   r   r   r   r    r   r   rX   rX      s}           \ 
 ( ( \(
 ( ( \(
 $ $ \$ 	 	 \	 	 	 \	 & & \& L L \L L L \L V V \V0 V V \V0 % % \% ' ' \' ' 'r   rX   c                   	 t          d | D                       rd | D             }n| }|d         }|d d         }t          |          }||z  dz
  	|	dz   z  |k    st          |           d |d |         D             }||d          t                    }	fdt          d|	          D             }d t	          ||          D             }|S )	Nc                 8    g | ]}t          |t                    S r   rJ   rK   s     r   
<listcomp>z)_convertBlendOpToArgs.<locals>.<listcomp>?  s"    777cJsD!!777r   c                 f    g | ].}t          |t                    rt          |          n|gD ]}|/S r   r   rB   _convertBlendOpToArgs)r   erU   s      r   r   z)_convertBlendOpToArgs.<locals>.<listcomp>@  s^     
 
 
2<Q2E2EN+A...A3
 
  
 
 
 
r   r   r   c                     g | ]}|gS r   r   rK   s     r   r   z)_convertBlendOpToArgs.<locals>.<listcomp>Z  s    555SC5555r   c                 *    g | ]}||z            S r   r   )r   rU   	deltaArgs
numRegionss     r   r   z)_convertBlendOpToArgs.<locals>.<listcomp>]  s4       *+	!a*n$%  r   r   c                 &    g | ]\  }}||z   d gz   S )r   r   )r   abs      r   r   z)_convertBlendOpToArgs.<locals>.<listcomp>`  s&    FFF$!Q!a%1#+FFFr   )rM   r-   r
   rQ   zip)
	blendListrD   r:   rT   defaultArgsnumDeltaValues	deltaList
blend_argsr   r   s
           @@r   r   r   :  s5   
 77Y77788 
 

 
 
  RI 9DD		Ai!#Ja(A--###55D)$4555KYZZ I^^N    /4Q
/S/S  I GF#k9*E*EFFFJr   Fc                 "   g }t           }| D ]\  }}t          d |D                       rQ	 d |D             }nC# t          $ r6 |r0|                    d|f           |                    d|gf           n Y nw xY wt	          ||d           }||                    ||f           	  ||          D ]}|                    |           # t          $ r6 |r0|                    d|f           |                    d|gf           n Y w xY w|S )Nc                 8    g | ]}t          |t                    S r   rJ   rK   s     r   r   z&generalizeCommands.<locals>.<listcomp>i  s"    666#
3%%666r   c                 f    g | ].}t          |t                    rt          |          n|gD ]}|/S r   r   )r   rF   rS   s      r   r   z&generalizeCommands.<locals>.<listcomp>k  s`       6@d6K6KV-c222RUQV	      r   r+   )rX   rM   r
   r   getattr)r6   ignoreErrorsresultmappingrN   rD   funccommands           r   generalizeCommandsr   d  s   F/G " "D6666677 	 #        MM2t*---MM2t*---- .- wD))<MM2t*%%%
	4:: ' 'g&&&&' 	 	 	  r4j)))rB4j)))) *)	 Ms!   9=A98A9(#C=DDc                 R    t          t          t          | |          fi |          S r   )rO   r   r@   r   r1   kwargss      r   generalizeProgramr     2    ,WmDDOOOO  r   c                     | d         s | d         sd| dd         fS d| dd         fS | d         sd| dd         fS d| fS )a  
    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))
    r   r   0Nvhrr   )r   s    r   _categorizeVectorr     sg     Q4 	t 	"1":!"":t 	"1":6Mr   c                 6    | dk    r|S |dk    r| S | |k    r| S d S )Nr   r   r   r   s     r   _mergeCategoriesr     s1    CxxCxxAvv4r   c                 2    | dk    rdS | dk    rdS | dv sJ | S )Nr   r   0rr   )r   s    r   _negateCategoryr     s0    CxxsCxxs9999Hr   c                 ,   t          |           }d}g }d}||k     rw| |         }|dz  }t          |t                    s|                    |           |dz  }n2|}t          |          dz
  }|g}|d|z   z  }||k     r}t          | |         t                    rb||z   t          k     rT|                    | |                    |dz  }||z  }||k     r)t          | |         t                    r||z   t          k     Tt          |          }	g }
|D ]}|
                    |d                    |D ]-}|d         dk    sJ |
                    |dd                    .|
                    |	           |                    |
           ||	z   }||k     w|S )Nr   r   r   )r-   r   rB   r   r   rC   )rD   num_args	stack_usenew_argsrU   rF   prev_stack_usenum_sources	blendlist
num_blendsr   s              r   _convertToBlendCmdsr     s    4yyHIH	A
h,,1g	Q#t$$ +	4OOC   NII&N
 c((Q,KI[(I XtAw-- +m;;  a)))Q[(	 XtAw-- +m;; YJJ  * *!!#a&))))  - -2w!||||!!#ad),,,,j)))OOJ'''&3I] h,,` Or   c                    t          |t                    rt          | t                    rtt          |           t          |          k    s| d         |d         k    rt                      d t	          | d d         |d d                   D             | d         gz   S || }} t          | t                    r0| d         dk    sJ t          | d         |          g| dd          z   S | |z   S )Nr   c                 4    g | ]\  }}t          ||          S r   )_addArgs)r   vavbs      r   r   z_addArgs.<locals>.<listcomp>   s&    GGGRHR$$GGGr   r   r   )r   rB   r-   r
   r   r   r   s     r   r   r     s    !T a 	1vvQ1R5AbE>> ll"GG3q"vq"v3F3FGGG1R5'QQaqA!T +uzzzz1q!!"QqrrU**q5Lr   c                     d}d}| D ]I}t          |          t          u r,t          ||t          |          z             }||d         z  }D|dz  }Jt          ||          S )Nr   r   r   )r.   rB   max_argsStackUse)rD   stackLenmaxLenrF   s       r   r   r   	  ss    HF  99M#,>,>!>??FBHHMHHx   r   T0   c                    |rt          | |          } nt          |           } t          t          |           dz
  dd          D ]}d| |         d         cxk    r| |dz
           d         k    ren -| |dz
           d         | |         d         }}dt	          |d         |d                   t	          |d         |d                   gf| |dz
  <   | |= t          t          |                     D ]}| |         \  }}	|dv r%t          |	          \  }
}	|
|dd          z   |	f| |<   6|dk    rPt          |	d d                   \  }}t          |	d	d                    \  }}||z   d
z   ||	dd         z   |z   f| |<   |st          t          |           dz
  dd          D ]}| |         \  }}	|dk    r;t          |	          dk    sJ t          |	dd                   \  }
}	|
dz   }||	f| |<   |dk    r| |= X|r|dv r|| |dz
           d         k    rs| |dz
           \  }}t          |	          dk    rt          |          dk    sJ 	 t	          |	d         |d                   g}n# t          $ r Y w xY w||f| |dz
  <   | |= t          dt          |           dz
            D ]3}| |         \  }}	| |dz
           d         | |dz            d         }}|dv rM||cxk    rdk    r@n n=t          |	          dk    sJ |d         dk    r
d|	d         gn	|	d         dg}	d|	f| |<   |dd          d
k    rt          |	          dk    r||cxk    rdk    rn |d         dk    |d         dk    z  sJ |d         dk    rd}n |d         dk    rd}n|d         dk    rd}nd}|	d |          t          |	          d          z   |	|d          z   }	d|	f| |<   35| rt          | d         d                   nd}t          t          |           dz
  dd          D ]}| |dz
           \  }}| |         \  }}d }||hddhk    r1||k    r|}nt          |          }|dk    r	|dk    rd}n|dk    rd}n||fdv r|}n||hddhk    r|}nd
|dd          cxk    r|dd          k    rn n|d d         \  }}|d d         \  }}|dk    s|dk    s||cxk    rdk    rn nt          ||          }||dk    rt          ||          }|d|z   d
z   }nL|dk    r*t          |t          |                    }|"|dz   d
z   }nt          ||          }|?||z   d
z   }t          |          }t          |t          |          |z             } |r| |k     r|||z   f| |dz
  <   | |= | }|}t          t          |                     D ]'}| |         \  }}	|dv rd|dd          z   |	f| |<   %|dd          d
k    r|d d         dvrt          |	          }|d d         \  }!}|!dk    |dk    z  r|dz  dk    sJ |!d k    rd}!|d k    rd}|!dk    r|}!|dk    rt          |!          }|!|hddhk    sJ |!|f            |dz  r]|!|k    r1|!dk    |d!z  dk    z  r |	d d	         |	dd          z   |	d	d         z   }	n&|!dk    r |	dd         |	d d         z   |	dd          z   }	|!|z   d
z   |	f| |<   ')t          t          |                     D ]:}| |         \  }}	t          d" |	D                       r|t          |	          f| |<   ;| S )#N)r   r   r   r   r%   >   r`   r%   rm   r*   r   curvetorp   	00curvetorq   lineto0lineto>   rg   rj   >   r   rg   rj   r`   r   rr   r   )r   rl   r   r   >   r`   r   rm   r   rj   rg   >   r   0movetor   >   hhhvrrvhvvr   rz   c              3   @   K   | ]}t          |t                    V  d S r   rJ   rK   s     r   r   z%specializeCommands.<locals>.<genexpr>>  rL   r   )r   rB   rQ   r-   r   r   r
   r.   r   r   r   r   rM   r   )"r6   r   generalizeFirstpreserveTopologymaxstackrU   v1v2rN   rD   cc1args1c2args2_
other_argsr   prvnxtposstackUseop1op2new_oprT   d0d1d2d3dargs1StackUsecombinedStackUseop0s"                                     r   specializeCommandsr     s	   P  "%h\JJJ>> 3x==1$a,,  A<<<<(1q5/!*<<<<<<a!e_Q'!QB"Q%A''"Q%A)?)?@HQUO ` 3x==!!  A;D''''--GAtbf*d*HQK)$rr(33IB)$rss)44IBr'I-utAaCy/@5/HHHQK	 6  s8}}q("b11 	 	A{HB [  4yyA~~~~+D1I664\ $h YQK  	R111rXa!e_Q=O7O7O (Q:4yyA~~#j//Q*>*>*>*> (a*Q- @ @AHH!   H#%x.QQK 1c(mma'((  A;DAE?1%xAq'9S222sc7N7N7N7NY7N7N7N7N7Nt99>>>>#%a5C<<AtAw<<d1gq\D$d+HQKabb6Y3t99>>cS6O6O6O6OK6O6O6O6O6OqESLRUc\2222!u||A#A#:
T

4 0 004:=D&-HQK 2:@}Xb\!_---qH3x==1$a,, 9% 9%a!e_
Ua[
U :)[111czzJJ+%%!q&&)FF!VV)F3ZSSSFF3ZIy111FF#abb',,,,SW,,,,,!WFB!WFBSyyB#IIrS R((AySyy$Q++9q9,s%b/!*<*<==:cI-%b"--:a)+ &e,,}c%jj8.CDD 	%&11%uu}5HQUO'HH$HH 3x==!! " "A;D'''122,,HQKabb6Y2bqb61O#O#OD		A"1"vHCs
scz* "1uzzzzczzczzczzczz%c**:#s+++c3Z+++1u ?#::s
q1uz2 C#CRCy494tBrE{Bczz#AaCy483d122h>)i/5HQK 3x==!! 8 8A;D5555555 	81$777HQKOs   I**
I76I7c                 R    t          t          t          | |          fi |          S r   )rO   r   r@   r   s      r   specializeProgramr   D  r   r   __main__r   zfonttools cffLib.specializerz&CFF CharString generalizer/specializer)descriptionr   r   *z	Commands.)metavarnargshelpz--num-regions
NumRegionsz5Number of variable-font regions for blend opertaions.)r  r  defaultr  z--fontFONTFILEzCFF2 font to specialize.)r  r  r  z-oz--output-filezOutput font file name.)r.   r  c                 H    t          t          j        | dn|                    S )Nr   )r	   optionsnum_regions)r3   s    r   <lambda>r
  s  s#    #AAgF" " r   zProgram:z	Commands:zProgram from commands:zGeneralized program:zSpecialized program:)TTFontCFF2)r   )makeOutputFileNamez.specialized)	overWritesuffixSavingr   )F)FTFr   )=__doc__fontTools.cffLibr   r   r   r@   rG   rO   rV   objectrX   r   r   r   r   r   r   r   r   r   r   r   r   sysr-   argvdoctestexittestmodfailedargparseArgumentParserparseradd_argumentr   
parse_argsr  r   r	  r1   printr6   program2fontfontTools.ttLibr  cfftopDictIndexcff2CharStringscharstringskeys	glyphName
charstring	decompileprivateoutput_filefontTools.misc.cliToolsr  outfilesaver   r   r   <module>r1     se    + * * * * *   - - -Y Y Y Yx  
 
 
  S' S' S' S' S' S' S' S'l' ' 'T& & & &R     6    7 7 7t  
! 
! 
! k k k k\	    zJJJ
s38}}"")***OOO$X$&<  F 	9CkRRR
D     '	     %	     --G J "* D  	 "/'/22joog&&'''$$Wm<<kh$$X..&'''ooh''((((""""$%%%oo//GGHHIII$%%%oo//GGHHIII| ******vgl##F|,Q/&$))++ 	 	I$Y/J  """&.<M!2!2"MM" " "J &BBBBBB((^  GG )G 	E(G$$$IIgk z ,	 	r   