
    d1H                       d Z dZedz  ZddlZddlmZ ddlmZ ddlZddlZddlZddl	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 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m Z m!Z! de_"        dZ#dZ$ejJ                  ejL                  ejN                  ejP                  ejR                  ejT                  ejV                  ejX                  fZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7d Z8d!Z9d"Z:d#Z;d$Z<d%Z=d&Z>de0z  de1z  z  de2z  z  de3z  z  Z?de4z  de5z  z  de6z  z  de7z  z  Z@de8z  de9z  z  de:z  z  de;z  z  ZAe@eAz  ZBde4z  de8z  z  ZCde5z  de9z  z  ZDde4z  de8z  z  de5z  z  de9z  z  ZEde6z  de:z  z  ZFde7z  de;z  z  ZGd'ZHd(d)gZId*ZJd+ZKd,ZLd-ZM G d. d/ej                  ej                        ZPd0ZQ G d1 d2      ZRd3ZS G d4 d5ej                        ZUy)6a%  Slices is an interactive text control in which a user types in
commands to be sent to the interpreter.  This particular shell is
based on wxPython's wxStyledTextCtrl.

Sponsored by Orbtech - Your source for Python programming expertise.
Slices is a version of shell modified by David Mashburn.z1David N. Mashburn <david.n.mashburn@gmail.com> / z(Patrick K. O'Brien <pobrien@orbtech.com>    N)stcPY3)
cmp_to_key   )Buffer)
dispatcher)editor)
editwindow)document)frame)PseudoFileIn)PseudoFileOut)PseudoFileErr)VERSION)magic)testForContinuations)lscdpwdsxz<-- T                     	   
                     z#!/usr/bin/env python
z@#PySlices Save Format Version 1.1 (PySlices v0.9.7.8 and later)
z>#PySlices Save Format Version 1.2 (PySlices v0.9.8 and later)
z5#PySlices Marker Information -- Begin Grouping Slice
z2#PySlices Marker Information -- Begin Input Slice
z3#PySlices Marker Information -- Begin Output Slice
a  

                            Tutorial!!!
------------------------------------------------------------------------
PySlices is the newest member of the Py suite!
It is a modified version of PyCrust that supports multi-line commands.

Input and output are contained in "Slices" shown as markers in the left margin.
Input Slices have RED margins (active, editable).
Output Slices have BLUE margins (frozen, not editable).

Commands in slices can be on more than one line, as with Sage or Mathematica.
For example, the command:
a=1
b=2
print(a+b)
will all run in sequence, much like a script.
Try running the above Input Slice by clicking somewhere in its text and
using Ctrl-Return, Shift-Return, or Numpad Enter to execute.
Previous commands (Old Slices) can be re-edited and run again in place.

Slices can also be:
 * selceted (click on the margin, Shift-click for multiple selection)
 * folded (click the margin twice)
 * selected and deleted (hit delete while selected)
 * divided (Ctrl-D)
 * merged (Ctrl-M while selecting adjacent, like-colored slices)

Try deleting the slice above this one by clicking on the red margin.

If you want a more traditional shell feel, try enabling "Shell Mode" in
"Options->Settings->Shell Mode" (or try PyCrust).
In Shell Mode, two returns in a row executes the command, and
    Ctrl-Return and Shift-Return always print newlines.

Saving and opening "sessions" is now supported!  This is a little
different to other shells where the history is saved.  With PySlices,
the whole document is saved in a simple text format!

To disable this Tutorial on startup, uncheck it in the menu at:
"Options->Startup->Show PySlices tutorial"

PySlices may not be the best thing since sliced bread, but
I hope it makes using Python a little bit sweeter!
c                       e Zd ZdZdZdddej                  ej                  ej                  dddddfdZ	d Z
d Zd	 Zd
 ZddZd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd ZddZddZd Zd Zd Zd Zd Z y) SlicesShellFramez*Frame containing the sliceshell component.zSlicesShell FrameNPySlicesShellc                 t   t         j                  j                  | ||||||d       t         j                  j                  | |	|
       |t        j
                  k(  r| j                  d       dt        z  }| j                  |j                  dd             t        || d|||| j                  | j                  | j                  | j                  | j                  d
|| _        | j                   | _        | j                   j$                  | _        | j                  | j                   _        | j                   j)                          | j+                          t,        j.                  j1                  d	      | _        |d
k7  r| j5                  |       | j7                  t        j8                  | j:                         y
)z!Create SlicesShellFrame instance.PySlices)	shellName)i  i  z2PySlices %s - The Flakiest Python Shell... Cut Up!
, r)   )
parentid	introTextlocalsInterpClassstartupScriptexecStartupScriptshowPySlicesTutorialenableShellModehideFoldingMargin~N)r   Frame__init__ShellFrameMixinwxDefaultSizeSetSizer   SetStatusTextreplaceSlicesShellr5   r6   r7   r8   r9   
sliceshellshellbuffersetStatusTextSetFocusLoadSettingsospath
expandusercurrentDirectory
bufferOpenBindEVT_IDLEOnIdle)selfr0   r1   titlepossizestyler3   r4   configdataDirfilenameargskwdsintros                  2/usr/lib/python3/dist-packages/wx/py/sliceshell.pyr<   zSlicesShellFrame.__init__   s_    	T62uc4Q[\&&tVW=2>>!LL$DwN5==t45% !% .2bE&,+-1-?-?151G1G484M4M/3/C/C151G1G. )-. __
oo,, )-(:(:%  " " 2 23 7T>OOH%		"++t{{+    c                 $    | j                          y)zEvent handler for closing.N)bufferCloserR   events     r]   OnClosezSlicesShellFrame.OnClose   s    r^   c                    d}dt         z  dz   dz   dz   dt        j                  z  z   dt        j                  j	                         d   z  z   d	t
        j                  z  z   d
dj                  t
        j                  dd       z  z   }t        j                  | ||t
        j                  t
        j                  z        }|j                          |j                          y)zDisplay an About window.zAbout PySliceShellzPySliceShell %s

z)Yet another Python shell, only flakier.

z"Half-baked by Patrick K. O'Brien,
z&the other half is still in the oven.

zPlatform: %s
zPython Version: %s
r   zwxPython Version: %s
z	(%s)
r/   r   N)r   sysplatformversionsplitr>   VERSION_STRINGjoinPlatformInfoMessageDialogOKICON_INFORMATION	ShowModalDestroy)rR   rb   rS   textdialogs        r]   OnAboutzSlicesShellFrame.OnAbout   s    $$w.<=56 ::  #,,.	/
 &(9(9(;A(>>? ("*;*;;< TYYrqr':;;= !!$e"$%%"*=*="=?r^   c                 D    t         j                  j                  | |       y)zShow a help dialog.N)r   r=   OnHelpra   s     r]   ru   zSlicesShellFrame.OnHelp   s    $$T51r^   c                     | j                   ot        j                  j                  |        t        j                  j                  | | j                          | j
                  j                  | j                          y y N)rW   r   r=   rI   r;   rD   rR   s    r]   rI   zSlicesShellFrame.LoadSettings   sS    ;;"!!..t4KK$$T4;;7OO((5 #r^   c                    | j                   t        j                  j                  | |       | j                  s|rPt        j
                  j                  | | j                          | j                  j                  | j                          y y y rw   )rW   r   r=   SaveSettingsautoSaveSettingsr;   rD   )rR   forces     r]   rz   zSlicesShellFrame.SaveSettings   se    ;;"!!..tE:$$((t{{;,,T[[9 ). #r^   c                 v    | j                   -| j                  d       | j                   j                          y y )NTr|   )rW   rz   Flushrx   s    r]   DoSaveSettingszSlicesShellFrame.DoSaveSettings   s2    ;;"D)KK #r^   c                     t         j                  j                  | |       | j                  j	                  | j
                         yz)Change between Slices Mode and Shell ModeN)r   r;   OnEnableShellModerD   ToggleShellModer8   ra   s     r]   r   z"SlicesShellFrame.OnEnableShellMode   s.    %%d51''(<(<=r^   c                     t         j                  j                  | |       | j                  j	                  | j
                         yr   )r   r;   OnHideFoldingMarginrD   ToggleFoldingMarginr9   ra   s     r]   r   z$SlicesShellFrame.OnHideFoldingMargin   s.    ''U3++D,B,BCr^   c                 D    | j                          |j                          y)zEvent handler for idle time.N)_updateTitleSkipra   s     r]   rQ   zSlicesShellFrame.OnIdle  s    

r^   c                     | j                         }| j                         r'|j                  d      ry| j                  d|z          y|j                  d      r| j                  |dd        yy)zShow current title information.z* r   N)GetTitlebufferHasChanged
startswithSetTitle)rR   rS   s     r]   r   zSlicesShellFrame._updateTitle  s_      "%dUl+%eABi( &r^   c                     | j                   ryy)z)Return True if there is a current buffer.TF)rF   rx   s    r]   	hasBufferzSlicesShellFrame.hasBuffer  s    ;;r^   c                     | j                   j                         r| j                         }|r|S | j                          | j                  j                          | j                          | j                          y)zClose buffer.F)rF   
hasChangedbufferSuggestSaverz   rD   destroybufferDestroyrp   rR   cancels     r]   r`   zSlicesShellFrame.bufferClose  s\    ;;!!#++-F!r^   c                    | j                          t               }t        j                  | d      x| _        }|j                  t        j                  d        t        |      }||_        t        j                  t        j                        }|j                  |j                  dt        j                         |j                  |       |j                  d       |j!                          |j#                  |       |j%                  |       | j'                  |       | j                  j)                          | j+                          y)Create new buffer.r)   )r0   r1   c                     | S rw    )xs    r]   <lambda>z/SlicesShellFrame.bufferCreate.<locals>.<lambda>,  s    q r^   )r0   r   TN)r   r   r>   PanelpanelrO   EVT_ERASE_BACKGROUNDEditorr
   BoxSizerVERTICALAddwindowEXPANDSetSizerSetAutoLayoutLayout	addEditoropen	setEditorsetFocusSendSizeEvent)rR   rY   rF   r   r
   sizers         r]   bufferCreatezSlicesShellFrame.bufferCreate'  s    XXTb99
U

B++[9u%BKK(		&--BII.uD! Hvr^   c                 :    | j                   rd| _        d| _         yy)zDestroy the current buffer.N)rF   r
   rx   s    r]   r   zSlicesShellFrame.bufferDestroy;  s    ;;DKDK r^   c                 P    | j                   r| j                   j                         S y)z2Return True if buffer has changed since last save.F)rF   r   rx   s    r]   r   z!SlicesShellFrame.bufferHasChangedB  s    ;;;;))++r^   c                    | j                         }|r|S | j                          | j                  d       d| j                  _        | j                  j                          t        j                         | j                  _	        d| j                  _
        | j                  j                  j                  | j                  _        d}|S )r   r,   F
This shell)r   clearr   rD   NeedsCheckForSaveSetSavePointr   DocumentrF   docnamefilebase
modulenamer   s     r]   	bufferNewzSlicesShellFrame.bufferNewI  s    '')M

z"*/)$$&"++-'!%!9!9r^   c                 r   | j                         r| j                         }|r|S |dk(  r"t        j                  dd| j                        }|dk7  rY|dk7  rSt        |d      5 }| j                  j                  |       ddd       t        j                  j                  |      d   | _        | j                  t        j                  j                  |      d   d	z          d
| j                  _        | j                  j                          t        j                  |      | j                   _        | j                   j"                  j$                  | j                   _        | j                   j"                  j(                  | j                   _        | j                  j-                  d       y# 1 sw Y   .xY w)zOpen file in buffer.NzOpen a PySlices Filez
*.pyslices)wildcarddefault_path rr   r    - PySlicesF)r   r   r>   FileSelectorrM   r   rD   LoadPySlicesFilerJ   rK   rh   r   r   r   r   r   rF   r   rY   r   r   r   ScrollToLine)rR   filer   fids       r]   rN   zSlicesShellFrame.bufferOpenY  sD     "++-F:!7*6.2.C.CED :$)d3 630056 %'GGMM$$7$:D!MM277==.q1MAB.3DOO-OO((*&//5DKKO#{{77DKK%)[[__%=%=DKK"OO((+6 6s   $F,,F6c                    | j                   j                  j                  }|| j                   _        |sy t        j
                  j                  |      sd| j                   _        | j                   j                  s*| j                   j                  |      | j                   _        | j                   j                  rt        |d      5 }| j                  j                  |       d d d        | j                  j                          | j                  t        j
                  j                  |      d   dz          d| j                  _        y y # 1 sw Y   jxY w)NTwbr   r   F)rF   r   filepath	confirmedrJ   rK   existsoverwriteConfirmr   rD   SavePySlicesFiler   r   rh   r   )rR   r   r   r   s       r]   
simpleSavezSlicesShellFrame.simpleSave{  s    ;;??++ )ww~~h'$(DKK!{{$$$(KK$@$@$JDKK!;;  h% 60056 OO((*MM277==215EF.3DOO- !6 6s   EEc                     | j                   j                  j                  r| j                  d       d}|S | j	                         }|S )zSave buffer to its file.Tr   F)rF   r   r   r   bufferSaveAsr   s     r]   
bufferSavezSlicesShellFrame.bufferSave  sB    ;;??##OOdO+F  &&(Fr^   c                    | j                         r4| j                  j                  j                  r| j	                         }|r|S d}| j                  r@| j                  j                  j
                  r | j                  j                  j
                  }t        j                  d|d      }|j                  dvr|j                  dd dk7  r|xj                  dz  c_        t        j                  |j                        | j                  _        | j                  j                  j                  | j                  _        | j                  j                  j                  | j                  _        | j                  d	
       d}|S d	}|S )Save buffer to a new filename.r   zSave PySlices File&PySlices Files (*.pyslices)|*.pyslicesrS   	directoryr   r   NN	.pyslicesTr   F)r   rF   r   r   r   filedirr
   
saveSinglerK   r   r   rY   r   r   r   r   )rR   r   r   results       r]   r   zSlicesShellFrame.bufferSaveAs  s     "t{{'?'?++-F;;4;;??22kkoo--G"")=,TV;;i'{{23,[(&//<DKKO#{{77DKK%)[[__%=%=DKK"OOdO+F  Fr^   c                    d}| j                   r@| j                   j                  j                  r | j                   j                  j                  }t        j                  d|d      }|j
                  dvre|j
                  dd dk7  r|xj
                  dz  c_        t        |j
                  d	      5 }| j                  j                  |       ddd       d
}|S d}|S # 1 sw Y   d
}|S xY w)r   r   zSave a Copy of PySlices Filer   r   r   r   Nr   r   FT)	rF   r   r   r
   r   rK   r   rD   r   )rR   r   r   r   r   s        r]   bufferSaveACopyz SlicesShellFrame.bufferSaveACopy  s    ;;4;;??22kkoo--G"")GRY,TV ;;i'{{23,[( fkk4( 6C0056 F  F6 F s   2CC*c                 d   t        j                  dd| j                  j                  z  dt        j
                  t        j                  z  t        j                  z  t        j                  z  t        j                  z        }|j                  r| j                         }|S |j                  dk(  }|S )z=Suggest saving changes.  Return True if user selected Cancel.Nz0%s has changed.
Would you like to save it first?zSave current file?)r0   messagerS   rV   Cancel)r
   messageDialogrF   r   r>   YES_NOCANCEL
NO_DEFAULTCENTREICON_QUESTIONpositiver   rq   )rR   r   r   s      r]   r   z"SlicesShellFrame.bufferSuggestSave  s    %%T(+-1[[-=-=(> &:%'YY%:R]]%J%'YY&/131A1A&BD ??__&F  [[H,Fr^   c                 ~    | j                   j                         r| j                  d       y| j                  d       y)z<Update the buffer namespace for autocompletion and calltips.zNamespace updatedz+Error executing, unable to update namespaceN)rF   updateNamespacerA   rx   s    r]   r   z SlicesShellFrame.updateNamespace  s0    ;;&&(23LMr^   Frw   )!__name__
__module____qualname____doc__r   r>   DefaultPositionr?   DEFAULT_FRAME_STYLEr<   rc   rs   ru   rI   rz   r   r   r   rQ   r   r   r`   r   r   r   r   rN   r   r   r   r   r   r   r   r^   r]   r(   r(      s    4D"r''bnn--d!dT	%,P"2
6: 
>
D

)( D4"0,Nr^   r(   a  * Key bindings:
Home              Go to the beginning of the line.
End               Go to the end of the line.
Shift+Home        Select to the beginning of the line.
Shift+End         Select to the end of the line.
Ctrl-Home         Jump to the beginning of the slice;
                  If already there, jump to beginning of previous slice
Ctrl-End          Jump to the end of the slice;
                  If already there, jump to end of next slice
Ctrl-PageUp       Jump to the beginning of the shell
Ctrl-PageDown     Jump to the end of the shell
Ctrl+C            Copy selected text, removing prompts.
Ctrl+Shift+C      Copy selected text, retaining prompts.
Alt+C             Copy to the clipboard, including prefixed prompts.
Ctrl+X            Cut selected text.
Ctrl+V            Paste from clipboard.
Ctrl+Shift+V      Paste and run multiple commands from clipboard.
Ctrl+Up Arrow     Retrieve Previous History item.
Alt+P             Retrieve Previous History item.
Ctrl+Down Arrow   Retrieve Next History item.
Alt+N             Retrieve Next History item.
Shift+Up Arrow    Insert Previous History item.
Shift+Down Arrow  Insert Next History item.
F8                Command-completion of History item.
                  (Type a few characters of a previous command and press F8.)
Ctrl+]            Increase font size.
Ctrl+[            Decrease font size.
Ctrl+=            Default font size.

Ctrl-Space        Show Auto Completion.
Ctrl-Shift-Space  Show Call Tip.
Ctrl-Shift-H      Complete Text from History.

Ctrl+F            Search
Ctrl+G            Search next
F12               on/off "free-edit" mode
                  For testing only -- This does not preserve markers!

In "Slices Mode":
Return            Insert new line
Enter (Numpad)    Run command in slice
Ctrl+Return       ""
Shift+Return      ""

In "Shell Mode":
Return or Enter   Insert a new line
Ctrl+Return       ""
Shift+Return      ""
2 Returns in a row   Run command in slice
c                   2    e Zd ZdZdZd Zd Zd Zd Zd Z	y)	SlicesShellFacadezSimplified interface to all shell-related functionality.

    This is a semi-transparent facade, in that all attributes of other
    are accessible, even though only some are visible to the user.zSlicesShell Interfacec                 8    | j                   }||d<   t        |d<   y)z$Create a SlicesShellFacade instance.otherhelpTextN)__dict__	HELP_TEXT)rR   r   ds      r]   r<   zSlicesShellFacade.__init__  s    MM'
!*r^   c                 >    | j                  | j                  d       y)zBDisplay some useful information about how to use the slices shell.OutputtypeN)writer   rx   s    r]   helpzSlicesShellFacade.help  s    

4==h
/r^   c                 p    t        | j                  |      rt        | j                  |      S t        |      rw   )hasattrr   getattrAttributeError)rR   r   s     r]   __getattr__zSlicesShellFacade.__getattr__#  s,    4::t$4::t,, &&r^   c                     || j                   v r|| j                   |<   y t        | j                  |      rt        | j                  ||       y t	        |      rw   )r   r  r   setattrr  )rR   r   values      r]   __setattr__zSlicesShellFacade.__setattr__)  sE    4== "'DMM$TZZ&DJJe, &&r^   c                 .    g d}|j                          |S )z8Return list of magic attributes to extend introspection.)aboutaskautoCallTipautoCompleteautoCompleteAutoHideautoCompleteCaseInsensitiveautoCompleteIncludeDoubleautoCompleteIncludeMagicautoCompleteIncludeSinglecallTipInsertr   pausepromptquitredirectStderrredirectStdinredirectStdoutrunrunfilewrapzoom)sort)rR   lists     r]   _getAttributeNamesz$SlicesShellFacade._getAttributeNames1  s    . 			r^   N)
r   r   r   r   r   r<   r  r  r  r$  r   r^   r]   r   r     s(    F
 #D"0''r^   r   zi
Author: %r
Py Version: %s
Python Version: %s
wxPython Version: %s
wxPython PlatformInfo: %s
Platform: %sc                      e Zd ZdZd Zdej                  ej                  ej                  dddddddddfdZ	dndZ
dnd	Zd
 Zd Zd Zd ZdodZd Zd Zd Zd Zd Zd Zd ZdndZdndZdndZdndZdndZdndZdndZdndZdpdZ d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,dpd+Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5dqd4Z6drd5Z7d6 Z8dsd7Z9d8 Z:dnd9Z;dnd:Z<dnd;Z=dnd<Z>d= Z?d> Z@d? ZAdtd@ZBdA ZCdB ZDdC ZEdD ZFdodEZGdudFZHdG ZIdH ZJdvdIZKdJ ZLdwdKZMdxdLZNdM ZOdN ZPdO ZQdqdPZRdqdQZSdqdRZT	 dpdSZUdT ZVdU ZWdV ZXdW ZYdX ZZdY Z[dZ Z\d[ Z]d\ Z^d] Z_d^ Z`d_ Zad` Zbda Zcdb ZddqdcZedwddZfde Zgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl Zndm Zoy)yrC   z'Notebook Shell based on StyledTextCtrl.r)   r   NTFc           
      p    t         j                  j                   |||||        j                          |ddl}|j
                  }t        j                   _        t        j                   _        t        j                   _	        |ddl
m} n|}t         j                   j                         _        d j                  _        d j                  _         ||| j$                   j                  t'         j(                        t+         j,                        d| _        t1                _         j5                          _         j2                  j9                          d j2                  _        d _         j.                  j?                          _         d _!        d	 _"        d _#         jD                  r jI                  d
tJ        jL                          jI                  dtJ        jL                          jI                  dtJ        jL                          jO                  d
d        jO                  dd        jO                  dd        jQ                  d
d	        jQ                  dd	        jQ                  dd	        jS                  dd        jS                  dd        jU                  dd        jW                  d
tX        dtZ        z  z          jW                  dt\        dt^        z  z  dt`        z  z  dtb        z  z          jW                  dtJ        jd                          jW                  dd       |r jO                  dd       | _3        d}d}d}d} ji                  tZ        tJ        jj                  ||        ji                  t^        tJ        jj                  ||        ji                  tl        tJ        jn                  d|        ji                  tp        tJ        jr                  d|        ji                  tt        tJ        jv                  d|        ji                  tx        tJ        jz                  d|        ji                  t`        tJ        jj                  t}        j~                  ddd      t}        j~                  ddd              ji                  tb        tJ        j                  t        d      z   |t}        j~                  ddd             |rd _B        nd _B        d _C         j                  dk(  r ji                  t        tJ        jn                  d|        ji                  t        tJ        jr                  d|        ji                  t        tJ        jv                  d|        ji                  t        tJ        jz                  d|       n j                  dk(  r ji                  t        tJ        j                  |d        ji                  t        tJ        jr                  d|        ji                  t        tJ        j                  |d        ji                  t        tJ        j                  |d        ji                  t        tJ        jn                  d|        ji                  t        tJ        jr                  d|        ji                  t        tJ        jv                  d|        ji                  t        tJ        jz                  d|        ji                  t        tJ        j                  dt}        j~                  ddd              ji                  tJ        j                  tJ        jn                  dd        ji                  tJ        j                  tJ        jr                  dd        ji                  tJ        j                  tJ        jv                  dd        ji                  tJ        j                  tJ        jz                  dd        ji                  tJ        j                  tJ        j                  dd        ji                  tJ        j                  tJ        j                  dd        ji                  tJ        j                  tJ        j                  dd       g  _Z        d _[        d _\        d _]         j                  t|        j                   j                          j                  t|        j                   j                          j                  t|        jJ                  j                   j                          j                  t|        j                   j                          j                  t|        j                   j                         |rt|        j                   _i        t|        j                   _j        t|        j                   _k        t|        j                   _l        t|        j                   _m        t|        j                   _n        t|        j                   _o        nt}        j                          _i        t}        j                          _j        t}        j                          _k        t}        j                          _l        t}        j                          _m        t}        j                          _n        t}        j                          _o         j                  t|        j                   fd  j                  !        j                  t|        j                   fd" j                  !        j                  t|        j                   fd#t        j                  !        j                  t|        j                   fd$ j                  !        j                  t|        j                   fd%t        j                  !        j                  t|        j                   fd& j                  !        j                  t|        j                   fd' j                  !        j                  t|        j                   fd( j                  !        j                  t|        j                   fd) j                  !       d _u         j                  t|        j                   j                          j                  |       g g g g g g\  }}}}}|r: j                  t        d*       d+}d,}||dz   g}|dz
  |dz
  g}|g}|dz   g}|d
z   g} j                           j                          |
r4|	t        j                  j                  d-      }	 j                  |	       n j                          |dgz  }| j                         d
z
  gz  }| j                         dz
  gz  }t         j                               D ]U  } j	                  |        j                  |       ||v r/ j                  |tl                j                  |t               [||v r/ j                  |tx                j                  |t               ||v r/ j                  |tl                j                  |t               ||v r/ j                  |tt                j                  |t               ||v r0 j                  |tx                j                  |t               ( j                  |tt                j                  |t               X d _        d _         j                          t}        j                   j                  d       y).zCreate Shell instance.Nr   r   )Interpreterr   F)r3   rawinstdinstdoutstderrr   Tr   r   r      r"   fold1ztab.timmy.whinge.level4z#E0E0E0blackredbluewhite   <	ShellMode
SlicesMode      z#808080r)   c                 $    j                         S rw   )CutevtrR   s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>3  s    488: r^   )r1   c                 $    j                         S rw   )Copyr<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>4      499; r^   c                 $    j                         S rw   )CopyWithPromptsr<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>5  s    4+?+?+A r^   c                 $    j                         S rw   )Paster<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>6      4::< r^   c                 $    j                         S rw   )PasteAndRunr<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>7  s    4+;+;+= r^   c                 $    j                         S rw   )	SelectAllr<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>8  s    4>>+; r^   c                 $    j                         S rw   )Clearr<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>9  rE  r^   c                 $    j                         S rw   )Undor<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>:  r@  r^   c                 $    j                         S rw   )Redor<  s    r]   r   z&SlicesShell.__init__.<locals>.<lambda>;  r@  r^   r   r   r&   PYTHONSTARTUP)r   
EditWindowr<   r   __main__r   re   r)  r*  r+  interpreterr'  r   readline	readlinesreaderinput	isreading	raw_inputr   writeOutr   writeErrinterpr   rF   GetIdr1   r   r   r   getAutoCompleteKeysautoCompleteKeysmoremargins
lastUpdateSetMarginTyper   STC_MARGIN_SYMBOLSetMarginWidthSetMarginSensitiveSetProperty
SetMarginsSetMarginMaskGROUPING_MASKGROUPING_SELECTINGIO_MASKIO_SELECTINGREADLINE_BGINPUT_READLINESTC_MASK_FOLDERSr9   MarkerDefineSTC_MARK_FULLRECTGROUPING_STARTSTC_MARK_BOXMINUSGROUPING_START_FOLDEDSTC_MARK_BOXPLUSGROUPING_MIDDLESTC_MARK_VLINEGROUPING_ENDSTC_MARK_LCORNERr>   ColourSTC_MARK_CHARACTERordmodeexecOnNextReturnINPUT_STARTINPUT_START_FOLDEDINPUT_MIDDLE	INPUT_ENDSTC_MARK_ARROWSSTC_MARK_DOTDOTDOTOUTPUT_STARTOUTPUT_START_FOLDEDOUTPUT_MIDDLE
OUTPUT_END	OUTPUT_BGSTC_MARK_BACKGROUNDSTC_MARKNUM_FOLDEROPENSTC_MARKNUM_FOLDERSTC_MARKNUM_FOLDERSUBSTC_MARKNUM_FOLDERTAILSTC_MARKNUM_FOLDERENDSTC_MARK_BOXPLUSCONNECTEDSTC_MARKNUM_FOLDEROPENMIDSTC_MARK_BOXMINUSCONNECTEDSTC_MARKNUM_FOLDERMIDTAILSTC_MARK_TCORNERhistoryhistoryIndexnoteMode	searchTxtrO   EVT_CHAROnCharEVT_KEY_DOWN	OnKeyDownEVT_STC_MARGINCLICKOnMarginClickEVT_CONTEXT_MENUOnContextMenuEVT_UPDATE_UI
OnUpdateUIID_CUTID_COPYID_PASTEID_SELECTALLID_CLEARID_UNDOID_REDONewIdRefEVT_MENUr   ID_COPY_PLUSID_PASTE_PLUSwaitingrP   rQ   	showIntror  tutorialTextsetBuiltinKeywordssetLocalShellrJ   environgetr6   r  GetLineCountrangeclearGroupingMarkersclearIOMarkers	MarkerAddSliceSelectionrunningSliceEmptyUndoBuffer	CallAfterr   )rR   r0   r1   rT   rU   rV   r2   r3   r4   r5   r6   r7   r8   
useStockIdr9   rZ   r[   rR  r'  	sel_colorgrouping_colorinput_coloroutput_coloroutStartoutEndinStartinMiddleinEndtutStart	testStartis   `                              r]   r<   zSlicesShell.__init__Z  sb    	&&tVRdEJ		>&&F YY
jjjj 0%K #4==$..A % "
 $( *0(,(,)6t}})E)6t}})E	1
 ,01 h**,d#%$ !% ? ? A 	  << q#"7"78q#"7"78q#"7"782&2&2&##Ad+##Ad+##Ad+VS)5s;OOAa  q-!5G2G"GIq'A|O";an"LqR`O`"`bq#"6"67q!$ ##Aq)#4D"I"NKL0S5J5J'4lS5J5J'4 nS5J5J%~73S5I5I%~7oS5G5G%~7lS5I5I%~7 k3+@+@ iiC4biiC6LNnc.D.DSX.M)299SS+AC %	&	"'D!yy,&!!+c6K6K");8!!"4c6J6J");8!!,c6H6H");8!!)c6J6J");8K'!!+c6I6I"-w8!!"4c6J6J");8!!,c6L6L"-w8!!)c6L6L"-w8 lc6K6K%|51c6J6J%|5mc6H6H%|5jc6J6J%|5 iS5L5L%ryyS'=? c88S=R=R%y2c44S=Q=Q%y2c77S=O=O%y2c88S=Q=Q%y2c77S=Z=Z%y2c;;S=[=[%y2c;;S=Q=Q%y2   			"++t{{+		"//4>>2		"&&,,d.@.@A 			"%%t'9'9:		"""DOO4 ))DK::DLKKDM "DKKDM::DL::DL++-DK;;=DLKKMDM "DKKMDM;;=DL;;=DL 			"++5$++	F		"++64<<	H		"++AeFXFX	Y		"++7DMM	J		"++=%BUBU	V		"++;@Q@Q	R		"++7DMM	J		"++64<<	H		"++64<<	H 		"++t{{+ 	y!24R2b1A.  JJ|H-HIy{+HQJy{+FKGk]HQ;-E 	! 	 $ "

 ?""=1KKM1#""$Q&''$##%a'((t((*+ 	0A%%a("H}q0q. fq.q,gq0q-hq1q.eq.q+q1q//	04 " 	
T&&*r^   c                 0   |d k(  r.| j                   dk(  rd| _         n(| j                   dk(  rd| _         n|rd| _         nd| _         d}| j                   dk(  r| j                  t        t        j                  d|       | j                  t
        t        j                  d|       | j                  t        t        j                  d|       | j                  t        t        j                  d|       y | j                   dk(  r| j                  t        t        j                  |d       | j                  t
        t        j                  d|       | j                  t        t        j                  |d       | j                  t        t        j                  |d       y y )Nr6  r7  r1  r3  )r~  rq  r  r   rt  r  rv  r  rx  r  rz  r  r  )rR   r8   r  s      r]   r   zSlicesShell.ToggleShellMode  sK   D yy+%,	L(K$)!DI"DI99l"kS5J5J%{40S5I5I%{4lS5G5G%{4iS5I5I%{4YY#kS5H5H)740S5I5I%{4lS5K5K)74iS5K5K)74 $r^   c                     |d k(  r| j                    | _         n|| _         | j                   r| j                  dd       y | j                  dd       y )Nr   r   r"   )r9   re  )rR   r9   s     r]   r   zSlicesShell.ToggleFoldingMargin  sL    d")-)?)?%?D"%6D"!!1%2&r^   c                 L    g | _         d| _        t        j                  d       y )Nr)   zSlicesShell.clearHistorysignal)r  r  r	   sendrx   s    r]   clearHistoryzSlicesShell.clearHistory  s    9:r^   c                     | ` y rw   )r\  rx   s    r]   r   zSlicesShell.destroy  s    Kr^   c                 $    | j                          y)zSet focus to the slices shell.N)rH   rx   s    r]   r   zSlicesShell.setFocus  s    r^   c                 f    | j                   rt        j                  d       |j                          y)z Free the CPU to do other things.g?N)r  timesleepr   ra   s     r]   rQ   zSlicesShell.OnIdle  s    <<JJt

r^   c                 N   |r| j                  |d       	 | j                  j                  rj|r@|j                  t        j
                        s!| j                  t        j
                  d       | j                  | j                  j                  d       yy# t        $ r Y yw xY w)z.Display introductory text in the slices shell.r   r   N)r  r\  r2   endswithrJ   linesepr  rR   rq   s     r]   r  zSlicesShell.showIntro  s    JJtJ*	{{$$bjj 9JJrzzxJ8

4;;00h
? %  		s   A?B 	B$#B$c                     ddl m} |rddl}nddl}|}dx|_        x|_        |_        t        |_        t        |_        t        |_	        t        |_
        y)zwCreate pseudo keywords as part of builtins.

        This sets "close", "exit" and "quit" to a helpful string.
        r   r   N3Click on the close button to leave the application.)sixr   builtins__builtin__closeexitr  r   r   r   r   )rR   r   r  r  s       r]   r  zSlicesShell.setBuiltinKeywords  sL    
 	"HA	B 	Br^   c                 *    | j                  dd       y)zQuit the application.r  r   r   Nr  rx   s    r]   r  zSlicesShell.quit  s     	

H  	 	"r^   c                 J    t        |       | j                  j                  d<   y)zAAdd 'slicesshell' to locals as reference to ShellFacade instance.)r   slicesshellN)r   r\  r3   rx   s    r]   r  zSlicesShell.setLocalShell  s    ,=D,I=)r^   c                 $   |r}t         j                  j                  |      r^d|z   }t        r)| j	                  d|z         | j	                  d|z         n| j	                  d|d|d       || j
                  _        y| j	                  d       y)	z9Execute the user's PYTHONSTARTUP script if they have one.zStartup script executed: z	print(%r)z,with open(%r, "r") as f:
    exec(f.read())
zprint(z); execfile()r   N)rJ   rK   isfiler   pushr\  r5   )rR   r5   rq   s      r]   r6   zSlicesShell.execStartupScript  sw    RWW^^M:.>D		+,-		 14AC D 		t]KL(5DKK%IIbMr^   c                    t         t        t        t        j                  j                         d   t        j                  t        t        j                        t        j                  fz  }| j                  |j                         d       y)zDisplay information about Py.r   r   r   N)DISPLAY_TEXT
__author__r   re   rg   rh   r>   ri   strrk   rf   r  stripr  s     r]   r  zSlicesShell.about  s]    	W				Q	!2!2C4H		 	

4::<X
.r^   c                    | j                  |      }| j                  |      }|j                  t        j                  d      }|j                  d      }t        |      }t        |      dk(  rd|d   fS t        |      dk(  r|\  }}}}g }d}	t        |      D ]  \  }
}|j                         }g }|D ]%  }|j                         r|j                  |       % n dj                  |      }|
dk(  rd}d}n|
dz
     }|
dz
     }|j                         dk(  s||k7  s|d	v s|s|r|	dz  }	|	|z  }	|	r|j                  |	       |}	 |j                  |	       |S )
z4Turn a text block into multiple multi-line commands.r.   r   Nr   r   r   r   F)elseelifexceptfinally)fixLineEndingslstripPromptrB   rJ   r  rh   r   len	enumeratelstripisalnumappendrj   r  )rR   rq   linescontinuationsstringContinuationListindentationBlockListlineContinuationListparentheticalContinuationListcommandscommandjliner  
first_wordr  
stringContlineConts                    r]   BreakTextIntoCommandsz!SlicesShell.BreakTextIntoCommands  s    ""4(  &||BJJ-

4 ,T2}q a((("AN?"#7 !>& #	FAd[[]F J 99;%%a(	
 ,J !t"
3AaC8
/!4zz|r!Vt^??X44 OOG,G#	J 	 r^   c                     | j                  |      }d}t        |      D ]I  }|d|z  z  r|d|z  z  s| j                  ||       &|d|z  z  r/|d|z  z  s8| j                  ||       K y)z*MarkerSet is the Set command for MarkerGetr$   r   N)	MarkerGetr  r  MarkerDelete)rR   r  markerBitsSet
markerBits
numMarkersr  s         r]   	MarkerSetzSlicesShell.MarkerSetH  su    >>$'

z" 	*AA&q!t1DtA&#q!t,:A3F!!$q)		*r^   c                    |dk(  r| j                         }| j                         }t        |dd      D ])  }| j                  |      dt        z  dt
        z  z  z  s) n }d}t        ||      D ]N  }| j                  |      dt        z  z  r n1||kD  s&| j                  |      dt        z  dt
        z  z  z  sLd} n ||z   }||fS )EGet the start/stop lines for the slice based on any line in the sliceNr)   r   r   )GetCurrentLiner  r  r  rs  ru  ry  rR   line_num	num_linesr  
start_lineaddition	stop_lines          r]   GetGroupingSlicezSlicesShell.GetGroupingSliceR  s    T>((*H##%	x2& 	A~~a A~$5;P8P$PQ	 
x	* 	A~~a 1l?2H*DNN1$5~-3H0HH%J	 H*	)##r^   c                 X   |dk(  r| j                         }| j                         }t        |dd      D ]  }| j                  |      t        z  s n }d}t        ||      D ]>  }| j                  |      t
        z  r n$||kD  s#| j                  |      t        z  s<d} n ||z   }||fS )r  Nr)   r   )r  r  r  r  IO_ANY_START_MASKIO_END_MASKr  s          r]   
GetIOSlicezSlicesShell.GetIOSlicek  s    T>((*H##%	x2& 	A~~a #44	 
x	* 	A~~a ;.H*4>>!#47H#H	 H*	)##r^   c                    |d k(  r| j                         }| j                  |      \  }}| j                  |dz   |       | j                  |      }| j	                  |       | j                  |t               | j                  |       |dt        z  dt        z  z  z  r| j                  |t               y |dt        z  dt        z  z  z  r-| j                  |t               | j                  |t               y y Nr   )r  r  	HideLinesr  r  r  ru  r  r  r  r  r  r  rR   r  startendmarkers        r]   FoldGroupingSlicezSlicesShell.FoldGroupingSlice  s    T>((*H''1	cuQws#~~e$!!%(u23E"anq*<'<<>NN5!34<!-@*@@BNN5!45NN5+r^   c                 r   |d k(  r| j                         }| j                  |      \  }}| j                  |dz   |       | j                  |      }| j                  |      dt        z  dt
        z  z  z  rB| j                  |      dt        z  z  r'| j                  |       | j                  |t
               | j                  |       |dt        z  dt        z  z  z  r| j                  |t               y |dt        z  dt        z  z  z  r-| j                  |t               | j                  |t               y y r   )r  r  r!  r  rs  ru  ry  r  r  r  r  r  r  r  r  r"  s        r]   FoldIOSlicezSlicesShell.FoldIOSlice  s
   T>((*H//(+	cuQws#~~e$NN5!>!A'<$<<?s#ao5%%e,NN5!67E"anq*<'<<>NN5!34<!-@*@@BNN5!45NN5+r^   c                 6   |d k(  r| j                         }| j                  |      \  }}| j                  |dz   |       | j                  |       | j	                  |t
               t        ||      D ]  }| j                  |      }|dt        z  dt        z  z  z  r(| j                  |       | j	                  |t               R|dt        z  dt        z  z  z  si| j                  |       | j	                  |t               | j	                  |t                y r   )r  r  	ShowLinesr  r  rs  r  r  r  r  r  r  r  r  )rR   r  r#  r$  r  r%  s         r]   UnFoldGroupingSlicezSlicesShell.UnFoldGroupingSlice  s    T>((*H''1	cuQws#!!%(u^,uS! 	,A>>!$FK!-?*??@##A&q-1l?Q0C-CCD##A&q.q+	,r^   c                 J   |d k(  r| j                         }| j                  |      \  }}| j                  |dz   |       | j                  |      }| j                  |      dt        z  dt
        z  z  z  rB| j                  |      dt        z  z  r'| j                  |       | j                  |t               | j                  |       |dt        z  z  r| j                  |t               y |dt        z  z  r-| j                  |t               | j                  |t               y y r   )r  r  r*  r  rs  ru  ry  r  r  r  r  r  r  r  r  r"  s        r]   UnFoldIOSlicezSlicesShell.UnFoldIOSlice  s    T>((*H//(+	cuQws#~~e$NN5!>!A'<$<<?s#ao5%%e,NN50E"A)))NN5-a,,,NN5.NN5+ -r^   c                    |dk(  r| j                         }| j                         }| j                  |      t        z  ry| j	                  |      \  }}| j                  |      \  }}||k  rI| j                  | j                  |dz         | j                  |dz                | j                  dd       | j                  |      }| j                  |       | j                  ||       y)z!Delete all outputs after an inputNr   r   TsliceDeletion)r  r  r  OUTPUT_MASKr  r  SetSelectionPositionFromLineReplaceSelectionGetLineEndPositionSetCurrentPos)rR   r  r  startInendInstartGroupingendGroupingnew_poss           r]   DeleteOutputSlicesAfterz#SlicesShell.DeleteOutputSlicesAfter  s    T>((*H##%	>>(#k1ooh/"&"7"7"A!kd33E!G<"33KMBD!!"4!8''17#''*r^   c                    |d k(  r| j                         }| j                  |      \  }}| j                  |      t        z  rd}t        }t
        }d}n(| j                  |      t        z  rd}t        }t        }d}||k(  ry ||k(  rx| j                  |dz          | j                  |dz          dk(  r| j                  |dz   t               r.| j                  |dz          | j                  |dz   t               y y | j                  |       | j                  |       dk(  r| j                  |t               r'| j                  |       | j                  |t               |dz
  |kD  rx| j                  |dz
         | j                  |dz
         |dk(  r| j                  |dz
  t               |r.| j                  |dz
         | j                  |dz
  t               y y y )NInputTr   Fr   )r  r  r  
INPUT_MASKr  r  r1  r  r  r  r  r  r  rs  ry  )rR   r  	start_numend_numr  r#  r$  splitGroupings           r]   
SplitSlicezSlicesShell.SplitSlice  s   T>((*H//(3	'>>(#j0DECM^^H%3DECMg 
+NN8A:e,X~t~~hqjC))(1*5xz.9  )NN8E*X~t~~hyA))(3x7z)###HQJ/xz#.>4>>(1*Y#G --hqj9NN8A:l; !	 $r^   c                    | j                  | j                         dz
        }| j                  | j                               }|dk(  ry|t        d      t        d      fv ri| j                         }| j	                  |      }| j	                  |dz
        }| j	                  |dz         }|dt
        z  z  ry|dt        z  dt        z  z  z  ry|dt        z  dt        z  z  z  r| j                  |       n |dt
        z  z  r| j                  |dz
         |dt        z  z  r|r| j                  |       y|dt        z  dt        z  z  z  ry|dt        z  dt        z  z  z  ry|dt        z  dt        z  z  dt        z  z  dt        z  z  z  r| j                  |       y|dt        z  dt        z  z  z  r| j                  |dz
         yNr   r   Fr.   T)	GetCharAtGetCurrentPosr}  r  r  ry  rs  ru  r  r  r  r  r  r  r  r  )rR   r|   c_beforec_afterr  r%  marker_beforemarker_afters           r]   BackspaceWMarkerszSlicesShell.BackspaceWMarkers  s    2 2 4q 89t1134Q;#d)CI..((*H>>(+F..!4M
3LL2A~-3H0HHJ Q%6<Q9Q%QS--h7<1--hqj99,%##H-  !Y,J">?A{NQ0B-BBD A{Na9K6K$K$%|O%4679L6L%M N''1  9q*} <>''
3r^   c                 V   | j                  | j                         dz
        }| j                  | j                               }|dk(  ry|t        d      t        d      fv rI| j                         }| j	                  |      }| j	                  |dz
        }| j	                  |dz         }|dt
        z  z  ry|dt        z  dt        z  z  z  ry|dt        z  dt        z  z  z  r| j                  |dz          n|dt
        z  z  r| j                  |       |dt        z  dt        z  z  z  ry|dt        z  dt        z  z  z  ry|dt        z  dt        z  z  dt        z  z  dt        z  z  z  r| j                  |dz          y|dt        z  dt        z  z  z  r| j                  |       yrE  )rG  rH  r}  r  r  ry  rs  ru  r  r  r  r  r  r  r  r  )rR   rI  rJ  r  r%  rK  rL  s          r]   ForwardDeleteWMarkersz!SlicesShell.ForwardDeleteWMarkers5  s    2 2 4q 89t1134A:T3t9--((*H>>(+F..!4M
3L!\/+!^"3a9N6N"NPa/!5J2JJL--hqj9!ao7--h7!Y,J68![.16H3H"HJQ^q2D/DD_-/02E/EF G''
3  "alQ
]&BD''1r^   c                    d}d}| j                         dz
  }d }t        | j                               D ]  }| j                  |      dt        z  z  r|dk(  r8|}| j                  |      t        z  rd}nc| j                  |      t
        z  rKd}nH| j                  |      t        z  r|dk(  r+|dz
  } n5| j                  |      t
        z  r|dk(  r|dz
  } nd}|dk(  s|dz
  } n |dk(  rd| _        ||fS NFr   r   rW  outputT)r  r  r  rm  r?  r1  r  rR   startedr#  r$  r  r  s         r]   GetIOSelectionzSlicesShell.GetIOSelectionX  s	   !t((*+ 	A~~a 1l?2E>E~~a(:5$*[8%~~a(:5> !!C!*[8= !!C!$aC)	, E> %DSyr^   c                    	 d}d}| j                         dz
  }d }t        | j                               D ]h  }| j                  |      dt        z  z  r=|dk(  r9|}| j                  |      t        z  rd}n| j                  |      t
        z  rd}n| j                  |      t        z  r[|dk(  r|dz
  } n| j                  |       | j                  |       | j                  |t               | j                  |t               n| j                  |      t
        z  rp|dk(  r|dz
  } nw| j                  |       | j                  |       | j                  |t               | j                  |t               | j                  |t               d}]|dk(  sd|dz
  } n |r?||k7  r8| j                  |       | j                  |       |dk(  r| j                  |t               |dz   | j                         k  rI| j                  |dz         t
        z  r| j                  |t               y | j                  |t               y | j                  |t               y | j                  |      dt        z  z  r'| j                  |       | j                  |t               | j                  |t               | j                  |t               | j                  |t               y y y rQ  )r  r  r  rm  r?  r1  r  r  r  r  rw  r  r  r  ry  r  rS  s         r]   MergeAdjacentSliceszSlicesShell.MergeAdjacentSlicesy  sd   	5!t((*+ 	A~~a 1l?2E>E~~a(:5$*[8%~~a(:5> !!C! //2 55a8 NN1\: NN1_=*[8= !!C! //2 55a8 NN1]; NN1Y7 NN1_=$aC?	B sEz$%%c*W}s9-q5**,,~~c!e,{:s?;s<8NN3|4>>%(1l?:--e4NN59s:.s9-s<0% "7r^   c                 z   | j                   syg }d\  }}t        | j                               D ]O  }| j                  |      dt        z  dt
        z  z  z  r
|dk(  r|}|}2|dk7  s8|j                  ||g       d\  }}Q |dk7  r|j                  ||g       | j                          d| _         t        t        |      dz
  dd      D ]  }| j                  | j                  ||   d         | j                  ||   d         dz          | j                  ||   d   dz         }| j                  dd	       | j                         }| j                  |dz
        dt        z  z  rM| j                  |      dt        z  dt        z  z  z  r(| j!                  |       | j#                  |t$               np| j                  |dz
        dt        z  z  rR| j                  |      dt$        z  dt&        z  z  z  r-| j!                  |dz
         | j#                  |dz
  t               |dt(        z  z  r?| j+                  |       | j#                  |t(               | j#                  |t,               |dt.        z  z  s| j+                  |       | j#                  |t.               | j#                  |t,                y)
z;Deletion of any selected and possibly discontinuous slices.N)NNr   Fr)   r   r   Tr/  )r  r  r  r  rk  rm  r  MarginUnselectAllr  r2  r3  r5  r4  r  ry  rw  r  r  rs  ru  r  r  r  r  )rR   selectedSlicesr#  r$  r  
markerNextcur_lines          r]   SliceSelectionDeletez SlicesShell.SliceSelectionDelete  s   "" 	ct((*+ 	$A~~a A'9$9A|O$KL$;E%%uSk2#	c	$ $;!!5+. 	 ! s>*1,R3 	3Ad33N14Ea4HI"55nQ6G6JKAMO q(9!(<Q(>?J!!"4!8((*H 
+ao=x(Q-?!\/-QS))(3x7NN8A:.O1CC>>(+>)A/D,DDG))(1*5xz,7A|O+##H-x5x	2a!444##H-x(;<x	29	3< 	r^   c           	         | j                   r|j                          y| j                         sy|j                         }| j	                         }| j                  | j                               }|t        j                  t        j                  fv ry|| j                  v r| j                         r| j                          | j                  ||      t        |      z   }| j	                         }t        |      }| j                  d|||t!        |      z   d       | j#                  |d       | j%                          | j&                  r| j)                  |       yy|t+        d      k(  r| j                         r| j                          | j-                  d       | j                  ||      dz   }| j	                         }d}| j                  d|||t!        |      z   d	       d	| j.                  | j0                     d
<   | j#                  |d       | j%                          | j3                  || j	                         | j5                         k(         y| j	                         }	 t        |      }| j                  d|||t!        |      z          |j                          | j%                          y#  |j                          Y yxY w)z|Keypress event handler.

        Only receives an event if OnKeyDown calls event.Skip() for the
        corresponding event.NinsertFforceNewActionr>  r   (r   TallowsAppend)r  r   CanEdit
GetKeyCoderH  r3  r  r>   
WXK_RETURNWXK_NUMPAD_ENTERr_  AutoCompActiveAutoCompCancelGetTextRangechrUpdateUndoHistoryBeforer  r  UpdateUndoHistoryAfterr  autoCompleteShowr}  r4  undoHistory	undoIndexautoCallTipShowGetTextLength)rR   rb   keycurrposstopposr  cposss           r]   r  zSlicesShell.OnChar  sv    ==JJL ||~ $$&''(;(;(=> 2==""5"566D))) ""$##%''9CHDG ##%D#hA((!Dc!f8= ) ?JJqgJ&'')  %%g. !CH_ ""$##% !!"%''9C?G ##%DA((!Dc!f8< ) >=ADT^^,^<JJqgJ&'')  !%!3!3!59K9K9M!MO
 ##%Dc(,,XaT#a&[I

++-

s   &AJ2 2Kc                    | j                         | j                  z
  }|dk(  r#| xj                  dz  c_        | j                  d= y | j                  }| j                  }||   d   }dj	                  t        |      D cg c]  }t        | j                  ||z               ! c}      }|j                  t        j                  d       || j                  | j                     d<   ||z   | j                  | j                     d<   t        |j                  d            | j                  | j                     d	<   | j                          y c c}w )
Nr   r   r)   posStartr   r.   charListposEndnumLines)rr  $TotalLengthForAutoCompActiveCallbackrp  ro  rj   r  rk  rG  rB   rJ   r  r  rh   rm  )rR   numCharsuHuIrv  r  rw  s          r]   AutoCompActiveCallbackz"SlicesShell.AutoCompActiveCallback6  s   ##%d&O&OOQ;NNAN  $B~~BB
#DggE(OLqs4>>$q&12LMAIIbjj&;<DT^^,Z89=DT^^,X6;>qwwt};MDT^^,Z8'') Ms   >$E	c           	      $+   |j                         }| j                         r|t        j                  t        j                  fv r| j                         }| j                  dd||dz   d       d| j                  | j                     d<   | j                         | _
        |j                          t        j                  | j                         |t        j                  t        j                  fv r| j!                          y|j                          y|j#                         }|j%                         }|j'                         }| j                         }| j                         }| j)                         | j+                         k7  }	|t        j,                  k(  r| j.                  r4| j1                  d       | j3                  d	       | j5                  d
       n3| j1                  d       | j3                  d       | j5                  d       | j.                   | _        y| j.                  r|j                          yd}
d}d}|sj|sg|sd|t        j                  fv rP| j6                  dk(  rd}
n| j6                  dk(  r| j9                         \  }}| j;                  |      }| j=                  |      }| j?                  ||      }tA        |d      \  }}}}|jC                  d      d   }|jE                         dk(  rd}n|d   dk(  rd}nd}|d   s|d   s
|d   s|d   rd}
n|r7| j=                  |      }| jG                  |       | jI                  ||       d}
n| jK                         |k7  r7| j=                  |      }| jG                  |       | jI                  ||       d}n_d}n\|t        j                  fv s&|s|rE|t        j                  t        j                  fv r#| j6                  dk(  rd}n| j6                  dk(  rd}
|rn|
s|r| jM                         r| jO                          n| jP                  rtS        | jU                               D ]f  }| jW                  |      d	tX        z  z  r| j[                  |d||        na| jW                  |      d	t\        z  z  sQ| j[                  |d||        n. n+|
r| j_                          n|r| ja                          | jc                          n|r|r|j                          n|t        jd                  k(  r#| jM                         r|j                          n|t        j                  k(  r|r|r| jg                          n}|r5|ti        d      t        jj                  fv rtm        jn                  d       nF|r5|ti        d      t        jp                  fv rtm        jn                  d       n|r5|ti        d      t        jr                  fv rtm        jn                  d       n|r|ti        d      ti        d       fv s|r%|t        j                  k(  r| ju                          n|r;|s9|ti        d!      ti        d"      t        jv                  fv r| jy                          nZ|r;|r9|ti        d!      ti        d"      t        jv                  fv r| j{                          n|r;|s9|ti        d!      ti        d"      t        jv                  fv r| j}                          n|r|t        j~                  k(  r| jK                         }| j9                  |      d   }| j;                  |      }||k(  r+|dkD  r&| j;                  | j9                  |d	z
        d         }| jG                  |       |	sR|sO| j                  |       | j                          n,|r|t        j                  k(  r| jK                         }| j9                  |      d	   }| j=                  |      }||k(  r<|| jU                         d	z
  k  r&| j=                  | j9                  |d	z         d	         }| jG                  |       |	s|s| j                  |       | j                          ng|rU|t        j                  k(  rBd}||kD  rJ| jG                  |       |	s6|s3| j                  |       | j                          n|ru|t        j                  k(  rb| j=                  | jU                         d	z
        }||k  r| jG                  |       |	s|s| j                  |       | j                          n|	r|t        vr| j                         sn}|r|s|ti        d#      ti        d$      fv s|r'|s%|t        jv                  k(  r| j                          n8|r<|r:|ti        d#      ti        d$      fv r"| j                         r| j                          
n|r|s|t        j                  k(  s*|r<|ti        d%      ti        d&      fv r$| j                         r| j                  d	'       
n|r|s|t        j                  k(  s*|r<|ti        d(      ti        d)      fv r$| j                         r| j                  d'       
nP|r9|r7|t        j                  k(  r$| j                         r| j                  d	'       
n|r9|r7|t        j                  k(  r$| j                         r| j                  d'       	n|r&|t        j                  k(  r| j                  |       	n|r"|r |ti        d*      fv r| j                          	n|t        j                  k(  r| j                          	ni|t        j                  k(  rP| jP                  r1| j                          t        j                  | j                         	n|	r#| j                         r| j                  d       n| j                         rd}| jK                         } | dk(  s?| j                         | j;                  |       k(  r| jW                  | d	z
        t        z  rd}|rd| j                         }t        | j                  |d	z
              }!| j                  d+|!|d	z
  |       | j                         r|j                          t        j                  | j                         n|t        j                  k(  r^| jP                  r1| j                          t        j                  | j                         n|	r#| j                         r| j                  d       n| j                         r~d}| jK                         } | | jU                         d	z
  k(  s?| j                         | j=                  |       k(  r| jW                  | d	z         t        z  rd}|ra| j                         }t        | j                  |            }!| j                  d+|!||d	z          | j                         r|j                          t        j                  | j                         n|t        j                  k(  r| j                         r| j                         }| j                  dd||dz   d       d| j                  | j                     d<   | j                         | _
        |j                          t        j                  | j                         n|t        jv                  k(  rn|r*|ti        d,      ti        d-      fv r| j                          n|r[|ti        d.      ti        d/      fv rCt        j                  d0      }"|"dk7  rot        |"d1      5 }#| j                  |#       ddd       nG|r|ti        d2      ti        d3      fv r| jW                  | jK                               t        z  r| j                         }t        | j:                  | j                  | j                  |                  \  }$}| j                  d4d|$|d       | j                          | jI                  ||       | j                  d       | j                          nd|r|ti        d5      ti        d6      fv r| jP                  r | j                         }| j                         }%| jP                  rt        | j:                  %      \  }$}| j                  d4d|$|d       | j                          | jI                  |       | j                  d       | j                          n| jP                  r|t        j                  t        j                  t        j                  t        j                  fv r|t        j                  k(  rtS        | jU                               D ]v  }| jW                  |      d	tX        z  z  r|dkD  r| j[                  |d	z
  d||        n| jW                  |      d	t\        z  z  sY|dkD  r| j[                  |d	z
  d||        n n|t        j                  k(  rtS        | jU                         d	z
  dd      D ]  }| jW                  |      d	tX        z  z  r0|| jU                         d	z
  k  r| j[                  |d	z   d||        n)| jW                  |      d	t\        z  z  sj|| jU                         d	z
  k  r| j[                  |d	z   d||        n n|t        j                  k(  rtS        | jU                               D ]  }| jW                  |      d	tX        z  z  r| j[                  |d||        ny| jW                  |      d	t\        z  z  sQ| j                          | jG                  | j;                  |             |	s2|s0| j                  | j;                  |             | j                           n n|t        j                  k(  rtS        | jU                               D ]P  }| jW                  |      d	tX        z  z  r n| jW                  |      d	t\        z  z  s<| j[                  |d||        nw nu|t        v r|j                          n\| j                         snK| j+                         | j)                         kD  r|s|s|d7k  r| j                  d       |j                          | jP                  r|t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  fvr| j                          yyy# 1 sw Y   xY w)8zKey down event handler.r_  dummyr   Tr`  rc  Nr0  r   i  r1  r   r   Fr7  r6  ignoreErrorsr.   r)   r    r   r   ]FontIncreaser  [FontDecrease=FontDefaultXr   CcVvPp)stepNnHdeleteTtLlzLoad File As New Slicer   Dr   r%  Mm   )nre  rh  r>   rf  rg  rH  rl  ro  rp  rr  r}  r   r  r  
WXK_DELETEWXK_BACKri  ControlDownAltDown	ShiftDownGetSelectionStartGetSelectionEndWXK_F12r  SetCaretForegroundSetCaretWidthSetCaretPeriodr~  r  r3  r5  rj  r   rh   r  r6  r2  r  CallTipActiveCallTipCancelr  r  r  r  rk  DoMarginClickrm  insertLineBreakr<  processLine
WXK_ESCAPEclearCommandr}  WXK_NUMPAD_ADDr	   r  WXK_NUMPAD_SUBTRACTWXK_NUMPAD_DIVIDEr;  
WXK_INSERTr?  rB  CopyWithPromptsPrefixedWXK_HOME	SetAnchorEnsureCaretVisibleWXK_END
WXK_PAGEUPWXK_PAGEDOWNNAVKEYSrd  rD  rG  WXK_UPOnHistoryReplaceWXK_DOWNOnHistoryInsert	WXK_SPACEOnCallTipAutoCompleteManuallyOnShowCompHistoryWXK_F8OnHistorySearchr]  RestoreFirstMarkerr4  r1  rk  rG  rM  rO  WXK_TABr   r   r   LoadPyFileAsSlicer?  mapr  LineFromPositionrC  rm  rU  rW  	WXK_RIGHTWXK_LEFTrY  WXK_ALTWXK_COMMANDWXK_CONTROL	WXK_SHIFT)&rR   rb   rs  rv  controlDownaltDown	shiftDownrt  endpos	selectingdoLineBreakdoSubmitCommanddoPass	startLineendLinestartposr  strContindentBlockr  	parenContlastLinestillIndentedr;  r  curLineIOstarthomeIOendr$  rT   doDeleter\  rw  r   r   r#  ioSels&                                         r]   r  zSlicesShell.OnKeyDownF  s      r}}b&9&9::''),,Xgd46<@ - BCG  0@:>:L:L:N9

T889r}}R[[11##%  

 '')--/OO%	$$&##%**,0D0D0FF	"**}} ''0""1%##C(''.""1%##A& $-DM==JJL Yw2==""yy,& K'$(OO$5!	'00;009++Hf=9Mgcg9h6HY"==.r2??$b("'Ma[#%"&M"'M2;+b/Xb\R= $K" 33G<G&&w/%%gg6 $K((*G3 33G<G&&w/%%gg6!F$(O r**,,KSR]]575H5H5J .Jyy,& $K'  O!!#""$$$t0023 A~~a(1.@+@@**1aKH*Q_<**1aKH $$& ,,.  " WJJL BMM!!!#

BKKKI SSXr/@/@$AAOO>2 SSXr/E/E$FFOO>2 SSXr/C/C$DDOO=1 cc#hC%993"--#7HHJ SXs3x??IIK YSXs3x??  " [SXs3x??((* SBKK/))+Goog.q1G((1D${,,T__WQY-G-JKt$Yt$'')SBJJ.))+GOOG,Q/E))%0C#~t((*1,,--doogai.H.KLs#Ys#'')SBMM1C}""3' NN3'++-SBOO3))$*;*;*=a*?@C}""3' NN3'++-3g-dlln )C#c(7K0K{sbmm7KJJL Y SXs3x$88T\\^ )ryy0@cc#hC%99t||~!!r!* )r{{0Bcc#hC%99t||~!!r!* iC299,<lln  b ) iC2;;,>lln  b ) SBLL0..y9 Y33s8*+<""$ BII  " BKK""))+T445t||~%%b),,.{%%')>)>x)HH~~hqj1K?!&++-D$..a01A00!DF4H--/

T445BMM!""))+T445t||~%%b),,.!2!2!4Q!66%%')@)@)JJ~~hqj1K?!&++-D$.../A00!DaH113

T445 BJJ4<<>##%D(('$tAv8< ) >?CDT^^,^<6:6H6H6JD5JJLLL445 BMM! SSXs3x$88  " SSXs3x$88??#;<Ds{$s^ 0s**3/0 0 SSXs3x$88~~d1134zA'') 5 5"33D4I4I$4OPR	c,,Xbs<@ - B!!!$t,%%b)++-SSXs3x$88""'')))+"" 5 5e<	c,,Xbs<@ - B((*!!$t,%%b)++-   RYYr{{2<<DDBII~t0023 A~~a(1.@+@@Q3 ..qsAy+N*Q_<Q3 ..qsAy+N bkk!t00214R; A~~a(1.@+@@T..022 ..qsAy+N*Q_<T..022 ..qsAy+N bll"t0023 A~~a(1.@+@@**1aKH*Q_<..0**4+@+@+CD( NN4+@+@+CD 335 bkk!t0023 A~~a(1.@+@@*Q_<**1aKH G^JJL ##%d&<&<&>>"7s3w))"-JJL299R[[bkk::bnnR^^BLLR R&&(R y0 0s   AVVAVc                     | j                         }t        |      D ].  }| j                  |t               | j	                  |t
               0 y rw   )r  r  r  rk  r  rm  rR   r  r  s      r]   MarginSelectAllzSlicesShell.MarginSelectAll  sC    ##%	y! 	.ANN1/0a-	.r^   c                     | j                         }t        |      D ].  }| j                  |t               | j                  |t               0 d| _        y NF)r  r  r  rm  rk  r  r  s      r]   rY  zSlicesShell.MarginUnselectAll  sO    ##%	y! 	4Aa-a 23	4 "r^   c                    | j                         }|dk(  r	 |dk(  rd| _        | j                  |      \  }}| j                  |      }| j	                  |       | j                  ||       | j                  |      }	| j                  |      dt        z  z  rJ| j                  }
|sH|	dt        z  z  r| j                  |       n*|	dt        z  z  r| j                  |       n| j                  }
|s| j                          t        ||dz         D ]  } |
|t                n|dk(  rd| _        | j!                  |      \  }}| j                  |      }| j	                  |       | j                  ||       | j                  |      }	| j                  |      dt"        z  z  rD| j                  }
|sB|	t$        z  r| j'                  |       n'|	t(        z  r| j+                  |       n| j                  }
|s| j                          t        ||dz         D ]  } |
|t"                n|dk(  r	 |r'| j-                  |d       | j/                  |ddd       n|r_| j1                  |      r'| j-                  |d       | j/                  |ddd       nI| j-                  |d       | j/                  |ddd       n"| j3                  |       n| j                          |d	v r!
| j                  k(  r
|sd| _        y d| _        y y )
Nr   r   Tr   r   Fr   d   )r   r   )r  r  r  r3  r6  r2  r  rk  r  rs  r&  ru  r+  r  rY  r  r  rm  IO_START_MASKr(  IO_START_FOLDED_MASKr-  SetFoldExpandedExpandGetFoldExpanded
ToggleFold)rR   lineClickedmarginr  r  r  r#  r$  startPosstart_markertoggler  s               r]   r  zSlicesShell.DoMarginClick  s   ##%	1919 $D++K8IE#**51Hx(hx0.L~~k*Q0B-BB(( #a&77..{;%+@(@@00=~~&&(5Q' -q+,-QY $Dook2IE#**51Hx(hx0.L~~k*Q_<(( #m3((5%(<<**;7~~&&(5Q' 'q&'
 QY((d;KKT4; ++K8,,[%@Ka@,,[$?KtSAOOK0""$U?t((($)#$(#	 r^   c                     | j                  |j                               }| j                  ||j                         |j	                         |j                                |j                          y rw   )r  GetPositionr  	GetMarginGetShift
GetControlr   )rR   r=  r  s      r]   r  zSlicesShell.OnMarginClickO  sK     ++COO,=>;s}}s||~cnnFVW
r^   c                    | j                   dd }dj                  |      }ddl}|j                  d|      }g }|D ]"  }t	        |      dkD  s|j                  |       $ t        t	        |            D cg c]  }||   |d| vs||    }}|j                  t        d              | j                  d       dj                  |      }| j                         dz
  }	t        | j                  |	            j                         r.|	dz  }	t        | j                  |	            j                         r.| j                  | j                         |	z
  dz
  |       yc c}w )	z<Show possible autocompletion Words from already typed words.Nr  r   z[ \.\[\]=}(\)\,0-9\"]r   c                 R    t        | j                         |j                               S rw   )cmplower)abs     r]   r   z/SlicesShell.OnShowCompHistory.<locals>.<lambda>n  s    AGGIqwwy0I r^   )rs  T)r  rj   rerh   r  r  xranger"  r   AutoCompSetIgnoreCaserH  rk  rG  r  AutoCompShow)
rR   hisjoinedr  newlistthlistr  unlist
stringlistrv  s
             r]   r  zSlicesShell.OnShowCompHistoryV  sM    ll1o 3 ((3V<  	"AAw{q!	" &,CK%8XF1IVTVUVZ<W&)XX 	
#IJK 	""4( XXf%

 !!#a'4>>4()113AID 4>>4()113 	$,,.5q8*E' Ys   6EEc           	         | j                         \  }}| j                         \  }}| j                  | j                               }	| j                  | j	                               }
| j                         }| j                         }|dk7  r"| j                  d|||t        |      z   d       t        j                  j                  | dg|i | |dk7  r|s| j                          |
|	z
  dkD  r|s|
|k(  rG|| j                         k7  r4| j                          | j                  | j                         t               |
|k(  rG|| j                         k7  r4| j!                          | j                  | j                         t"               | j                         }|}|dk7  rC| j                  d|||t        |      z   d       | j%                  |       | j                          | j'                          | j)                          y )Nr   r  Tr`  r   r_  )r  r  r  r  r  GetSelectedTextrl  r  r   rQ  r4  rm  r  r  r  r  r  ry  r  ensureSingleGroupingMarkerensureSingleIOMarker)rR   rq   r0  rZ   r[   startIOendIOr9  r:  startSelendSelrv  rw  s                r]   r4  zSlicesShell.ReplaceSelection  s   oo'"&"7"7"9!k(()?)?)AB&&t';';'=> ##%



 b5((!Dc!f8< ) >..tBDDtDb5'')(?1]u}$*=*=*?!?##%t224Y?{"}d6I6I6K'K))+t224\B##%
b5((!Dc!f8< ) >JJt'')'')!!#r^   c                     | j                         sy| j                         \  }}| j                  |      }| j                  |      }| j	                  ||       | j                  d       d| _        y)z'Delete the current, unexecuted command.Nr   F)rd  r  r3  r5  r2  r4  r`  )rR   r#  r$  r  r  s        r]   r  zSlicesShell.clearCommand  sc    ||~//#	c((/((-(F+b!	r^   c                 h    | j                         sy| j                          | j                  |       y)z?Replace with the previous/next command from the history buffer.N)rd  r  replaceFromHistory)rR   r  s     r]   r  zSlicesShell.OnHistoryReplace  s(    ||~%r^   c                    | j                         sy| j                  d       | j                  |z   }d|cxk  rt        | j                        k  r
n n|| _        d|cxk  rt        | j                        dz
  k  rNn y| j                  | j                     }|j                  dt        j                        }| j                  |       yy)z7Replace selection with command from the history buffer.Nr   r)   r   r   r.   )rd  r4  r  r  r  rB   rJ   r  )rR   r  newindexr  s       r]   r  zSlicesShell.replaceFromHistory  s    ||~b!$$t+.S.. (D/C-a//ll4#4#45GoodBJJ7G!!'* 0r^   c                     | j                         sy| j                         }| j                  |       | j                         }| j                  ||       y)z9Insert the previous/next command from the history buffer.N)rd  rH  r  r2  )rR   r  r  r  s       r]   r  zSlicesShell.OnHistoryInsert  sH    ||~%%'%##%&(+r^   c                    | j                         sy| j                         }| j                         |z
  }| j                  d      }|dkD  r|d|  }|sy| j                  dk  s%| j                  t        | j                        dz
  k\  rt        t        | j                              }nIt        t        t        | j                                    }|| j                  dz   d |d| j                   z   }|D ]j  }| j                  |   }|dt        |       |k(  s$| j                  |t        |      d        | j                         }| j                  ||       || _         y y)zASearch up the history buffer for the text in front of the cursor.NF)rstripr   r)   r   r   )rd  rH  rr  
getCommandr  r  r  r  r#  r4  r2  )	rR   r  numCharsAfterCursor
searchTextsearchOrderr   r  r  r  s	            r]   r  zSlicesShell.OnHistorySearch  sT   ||~%%'"002X=__E_2
"#$9&9%9:J #T\\!21!44DLL 12KeC-./BT..q012R8J9J9J5KKK 		All1oG'J(J6%%gc*o.>&?@++-!!&(3$%!		r^   c                     t        |       y)zDisplay status information.N)printr  s     r]   rG   zSlicesShell.setStatusText  s    
 	dr^   c                 V   | j                         sy| j                  j                  r| j                          y| j	                         }t
        j                  }| j                  d|||dz          | j                  |d       | j                          d| _
        | j                          y)zInsert a new line break.Nr_  r   r>  r   T)rd  rV  rX  r  rH  rJ   r  rl  r  rm  r`  r  )rR   rv  rw  s      r]   r  zSlicesShell.insertLineBreak  s    ||~[["" !
**$$XaT!V<

1'
"##%	r^   c                    | j                         }| j                         }| j                  |      }|t        z  rn|t        z  ry	 | j                  |      \  }}|dk(  rd}n| j                  |      }| j                  |      }| j                         rX| j                  |       d| j                  _        | j                  ||      }|j                  t        j                        }	|	D 
cg c]  }
|
j!                          }	}
dj#                  |	      }| j$                  j&                  r~|sd}|| j$                  _        | j+                  t        j                  d       | j-                  | j                         t.               | j-                  | j                         t0               nC||f| _        | j5                  |d       t7        j8                  d| j:                         d| _        | j=                  d	      }|r| j?                          | j                         | jA                         dz
  k(  rv| j+                  t        j                  d
       | j                         }| j                  |dz
        t        z  r| jC                  |dz
  tD               | jG                          nG| j                         }| j                  |dz         }| jI                  ||       | j                  |       | jK                          d| _&        | jN                  r?| j                  | jP                        }| j                  |       | jI                  ||       yyc c}
w )zEProcess the line of text at which the user hit Enter or Shift+RETURN.Nr   Fr.   r>  T)useMultiCommandr   r~   r   ))rH  r  r  r?  r1  r  r3  r5  rd  r6  r\  r`  rj  rh   rJ   r  r  rj   rV  rX  rW  r  r  rn  ro  r  r  r>   	CallLaterr  rM  
DeleteBackr  r  r  rC  r2  r  r   hasSyntaxErrorsyntaxErrorRealLine)rR   theposr\  r%  	startlineendliner  r  r  r  r  skiprv  r;  rT   s                  r]   r  zSlicesShell.processLine	  s    ##%&&(~~h'Jk!//(3	'a<H**95H&&w/ <<>v&$DKK''&9GMM"**-E/45tT[[]5E5ii&G{{$$ #G$+!

2::g.t224[At224^D%.w$7!		'$	7Q 7 78"&!##$#/OO $"3"3"5a"77JJrzzwJ/$$&D~~d1f%3tAvi0OO((*H++HQJ7Ggg.w'#''(@(@ACs#c#& I 6s   -Mc                    | j                         d   }| j                         }|dk(  r9|dkD  r4|dz  }| j                  |       | j                         d   }|dk(  r|dkD  r4|dk(  r| j                         }| j                  |       | j                         }|dz  }| j                  |       | j                         d   dk(  r-|dz  }| j                  |       | j                         d   dk(  r-| j                         }| j	                  ||      }|j                  t        j                  d      }|j                         }|j                  dt        j                        }nd}|r|j                         }|S )znExtract a multi-line command from the editor.

        The command may not necessarily be valid Python syntax.r   r   r   r.   )	
GetCurLiner  GotoLinerH  rj  rB   rJ   r  r  )rR   r  rq   r  r  ru  r  s          r]   getMultilineCommandzSlicesShell.getMultilineCommandO	  sY     #""$bjTAXAIDMM$??$Q'D bjTAX 8&&(DMM$))+HAIDMM$//#A&*	d# //#A&* ((*G''':Goobjj$7Gnn&GoodBJJ7GGnn&Gr^   c                 v    |s| j                         d   }| j                  |      }|r|j                         }|S )z~Extract a command from text which may include a shell prompt.

        The command may not necessarily be valid Python syntax.r   )r2  r  r  )rR   rq   r  r  s       r]   r   zSlicesShell.getCommandq	  s>     ??$Q'D##D) nn&Gr^   c                     t        t        j                        }t        |      }t        t        j                        }t        |      }|d| |k(  r||d }|S |d| |k(  r||d }|S )z%Return text without a leading prompt.N)r  re   ps1r  ps2)rR   rq   r7  ps1sizer8  ps2sizes         r]   r  zSlicesShell.lstripPrompt	  sn    #''lc(#''lc(>S >D  (7^s">Dr^   c                 x   |s!| j                  t        j                  d       t        rt	        |      }d| _        |rb| j                  |      }|d   I|g}d| _        |d   dz   }| j                         |d   z   t        |j                  d            z
  | _
        n|}n|g}t        j                         }d| _        d| _        |D ]{  }| j
                  rJ}	d}
| j                  d	t        |	      z   d
z   |j                  d      |	dz
     z   dz   d|
z  z   dz   d       Y| j                   j#                  |dz         | _        } d| _        |s'| j'                  | j)                         d   t*               d| _        ~| j$                  s| j-                  |j/                                |s| j1                          yy)z.Send command to the interpreter for execution.r   r   Fr   NTr   r.   z  File "<input>", line z
    r  z"    ^
SyntaxError: invalid syntax
Error)r  rJ   r  	USE_MAGICr   r+  r	  r  r  rh   r,  r>   
BusyCursorr  rb  r  r\  r  r`  r  r  r  
addHistoryr  r  )rR   r  silentr(  r   r  syntaxErrorLinebusyr  linenooffsets              r]   r  zSlicesShell.push	  s   JJrzzxJ0 'NG "//8Fay !$(# &q	!+/+>+>+@+J3w}}]aObKc+c(YH}} 	5A""&

4S[@I!''RV-X^_`X`Jaabffgjkqgqq  sY  Y  Za  b KK,,QtV4		5 NN4??,Q/	:yyOOGNN,-KKM r^   c                     d| _         |dk7  r_t        | j                        dk(  s|| j                  d   k7  r4| j                  j                  d|       t	        j
                  d|       yyy)z#Add command to the command history.r)   r   r   zSlicesShell.addHistory)r  r  N)r  r  r  r_  r	   r  )rR   r  s     r]   r?  zSlicesShell.addHistory	  s_      B;S.1Wdll1o5MLL7+OO#;WM 6N;r^   c                     |d k(  r| j                         }| j                  |t               | j                  |t               | j                  |t               | j                  |t
               y rw   )r  r  rs  ru  rw  ry  rR   r  s     r]   r  z SlicesShell.clearGroupingMarkers	  sX    T>((*H(>2(#89(?3(<0r^   c                    |d k(  r| j                         }| j                  |t               | j                  |t               | j                  |t               | j                  |t
               | j                  |t               | j                  |t               | j                  |t               | j                  |t               | j                  |t               | j                  |t               | j                  |t               y rw   )r  r  r  r  r  r  r  r  r  r  r  rn  ro  rG  s     r]   r  zSlicesShell.clearIOMarkers	  s    T>((*H(;/(#56(<0(9-(<0(#67(=1(:.(9-(;/(>2r^   c                    |d k(  r| j                         }| j                  |      }|dt        z  z  rC| j                  |t               | j                  |t
               | j                  |t               y|dt        z  z  r-| j                  |t
               | j                  |t               y|dt
        z  z  r| j                  |t               y|dt        z  z  r	 yyNr   r   )r  r  rs  r  ru  rw  ry  )rR   r  r%  s      r]   r  z&SlicesShell.ensureSingleGroupingMarker	  s    T>((*H~~h'A~%%h'<=h7h|4  a...h7h|4  a((h|4  ao%
  r^   c                    |d k(  r| j                         }| j                  |      }|t        z  r| j                  |t               | j                  |t
               | j                  |t               | j                  |t               | j                  |t               t        t        g\  }}t        t        g\  }}n|t        z  rw| j                  |t               | j                  |t               | j                  |t               | j                  |t               t        t
        g\  }}t        t        g\  }}ny|d|z  z  r7| j                  ||       | j                  ||       | j                  ||       y|d|z  z  r%| j                  ||       | j                  ||       y|d|z  z  r| j                  ||       y|d|z  z  r	 yrJ  )r  r  r?  r  r  r  r  r  r  r  r  r  r  r1  )rR   r  r%  r#  start_foldedmiddler$  s          r]   r  z SlicesShell.ensureSingleIOMarker	  s   T>((*H~~h'Jh|4h':;h}5hz2hy1$/0B#C U<(3LVCk!h{3h'9:h|4hy1$01D#E U<)*5LVC AuHh|4hv.hs+  ao%hv.hs+  aihs+  af_r^   c                    | j                  d      }| j                  d       | j                  d       |dt        z  z  r| j	                  dt               n9|dt
        z  z  r| j	                  dt
               n| j	                  dt               |dt        z  z  r| j	                  dt               n|dt        z  z  r| j	                  dt               n\|dt        z  z  r| j	                  dt               n9|dt        z  z  r| j	                  dt               n| j	                  dt               | j                  r| j                          y y Nr   r   )r  r  r  rs  r  ru  r  r  r  r  doHistUpdaterm  )rR   first_markers     r]   r  zSlicesShell.RestoreFirstMarker
  s
   ^^A&!!!$A!^++NN1^,A444NN123NN1^,![.(NN1[)A111NN1/0A|O+NN1\*A222NN101 NN1[)'') r^   c                 ~   dt         z  dt        z  z  }dt        z  dt        z  z  }dt        z  dt
        z  z  }dt        z  dt        z  dt        z  }}}dt        z  dt        z  dt        z  }}
}	||z  ri||z  rd||z  r||z  ry||z  r||z  ry||	z  r||z  ry||	z  r||z  ry||z  r||z  ry||z  r||z  ry||z  r||z  ry||z  r||z  ry||
z  r||z  ryy||z  r'||z  r"||z  r||z  ry||	z  r||z  ry||	z  r||z  ryy||	z  r||z  r||z  r||z  ry||z  r||z  ryy||	z  r||z  r||z  r||z  ry||z  r||z  ryy||z  ri||z  rd||z  r||z  ry||z  r||z  ry||	z  r||z  ry||	z  r||z  ry||z  r||z  ry||z  r||z  ry||z  r||z  ry||z  r||z  ry||
z  r||z  ryy||z  r||z  r||z  r||z  ry||
z  r||z  ryy||z  r||z  r||z  r||z  ry||z  r||z  ryy||z  r||z  r||z  r||z  ry||
z  r||z  ryy||
z  r||z  r||z  r||z  ry||z  r||z  ryyy)zAThis testing function ensures that two adjacent markers are validr   TF)r  r  r  r  rs  ru  r  r  rw  r  r  ry  )rR   m1m2i_so_sg_si_mo_mg_mi_eo_eg_es               r]   IsAllowedPairzSlicesShell.IsAllowedPair5
  s   nq"444o#6 66!%:"::oq-'7O9KClAzM1l?CH28s(c4s(c4s(c4s(c4s(c5s(c4s(c4s(c5s(c53hR#Xs(c4s(c4s(c43hR#Xs(c4s(c43hR#Xs(c4s(c43hR#Xs(c4s(c5s(c5s(c5s(c4s(c5s(c5s(c4s(c43hR#Xs(c4s(c43hR#Xs(c4s(c43hR#Xs(c4s(c43hR#Xs(c4s(c4r^   c                 B   | j                          | j                  d      }| j                         dz
  }t        d|      D ]\  }| j	                  |       | j                  |       | j                  |dz
        }| j                  |      }| j                  ||      r]^ y rO  )r  r  r  r  r  r  r^  )rR   rQ  last_line_numr  previous_markerr%  s         r]   CleanAllMarkerszSlicesShell.CleanAllMarkerst
  s    !^^A&'')!+q' 	A++A.%%a( NN1Q3/O>>!$F%%of=	r^   c                    | j                  |      }|j                  t        j                        }| j	                  |       | j                         dz
  }| j                         }|j                  t        j                        }||z
  dz   }|dk(  rd}	n|dz
  }	||k(  rd}
n|dz   }
|dk(  r=t        }t        }t        }t        }dt        z  }dt        z  }dt        z  }dt        z  }n@|dv r<t        }t        }t        }t        }dt        z  }dt        z  }dt        z  }dt        z  }|dkD  rd}d}|	dk(  re| j!                  |       | j#                  |t$               | j'                  |       | j#                  |       |dv r/| j#                  |t(               n| j+                  |	      }|z  rd}|
dk(  rE| j#                  |t,               | j#                  |       |dv r| j#                  |t(               d}n| j+                  |
      }d}|z  z  rd}|s|	dk7  rd}|xs | j/                  |	      }|xs | j1                  |	      }|r	 dt,        z  z  r;|t2        z  r|dk(  rn,| j5                  |	t,               | j#                  |	t6               |dz  z  r?| j5                  |	|       | j#                  |	       |dv r$| j#                  |	t(               n|z  r|dk(  r|s	 |z  z  z  ry|dk(  r/| j!                  |       | j#                  |t$               ||k(  r
d}n||k(  rd}| j'                  |       | j#                  |       |dv r| j#                  |t(               ni|
dk7  rd| j!                  |       | j'                  |       | j#                  |t6               | j#                  |       |dv r| j#                  |t(               t9        ||      D ]g  }| j!                  |       | j#                  |t6               | j'                  |       | j#                  |       |dv sR| j#                  |t(               i |rd}|xs | j/                  |
      }|xs | j1                  |
      }|r|dk(  r|s	 | j!                  |       |r| j'                  |       dt$        z  dt:        z  z  z  r| j#                  |t,               n,|dt6        z  dt,        z  z  z  r| j#                  |t6               |r|dz  dz  z  z  r-| j#                  |       |dv r| j#                  |t(               n|dz  dz  z  z  r-| j#                  ||       |dv r| j#                  |t(               nq|z  z  r-| j#                  ||       |dv rS| j#                  |t(               n<| j#                  ||       |dv r| j#                  |t(               |dk(  r|s	n|dk(  r|s	 | j=                          | j>                  r{| j@                  dk(  rtC        jB                         | _         tC        jB                         | j@                  z
  tD        kD  r*| jG                          tC        jB                         | _         yyy)zYDisplay text in the slices shell.

        Replace line endings with OS-specific endings.r   r   Nr>  )r   r<  FT)$r  rh   rJ   r  AddTextr  r  countr  r  r  r  r  r  r  r  r  r  rs  r  r  r  ry  r  r  r1  r  rw  r  ru  r  r  rb  r  PRINT_UPDATE_MAX_TIMEUpdate)rR   rq   r  r@  rh   r`  end_line_numnum_new_linesstart_line_numprevious_line_numnext_line_numr#  rL  rM  r$  opposite_start_maskopposite_start_folded_maskopposite_middle_maskopposite_end_mask
badMarkersfixIOEndra  fixEndMarkersnext_markerblankr  s                             r]   r  zSlicesShell.write
  sN    ""4(jj$T
 '')!+((*jj,#M1!3 Q",Q. =(M&q.M=E-L!FC"#\/)*,?)?&#$m#3  !:''E,L FC"#[.)*,>)>&#$l?  !9? JH $&)).9~n=##N3~e4--t~~nY/W $/@ A"%99#Jd"|L9|C0--t~~l9/U# !NN=9"#7:K#KM#J$d*  EU4#B#BCT#UEO4#<#<=N#OE&L8 ,k9tW}  --.?M NN+<_M&C/))*;C@'8@#55t~~FWXa7b(+??= 
 '+>+E,F+<,= ?  = 55nE NN>.I-|;.3-|;).++N;~e<#55t~~nU^7_($. 55nE //? NN>/J NN>&A#'994>>.Yb;c
 ~l; OA--a0NN1_5''*NN1V,114>>!I3NO !EQ4#B#B=#QEK4#<#<]#KE= --l;++L9"q.'81>S;S'SU|LA$O);ao)MO|OD&1e8ao+EG NN<<#'994>>,W`;a(QYC-?A NN<?#'994>>,W`;a(-@-G.H J NN<<#'994>>,W`;a NN<E#'994>>,W`;a#W}V $=!<<$ $		yy{4??*-BB $		 C r^   c                    |j                  d      }t        t        |            D ]  }||   j                  d      }t        t        |            D ]6  }t        j                  j                  ||   j                  d            ||<   8 t        j                  j                  |      ||<    t        j                  j                  |      }|S )z>Return text with line endings replaced by OS-specific endings.
rF  r.   )rh   r  r  rJ   r  rj   )rR   rq   r  r  chunksr  s         r]   r  zSlicesShell.fixLineEndingsU  s    

6"s5z" 	/A1X^^D)F3v;' CJJOOF1IOOD,ABq	Czzv.E!H		/
 zzu%r^   c           	      B   | j                   j                  }d}|rt        t        j                        }n?| j
                  rt        t        j                        }nt        t        j                        }| j                         d   }|dkD  r&|rd}n!| j                  t        j                  d       | j
                  s	 |s| j                  |d       | j
                  s| j                          | j
                  r| j                         }| j                  |      }| j                  |dz
        }|j                         }|j!                         }	|dk(  r!|j                  d      j                  d      }
n2|d	t#        |      t#        |	      z
   }
t%        |d
      d   d   r|
dz  }
| j'                         }|
}| j)                  d|||t#        |      z          | j                  |d       | j+                          | j-                          | j/                  d       y	)zyDisplay proper prompt for the context: ps1, ps2 or ps3.

        If this is a continuation line, autoindent as necessary.Tr   r   r>  r   r   r.   rF  Nr      r_  )rV  rX  r  re   ps3r`  r8  r7  r2  r  rJ   r  r  r  GetLiner  r  r  r   rH  rl  rm  r  ScrollToColumn)rR   rX  r0  r  rT   r  currentLinepreviousLinepstripr  indentrv  rw  s                r]   r  zSlicesShell.prompt`  s    KK))	\FYY\F\Foo"7

2::7
3yyJJv7J+yy   " 99((*HX.Khqj1L%%'F&&(F|#))$/55d;#$Dc,&7F&CE'$GJ1MEMF ##%DA((!Dc!fEJJqgJ&'') 	!Ar^   c                    d}| j                   }d|_        | j                          | j                         }| j	                  |       | j                  |t               | j                  |t               | j                  |t               	 |j                  s1t        j                         j                  d       |j                  s1|j                  }| j                         \  }}| j                  d   dz   }t        ||dz         D ]  }| j	                  |       | j!                  |       | j                  |t"               ||k(  r| j                  |t$               n2||k(  r| j                  |t&               n| j                  |t(               ||k(  r| j                  |t*               | j                  |t,                d|_	        d|_        t/        |      }|S # | j                         \  }}| j                  d   dz   }t        ||dz         D ]  }| j	                  |       | j!                  |       | j                  |t"               ||k(  r| j                  |t$               n2||k(  r| j                  |t&               n| j                  |t(               ||k(  r| j                  |t*               | j                  |t,                d|_	        d|_        w xY w)z!Replacement for stdin.readline().r   T)onlyIfNeededr   F)rV  rX  r  r  r  r  r  rn  ro  rW  r>   GetAppYieldr  r  r  r  r  r  r  r  ry  rw  r  )rR   rW  rV  cLiner#  r$  r  s          r]   rT  zSlicesShell.readline  sX    ##%E"u[)u[)u^,	%ll		!!t!4 llLLE)IE#%%a(1,E5Q' 	D##A&))!,q+:$..<"@V$..:">"&..="Ac6$..<"@"&..?"C	D FL$FE
 )IE#%%a(1,E5Q' 	D##A&))!,q+:$..<"@V$..:">"&..="Ac6$..<"@"&..?"C	D FL$Fs   
<G G DK c                 n    g }|dd dgk7  r)|j                  | j                                |dd dgk7  r)|S )z"Replacement for stdin.readlines().r)   Nr.   )r  rT  )rR   r  s     r]   rU  zSlicesShell.readlines  s@    BCjTF"LL) BCjTF"r^   c                 L    |r| j                  |d       | j                         S )z"Return string based on user input.r   r   )r  rT  )rR   r  s     r]   rY  zSlicesShell.raw_input  s!    JJv8J,}}r^   c                    t        j                  d|dd      }	 |j                         t         j                  k(  r"|j	                         }||j                          S 	 |j                          y# |j                          w xY w)z.Get response from the user using a dialog box.NzInput Dialog (Raw)r   )r>   TextEntryDialogro   ID_OKGetValuerp   )rR   r  rr   rq   s       r]   r  zSlicesShell.ask  sp    ##D&$8">	!RXX-(NN	 . NN NNs   2A/ /Bc                 &    | j                  d       y)z0Halt execution pending a response from the user.zPress enter to continue:N)r  rx   s    r]   r  zSlicesShell.pause  s    +,r^   c                 |    | j                          | j                  dt               | j                  dt               y)z&Delete all text from the slices shell.r   N)ClearAllr  rs  r  rx   s    r]   r   zSlicesShell.clear  s'    q(q%r^   c                     | j                         }| j                  |       |j                         }|r| j                          |r| j	                  |d       | j                  |       y)zExecute command as if it was typed in directly.
        >>> shell.run('print("this")')
        >>> print("this")
        this
        >>>
        r>  r   N)rr  r6  r  r  r  r  )rR   r  r  verboser  s        r]   r  zSlicesShell.run  sU     ##%6".."4;;=DJJwGJ4		'r^   c                     | j                          t        |      5 }|D ]3  }|dd dk(  r| j                  |dd        | j                  |dd       5 	 ddd       y# 1 sw Y   yxY w)zBExecute all commands in file as if they were typed into the shell.Nr   zshell.F)r  r  T)r  r   r  )rR   rY   file_r  s       r]   r  zSlicesShell.runfile  sp    (^ 	Bu  B2A;(*HHWUEHBHHWUDHAB	B 	B 	Bs   9AA(c                 6   | j                  | j                         | j                  | j                         | j                  j                  || j                  | j                  | j                        }|r$dj                  |      }| j                  ||       yy)z#Display auto-completion popup list.)includeMagicincludeSingleincludeDoubler  N)AutoCompSetAutoHider  r  r  r\  getAutoCompleteListr  r  r  rj   r	  )rR   r  rD  r#  optionss        r]   rn  zSlicesShell.autoCompleteShow  s      !:!:;""4#C#CD{{..w!%!>!>"&"@"@"&"@"@ / B hhtnGfg. r^   c           	         | j                         r| j                          | j                  j                  |      \  }}}|rt	        j
                  d| |       | j                  s|sy| j                         }|r|r| j                  rz| j                         }|dz   }	| j                  d|	||t        |	      z          | j                  |	d       | j                          | j                         }
| j                  ||
       |rD|t        |      dz   z
  }|| j                  |      z
  }t        ||      }| j!                  ||       yy)	z6Display argument spec and docstring in a popup window.zSlicesShell.calltip)r  sendercalltipNr  r_  r>  r   r   )r  r  r\  
getCallTipr	   r  r  rH  r  rl  r  r  rm  r2  	GetColumnmaxCallTipShow)rR   r  insertcalltipforceCallTipr   argspectipr  rv  rw  r  tipposfallbacks                r]   rq  zSlicesShell.autoCallTipShow  s(    #{{55g>wOO#8sS%%'}););##%DmA((!Dc!fEJJqgJ&'')'')Fh/TQ/F$.."::H*FVS) r^   c                    | j                         r| j                          | j                         }| j                  | j	                         d         }|}d}||k\  r+| j                  |      t        d      k(  r|}n|dz  }||k\  r+|dk7  rG| j                  |dz   |      }|dz  }|sP| j                  | j	                         d         }| j                  ||      }| j                  |t        |             y|}d}||kD  r6t        | j                  |            j                         r|}n|dz  }||kD  r6|dk(  r|}| j                  ||      }	|	j                  d      }
|
dk7  rl| j                         s[| j                  |	d|
dz    | j                  |dz
        t        d      k(  xr! | j                         | j                         k(  d       yyyy)z#AutoComplete and Calltips manually.r   r)   .r   rb  NT)rh  ri  rH  r3  r  rG  r}  rj  rn  r  rk  isspacefindr  rq  rr  )rR   r  rt  ru  rv  pointavailpos
textbehind
textbeforebegposctipsctindexs              r]   r  z)SlicesShell.OnCallTipAutoCompleteManually)  s    !$$&''(9!(<=go~~d#sCy0 $AID	 go B**MA,=wGJQM//0A!0DE!..wF
%%j#z2BC %Wn4>>$/088:!%AID	 Wn
 R<!F))67;**c*b=););)=((%1*=..15SA K"002d6H6H6JJ! *>=/ r^   c                 *    | j                  |d       y)zReplacement for stdout.r   r   Nr  r  s     r]   rZ  zSlicesShell.writeOutY  s    

4X
&r^   c                 *    | j                  |d       y)zReplacement for stderr.r<  r   Nr  r  s     r]   r[  zSlicesShell.writeErr^  s    

4W
%r^   c                 ^    |r| j                   t        _        y| j                  t        _        y)z<If redirect is true then sys.stdin will come from the shell.N)rV  re   r)  rR   redirects     r]   r  zSlicesShell.redirectStdinb  s    CI

CIr^   c                 p    |rt        | j                        t        _        y| j                  t        _        y)z9If redirect is true then sys.stdout will go to the shell.N)r   rZ  re   r*  r  s     r]   r  zSlicesShell.redirectStdouti       &t}}5CJCJr^   c                 p    |rt        | j                        t        _        y| j                  t        _        y)z9If redirect is true then sys.stderr will go to the shell.N)r   r[  re   r+  r  s     r]   r  zSlicesShell.redirectStderrp  r  r^   c                    | j                   }| j                  }|j                  t        j                  d      }| j                  |      }|dk(  r| j                  |      |z
  }	n|j                  d      }	|}
|rd}
n| j                  dk(  rd}
n||   d   sd}
n|||   d   k7  rd}
n|dk(  r9|||   d   k7  rd}
n||   d	   |z   ||   d	<   |||   d<   ||   d
   |	z   ||   d
<   n|dk(  rw|||   d   k(  r+||   d	   |z   ||   d	<   |||   d<   ||   d
   |	z   ||   d
<   nJ|||   d   k(  r3|||   d	   z   ||   d	<   |||   d<   |||   d<   ||   d
   |	z   ||   d
<   nd}
n	|dk(  rd}
n	 |
r| j                   |dz   d = |j                  || |||||	d d d d d       | xj                  dz  c_        |}|dk(  r|}n||	z   }| j                  |      d   }| j                  |      d   }t        ||dz         D cg c]  }| j                  |       c}| j                   | j                     d<   || j                   | j                     d<   d| _        y c c}w )Nr.   r%  Tr)   rc  
actionTyper_  r{  rz  r|  r  ry  r  r   )r  rc  rz  ry  r{  r  r|  mBStartmAStartmarkersBeforemarkersAfterr   r  r  )ro  rp  rB   rJ   r  r  re  r  r  r  r  rP  )rR   r  rw  ry  r{  ra  r  r  r  r|  makeNewActionr#  r$  newStartnewEndr  s                   r]   rl  z#SlicesShell.UpdateUndoHistoryBeforey  s   >>
))BJJt
$''1	x,,V4y@HWWT]H$M^^RMB'MB--M!B))"%'VJ%7%92z"%+2x %'VJ%7%@2z"!B
++%'VJ%7%92z"#)2x %'VJ%7%@2z"B
++%&r"vj'9%92z"%-2z"&/2{#%'VJ%7%@2z""!M  A'II'"00#%# $#  NNAN E8#h& **51!4H((-a0F-28F1H-EF$..#F T^^,_=8@DT^^,Y7 Gs   9Ic                 @   | j                   | j                     d   }| j                   | j                     d   dk(  r|}n|| j                   | j                     d   z   }t        | j                  |      d   dz
  d      }t	        | j                  |      d   dz   | j                         dz
        }t        ||dz         D cg c]  }| j                  |       c}| j                   | j                     d<   || j                   | j                     d<   d	| _        y c c}w )
Nr  r  r  r|  r   r   r  r  F)	ro  rp  minr  r  r  r  r  rP  )rR   r#  r$  r  r  r  s         r]   rm  z"SlicesShell.UpdateUndoHistoryAfter  s     0=DNN+L98CC$**4>>::FFCT**51!4Q6:4((-a02D4E4E4G4IJ).xq)ABAdnnQB 	(84<(3 Cs   Dc                 Z   | j                   dk(  ry | j                  | j                      }|d   dv r t        j                  j	                  |        n
|d   dk(  rny t        |d         }t        |      D ]   }| j                  |d   |z   |d   |          " | xj                   dz  c_         y )Nr)   r  r_  r  r%  r  r  r   )rp  ro  r   rQ  rM  r  r  r  rR   uHIr|  r  s       r]   rM  zSlicesShell.Undo  s     >>2T^^,| 33!!&&t,( S)*x 	IANNC	N1,s?/CA/FH	I 	r^   c                    | j                   t        | j                        dz
  k\  ry | xj                   dz  c_         | j                  | j                      }|d   dv r t        j                  j                  |        n
|d   dk(  rny t        |d         }t        |      D ]   }| j                  |d   |z   |d   |          " y )Nr   r  r  r%  r  r  )rp  r  ro  r   rQ  rO  r  r  r  s       r]   rO  zSlicesShell.Redo  s     >>S!1!12144T^^,| 33!!&&t,( S()x 	HANNC	N1,s>/B1/EG	Hr^   c                 l    t         j                  j                  |        d| _        g | _        d| _        y )Nr)   F)r   rQ  r  rp  ro  rP  rx   s    r]   r  zSlicesShell.EmptyUndoBuffer
  s-    --d3r^   c                 h    | j                         xr! | j                         | j                         k7  S rw   )rd  r  r  rx   s    r]   CanCutzSlicesShell.CanCut  s1    ||~ D&&(D,@,@,BB	Dr^   c                 d    | j                         r t        j                  j                  |       ryy)z&Return true if a paste should succeed.TF)rd  r   rQ  CanPasterx   s    r]   r  zSlicesShell.CanPaste  s$    <<>j33<<TBr^   c                 v   | j                  | j                               }|t        z  ry|t        z  r| j                  j
                  r*| j                  | j                               dt        z  z  sy| j                         \  }}| j                  |      }| j                  |      }	 | j                         | j                         k(  ry| j                         | j                         k7  rM| j                         |k\  r:| j                         |k\  r'| j                         |k  r| j                         |k  ryy)z&Return true if editing should succeed.Fr   T)r  r  r1  r?  rV  rX  ro  r  r3  r5  r  r  )rR   r%  r#  r$  sliceStartPossliceEndPoss         r]   rd  zSlicesShell.CanEdit  s   ~~d1134Kj {{$$^^D$7$7$9:Q=NNoo'IE#//6M//4KA%%'4+?+?+AA'')T-A-A-CC--/=@++->--/;>++-<r^   c                 
   | j                         rs| j                         rb| j                         r| j                          | j	                         r| j                          | j                          | j                  d       yyy)z/Remove selection and place it on the clipboard.r   N)r  CanCopyrh  ri  r  r  r?  r4  rx   s    r]   r;  zSlicesShell.Cut3  sa    ;;=T\\^""$##%!!#""$IIK!!"% ,=r^   c                    | j                         rt        t        j                        }t        t        j                        }| j                         }|j                  t        j                  |z   t        j                        }|j                  t        j                  |z   t        j                        }| j                  |      }t        j                  |      }| j                  |       yy)z-Copy selection and place it on the clipboard.rq   N)r  r  re   r7  r8  r  rB   rJ   r  r  r>   TextDataObject_clip)rR   r7  r8  r  datas        r]   r?  zSlicesShell.Copy=  s    <<>cgg,Ccgg,C**,Goobjj3&6

CGoobjj3&6

CG''W'5G$$W-DJJt r^   c                     | j                         r7| j                         }t        j                  |      }| j	                  |       yy)zACopy selection, including prompts, and place it on the clipboard.N)r  r  r>   r  r  )rR   r  r  s      r]   rB  zSlicesShell.CopyWithPromptsI  s:    <<>**,G$$W-DJJt r^   c                     | j                         rm| j                         }d}||j                  t        j                  t        j                  |z         z   }t        j                  |      }| j                  |       yy)zcCopy selection, including prompts prefixed with four
        spaces, and place it on the clipboard.rz  N)r  r  rB   rJ   r  r>   r  r  )rR   r  spacesr  s       r]   r  z#SlicesShell.CopyWithPromptsPrefixedP  sj     <<>**,GFwrzz/1zzF/B D DG$$W-DJJt r^   c                 6   t         j                  j                         r{t         j                  j                  d       t         j                  j	                  |       t         j                  j                          t         j                  j                          y y r  )r>   TheClipboardOpenUsePrimarySelectionSetDatar   Close)rR   r  s     r]   r  zSlicesShell._clip[  s[    ??!OO//6OO##D)OO!!#OO!!#	 "r^   c           	         | j                         rt        j                  j                         rt	        t
        j                        }t        j                  j                  t        j                  t        j                              rSt        j                         }t        j                  j                  |      r| j                  d       |j                         }|j                         }| j                  |      }| j!                  |      }|j#                  t$        j&                  |z   d      }|j#                  t$        j&                  d      }|j#                  dt$        j&                        }| j)                         }|}| j+                  d|||t-        |      z   d       | j/                  |d       | j1                          | j                  d       t        j                  j3                          y	y	y	)
z*Replace selection with clipboard contents.r   r  r.   r_  Tr`  r>  r   N)r  r>   r  r  r  re   r8  IsSupported
DataFormatDF_UNICODETEXTr  GetDatar4  GetTextr  r  r  rB   rJ   r  rH  rl  r  r  rm  r  )rR   r8  r  r  rv  rw  s         r]   rD  zSlicesShell.Pasteb  sp    ==?r335cgg,C**2==9J9J+KL((*??**40))"-"llnG%nn.G"11':G"//W/=G%oobjj3.>EG%oobjj$?G%oodBJJ?G++-DA001d,0QK 1 NJJqgJ.//1 ))"-OO!!#3  6?r^   c                    d}t         j                  j                         rt         j                  j                  t        j                  t         j
                              rCt        j                         }t         j                  j                  |      r|j                         }t         j                  j                          |r| j                  |       yy)z8Replace selection with clipboard contents, run commands.r   N)r>   r  r  r  r  r  r  r  r  r  Execute)rR   rq   r  s      r]   rG  zSlicesShell.PasteAndRun  s    ??!**2==9J9J+KL((*??**40<<>DOO!!#LL r^   c                    | j                         \  }}| j                  |      }| j                  |      }| j                  |       | j	                  ||       | j                  d       d}| j                        }|d   |g}	d}n|}	|	D ]C  }|j                  dt        j                        }| j                  |       | j                          E y)z-Replace selection with text and run commands.r   Fr   NTr.   )r  r3  r5  r6  r2  r4  r	  rB   rJ   r  r  r  )
rR   rq   r#  r$  r  r  r+  r  r   r  s
             r]   r  zSlicesShell.Execute  s    //#	c&&u-&&s+6"(F+b!++G4!9YHNH 	GoodBJJ7GJJw	r^   c                 F    	 | j                  |       y# t        $ r Y yw xY w)z"Sets whether text is word wrapped.z*Wrapping is not available in this version.N)SetWrapModer  )rR   r   s     r]   r   zSlicesShell.wrap  s*    	@T" 	@?	@s    	  c                 &    | j                  |       y)zSet the zoom level.

        This number of points is added to the size of all fonts.  It
        may be positive to magnify or negative to reduce.N)SetZoom)rR   pointss     r]   r!  zSlicesShell.zoom  s    
 	Vr^   c                    |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        | j                  |j                  dd             |j                  d	d      | _        | j                  | j                         |j                  d
d      }|dk7  r| j                  |       y y )NOptions/AutoCompleteT Options/AutoCompleteIncludeMagic!Options/AutoCompleteIncludeSingle!Options/AutoCompleteIncludeDoubleOptions/AutoCallTipOptions/CallTipInsertView/WrapModeView/ShowLineNumbersView/Zoom/Shelli)ReadBoolr  r  r  r  r  r  r  lineNumberssetDisplayLineNumbersReadIntr  )rR   rW   r!  s      r]   rI   zSlicesShell.LoadSettings  s   OO$:DA 	 OO$FM 	% OO$GN 	& OO$GN 	& OO$94@ 	 OO$;TB 	 	$?@ OO$:DA 	""D$4$45~~/53;LL r^   c                    |j                  d| j                         |j                  d| j                         |j                  d| j                         |j                  d| j                         |j                  d| j
                         |j                  d| j                         |j                  d| j                                |j                  d| j                         |j                  d	| j                                y )
Nr  r  r  r  r  r  r  r  r  )	WriteBoolr  r  r  r  r  r  GetWrapModer  WriteIntGetZoom)rR   rW   s     r]   rz   zSlicesShell.SaveSettings  s    /1B1BC;,0,I,I	K<,0,J,J	L<,0,J,J	L.0@0@A0$2D2DE$*:*:*<=/1A1AB)4<<>:r^   c                 v   t        j                         }|j                  | j                  d       |j                  | j                  d       |j                          |j                  | j                  d       |j                  | j                  d       |j                  t        j                  d       |j                  | j                  d       |j                  t        j                  d       |j                  | j                  d       |j                          |j                  | j                  d	       |S )
z
            Create and return a context menu for the slices shell.
            This is used instead of the scintilla default menu
            in order to correctly respect our immutable buffer.
        rM  rO  r;  r?  zCopy With PromptsrD  zPaste And RunrK  z
Select All)r>   MenuAppendr  r  AppendSeparatorr  r  r   r  r  r  r  r  )rR   menus     r]   GetContextMenuzSlicesShell.GetContextMenu  s     wwyDLL&)DLL&)DKK'DLL&)E&&(;<DMM7+E''9DMM7+D%%|4r^   c                 F    | j                         }| j                  |       y rw   )r  	PopupMenu)rR   r=  r  s      r]   r  zSlicesShell.OnContextMenu  s    ""$tr^   c                 D   |j                   }|| j                  | j                  fv r |j                  | j	                                y || j
                  t        j                  fv r |j                  | j                                y || j                  t        j                  fv r |j                  | j                                y || j                  k(  r |j                  | j                                y || j                  k(  r |j                  | j                                y y rw   )Idr  r  Enabler  r  r   r  r  r  r  r  r  CanUndor  CanRedo)rR   r=  r1   s      r]   r  zSlicesShell.OnUpdateUI  s    VV$++t}}--JJt{{}%DLL%"4"455JJt||~&DMM5#6#677JJt}}'4<<JJt||~&4<<JJt||~&  r^   c                    d}d}dg}dg}g }d}|j                         }|t        k(  r|j                         }|t        vrt        |       y |j                         }|t        k7  rt        |       y |j                         }|t
        k(  r|j                  d       d}n)|t        k(  r|j                  d       d}nt        |       y | j                          |D ]  }	|	t        k(  r|j                  |       |	t
        k(  r%|j                  |       |j                  d       d}L|	t        k(  r%|j                  |       |j                  d       d}z|r$|	dd  j                  t        j                  d      }
n |	j                  t        j                  d      }
| j                  |
d	d
       |dz  } 
d   dk(  r|dz  }t        |dz         D ]  }	| j                  |	       | j                  |	       d}d}|g k7  r3|	|d   k(  r| j!                  |	t"               |d= n|	dz   |d   k(  rd}nd}n|	|dz
  k(  rd}nd}|r| j!                  |	t$               n|r| j!                  |	t&               d}d}|g k7  r{|	|d   k(  rb|	dkD  r|d= |d   dk(  r| j!                  |	t(               n7|d   dk(  r-| j!                  |	t*               | j!                  |	t,               n y |d= n|	dz   |d   k(  rd}nd}n|	|dz
  k(  rd}nd}|rX|d   dk(  r| j!                  |	t.               S|d   dk(  r.| j!                  |	t0               | j!                  |	t,                y |s|d   dk(  r| j!                  |	t2               |d   dk(  r.| j!                  |	t4               | j!                  |	t,                y  | j7                          y )NzNot a valid input formatr   FrW  rR  Tr   r.   r>  )r@  r)   )rT  usrBinEnvPythonTextpyslicesFormatHeaderTextr%  groupingStartTextinputStartTextr  outputStartTextr  rB   rJ   r  r  r  r  r  r  rs  rw  ry  r  r  r  r  r  r  r  r  )rR   r   invalidFileString	lineCountgroupingStartLinesioStartLinesioStartTypesremoveCommentr  r  wdoMiddledoEnds                r]   r   zSlicesShell.LoadPySlicesFile  s   6	3S \\^&&D//%8I2JF\\^$$u->'?\\^>!(;(;G(DSX]_$(;(;H(ETXm%&  	A##")))4N"##I.##G,#O###I.##H-" aemmBJJt&DA&'ii

4&@A

1WD
11		" R5$;qLIy{# E	A%%a("HE!2%*1--NN1^4*1-qS.q11E!HIaKq1q.HERQ'sQ#A/q5%a(2q6q3  %QqSLO+E!HIaK?G+NN1\2!!_h.NN1]3NN1Y/ ?G+NN1Y/!!_h.NN1Z0NN1Y/ KE	N 	r^   c                    d}fd} |t                 |t        d          t        | j                               D ]  }| j	                  |      }|dt
        z  dt        z  z  z  r |t               |dt        z  dt        z  z  z  r |t               d}|dt        z  dt        z  z  z  r |t               d}|r |d        || j                  |              y )NFc                     j                  | j                  dd      j                  dt        j                        j	                  d             y )Nrw  r.   zutf-8)r  rB   rJ   r  encode)rw  r   s    r]   	fid_writez/SlicesShell.SavePySlicesFile.<locals>.fid_write}  s5    IIaii-bjj1w)r^   r)   r   T#)r  r  r  r  r  rs  ru  r  r  r  r  r  r  r  r|  )rR   r   
addCommentr"  r  markerss    `    r]   r   zSlicesShell.SavePySlicesFilez  s    
	)
 	%&*2./t((*+ 	'ANN1%G1n,q2G/GGI+,1k>A/A,AAC.) 
1l?Q0C-CCE/*
$dll1o&	'r^   c                    | j                         }| j                         \  }}| j                  |      }| j                  |       | j	                  ||       d|j                         z   }| j                  |d       | j                         }| j                  |       | j	                  ||       | j                          y )Nr.   r>  )rH  r  r5  r6  r2  readr  rC  )rR   r   curposr#  r$  r  rq   newposs           r]   r  zSlicesShell.LoadPyFileAsSlice  s    !!#))+	c&&s+6"&&)#((*_

4 !!#6"&(r^   c                 >    | j                         xs | j                  S )z%Return True if contents have changed.)	GetModifyr   rx   s    r]   r   zSlicesShell.hasChanged  s    ~~94#9#99r^   rw   )r   r   )T)NT)FF)r>  F)zPlease enter your response:)TT)r   )TF)pr   r   r   r   r   r>   r   r?   CLIP_CHILDRENr<   r   r   r  r   r   rQ   r  r  r  r  r6   r  r	  r  r  r  r&  r(  r+  r-  r<  rC  rM  rO  rU  rW  r]  r  r  r  r  rY  r  r  r  r4  r  r  r  r  r  rG   r  r  r4  r   r  r  r?  r  r  r  r  r  r^  rb  r  r  r  rT  rU  rY  r  r  r   r  r  rn  rq  r  rZ  r[  r  r  r  rl  rm  rM  rO  r  r  r  rd  r;  r?  rB  r  r  rD  rG  r  r   r!  rI   rz   r  r  r  r   r   r  r   r   r^   r]   rC   rC   U  sl   1D"$"*<*<nnB,<,<d#t&*5 #(o+b	4:	';
&"J
/:x	*$2$0"(,$,&+.'<R&P!FB:1z6pFP* n)b."I)V(FT"$J	&+,@&D'N D1fN13*#J*8<~ O,b	<|#J
-& 	B/*6-!`'
&#%% 05Sj .H, D0&
	$$@
.@2;0'sl'4$:r^   rC   )Vr   r  r>   r   r  r   keywordrJ   re   r  	functoolsr   rF   r   r   r	   r
   r   r   r   pseudor   r   r   rg   r   r   parser   rK   r   r   r   r   r{  r=  rf  r  r  r  r  r  r  r  r  r  rk  rm  rs  ru  rw  ry  r  r  r  r  r  r  r  r  r  rn  ro  rj  r?  r1  rl  r  r  r  IO_MIDDLE_MASKr  r  r  r  r  r  r  r;   r=   r(   r   r   r  rQ  rC   r   r^   r]   <module>r2     s  < A
 
8 8
 	    	 
            ! !   '   
	 ;;

BKK99bkk2=="//C    	 
	 ^#a)>&>>_$%'(,7 +~#5 55,!"I.
<!%8"88= !#$j=1$[.1l?2..4G1GG nq,6++,./1D.DE l?Q%559q*},/ _]_ L FH,\GNu{{E$9$9 GNX
2	h: :xS1:*'' S1:r^   