
    h0                    v   S r SSKJr  SSKJrJrJrJr  SSKrSSK	J
r
  SSKJr  SSKrSSKr\R                  " \5      r/ SQr/ SQrS	 r\R*                  " S
5      rS r\" \5      u  rr\" \5      u  rr " S S\5      rSrSrSr S\< S\ < S\< S3r!\R*                  " \!5      r"\R*                  " S5      r#\R*                  " S5      r$\R*                  " S5      r%\R*                  " S5      r&S r' " S S\(5      r)S r*\S:X  a4  SSK+r+SSK,r,\+RZ                  " \,R\                  " 5       R^                  5        gg)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                N    Sn[        U5       H  nSU S-     U-   nU S-	  n M     U$ )N 01r   )range)valuebitssis       R/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/tables/ttProgram.pybitReprr     s8    
A4[!
  H    z[A-Z][A-Z0-9]*$c                    0 n0 nU  HZ  u  p4pVpx[         R                  U5      (       d   eX5U4X$'   U(       a"  Un	[        SU-  5       H  n
XEX4XU
-   '   M     MR  USSU4X'   M\     X4$ )Nr   r   )_mnemonicPatmatchr  )instructionList
opcodeDictmnemonicDictopmnemonicargBitsnamepopspushes	argoffsetr  s              r  	_makeDictr     s    JL5D1gT!!(++++!#d!2I1<(%-	%G
6" ) &q!T1JN 6E ##r  c                       \ rS rSrS rS rSrg)tt_instructions_error   c                    Xl         g Nerror)selfr  s     r  __init__tt_instructions_error.__init__   s    
r  c                2    S[        U R                  5      -  $ )NzTT instructions error: %s)reprr  r  s    r  __str__tt_instructions_error.__str__   s    *T$**-===r  r  N)__name__
__module____qualname____firstlineno__r  r  __static_attributes__ r  r  r  r     s    >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                b    [         R                  X5      nUR                  S   S   nX1:  d   eU$ )Nr   r   )_whiteREr  regs)dataposmnewPoss       r  
_skipWhiter     s0    t!AVVAYq\F==Mr  c                      \ rS rSrSS jrSS jrSS jrSS jrSSS jjrSS jr	SS jr
SS	 jrSSS
 jjrSS jr\rSS jrSS jrSrg)Program   c                    g r  r  r  s    r  r  Program.__init__   s    r  c                d    [         R                   " SU5      U l        [        U S5      (       a  U ?g g )NBassembly)arraybytecodehasattrr  )r  r  s     r  fromBytecodeProgram.fromBytecode   s+    C24$$ %r  c                    [        U[        5      (       a  Xl        OL[        U[        5      (       a  UR	                  5       U l        O![        S[        U5      R                   35      e[        U S5      (       a  U ?	g g )Nzexpected str or List[str], got r  )

isinstancelistr  str
splitlines	TypeErrortyper  r  r  )r  r  s     r  fromAssemblyProgram.fromAssembly   sf    h%%$M#&&$//1DM=d8n>U>U=VWXX4$$ %r  c                x    [        U S5      (       d  U R                  5         U R                  R                  5       $ )Nr  )r  	_assembler  tobytesr  s    r  getBytecodeProgram.getBytecode   s,    tZ((NN}}$$&&r  c                Z    [        U S5      (       d  U R                  US9  U R                  $ )Nr  preserve)r  _disassembler  )r  r  s     r  getAssemblyProgram.getAssembly   s*    tZ((x0}}r  c                   [        US5      (       a  UR                  (       Ga   U R                  5       nU(       d  g UR                  S5        UR	                  5         SnSn[        U5      nXF:  Ga  X4   n[        R                  U5      (       a  US-  nUR                  UR                  U-  5        UR                  U5        UR	                  5         [        R                  U5      nUS-   nU(       a  [        UR                  S5      5      n	/ n
Sn[        U	5       Hz  nU(       aZ  US-  (       dP  UR                  UR                  U-  5        UR                  SR                  U
5      5        UR	                  5         / n
U
R                  X4U-      5        M|     UR                  UR                  U-  5        UR                  SR                  U
5      5        UR	                  5         XK-   S-   n[         R                  U5      (       a  US-  nXF:  a  GM  UR#                  S5        UR	                  5         g U R7                  5       nU(       d  g UR                  S	5        UR	                  5         UR5                  U5        UR#                  S	5        UR	                  5         g !   SS Kn['        5       nUR)                  US9  SnXR+                  5       -  n[,        R/                  U5        UR                  S	5        UR	                  5         UR1                  UR3                  5       5        UR	                  5         UR5                  U R7                  5       5        UR#                  S	5        UR	                  5          g = f)
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  toXMLProgram.toXML   s    9::---4!++-"  
+ Xj$KE"((//!LL!3!3f!<=LL'NN$%++E2AAA"%aggaj/*,!&wA !b& &V-?-?&-H I &SXXd^ < & 0') KKQ8 "0 V%7%7&%@ASXXd^4(EAI u--!3 j4 j) '')HOOJ'NNNN8$MM*%NNw! j###-\||~%		#
+ syy{+ t//12j) s   J' 'CNc                    US:X  a-  U R                  [        U5      5        U R                  5         U ?g US:X  d   eU R	                  [        U5      5        g )Nr  r  )r  r   r  r  r  r   )r  r  attrscontentr  s        r  fromXMLProgram.fromXML<  sM    :gg./NN:%%%gg./r  c                	   SR                  [        U S/ 5      5      n/ nUR                  n[        U5      n[	        US5      nXT:  GaA  [
        R                  X5      nUc  [        SXS-
  US-    -  5      eUR                  5       u  pxpnUR                  S   S   nU(       a  [	        X5      nMn  U	R                  5       n	UR                  S5      (       a  [        USS  5      nU" U5        GOUS	;  aW  [        U   u  pn[        U	5      U:w  a  [        S
U< SU	< S35      eU	(       a  [        U	5      n	U" X-   5        GO5U" U5        GO+/ n[	        X5      nXT:  a  [
        R                  X5      nUc  [        SXUS-    -  5      eUR                  5       u  nnpnU
c  Uc  OCUR                  S   S   n[	        X5      nUb  Mn  UR                  [        U
5      5        XT:  a  M  [        U5      nUS:X  Ga  SnU(       Ga  UU:  a>  US:  a8  SUU   s=::  a  S::  d(  O  US-  nUU:  a  US:  a  SUU   s=::  a  S::  d  M#  O  N&SnUU-   U:  aG  US:  aA  SUUU-      s=::  a  S::  a.  O  O+US-  nUU-   U:  a  US:  a  SUUU-      s=::  a  S::  a  M)  O  US:  a  UU-   S:  a  UU-   U:w  a  UU-  nM  U(       a}  US::  a  [        S   u  pnUU-   S-
  nU" U5        O[        S   u  pnU" U5        U" U5        US U  H5  nSUs=::  a  S:  d  O   SU-  5       eU" US-	  S-  5        U" US-  5        M7     U(       aW   US::  a  [        S   u  pnUU-   S-
  nU" U5        O[        S   u  pnU" U5        U" U5        UUUU-     H  nU" U5        M     UU-   nUUS  nUU-  nSnU(       a  GM  OUS   S:H  n[        U   u  pnUS   S:w  a  US::  d   U5       eUU-   S-
  nU" U5        OUS:  d   eU" U5        U" U5        U(       a<  U H5  nSUs=::  a  S:  d  O   SU-  5       eU" US-	  S-  5        U" US-  5        M7     O*U H$  nSUs=::  a  S:  d  O   SU-  5       eU" U5        M&     [	        X5      nXT:  a  GMA  U(       a   [!        U5      S:  a  [#        U5      S:  d   e[$        R$                  " SU5      U l        g )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  Program._assembleE  sH   88GD*b9: (m1%x-Ay+5q3QS88TT  56HHJ1ES'&&)A,C /))+C""7++!"&R!OO$0$:!Ts8w&/HPRUV  $S/CNH /' x5Ay3=sUWx@XX  >?XXZ:E9c7~'/&&)A,C$X3C* KKF, ' D	v%F"UN &%&$v,%=#%="aKF	 #UN &%&$v,%=#%=%= "#"VOe3 & !T&6/%: Ac A"aKF	 #VOe3 & !T&6/%: Ac A #QJ &# 5 &5 8 #f,F$ "%{4Fw4O 1T%'&[1_ $R4Fx4P 1T $R $V)-gv'-'>'> !"$@5$H!"'> !%eqjD%8 9 $UT\ 2 *7 " %{4Fw4O 1T%'&[1_ $R4Fx4P 1T $R $V)-fv)G $U *H "(&#FG}!"s  %x %RLC/E(:8(D%B{c)$z050z%Z!^R$s{*{RU%)E#)U#:U#:  = E#: !%1*!45 . &* &*E#$#3#3  = E#3 !K	 &* X+CK N x=3&3x=A+===C2r  c                   / nSn[        U S/ 5      n[        U5      nX5:  ae  XC   n [        U   u  pxpU(       a*  UR                  US[	        Xi-
  U5      < SU
< S3-   5        OUR                  USU
-  -   5        US-   nX5:  a  Me  X l
        g ! [
         Gam    U[        ;   GaE  / nXC   [        ;   a  XC   n[        U   u  pxpUS   S	:H  nU(       a  Xi-
  S-   nO	US-   nXC   nUS-   nUS:  d   eU(       d6  [        U5       H&  nXC   nUR                  [        U5      5        US-   nM(     OK[        U5       H<  nXC   S
-  XCS-      -  nUS:  a  US-
  nUR                  [        U5      5        US-   nM>     U(       a  OXC   [        ;   a  M  U(       d  Sn[        U5      nUS:X  a  UR                  SW-  5        OUR                  W< SU< S35        UR                  U5         GNiUR                  SU-  5        US-   n GNf = f)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  Program._disassemble  s$   4R0(moB75?^29^ OO -7-PRVWX
 OOH~/D$DEEs ot !m  ,))F #+)99%[=Mb=Q:9 ( 3"&(nq&8G !AA&.kGE&{*{$%*7^(0 &d5k :$%E &4
 &+7^)1)9X!e_(L#(F?,1GOE &d5k :$%E &4 $!3 #+)996 $#)!&kG!| (Dx(OP >FP OOF+OOL2$56AAY,s   B C=HAH)HHc                    [        U S5      =(       a    [        U R                  5      S:  =(       d+    [        U S5      =(       a    [        U R                  5      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__Program.__bool__  sH    0 j)Dc$--.@1.D 
D*%@#dmm*<q*@	
r  c                p    [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  $ r  )r  NotImplemented__dict__)r  others     r  __eq__Program.__eq__5  s+    :e$!!}}..r  c                H    U R                  U5      nU[        L a  U$ U(       + $ r  )r+  r(  )r  r*  results      r  __ne__Program.__ne__:  s$    U#>1vA6zAr  )r  r  N)returnNone)r  bytesr1  r2  )r  zList[str] | strr1  r2  )r1  r3  )T)r1  z	List[str])F)r1  bool)r  r  r  r  r  r  r  r  r  r  r  r  r  r%  __nonzero__r+  r/  r  r  r  r  r  r     sK    
'

BH0O3b?!B
8 K/
Br  r  c                     Sn [        5       nUR                  U 5        UR                  SS9nUR                  U5        [	        XR                  5       :H  5        g)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;  ?  sJ     
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>rS     s<   Y " M M    	  ! {@ zz,-$ (11C'D $ $$\2 
L>I > .
)7H	=::f::f

KLJJ01	jj34aBf aBH! zHHW__%%&	 r  