
    Zi^                     x   S r SSKr " S S\5      r " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r	 " S S\5      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS rS rS rS rS rS  rS! rS" rS# rS$ rS% rS& rS' rS( rS) rS* rg)+a6  
oleform.py

oleform is a python module to parse VBA forms in Microsoft Office files.

Authors: see https://github.com/decalage2/oletools/commits/master/oletools/oleform.py
License: BSD, see source code or documentation

oleform is part of the python-oletools package:
http://www.decalage.info/python/oletools
    Nc                       \ rS rSrSrg)OleFormParsingError0    N)__name__
__module____qualname____firstlineno____static_attributes__r       j/var/www/eduai.edurigo.com/question_generate/ques_gen_env/lib/python3.13/site-packages/oletools/oleform.pyr   r   0   s    r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
Mask3   c                 t    [        U R                  5       Vs/ s H  o!SU-  -  U-	  PM     snU l        g s  snf )N   )range_size_val)selfvalis      r   __init__Mask.__init__4   s1    05djj0AB0A1QTlQ&0AB	Bs   5c                 `   ^  SR                  U 4S j[        T R                  5       5       5      $ )Nz, c              3   n   >#    U  H*  nTR                   U   (       d  M  TR                  U   v   M,     g 7fN)r   _names).0r   r   s     r   	<genexpr>Mask.__str__.<locals>.<genexpr>8   s(     S1BAdiiPQlQ1Bs   55)joinr   r   r   s   `r   __str__Mask.__str__7   s!    yyStzz1BSSSr   c                 R    U R                   U R                  R                  U5         $ r   r   r   index)r   names     r   __getattr__Mask.__getattr__:   s     yy**4011r   c                     U R                   $ r   )sizer#   s    r   __len__Mask.__len__=   s    yyr   c                 R    U R                   U R                  R                  U5         $ r   r'   )r   keys     r   __getitem__Mask.__getitem__@   s     yy**3/00r   c                 R    U H!  u  p4X   (       d  M  UR                  U5        M#     g r   )read)r   streampropsr)   r-   s        r   consumeMask.consumeC   s!    !LTzzD! "r   )r   N)r   r   r	   r
   r   r$   r*   r.   r2   r8   r   r   r   r   r   r   3   s"    CT21"r   r   c                   $    \ rS rSrSrSr/ SQrSrg)FormPropMaskH   z"FormPropMask: [MS-OFORMS] 2.2.10.2   )Unused1
fBackColor
fForeColorfNextAvailableID	Unused2_0	Unused2_1fBooleanPropertiesrD   fMousePointerfScrollBarsfDisplayedSizefLogicalSizefScrollPosition	fGroupCntReserved
fMouseIconfCyclefSpecialEffectfBorderColorfCaptionfFontfPicturefZoomfPictureAlignmentfPictureTilingfPictureSizeModefShapeCookiefDrawBufferr   Nr   r   r	   r
   __doc__r   r   r   r   r   r   r;   r;   H   s    ,E-Fr   r;   c                   $    \ rS rSrSrSr/ SQrSrg)SitePropMaskR   z%SitePropMask: [MS-OFORMS] 2.2.10.12.2   )fNamefTagfIDfHelpContextID	fBitFlagsfObjectStreamSize	fTabIndexfClsidCacheIndex	fPositionfGroupIDr>   fControlTipTextfRuntimeLicKeyfControlSource
fRowSourcer   NrY   r   r   r   r\   r\   R   s    /ESFr   r\   c                   $    \ rS rSrSrSr/ SQrSrg)MorphDataPropMaskY   z&MorphDataPropMask: [MS-OFORMS] 2.2.5.2!   )!fVariousPropertyBitsr?   r@   
fMaxLengthfBorderStylerF   fDisplayStylerE   fSizefPasswordChar
fListWidthfBoundColumnfTextColumnfColumnCount	fListRowsfcColumnInfofMatchEntry
fListStylefShowDropButtonWhenUnusedBits1fDropButtonStylefMultiSelectfValuerP   fPicturePositionrO   rN   rL   rR   fAcceleratorUnusedBits2rK   
fGroupNamer   NrY   r   r   r   rn   rn   Y   s    0E7Fr   rn   c                   $    \ rS rSrSrSr/ SQrSrg)ImagePropMaskd   z"ImagePropMask: [MS-OFORMS] 2.2.3.2r^   )UnusedBits1_1UnusedBits1_2	fAutoSizerO   r?   rs   rE   rV   rN   ru   rR   rT   rU   rq   rL   r   NrY   r   r   r   r   r   d   s    ,EFr   r   c                   $    \ rS rSrSrSr/ SQrSrg)CommandButtonPropMaskl   z*CommandButtonPropMask: [MS-OFORMS] 2.2.1.2   )r@   r?   rq   rP   r   ru   rE   rR   r   fTakeFocusOnClickrL   r   NrY   r   r   r   r   r   l   s    4EFr   r   c                   $    \ rS rSrSrSr/ SQrSrg)SpinButtonPropMasks   z'SpinButtonPropMask: [MS-OFORMS] 2.2.8.2r^   )r@   r?   rq   ru   r   fMinfMaxrg   fPrevEnabledfNextEnabledfSmallChangefOrientationfDelayrL   rE   r   NrY   r   r   r   r   r   s   s    1EGFr   r   c                   $    \ rS rSrSrSr/ SQrSrg)TabStripPropMaskz   z%TabStripPropMask: [MS-OFORMS] 2.2.9.2   )
fListIndexr?   r@   r>   ru   fItemsrE   Unused2fTabOrientation	fTabStyle	fMultiRowfTabFixedWidthfTabFixedHeight	fTooltipsUnused3fTipStringsUnused4fNamesrq   fNewVersionfTabsAllocatedfTagsfTabDatar   rL   r   NrY   r   r   r   r   r   z   s    /EAFr   r   c                   $    \ rS rSrSrSr/ SQrSrg)LabelPropMask   z"LabelPropMask: [MS-OFORMS] 2.2.4.2   )r@   r?   rq   rP   r   ru   rE   rO   rs   rN   rR   r   rL   r   NrY   r   r   r   r   r      s    ,EJFr   r   c                   $    \ rS rSrSrSr/ SQrSrg)ScrollBarPropMask   z&ScrollBarPropMask: [MS-OFORMS] 2.2.7.2   )r@   r?   rq   ru   rE   r   r   rg   r   r   r   r   fLargeChanger   fProportionalThumbr   rL   r   NrY   r   r   r   r   r      s    0E&Fr   r   c                       \ rS rSrS r\S 5       rS rSS jrS r	S r
S rS	 rS
 rS rS rS rSS jrS rS rSrg)ExtendedStream   c                 T    SU l         / U l        Xl        X l        SU l        SU l        g )Nr   F)_pos_jumps_stream_path_padding
_pad_start)r   r6   paths      r   r   ExtendedStream.__init__   s(    	
r   c                 4    UR                  U5      nU " X25      $ r   )
openstream)clsole_filer   r6   s       r   openExtendedStream.open   s    $$T*6  r   c                 b    U =R                   U-  sl         U R                  R                  U5      $ r   )r   r   r5   r   r-   s     r   _readExtendedStream._read   s%    		T	||  &&r   c                 ^    U R                   U-
  U-  nU(       a  U R                  X#-
  5        g g r   )r   r   )r   startr-   offsets       r   _padExtendedStream._pad   s+    ))e#t+JJt}% r   c                 ~    U R                   (       a  U R                  U R                  U5        U R                  U5      $ r   )r   r   r   r   r   s     r   r5   ExtendedStream.read   s*    ==IIdoot,zz$r   c                 0    SU R                   U44U l        U $ )Njumpr   
_next_jumpr   s     r   will_jump_toExtendedStream.will_jump_to   s    !DIIt#45r   c                 ,    SU R                   4U l        U $ )Npadr   r#   s    r   will_padExtendedStream.will_pad   s     $)),r   c                 t    SU R                   U R                  44U l        SU l         U R                  U l        U $ )NpaddedT)r   r   r   r   r#   s    r   padded_structExtendedStream.padded_struct   s2    #dmmT__%EF))r   c                     U R                   (       d   eU R                  R                  U R                   5        S U l         g r   )r   r   appendr#   s    r   	__enter__ExtendedStream.__enter__   s+    4??+r   c                 |   Uc  U R                   R                  5       u  pEUS:X  aL  Uu  pgU R                  U-
  nX:  a   U R                  SR	                  X5      5        U R                  Xx-
  5        g US:X  a  U R                  U5        g US:X  a,  Uu  pU R                  U R                  5        Xl        Xl        g g g )Nr   z#Bad jump: too much read ({0} > {1})r   r   )	r   popr   raise_errorformatr5   r   r   r   )r   exc_type	exc_value	traceback	jump_typedatar   r-   	consummedprev_paddingprev_pad_starts              r   __exit__ExtendedStream.__exit__   s     $ 1YF" $ II-	#$$%J%Q%QR[%bc		$*+e#		$h&15.		$//* ,"0	 ' r   c                 L    [         R                  " XR                  U5      5      $ r   )structunpackr5   r   r   r-   s      r   unpacksExtendedStream.unpacks   s    }}VYYt_55r   c                 *    U R                  X5      S   $ )Nr   )r   r   s      r   r   ExtendedStream.unpack   s    ||F)!,,r   c                 h    [        SR                  U R                  U R                  U-
  U5      5      e)Nz{0}:{1}: {2})r   r   r   r   )r   reasonbacks      r   r   ExtendedStream.raise_error   s+    !."7"7

DIIPTDTV\"]^^r   c           	          U R                  X#5      nXT:w  a5  U R                  SR                  U[        U5      [        U5      5      5        g g )Nz!Invalid {0}: expected {1} got {2})r   r   r   str)r   r)   r   r-   expectedvalues         r   check_valuesExtendedStream.check_values   sE    V*@GGcRZm]`af]ghi r   c                 *    U R                  XX445        g r   )r	  )r   r)   r   r-   r  s        r   check_valueExtendedStream.check_value   s    $k:r   )r   r   r   r   r   r   r   N)   )r   )r   r   r	   r
   r   classmethodr   r   r   r5   r   r   r   r   r   r   r   r   r	  r  r   r   r   r   r   r      s^     ! !'&
 

1"6-_j
;r   r   c                 r    U R                  SSSS5        U R                  SS5      nU R                  U5        g )NzTextProps (versions)<BB   r   r  <H)r	  r   r5   )r6   cbTextPropss     r   consume_TextPropsr     s3    
.q&A--a(K
KKr   c                 4   U R                  SS5      U R                  SS5      -   nUS:X  aI  U R                  SSSS5        U R                  S5        U R                  SS5      nU R                  U5        g US	:X  a  [	        U 5        g U R                  S
S5        g )N<LHH   >Q)iR鑏       Q8 o	 zStdFont (version)<Br   	   )l    	_ iN  r  l    J zInvalid GuidAndFont (UUID)   )r   r  r5   r   r  r   )r6   UUIDSbFaceLens      r   consume_GuidAndFontr#     s    NN61%tQ(??E>> 	.a;A==q)H	A	A&!7<r   c                     U R                  SSSS5        U R                  SSSS5        U R                  SSS	S
5        U R                  SS	5      nU R                  U5        g )NzGuidAndPicture (UUID part 1)r  r  )iRr  r  r  r  zStdPicture (Preamble)<Lr  ilt  )r	  r  r   r5   )r6   r-   s     r   consume_GuidAndPicturer&     sa     6C[\
5tQ@TU
.aD==q!D
KKr   c                 0    U R                  SS5      nUS-  $ )Nr%  r  i)r   )r6   counts     r   'consume_CountOfBytesWithCompressionFlagr)    s    MM$"E:r   c                 r    U R                  SSSS5        U R                  SS5      nU R                  U5        g )NzSiteClassInfo (version)r  r  r   )r  r   r5   )r6   cbClassTables     r   consume_SiteClassInfor,  
  s3    	/q!<--a(<	;;|r   c                     U R                  SS5      u  pUS-  (       a  U R                  SSSS5        US-  $ US:w  a)  U R                  SR                  [	        U5      5      5        g)Nr  r     z$FormObjectDepthTypeCount (SITE_TYPE)r  r   z@Invalid FormObjectDepthTypeCount (SITE_TYPE): expected 1 got {0})r   r  r   r   r  )r6   depthmixeds      r    consume_FormObjectDepthTypeCountr1    se    NN5!,>Edl@$1Mdlqj\ccdghmdnop
r   c           
      R   U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nU R	                  5          S=n=pEUR
                  (       a  [        U 5      nUR                  (       a  [        U 5      nUR                  (       a  U R                  SS5      nUR                  U / SQ5        S=pgUR                  (       a  U R                  SS5      nUR                  (       a  U R                  SS5      nUR                  (       a  U R                  S5        SnUR                  (       a  [        U 5      nUR                  U / SQ5        S S S 5        S n	WS:  a  U R                  U5      n	S n
WS:  a  U R                  U5      n
UR                  (       a  U R                  S	5        U R                  W5      n[!        U5      S:X  a  S nXWWWS S US
.sS S S 5        $ ! , (       d  f       N= f! , (       d  f       g = f)Nz OleSiteConcreteControl (version)r  r  r   r%  r  ))rb   r  )rc   r  )rd   r  ))rj   r  )rk   r  )rl   r  r  )r)   tagidtabindexClsidCacheIndexr  captioncontrol_tip_text)r  r   r   r\   r   r_   r)  r`   ra   r8   re   rf   rh   r5   ri   rg   len)r6   cbSitepropmaskname_lentag_lenr4  r5  r6  control_tip_text_lenr)   r3  r8  s               r   consume_OleSiteConcreteControlr?    s   
94AF]]4#F			V	$dA 67!!#&''H'w~~B6J}}A&I||]]4+V%hi)**H!!!==q1(("(--a"8  A#$ '''Nv'V$V%fg) $, qL;;x(D
 aK++g&CKKN!;;';< !Q&##2Td#35S 
%	$ $# 
%	$s%   ,H$DH6BH
H	H
H&c              #     #    U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nUR	                  U / SQ5        UR
                  (       a  U R                  SS5      nUS	-  S
-	  nOSnS S S 5        WR                  (       a  [        U 5        UR                  (       a  [        U 5        UR                  (       a  [        U 5        W(       d/  U R                  SS5      n[        U5       H  n[        U 5        M     U R                  SS5      u  pxUn	U R                  U5         U R                  5          U	S:  a  U	[        U 5      -  n	U	S:  a  M  S S S 5        [        U5       H  n[!        U 5      v   M     S S S 5        g ! , (       d  f       GN= f! , (       d  f       NH= f! , (       d  f       g = f7f)NzFormControl (versions)r  r  )r   r  r  r%  r  )r?   r  r@   r  )rA   r  i   r^   r   z<LLr  )r	  r   r   r;   r8   rD   rL   r&  rQ   r#  rR   r   r,  r   r   r1  r?  )
r6   cbformr;  BooleanPropertiesFORM_FLAG_DONTSAVECLASSTABLECountOfSiteClassInfor   CountOfSitesCountOfBytesremaining_SiteDepthsAndTypess
             r   consume_FormControlrJ  K  s    
0%FC]]4#F			V	$dA 67!`a&& &dA 6,=,GB+N(+,( 
% v&~~F#v&'%}}T15+,A!&) -#)>>%#; \#/ 			\	*__.2,0PQW0XX, /2  |$A088 %	 
+	*1 
%	$2  
+	*sN   8G#AF/B9G#G"G?'G&	G#/
F>9G#
G	G
G G#c                 p   U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nU R	                  5          UR                  U / SQ5        UR                  (       a  [        U 5      nOS	nUR                  (       a  [        U 5      nOS	nUR                  U / S
Q5        UR                  (       a  [        U 5      nOS	nS S S 5        U R                  S5        U R                  W5      nSnWS	:  a  U R                  U5      nSnWS	:  a  U R                  U5      nS S S 5        WR                  (       a  [        U 5        UR                  (       a  [        U 5        [        U 5        WWW4$ ! , (       d  f       N= f! , (       d  f       Ng= f)NzMorphDataControl (versions)r  r  r  r  z<Qr  )rq   r  rA  rB  )rr   r  )rs   r   )rF   r   )rt   r   rE   r   )rv   r  )rw   r  )rx   r  )ry   r  )rz   r  )r{   r  )r|   r  )r}   r   )r~   r   )r   r   )r   r   )r   r   r   )r   r  rO   r  )rN   r  rL   r  rR   r  r   r   )r	  r   r   rn   r   r8   r   r)  rP   r   r5   rL   r&  rR   r  )	r6   cbMorphDatar;  
value_sizecaption_sizegroup_name_sizer  r7  
group_names	            r   consume_MorphDataControlrY  n  su   
5uaH--a(K			[	)$V]]4%;<!!#V 	&T 	U DVL

  FvN V &; < """I&"Q"#5 $: 	AJ'1kk,/G
a_5JS 
*X v&v&f7J''] $# 
*	)s%   ,F'$BF*AF'
F$	 F''
F5c                 N   U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nS S S 5        WR                  (       a  [        U 5        UR                  (       a  [        U 5        g g ! , (       d  f       NH= f)NzImageControl (versions)r  r  r  r  r%  r  )r	  r   r   r   rR   r&  rL   )r6   cbImager;  s      r   consume_ImageControlr\    s    
15!VDmmD!$G			W	% tQ!78 
& v&v&  
&	%s   B
B$c                 b   U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nS S S 5        WR                  (       a  [        U 5        UR                  (       a  [        U 5        [        U 5        g ! , (       d  f       NR= f)NzCommandButtonControl (versions)r  r  r  r  r%  r  )r	  r   r   r   rR   r&  rL   r  )r6   cbCommandButtonr;  s      r   consume_CommandButtonControlr_    s    
95!VLmmD!,O			_	-(tQ)?@ 
. v&v&f 
.	-s   B  
B.c                    U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nS S S 5        WR                  (       a  [        U 5        g g ! , (       d  f       N,= f)NzSpinButtonControl (versions)r  r  r  r  r%  r  )r	  r   r   r   rL   r&  )r6   cbSpinButtonr;  s      r   consume_SpinButtonControlrb    sp    
6q&I==q)L			\	*&v}}T1'=> 
+ v& 	 
+	*   A::
Bc                    U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nUR	                  U / SQ5        S	nUS
   (       a  U R                  SS5      nS S S 5        WR
                  (       a  [        U 5        [        U 5        [        W5       H  nU R                  S5        M     g ! , (       d  f       NY= f)NzTabStripControl (versions)r  r  r  r  r%  r  ))r   r  rA  rB  )ru   r  rM  )r   r  )r   r  )r   r  )r   r  )r   r  )r   r  rL  )r   r  )r   r  r   r   )
r	  r   r   r   r8   rL   r&  r  r   r5   )r6   
cbTabStripr;  tabDatar   s        r   consume_TabStripControlrg    s    
4eQGtQ'J			Z	(#FMM$$:; "G 	H JmmD!,G 
) v&f7^	Q ) 
)	(s   AC
C'c                    U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nU R	                  5          UR                  U / SQ5        UR                  (       a  [        U 5      nOS	nUR                  U / S
Q5        S S S 5        U R                  W5      nU R                  S5        S S S 5        WR                  (       a  [        U 5        UR                  (       a  [        U 5        [        U 5        W$ ! , (       d  f       N}= f! , (       d  f       Nd= f)NLabelControl (versions)r  r  r  r  r%  r  )rB  rA  rL  r   )rN  rM  rO  )rs   r  )rN   r  rQ  rR  rP  r  )r	  r   r   r   r   r8   rP   r)  r5   rR   r&  rL   r  )r6   cbLabelr;  rV  r7  s        r   consume_LabelControlrk    s   
15!VDmmD!$G			W	% tQ!78!!#V &C D  FvN V &N O $ ++l+A! 
&$ v&v&fN+ $# 
&	%s$   ,D4$AD#,*D4#
D1	-D44
Ec                    U R                  SSSS5        U R                  SS5      nU R                  U5         [        U R                  SS5      5      nS S S 5        WR                  (       a  [        U 5        g g ! , (       d  f       N,= f)Nri  r  r  r  r  r%  r  )r	  r   r   r   rL   r&  )r6   cbScrollBarr;  s      r   consume_ScrollBarControlrn    sp    
15!VD--a(K			[	)$V]]4%;< 
* v& 	 
*	)rc  c           	         [         R                  U SR                  US/-   5      5      n[        [	        U5      5      n[         R                  U SR                  US/-   5      5      nU GH  nUS   S:X  a  [	        U5        M  US   S:X  a  [        U5        M0  US   S:X  a  [	        U5        MF  US   S;   a  [        U5      u  US	'   US
'   US'   Mi  US   S:X  a  [        U5        M  US   S:X  a  [        U5        M  US   S:X  a  [        U5        M  US   S:X  a  [        U5      US
'   M  US   S:X  a  [        U5        M  US   S:X  a  [	        U5        M  [        SR                  [        US   5      5      5          U$    U$ )N/for6           )r^         r         r=   r  r7  rX  r   r         /   9   z0ERROR: Unsupported stored type in user form: {0})r   r   r"   listrJ  r\  rY  rb  r_  rg  rk  rn  printr   r  )r   
stream_dircontrol	variablesr   vars         r   extract_OleFormVariablesr    s   !!(CHHZ3%5G,HIG(12Ix*u2D)EFD !Q&%"#r) &"#r)%"#'CC>VW[>\;CL#i.#l*;"#r)%d+"#r)(."#r)#D)"#r)1$7C	N"#r)$T*"#r)% DKKCPSTePfLghi5 4 r   ) rZ   r   	Exceptionr   objectr   r;   r\   rn   r   r   r   r   r   r   r   r  r#  r&  r)  r,  r1  r?  rJ  rY  r\  r_  rb  rg  rk  rn  r  r   r   r   <module>r     s   
X 	) 	"6 "*-4 -S4 S	7 	7D D G GAt AJD J& &O;V O;d="
/5b!9F5(n'	'6<	'r   