
    ]Mh0                    ^   d Z ddlmZ ddlmZmZmZmZ ddlZddl	m
Z
 ddlmZ ddlZddlZ ej        e          Zg dZg dZd	 Z ej        d
          Zd Z ee          \  ZZ ee          \  ZZ G d de          ZdZdZdZ dede dedZ! ej        e!          Z" ej        d          Z# ej        d          Z$ ej        d          Z% ej        d          Z&d Z' G d de(          Z)d Z*edk    r,ddl+Z+ddl,Z, e+j-         e,j.                    j/                   dS dS )zSttLib.tables.ttProgram.py -- Assembler/disassembler for TrueType bytecode programs.    )annotations)
num2binary
binary2numreadHexstrjoinN)StringIO)List))@   NPUSHBr   
PushNBytesr   )A   NPUSHWr   
PushNWordsr   r   )   PUSHB   	PushBytesr   r   )   PUSHWr   	PushWordsr   r   )w)   AAr   AdjustAngle   r   )d   ABSr   Absoluter   r   )`   ADDr   Add   r   )'   ALIGNPTSr   AlignPtsr"   r   )<   ALIGNRPr   AlignRelativePtr   r   )Z   ANDr   
LogicalAndr"   r   )+   CALLr   CallFunctionr   r   )g   CEILINGr   Ceilingr   r   )%   CINDEXr   CopyXToTopStackr   r   )"   CLEARr   
ClearStackr   r   )O   DEBUGr   	DebugCallr   r   )s   DELTAC1r   DeltaExceptionC1r   r   )t   DELTAC2r   DeltaExceptionC2r   r   )u   DELTAC3r   DeltaExceptionC3r   r   )]   DELTAP1r   DeltaExceptionP1r   r   )q   DELTAP2r   DeltaExceptionP2r   r   )r   DELTAP3r   DeltaExceptionP3r   r   )$   DEPTHr   GetDepthStackr   r   )b   DIVr   Divider"   r   )    DUPr   DuplicateTopStackr   r"   )Y   EIFr   EndIfr   r   )   ELSEr   Elser   r   )-   ENDFr   EndFunctionDefinitionr   r   )T   EQr   Equalr"   r   )W   EVENr   Evenr   r   ),   FDEFr   FunctionDefinitionr   r   )N   FLIPOFFr   SetAutoFlipOffr   r   )M   FLIPONr   SetAutoFlipOnr   r   )   FLIPPTr   	FlipPointr   r   )   	FLIPRGOFFr   FlipRangeOffr"   r   )   FLIPRGONr   FlipRangeOnr"   r   )f   FLOORr   Floorr   r   )F   GCr   GetCoordOnPVectorr   r   )   GETINFOr   GetInfor   r   )   GETVARIATIONr   GetVariationr   r   )   GFVr   
GetFVectorr   r"   )   GPVr   
GetPVectorr   r"   )R   GTr   GreaterThanr"   r   )S   GTEQr   GreaterThanOrEqualr"   r   )   IDEFr   InstructionDefinitionr   r   )X   IFr   Ifr   r   )   INSTCTRLr   SetInstrExecControlr"   r   )9   IPr   InterpolatePtsr   r   )   ISECTr   MovePtToIntersect   r   )0   IUPr   InterpolateUntPtsr   r   )   JMPRr   Jumpr   r   )y   JROFr   JumpRelativeOnFalser"   r   )x   JROTr   JumpRelativeOnTruer"   r   )*   LOOPCALLr   LoopAndCallFunctionr"   r   )P   LTr   LessThanr"   r   )Q   LTEQr   LessThenOrEqualr"   r   )   MAXr   Maximumr"   r   )I   MDr   MeasureDistancer"   r   ).   MDAPr   MoveDirectAbsPtr   r   )   MDRPr   MoveDirectRelPtr   r   )>   MIAPr   MoveIndirectAbsPtr"   r   )   MINr   Minimumr"   r   )&   MINDEXr   MoveXToTopStackr   r   )   MIRPr   MoveIndirectRelPtr"   r   )K   MPPEMr   MeasurePixelPerEmr   r   )L   MPSr   MeasurePointSizer   r   ):   MSIRPr   MoveStackIndirRelPtr"   r   )c   MULr   Multiplyr"   r   )e   NEGr   Negater   r   )U   NEQr   NotEqualr"   r   )\   NOTr   
LogicalNotr   r   )l   NROUNDr"   NoRoundr   r   )V   ODDr   Oddr   r   )[   ORr   	LogicalOrr"   r   )!   POPr   PopTopStackr   r   )E   RCVTr   ReadCVTr   r   )}   RDTGr   RoundDownToGridr   r   )z   ROFFr   RoundOffr   r   )   ROLLr   RollTopThreeStackr   r   )h   ROUNDr"   Roundr   r   )C   RSr   	ReadStorer   r   )=   RTDGr   RoundToDoubleGridr   r   )   RTGr   RoundToGridr   r   )   RTHGr   RoundToHalfGridr   r   )|   RUTGr   RoundUpToGridr   r   )w   S45ROUNDr   SuperRound45Degreesr   r   )~   SANGWr   SetAngleWeightr   r   )   SCANCTRLr   ScanConversionControlr   r   )   SCANTYPEr   ScanTyper   r   )H   SCFSr   SetCoordFromStackFPr"   r   )   SCVTCIr   SetCVTCutInr   r   )^   SDBr   SetDeltaBaseInGStater   r   )   SDPVTLr   SetDualPVectorToLiner"   r   )_   SDSr   SetDeltaShiftInGStater   r   )   SFVFSr   SetFVectorFromStackr"   r   )   SFVTCAr   SetFVectorToAxisr   r   )   SFVTLr   SetFVectorToLiner"   r   )   SFVTPVr   SetFVectorToPVectorr   r   )4   SHCr   ShiftContourByLastPtr   r   )2   SHPr   ShiftPointByLastPointr   r   )8   SHPIXr   ShiftZoneByPixelr   r   )6   SHZr   ShiftZoneByLastPointr   r   )   SLOOPr   SetLoopVariabler   r   )   SMDr   SetMinimumDistancer   r   )
   SPVFSr   SetPVectorFromStackr"   r   )r"   SPVTCAr   SetPVectorToAxisr   r   )   SPVTLr   SetPVectorToLiner"   r   )v   SROUNDr   
SuperRoundr   r   )   SRP0r   SetRefPoint0r   r   )   SRP1r   SetRefPoint1r   r   )   SRP2r   SetRefPoint2r   r   )   SSWr   SetSingleWidthr   r   )   SSWCIr   SetSingleWidthCutInr   r   )a   SUBr   Subtractr"   r   )r   SVTCAr   SetFPVectorToAxisr   r   )#   SWAPr   SwapTopStackr"   r"   )   SZP0r   SetZonePointer0r   r   )   SZP1r   SetZonePointer1r   r   )   SZP2r   SetZonePointer2r   r   )   SZPSr   SetZonePointerSr   r   ))   UTPr   	UnTouchPtr   r   )p   WCVTFr   WriteCVTInFUnitsr"   r   )D   WCVTPr   WriteCVTInPixelsr"   r   )B   WSr   
WriteStorer"   r   c                T    d}t          |          D ]}d| dz           |z   }| dz	  } |S )N 01r   )range)valuebitssis       `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/ttProgram.pybitReprr     s?    
A4[[  !
H    z[A-Z][A-Z0-9]*$c                    i }i }| D ]\\  }}}}}}t                               |          sJ |||f||<   |r$|}	t          d|z            D ]}
|||	|f|||
z   <   S|dd|f||<   ]||fS )Nr   r   )_mnemonicPatmatchr  )instructionList
opcodeDictmnemonicDictopmnemonicargBitsnamepopspushes	argoffsetr  s              r  	_makeDictr     s    JL5D 2 21HgtT6!!(+++++!#Wd!2X 	2I1<(( H H%-w	4%G
26""H &q!T1JrNN|##r  c                      e Zd Zd Zd ZdS )tt_instructions_errorc                    || _         d S N)error)selfr  s     r  __init__ztt_instructions_error.__init__   s    


r  c                0    dt          | j                  z  S )NzTT instructions error: %s)reprr  r  s    r  __str__ztt_instructions_error.__str__   s    *T$*-=-===r  N)__name__
__module____qualname__r  r   r  r  r  r     s2          > > > > >r  r  z	/\*.*?\*/z([A-Z][A-Z0-9]*)\s*\[(.*?)\]z-?[0-9]+(z)|()z\s*z-[A-Z][A-Z0-9]*\s*\[.*?\]\s*/\* ([0-9]+).*?\*/z^FDEF|IF|ELSE\[ \]\t.+z^ELSE|ENDF|EIF\[ \]\t.+c                r    t                               | |          }|j        d         d         }||k    sJ |S )Nr   r   )_whiteREr  regs)dataposmnewPoss       r  
_skipWhiter     s6    tS!!AVAYq\FS====Mr  c                  v    e Zd ZddZddZdd	Zdd
ZdddZddZddZ	ddZ
dddZddZeZddZddZdS ) ProgramreturnNonec                    d S r  r  r  s    r  r  zProgram.__init__   s    r  bytecodebytesc                b    t          j         d|          | _        t          | d          r| `d S d S )NBassembly)arrayr  hasattrr  )r  r  s     r  fromBytecodezProgram.fromBytecode   s:    C224$$ 		 	r  r  List[str] | strc                   t          |t                    r|| _        nSt          |t                    r|                                | _        n$t          dt          |          j                   t          | d          r| `	d S d S )Nzexpected str or List[str], got r  )

isinstancelistr  str
splitlines	TypeErrortyper  r  r  )r  r  s     r  fromAssemblyzProgram.fromAssembly   s    h%% 	Y$DMM#&& 	Y$//11DMMWd8nn>UWWXXX4$$ 		 	r  c                |    t          | d          s|                                  | j                                        S )Nr  )r  	_assembler  tobytesr  s    r  getBytecodezProgram.getBytecode   s8    tZ(( 	NN}$$&&&r  T	List[str]c                \    t          | d          s|                     |           | j        S )Nr  preserve)r  _disassembler  )r  r  s     r  getAssemblyzProgram.getAssembly   s3    tZ(( 	1x000}r  c                   t          |d          r|j        rl	 |                                 }|sd S |                    d           |                                 d}d}t          |          }||k     r||         }t                              |          r|dz  }|                    |j	        |z             |                    |           |                                 t                              |          }|dz   }|rt          |                    d                    }	g }
d}t          |	          D ]}|r`|dz  s[|                    |j	        |z             |                    d                    |
                     |                                 g }
|
                    |||z                       |                    |j	        |z             |                    d                    |
                     |                                 ||z   dz   }t                               |          r|dz  }||k     |                    d           |                                 d S #  dd l}t'                      }|                    |           d}||                                z  }t,                              |           |                    d	           |                                 |                    |                                           |                                 |                    |                                            |                    d	           |                                 Y d S xY w|                                 }|sd S |                    d	           |                                 |                    |           |                    d	           |                                 d S )
NdisassembleInstructionsr  r   r   r   )filezBAn exception occurred during the decompilation of glyph program:

r  )r  r  r  begintagnewlinelen_unindentREr  writeindentwhite_pushCountPatintgroupr  joinappend	_indentREendtag	tracebackr   	print_excgetvaluelogr  commentstripdumphexr  )r  writerttFontr  r  indentnInstrinstrr  nValueslinejr  tmpmsgr  s                   r  toXMLzProgram.toXML   s    9::A	-A	4!++--"   F
+++   X&jj$QKE"((// $!LL!3f!<===LL'''NN$$$%++E22AAA &"%aggajj//*,!&w 9 9A  *!b& * &V-?&-H I I I &SXXd^^ < < < & 0 0 0') KKQ8888V%7&%@AAASXXd^^444(((EAI u-- $!3 &jj4 j)))     e!    jj###---\s||~~%		#
+++   syy{{+++   t//11222j)))      L ''))H OOJ'''NNNN8$$$MM*%%%NNs   I. .DNc                    |dk    r:|                      t          |                     |                                  | `d S |dk    sJ |                     t          |                     d S )Nr  r  )r  r   r  r  r  r   )r  r  attrscontentr  s        r  fromXMLzProgram.fromXML<  su    :gg..///NN:%%%%gg../////r  c                
   d                     t          | dg                     }g }|j        }t          |          }t	          |d          }||k     rt
                              ||          }| t          d||dz
  |dz            z            |                                \  }}}	}
}|j	        d         d         }|rt	          ||          }|	
                                }	|                    d          r$t          |dd                    } ||           n|d	vrht          |         \  }}}t          |	          |k    rt          d
|d|	d          |	rt          |	          }	 |||	z              n ||           ng }t	          ||          }||k     rt
                              ||          }|t          d|||dz            z            |                                \  }}}	}
}|
|nN|j	        d         d         }t	          ||          }||                    t          |
                     ||k     t          |          }|dk    rd}|r||k     rB|dk     r<d||         cxk    rdk    s)n |dz  }||k     r|dk     rd||         cxk    rdk    $n 'd}||z   |k     rK|dk     rEd|||z            cxk    rdk    r/n n,|dz  }||z   |k     r|dk     rd|||z            cxk    rdk    *n |dk     r||z   dk     r||z   |k    r||z  }|r|dk    r%t          d         \  }}}||z   dz
  } ||           n't          d         \  }}} ||            ||           |d |         D ]=}d|cxk    rdk     sn J d|z               ||dz	  dz              ||dz             >|rn	 |dk    r%t          d         \  }}}||z   dz
  } ||           n't          d         \  }}} ||            ||           ||||z            D ]} ||           ||z   }||d          }||z  }d}|n|d         dk    }t          |         \  }}}|d         dk    r$|dk    s
J |            ||z   dz
  } ||           n|dk     sJ  ||            ||           |rA|D ]=}d|cxk    rdk     sn J d|z               ||dz	  dz              ||dz             >n,|D ])}d|cxk    rdk     sn J d|z               ||           *t	          ||          }||k     |r(t!          |          dk     rt#          |          dk    sJ t%          j        d|          | _        d S )Nr  r  r   zSyntax error in TT program (%s)r   r   r   INSTR)PUSHr   r   r   r   z#Incorrect number of argument bits ([z])r     r"   r,  r   r   i    zPUSH value out of range %dr   r   r   WN   zPUSHW value out of range %dzPUSHB value out of range %dr  )r  getattrr  r  r  _tokenREr  r  groupsr  r  
startswithr  r  r   streamMnemonicDictmaxminr  r  )r  r  r  pushlenAssemblyr  r  dummyr  argnumberr  r  r  r  args	_mnemonicnArgsnWordsnBytesr  nTotalwordss                          r  r  zProgram._assembleE  sb   88GD*b99:: (mm1%%Kx--Ay+5q3QS8AS8TT   56HHJJ1E8S&'&)A,C  3//))++C""7++ v(!""&&R!OOO$0$:!GTs88w&&//HPRURURUV    $S//CDcNNNNDHHHH 3//K'' x55Ay3=sUWx@XX   >?XXZZ:E9c67~'/&)A,C$Xs33C* KKF,,, K'' D		v%%F 9#"UNN &%&$v,%=%=%=%=#%=%=%=%="aKF	 #UNN &%&$v,%=%=%=%=#%=%=%=%=%= "#"VOe33 & !T&6/%: A A A Ac A A A A A"aKF	 #VOe33 & !T&6/%: A A A Ac A A A A #QJJ &# 5 5 &5 8 8 #f,F$ " 3%{{4Fw4O 1GT%'&[1_ $R4Fx4P 1GT $R $V)-gvg 3 3'-'>'>'>'>'>'>'>'>'>$@5$H (?'>'> !%eqjD%8 9 9 9 $UT\ 2 2 2 2 " , %{{4Fw4O 1GT%'&[1_ $R4Fx4P 1GT $R $V)-fv.F)G , , $U!'&#FGG}!"s   9#x %RLC/E(:8(D%B{c))$zzz5zzz%Z!^R$s{{{{RU (%) / /E#)U#:#:#:#:U#:#:#:#:#: = E $;#:#: !D%1*!4555 D..../ &* ( (E#$#3#3#3#3#3#3#3#3#3 = E $4#3#3 !DKKKKXs++CK KN  	>x==3&&3x==A+=+=+=+=C22r  Fc                   g }d}t          | dg           }t          |          }||k     r||         }	 t          |         \  }}}	}
|r1|                    |dt	          ||	z
  |          d|
dz              n|                    |d|
z  z              |dz   }n# t
          $ r |t          v rpg }||         t          v r||         }t          |         \  }}}	}
|d         d	k    }|r	||	z
  dz   }n|dz   }||         }|dz   }|dk    sJ |sBt          |          D ]1}||         }|                    t          |                     |dz   }2n[t          |          D ]K}||         d
z  ||dz            z  }|dk    r|dz
  }|                    t          |                     |dz   }L|rn||         t          v |sd}t          |          }|dk    r|                    d|z             n|                    |d|d           |	                    |           n|                    d|z             |dz   }Y nw xY w||k     || _
        d S )Nr   r  r  z]	/* z */z[ ]	/* %s */r   r   r  r,  r  i   r"   r  z%s[ ]	/* 1 value pushed */z[ ]	/* z values pushed */z
INSTR%d[ ])r   r  r  r  r   KeyErrorstreamOpcodeDictr  r  extendr  )r  r  r  r  r  numBytecoder  r  r  r  r  valuesr  r  r  r  s                   r  r  zProgram._disassemble  s   4R00(mm+oo!B75?^2'9d^  FOO -7Y-P-P-P-PRVRVRVWX   
 OOH~/D$DEEEEk  , , ,)))F #1+)999%a[=Mb=Q:'9d ( 3" 2&(9nq&8GG !AA&.qkGE&{{{{$ *%*7^^ * *(0 &d5kk : : :$%E*
 &+7^^ * *)1!)9Xa!e_(L#(F??,1GOE &d5kk : : :$%E# "!3 #1+)9996 $ *#)!&kkG!|| (Dx(OPPPP >FhhP   OOF++++OOL2$5666AAY,	 +oot !s   B F"I Iboolc                    t          | d          rt          | j                  dk    p't          | d          ot          | j                  dk    S )a  
        >>> p = Program()
        >>> bool(p)
        False
        >>> bc = array.array("B", [0])
        >>> p.fromBytecode(bc)
        >>> bool(p)
        True
        >>> p.bytecode.pop()
        0
        >>> bool(p)
        False

        >>> p = Program()
        >>> asm = ['SVTCA[0]']
        >>> p.fromAssembly(asm)
        >>> bool(p)
        True
        >>> p.assembly.pop()
        'SVTCA[0]'
        >>> bool(p)
        False
        r  r   r  )r  r  r  r  r  s    r  __bool__zProgram.__bool__  sP    0 j))Dc$-.@.@1.D 
D*%%@#dm*<*<q*@	
r  c                p    t          |           t          |          k    rt          S | j        |j        k    S r  )r  NotImplemented__dict__)r  others     r  __eq__zProgram.__eq__5  s.    ::e$$!!}..r  c                H    |                      |          }|t          u r|n| S r  )r   r  )r  r  results      r  __ne__zProgram.__ne__:  s)    U##>11vv6zAr  N)r  r  )r  r  r  r  )r  r  r  r  )r  r  )T)r  r  )F)r  r  )r  r  r  r  r  r  r  r  r  r  r  r  r  __nonzero__r   r#  r  r  r  r  r     s&             
   ' ' ' '
    
B B B BH0 0 0 0O3 O3 O3 O3b?! ?! ?! ?! ?!B
 
 
 
8 K/ / / /
B B B B B Br  r  c                     d} t                      }|                    |            |                    d          }|                    |           t	          | |                                k               dS )z
    >>> _test()
    True
    s  @;:9876543210/.-,+*)('&%$#"! 
	 ,CXEjC`F#D# FNM/ !#3Y-,CX+ KPX @8Y+!#3Y-,CXN%! M E%%#Jad(RX!#%! YY-,CX!!%%I%%Ja dPX!!!%%I PX PX8!8!Y RX8!8!YYYY-,CX+ KPX  8Y+!#3Y-,NFCD  F   8  <(+% <-, /M -,CX+   8+!#3Y-,CXEdj#EdiCd``F#D# F/ !!  RX3!!YY-,
C#Ce
-, 
C#C-, F#pF>F#pFE: -,+%E%Ej@`%#D!!!-,+%E%Ej`%#D!!!-, +!!!-, +!!!-,CCe
-, i@a  , b`+d#da\XaY-, %EhTKPZX%E%E`h %#D%#D% Eh #D%Eh`%#DY-,% Eh #D%Edhe`%`#D-,	CX!CXE+G#DGzEi G#D QX+G#DGz!GzYYY-, E#Eh`D-,EjB-,/-,CX%%Id#Edi@a bj%%aC`F#D!F!!!!!Y-,CX%E%Ed`j%Eja %Ej e%#D%#D!! EjD EjDY-, E UCZXEh#Ei@a bj #a %e%#D%#D!!!!+Y-,Ed#EdadB-,%%+CX%%%+%C@T%C TZX% E@aDY%C T%C@TZX% E@`DYY!!!!-,KRXC%E#aD!!Y-,KRXC%E#`D!!Y-,KRXED!!Y-, %#I@` c  RX#%8#%e8 c8!!!!!Y-,KPXED!!Y-,%#  `#-,%#  a#-,% -,F#F`F# F`ab# #KKpE`  PXaFY`h:-, E%FRX%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-, CC-,-,CX! F RX88YY-,  UX c%Ed%Eda SX@aY%EiSXED!!Y!%E%Ead(QXED!!YY-,!!d#d@ b-,!QXd#d  b @/+Y`-,!QXd#dUb /+Y`-,d#d@ b`#!-,KSX%%Id#Edi@a bj%%aF#D!F!!# 9/Y-,%%IdTX88!!Y-,CXY-,CXY-,
+# <+-,%8(+# #+CX<Y  -,KS#KQZX8!!Y-,%# <-, %I8-,KS#KQZX E`D!!Y-, 9/-Tr  N)r  r  r  r  printr  )bcpasms      r  _testr*  ?  sk     
K>B		ANN2
---
&
&CNN3	"
     r  __main__)0__doc__
__future__r   fontTools.misc.textToolsr   r   r   r   r  ior   typingr	   relogging	getLoggerr  r  streamInstructionsinstructionsr  compiler  r  r  r  r  r  	Exceptionr  _comment_instruction_number_tokenr  r  r  r  r  r  objectr  r*  sysdoctestexittestmodfailedr  r  r  <module>rB     sl   Y Y " " " " " " M M M M M M M M M M M M              				  g!!   { { {@   rz,--$ $ $ (1y1C'D'D $ $$9\22 
L> > > > >I > > > .
)\\777HHH	=2:f2:f
KLLBJ011	bj344  aB aB aB aB aBf aB aB aBH! ! ! zJJJNNNCH_W_%&&&&&	 r  