
    ࢉi_                         d dl Z d dlmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ  G d de      Zy)    N)UnionTupleOptionalCallableAny   )	CTkCanvas)CTkScrollbar)ThemeManager)
DrawEngine)CTkBaseClass)CTkFont)pop_from_dict_by_setcheck_kwargs_emptyc                       e Zd ZdZdZh dZ	 	 	 	 	 	 	 	 	 	 	 	 	 dYdedededee   dee   d	ed
e	e
ee
e
f   f   dee	e
ee
e
f   f      dee	e
ee
e
f   f      dee	e
e
f      dee	e
ee
e
f   f      dee	e
ee
e
f   f      dee	eef      def fdZdZdZd[defdZ fdZd\ fd	Zd Z fdZd] fd	Zd] fd	Zde
def fdZd^de
d ed!e	e
ef   fd"Zd\de
d#e
fd$Zd% Zd& Zd' Zd_d(Zd_d)Z d* Z!d+ Z"d_d,Z#d- Z$d_d.Z%d/ Z&d0 Z'd1 Z(d2 Z)d3 Z*d4 Z+d5 Z,d6 Z-d7 Z.d_d8Z/d9 Z0d: Z1d; Z2d< Z3d= Z4d> Z5d? Z6d@ Z7dA Z8d_dBZ9d_dCZ:dD Z;dE Z<dF Z=d_dGZ>d_dHZ?d_dIZ@d_dJZAd_dKZBdL ZCd_dMZDd_dNZEdO ZFdP ZGdQ ZHdR ZIdS ZJdT ZKdU ZLdV ZMdW ZNdX ZO xZPS )`
CTkTextboxa  
    Textbox with x and y scrollbars, rounded corners, and all text features of tkinter.Text widget.
    Scrollbars only appear when they are needed. Text is wrapped on line end by default,
    set wrap='none' to disable automatic line wrapping.
    For detailed information check out the documentation.

    Detailed methods and parameters of the underlaying tkinter.Text widget can be found here:
    https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/text.html
    (most of them are implemented here too)
       >   padxpadytabsundowrapstatecursormaxundospacing1spacing2spacing3	takefocusinsertwidthinsertontimeinsertofftimeautoseparatorsxscrollcommandyscrollcommandexportselectioninsertborderwidthselectborderwidthmasterwidthheightcorner_radiusborder_widthborder_spacingbg_colorfg_colorborder_color
text_colorscrollbar_button_colorscrollbar_button_hover_colorfontactivate_scrollbarsc                 j   t         |   ||||       |t        j                  d   d   n| j	                  |d      | _        |	t        j                  d   d   n| j	                  |	      | _        |
t        j                  d   d   n| j	                  |
      | _        |t        j                  d   d   n| j	                  |      | _        |t        j                  d   d	   n| j	                  |      | _	        |t        j                  d   d
   n|| _
        |t        j                  d   d   n|| _        || _        |
t               n| j                  |      | _        t!        | j                  t              r%| j                  j#                  | j$                         t'        | d| j)                  | j*                        | j)                  | j,                              | _        | j.                  j1                  ddddd       | j.                  j3                  | j5                  | j6                               t9        | j.                        | _        t=        j>                  | f| j5                  | j                        dd| jA                  | j                        dd| j5                  | j                        dtC        || jD                        | _#        tI        |d       || _%        d| _&        d| _'        tQ        | ddd| j
                  | j                  | j                  d| jF                  jR                  	      | _*        | jF                  j3                  | jT                  jV                         tQ        | ddd| j
                  | j                  | j                  d| jF                  jX                  	      | _-        | jF                  j3                  | jZ                  jV                         | j]                  ddd       | j_                  d| j`                  d d       | jc                          y )N)r)   r/   r*   r+   r   r0   Ttransparencyr1   r2   r3   r4   r,   r-   r   )r)   highlightthicknessr*   r+      nsewrowcolumnrowspan
columnspanstickybgflat)fgr*   r+   r5   r:   reliefinsertbackground)raise_error   vertical)r*   r+   r.   r0   button_colorbutton_hover_colororientationcommand)r%   
horizontal)r+   r*   r.   r0   rL   rM   rN   rO   )r$   re_grid_textboxre_grid_x_scrollbarre_grid_y_scrollbar2   )2super__init__r   theme_check_color_type	_fg_color_border_color_text_color_scrollbar_button_color_scrollbar_button_hover_color_corner_radius_border_width_border_spacingr   _check_font_type_font
isinstanceadd_size_configure_callback_update_fontr	   _apply_widget_scaling_desired_width_desired_height_canvasgrid	configure_apply_appearance_mode	_bg_colorr   _draw_enginetkinterText_apply_font_scalingr   _valid_tk_text_attributes_textboxr   _scrollbars_activated_hide_x_scrollbar_hide_y_scrollbarr
   yview_y_scrollbarsetxview_x_scrollbar$_create_grid_for_text_and_scrollbarsafter_check_if_scrollbars_needed_draw)selfr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   kwargs	__class__s                   s/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/customtkinter/windows/widgets/ctk_textbox.pyrW   zCTkTextbox.__init__"   s   ( 	vV JRIY++L9*E_c_u_uv~  NR_u  `SQ]Qe\//=nMko  lB  lB  CO  lPMWM_<--l;LIeie{e{  }G  fHe{  fD|'9'9,'GH`'a  JN  J`  J`  aw  Jx$ rN  rV\-?-?-MNl-m  \`  \r  \r  sO  \P* TaShl00>On{Q]Qe\//=nMkw- #',WYD4I4I$4O
djj'*JJ2243D3DE 45'+'A'A$BUBU'V(,(B(B4CWCW(XZ 	a16R$"="=dnn"MN&t||4T e(,(C(CDDTDT(U+,,-*.*B*B4::*N89,26:6Q6QRVRbRb6ce (<FDDbDb'ce 	6t4 &9"!%!%(/0018926..6:6R6R<@<^<^5?151D1DF 	t/@/@/D/DE(01/08926..6:6R6R<@<^<^5A151D1DF 	t/@/@/D/DE11$\`vz1{

2t77tD

    c                 6   | j                  dd       | j                  dd| j                  t        | j                  | j                  | j
                  z                      | j                  dd       | j                  dd| j                  t        | j                  | j                  | j
                  z                      |r| j                  j                  ddddd| j                  t        | j                  | j                  | j
                  z               df| j                  t        | j                  | j                  | j
                  z               df       |r| j                  su| j                  ri| j                  j                  dddddd| j
                  | j                  z   ft        | j                  | j                  | j
                  z         df	       n| j                  j                          |r| j                  su| j                  ri| j                  j                  ddddd
d| j
                  | j                  z   ft        | j                  | j                  | j
                  z         df       y | j                  j                          y y )Nr   r   )weight)r   minsizer<   )r>   r?   r@   rA   rB   r   r   ewn   )r>   r?   r@   rA   rB   r   r   nsw)grid_rowconfigurerg   maxr_   r`   ra   grid_columnconfigurert   rk   rv   ru   r|   grid_forgetrw   ry   )r   rR   rS   rT   s       r   r}   z/CTkTextbox._create_grid_for_text_and_scrollbars}   s    	q+qD4N4NsSWSfSfhlhzhz  ~B  ~R  ~R  iR  PS  5T  	U!!!A!.!!!At7Q7QRUVZViVikok}k}  AE  AU  AU  lU  SV  8W!  	XMM1QaPV%)%?%?DDWDWY]YkYknr  oC  oC  ZC  AD  &E  GH  %I%)%?%?DDWDWY]YkYknr  oC  oC  ZC  AD  &E  GH  %I  J ))d.H.H!!&&1QaX]-.0D0DtGYGY0Y,Z-01D1DdFXFX[_[o[oFo-prs,t ' v !!--/))d.H.H!!&&1QaX]-.0D0DtGYGY0Y,Z-01D1DdFXFX[_[o[oFo-prs,t ' v !!--/ r   continue_loopc                 d     j                   rC j                  j                         dk7  r4 j                  j	                         sd _         j                  d       nP j                  j                         dk(  r3 j                  j	                         rd _         j                  d        j                  j                         dk7  r4 j                  j	                         sd _	         j                  d       nq j                  j                         dk(  rT j                  j	                         r:d _	         j                  d       n d _        d _         j                  d        j                  j                         r%|du r  j                   j                   fd       yyy)zf Method hides or places the scrollbars if they are needed on key release event of tkinter.text widget )g        g      ?FT)rS   )rT   c                  (     j                  d      S )NT)r   )r   r   s   r   <lambda>z8CTkTextbox._check_if_scrollbars_needed.<locals>.<lambda>   s    D<\<\ko<\<p r   N)ru   rt   r{   r|   winfo_ismappedrv   r}   rx   ry   rw   winfo_existsr~   _scrollbar_update_time)r   eventr   s   `  r   r   z&CTkTextbox._check_if_scrollbars_needed   s`    %%}}""$
24;L;L;[;[;]).&99d9S$$&*49J9J9Y9Y9[)-&99d9S}}""$
24;L;L;[;[;]).&99d9S$$&*49J9J9Y9Y9[)-&99d9S%*D"%*D"55$5O==%%'MT,AJJt224pq -B'r   c                 x   t        |   |i | | j                  j                  | j	                  | j
                               | j                  j                  | j                  | j                        | j                  | j                               | j                  ddd       | j                  d       y )Nr5   r*   r+   TrQ   )no_color_updates)rV   _set_scalingrt   rl   rr   rc   rj   rg   rh   ri   r}   r   )r   argsr   r   s      r   r   zCTkTextbox._set_scaling   s    d-f-T%=%=djj%IJT%?%?@S@S%T&*&@&@AUAU&V 	 	X11$\`vz1{

D
)r   c                     t         |   ||       | j                  j                  | j	                  | j
                        | j	                  | j                               | j                          y )Nr   )rV   _set_dimensionsrj   rl   rg   rh   ri   r   )r   r*   r+   r   s      r   r   zCTkTextbox._set_dimensions   sZ    v.T%?%?@S@S%T&*&@&@AUAU&V 	 	X

r   c                     | j                   j                  | j                  | j                               | j                  j                          | j                  j                  ddddd       y)zX pass font to tkinter widgets with applied font scaling and update grid with workaround r   r   r;   r<   r=   N)rt   rl   rr   rc   rj   r   rk   r   s    r   rf   zCTkTextbox._update_font   sU    T%=%=djj%IJ 	  "a16Rr   c                     t        | j                  t              r%| j                  j                  | j                         t
        |           y N)rd   rc   r   remove_size_configure_callbackrf   rV   destroy)r   r   s    r   r   zCTkTextbox.destroy   s3    djj'*JJ55d6G6GHr   c                    t         |   |       | j                  j                         sy | j                  j                  | j                  | j                        | j                  | j                        | j                  | j                        | j                  | j                              }|du s|r| j                  dk(  r3| j                  j                  d| j                  | j                        | j                  | j                               | j                  j!                  | j                  | j"                        | j                  | j                        | j                  | j"                               | j$                  j!                  | j                  | j&                  | j(                         | j*                  j!                  | j                  | j&                  | j(                         n1| j                  j                  d| j                  | j                        | j                  | j                               | j                  j!                  | j                  | j"                        | j                  | j                        | j                  | j"                               | j$                  j!                  | j                  | j&                  | j(                         | j*                  j!                  | j                  | j&                  | j(                         | j                  j                  d| j                  | j,                        | j                  | j,                               | j                  j!                  | j                  | j                               | j                  j/                  d       | j                  j/                  d       y )	NFtransparentinner_parts)filloutline)rF   rD   rH   )r0   rL   rM   border_partsrC   )rV   r   rj   r   ro   draw_rounded_rect_with_borderrg   _current_width_current_heightr_   r`   rZ   
itemconfigrm   rn   rt   rl   r\   r|   r]   r^   ry   r[   	tag_lower)r   r   requires_recoloringr   s      r   r   zCTkTextbox._draw   s'   &'||((*"//MMdNhNhimi|i|N}NRNhNhimi}i}N~NRNhNhimi|i|N}NRNhNhimi{i{N|~
 u$(;~~.''-1-H-H-X040K0KDNN0[ ( ] ''4+F+FtGWGW+X+/+F+Ft~~+V9=9T9TUYUeUe9f ( h !!++T^^RVRnRn?C?a?a , c!!++T^^RVRnRn?C?a?a , c ''-1-H-H-X040K0KDNN0[ ( ] ''4+F+FtGWGW+X+/+F+Ft~~+V9=9T9TUYUeUe9f ( h !!++T^^RVRnRn?C?a?a , c!!++T^^RVRnRn?C?a?a , c LL##N)-)D)DTEWEW)X,0,G,GHZHZ,[ $ ] LL""d&A&A$..&Q"R}-~.r   c                    d|v rx| j                  |j                  d      d      | _        d}| j                         D ]<  }t	        |t
              st        |d      s!|j                  | j                         > d|v r'| j                  |j                  d            | _        d}d|v r'| j                  |j                  d            | _	        d}d|v rq| j                  |j                  d            | _
        | j                  j                  | j                  	       | j                  j                  | j                  	       d
|v rq| j                  |j                  d
            | _        | j                  j                  | j                         | j                  j                  | j                         d|v r,|j                  d      | _        | j                  ddd       d}d|v r,|j                  d      | _        | j                  ddd       d}d|v r,|j                  d      | _        | j                  ddd       d}d|v rt	        | j$                  t&              r%| j$                  j)                  | j*                         | j-                  |j                  d            | _        t	        | j$                  t&              r%| j$                  j/                  | j*                         | j+                           | j0                  j                  di t3        || j4                         t7        |   dd|i| y )Nr0   Tr8   rZ   )r/   r1   r2   r3   )rL   r4   )rM   r,   rQ   r-   r.   r5   require_redraw )rY   poprZ   winfo_childrenrd   r   hasattrrl   r[   r\   r]   r|   ry   r^   r_   r}   r`   ra   rc   r   r   rf   rb   re   rt   r   rs   rV   )r   r   r   childr   s       r   rl   zCTkTextbox.configure   s   !33FJJz4JY]3^DN!N ,,. =e\2wuk7ROOT^^O<= V#!%!7!7

>8R!SD!N6!#55fjj6NOD!N#v-+/+A+A&**MeBf+gD(''T5Q5Q'R''T5Q5Q'R)V3151G1G

SqHr1sD.''4;];]'^''4;];]'^f$"(**_"=D55d`dz~5!NV#!'N!;D55d`dz~5!Nv%#)::.>#?D 55d`dz~5!NV$**g.

99$:K:KL..vzz&/ABDJ$**g.

66t7H7HI_"6vt?]?]"^_BB6Br   attribute_namereturnc                    |dk(  r| j                   S |dk(  r| j                  S |dk(  r| j                  S |dk(  r| j                  S |dk(  r| j                  S |dk(  r| j
                  S |dk(  r| j                  S t        | !  |      S )Nr,   r-   r.   r0   r1   r2   r5   )	r_   r`   ra   rZ   r[   r\   rc   rV   cget)r   r   r   s     r   r   zCTkTextbox.cget4  s    _,&&&~-%%%//'''z)>>!~-%%%|+###v%:: 7<//r   sequencerO   addc                 h    |dk(  s|du st        d      | j                  j                  ||d       y)z called on the tkinter.Canvas +TzE'add' argument can only be '+' or True to preserve internal callbacks)r   N)
ValueErrorrt   bind)r   r   rO   r   s       r   r   zCTkTextbox.bindI  s4    s
cTkdee8W$7r   funcidc                 V    |t        d      | j                  j                  |d       y)z0 called on the tkinter.Label and tkinter.Canvas Nz'funcid' argument can only be None, because there is a bug in tkinter and its not clear whether the internal callbacks will be unbinded or not)r   rt   unbind)r   r   r   s      r   r   zCTkTextbox.unbindO  s1     q r rXt,r   c                 6    | j                   j                         S r   )rt   focusr   s    r   r   zCTkTextbox.focusV  s    }}""$$r   c                 6    | j                   j                         S r   )rt   	focus_setr   s    r   r   zCTkTextbox.focus_setY  s    }}&&((r   c                 6    | j                   j                         S r   )rt   focus_forcer   s    r   r   zCTkTextbox.focus_force\  s    }}((**r   c                 <    | j                   j                  |||      S r   )rt   insert)r   indextexttagss       r   r   zCTkTextbox.insert_  s    }}##E466r   c                 :    | j                   j                  ||      S r   )rt   getr   index1index2s      r   r   zCTkTextbox.getb  s    }}  00r   c                 8    | j                   j                  |      S r   )rt   bboxr   r   s     r   r   zCTkTextbox.bboxe  s    }}!!%((r   c                 <    | j                   j                  |||      S r   )rt   compare)r   r   opr   s       r   r   zCTkTextbox.compareh  s    }}$$UB77r   c                 :    | j                   j                  ||      S r   )rt   deleter   s      r   r   zCTkTextbox.deletek  s    }}##FF33r   c                 8    | j                   j                  |      S r   )rt   	dlineinfor   s     r   r   zCTkTextbox.dlineinfon      }}&&u--r   c                 8    | j                   j                  |      S r   )rt   edit_modified)r   args     r   r   zCTkTextbox.edit_modifiedq  s    }}**3//r   c                 V    | j                          | j                  j                         S r   )r   rt   	edit_redor   s    r   r   zCTkTextbox.edit_redot  !    ((*}}&&((r   c                 6    | j                   j                         S r   )rt   
edit_resetr   s    r   r   zCTkTextbox.edit_resetx      }}''))r   c                 6    | j                   j                         S r   )rt   edit_separatorr   s    r   r   zCTkTextbox.edit_separator{  s    }}++--r   c                 V    | j                          | j                  j                         S r   )r   rt   	edit_undor   s    r   r   zCTkTextbox.edit_undo~  r   r   c                     t        d      NzIembedding images is forbidden, because would be incompatible with scalingAttributeErrorr   r   r   s      r   image_createzCTkTextbox.image_create      hiir   c                     t        d      r   r   r   r   options      r   
image_cgetzCTkTextbox.image_cget  r   r   c                     t        d      r   r   r   s     r   image_configurezCTkTextbox.image_configure  r   r   c                     t        d      r   r   r   s    r   image_nameszCTkTextbox.image_names  r   r   c                 8    | j                   j                  |      S r   )rt   r   )r   is     r   r   zCTkTextbox.index  s    }}""1%%r   c                 :    | j                   j                  ||      S r   )rt   mark_gravity)r   markgravitys      r   r   zCTkTextbox.mark_gravity  s    }}))$88r   c                 6    | j                   j                         S r   )rt   
mark_namesr   s    r   r  zCTkTextbox.mark_names  r   r   c                 8    | j                   j                  |      S r   )rt   	mark_nextr   s     r   r  zCTkTextbox.mark_next  r   r   c                 8    | j                   j                  |      S r   )rt   mark_previousr   s     r   r  zCTkTextbox.mark_previous  s    }}**511r   c                 :    | j                   j                  ||      S r   )rt   mark_set)r   r  r   s      r   r
  zCTkTextbox.mark_set  s    }}%%dE22r   c                 8    | j                   j                  |      S r   )rt   
mark_unset)r   r  s     r   r  zCTkTextbox.mark_unset  s    }}''--r   c                 :    | j                   j                  ||      S r   )rt   scan_dragtor   xys      r   r  zCTkTextbox.scan_dragto  s    }}((A..r   c                 :    | j                   j                  ||      S r   )rt   	scan_markr  s      r   r  zCTkTextbox.scan_mark  s    }}&&q!,,r   c                 D     | j                   j                  ||g|i |S r   )rt   search)r   patternr   r   r   s        r   r  zCTkTextbox.search  s%    #t}}##GUDTDVDDr   c                 8    | j                   j                  |      S r   )rt   seer   s     r   r  zCTkTextbox.see  s    }}  ''r   c                 <    | j                   j                  |||      S r   )rt   tag_addr   tagNamer   r   s       r   r  zCTkTextbox.tag_add  s    }}$$Wff==r   c                 >    | j                   j                  ||||      S r   )rt   tag_bind)r   r  r   funcr   s        r   r  zCTkTextbox.tag_bind  s    }}%%gxsCCr   c                 :    | j                   j                  ||      S r   )rt   tag_cget)r   r  r   s      r   r!  zCTkTextbox.tag_cget  s    }}%%gv66r   c                 Z    d|v rt        d       | j                  j                  |fi |S )Nr5   zC'font' option forbidden, because would be incompatible with scaling)r   rt   
tag_config)r   r  r   s      r   r#  zCTkTextbox.tag_config  s2    V !fgg't}}'':6::r   c                 4     | j                   j                  | S r   )rt   
tag_deleter   r  s     r   r%  zCTkTextbox.tag_delete  s    't}}''11r   c                 :    | j                   j                  ||      S r   )rt   r   )r   r  	belowThiss      r   r   zCTkTextbox.tag_lower      }}&&w	::r   c                 8    | j                   j                  |      S r   )rt   	tag_namesr   s     r   r+  zCTkTextbox.tag_names  r   r   c                 <    | j                   j                  |||      S r   )rt   tag_nextranger  s       r   r-  zCTkTextbox.tag_nextrange      }}**7FFCCr   c                 <    | j                   j                  |||      S r   )rt   tag_prevranger  s       r   r0  zCTkTextbox.tag_prevrange  r.  r   c                 :    | j                   j                  ||      S r   )rt   	tag_raise)r   r  	aboveThiss      r   r2  zCTkTextbox.tag_raise  r)  r   c                 8    | j                   j                  |      S r   )rt   
tag_rangesr&  s     r   r5  zCTkTextbox.tag_ranges  s    }}''00r   c                 <    | j                   j                  |||      S r   )rt   
tag_remover  s       r   r7  zCTkTextbox.tag_remove  s    }}''@@r   c                 <    | j                   j                  |||      S r   )rt   
tag_unbind)r   r  r   r   s       r   r9  zCTkTextbox.tag_unbind  s    }}''6BBr   c                     t        d      NzMembedding widgets is forbidden, would probably cause all kinds of problems ;)r   r   s      r   window_cgetzCTkTextbox.window_cget      lmmr   c                     t        d      r;  r   r   s      r   window_configurezCTkTextbox.window_configure  r=  r   c                     t        d      r;  r   r   s      r   window_createzCTkTextbox.window_create  r=  r   c                     t        d      r;  r   r   s    r   window_nameszCTkTextbox.window_names  r=  r   c                 4     | j                   j                  | S r   )rt   r{   r   r   s     r   r{   zCTkTextbox.xview      "t}}""D))r   c                 8    | j                   j                  |      S r   )rt   xview_movetor   fractions     r   rH  zCTkTextbox.xview_moveto      }}))(33r   c                 :    | j                   j                  ||      S r   )rt   xview_scrollr   nwhats      r   rM  zCTkTextbox.xview_scroll      }}))!T22r   c                 4     | j                   j                  | S r   )rt   rx   rE  s     r   rx   zCTkTextbox.yview  rF  r   c                 8    | j                   j                  |      S r   )rt   yview_movetorI  s     r   rT  zCTkTextbox.yview_moveto  rK  r   c                 :    | j                   j                  ||      S r   )rt   yview_scrollrN  s      r   rV  zCTkTextbox.yview_scroll  rQ  r   )r   r   NNr   r   NNNNNNT)FFF)NF)NN)F)NNTr   )Q__name__
__module____qualname____doc__r   rs   anyintr   r   strr   tupler   boolrW   r}   r   r   r   rf   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r  r  r  r!  r#  r%  r   r+  r-  r0  r2  r5  r7  r9  r<  r?  rA  rC  r{   rH  rM  rx   rT  rV  __classcell__)r   s   @r   r   r      s   	 !!E ""04/3'(9FCGGK9=QUX\9=-1!YYY Y !)	Y
  (}Y "%Y !eCHo!56Y $E#uS#X*>$?@Y  (c5c?.B(CDY &eCHo6Y *2%U38_8L2M)NY 19sE#s(O?S9T0UY  eWn 56Y  '+!Yv0:rT r2*S)/V5Cn03 03 0*8S 8( 8cSWiHX 8-s -3 -%)+71)84.0)*.)jjjj&9*.23./-E(>D7;
2;.DD;1ACnnnn*43*43r   r   )rp   typingr   r   r   r   r   core_renderingr	   ctk_scrollbarr
   rX   r   r   core_widget_classesr   r5   r   utilityr   r   r   r   r   r   <module>rf     s1     8 8 % '  & -  =g3 g3r   