Commit 12d71392 authored by Just van Rossum's avatar Just van Rossum

some support for syntax coloring, disabled for now

parent 311533d1
......@@ -96,7 +96,7 @@ class Editor(W.Window):
W.Window.__init__(self, bounds, self.title, minsize = (330, 120), tabbable = 0)
self.setupwidgets(text)
if change > 0:
self.editgroup.editor.changed = 1
self.editgroup.editor.textchanged()
if self.settings.has_key("selection"):
selstart, selend = self.settings["selection"]
......@@ -247,12 +247,12 @@ class Editor(W.Window):
def domenu_toggle_run_as_main(self):
self.run_as_main = not self.run_as_main
self.run_with_interpreter = 0
self.editgroup.editor.selchanged = 1
self.editgroup.editor.selectionchanged()
def domenu_toggle_run_with_interpreter(self):
self.run_with_interpreter = not self.run_with_interpreter
self.run_as_main = 0
self.editgroup.editor.selchanged = 1
self.editgroup.editor.selectionchanged()
def showbreakpoints(self, onoff):
self.editgroup.editor.showbreakpoints(onoff)
......@@ -314,7 +314,7 @@ class Editor(W.Window):
def domenu_options(self, *args):
rv = SaveOptions(self._creator)
if rv:
self.editgroup.editor.selchanged = 1 # ouch...
self.editgroup.editor.selectionchanged() # ouch...
self._creator = rv
def clicklinefield(self):
......@@ -633,6 +633,8 @@ class Editor(W.Window):
dir, dirname = os.path.split(dir)
modname = dirname + '.' + modname
subname = _filename_as_modname(self.title)
if subname is None:
return self.globals, file, None
if modname:
if subname == "__init__":
# strip trailing period
......@@ -949,8 +951,8 @@ class SearchEngine:
self.hide()
import EasyDialogs
from Carbon import Res
editor.changed = 1
editor.selchanged = 1
editor.textchanged()
editor.selectionchanged()
editor.ted.WEUseText(Res.Resource(Text))
editor.ted.WECalText()
editor.SetPort()
......@@ -1147,6 +1149,9 @@ def execstring(pytext, globals, locals, filename="<string>", debugging=0,
raise W.AlertError, detail
except (KeyboardInterrupt, BdbQuit):
pass
except SystemExit, arg:
if arg.code:
sys.stderr.write("Script exited with status code: %s\n" % repr(arg.code))
except:
if haveThreading:
import continuation
......@@ -1268,7 +1273,7 @@ def geteditorprefs():
tabsettings = prefs.pyedit.tabsettings
windowsize = prefs.pyedit.windowsize
except:
fontsettings = prefs.pyedit.fontsettings = ("Python-Sans", 0, 9, (0, 0, 0))
fontsettings = prefs.pyedit.fontsettings = ("Geneva", 0, 10, (0, 0, 0))
tabsettings = prefs.pyedit.tabsettings = (8, 1)
windowsize = prefs.pyedit.windowsize = (500, 250)
sys.exc_traceback = None
......
from Carbon import Qd
from Carbon import TE
from Carbon import Fm
from Carbon import Evt, Events, Fm, Fonts
from Carbon import Qd, Res, Scrap
from Carbon import TE, TextEdit, Win
import waste
import WASTEconst
from Carbon import Res
from Carbon import Evt
from Carbon import Events
from Carbon import Scrap
import string
from Carbon import Win
import Wbase
import Wkeys
import Wcontrols
import PyFontify
from types import *
from Carbon import Fonts
from Carbon import TextEdit
import string
from types import TupleType, StringType
class TextBox(Wbase.Widget):
......@@ -105,6 +96,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
self.temptext = text
self.ted = None
self.selection = None
self.oldselection = None
self._callback = callback
self.changed = 0
self.selchanged = 0
......@@ -155,6 +147,13 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
self.temptext = None
Wbase.SelectableWidget.close(self)
def textchanged(self, all=0):
self.changed = 1
def selectionchanged(self):
self.selchanged = 1
self.oldselection = self.getselection()
def gettabsettings(self):
return self.tabsettings
......@@ -208,7 +207,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
viewrect = self.ted.WEGetViewRect()
Qd.EraseRect(viewrect)
self.ted.WEUpdate(self._parentwindow.wid.GetWindowPort().visRgn)
self.selchanged = 1
self.selectionchanged()
self.updatescrollbars()
def adjust(self, oldbounds):
......@@ -235,7 +234,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
def selectall(self):
self.ted.WESetSelection(0, self.ted.WEGetTextLength())
self.selchanged = 1
self.selectionchanged()
self.updatescrollbars()
def selectline(self, lineno, charoffset = 0):
......@@ -246,7 +245,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
# Let's fool Waste by initially selecting one char less:
self.ted.WESetSelection(newselstart + charoffset, newselend-1)
self.ted.WESetSelection(newselstart + charoffset, newselend)
self.selchanged = 1
self.selectionchanged()
self.updatescrollbars()
def getselection(self):
......@@ -256,7 +255,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
return self.selection
def setselection(self, selstart, selend):
self.selchanged = 1
self.selectionchanged()
if self.ted:
self.ted.WESetSelection(selstart, selend)
self.ted.WESelView()
......@@ -284,12 +283,12 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
if oldselstart <> newselstart or oldselend <> newselend:
self.ted.WESetSelection(newselstart, newselend)
self.updatescrollbars()
self.selchanged = 1
self.selectionchanged()
def insert(self, text):
self.ted.WEInsert(text, None, None)
self.changed = 1
self.selchanged = 1
self.textchanged()
self.selectionchanged()
# text
def set(self, text):
......@@ -306,8 +305,8 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
Qd.RectRgn(rgn, viewrect)
Qd.EraseRect(viewrect)
self.draw(rgn)
#self.GetWindow().InvalWindowRect(self.ted.WEGetViewRect())
self.updatescrollbars()
self.textchanged(1)
def get(self):
if not self._parent:
......@@ -321,9 +320,9 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
if self._enabled and not modifiers & Events.cmdKey or char in Wkeys.arrowkeys:
self.ted.WEKey(ord(char), modifiers)
if char not in Wkeys.navigationkeys:
self.changed = 1
self.textchanged()
if char not in Wkeys.scrollkeys:
self.selchanged = 1
self.selectionchanged()
self.updatescrollbars()
if self._callback:
Wbase.CallbackCall(self._callback, 0, char, modifiers)
......@@ -332,7 +331,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
if not self._enabled:
return
self.ted.WEClick(point, modifiers, Evt.TickCount())
self.selchanged = 1
self.selectionchanged()
self.updatescrollbars()
return 1
......@@ -411,8 +410,8 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
self.ted.WECut()
self.updatescrollbars()
self.selview()
self.changed = 1
self.selchanged = 1
self.textchanged()
self.selectionchanged()
if self._callback:
Wbase.CallbackCall(self._callback, 0, "", None)
......@@ -422,8 +421,8 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
self.selview()
self.ted.WEPaste()
self.updatescrollbars()
self.changed = 1
self.selchanged = 1
self.textchanged()
self.selectionchanged()
if self._callback:
Wbase.CallbackCall(self._callback, 0, "", None)
......@@ -431,8 +430,8 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
self.ted.WEDelete()
self.selview()
self.updatescrollbars()
self.changed = 1
self.selchanged = 1
self.textchanged()
self.selectionchanged()
if self._callback:
Wbase.CallbackCall(self._callback, 0, "", None)
......@@ -442,8 +441,8 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget):
return
self.ted.WEUndo()
self.updatescrollbars()
self.changed = 1
self.selchanged = 1
self.textchanged()
self.selectionchanged()
if self._callback:
Wbase.CallbackCall(self._callback, 0, "", None)
......@@ -610,6 +609,8 @@ class TextEditor(EditText):
import re
commentPat = re.compile("[ \t]*(#)")
indentPat = re.compile("[ \t]*")
kStringColor = (0, 0x7fff, 0)
kCommentColor = (0, 0, 0xb000)
class PyEditor(TextEditor):
......@@ -627,10 +628,111 @@ class PyEditor(TextEditor):
self.bind("cmd]", self.domenu_shiftright)
self.bind("cmdshift[", self.domenu_uncomment)
self.bind("cmdshift]", self.domenu_comment)
self.bind("cmdshiftd", self.alldirty)
self.file = file # only for debugger reference
self._debugger = debugger
if debugger:
debugger.register_editor(self, self.file)
self._dirty = (0, None)
self.do_fontify = 0
#def open(self):
# TextEditor.open(self)
# if self.do_fontify:
# self.fontify()
# self._dirty = (None, None)
def _getflags(self):
flags = (WASTEconst.weDoDrawOffscreen | WASTEconst.weDoUseTempMem |
WASTEconst.weDoAutoScroll | WASTEconst.weDoOutlineHilite)
if self.readonly:
flags = flags | WASTEconst.weDoReadOnly
else:
flags = flags | WASTEconst.weDoUndo
return flags
def textchanged(self, all=0):
self.changed = 1
if all:
self._dirty = (0, None)
return
oldsel = self.oldselection
sel = self.getselection()
if not sel:
# XXX what to do?
return
selstart, selend = sel
selstart, selend = min(selstart, selend), max(selstart, selend)
if oldsel:
oldselstart, oldselend = min(oldsel), max(oldsel)
selstart, selend = min(selstart, oldselstart), max(selend, oldselend)
startline = self.offsettoline(selstart)
endline = self.offsettoline(selend)
selstart, _ = self.ted.WEGetLineRange(startline)
_, selend = self.ted.WEGetLineRange(endline)
if selstart > 0:
selstart = selstart - 1
self._dirty = (selstart, selend)
def idle(self):
self.SetPort()
self.ted.WEIdle()
if not self.do_fontify:
return
start, end = self._dirty
if start is None:
return
textLength = self.ted.WEGetTextLength()
if end is None:
end = textLength
if start >= end:
self._dirty = (None, None)
else:
self.fontify(start, end)
self._dirty = (None, None)
def alldirty(self, *args):
self._dirty = (0, None)
def fontify(self, start=0, end=None):
#W.SetCursor('watch')
if self.readonly:
self.ted.WEFeatureFlag(WASTEconst.weFReadOnly, 0)
self.ted.WEFeatureFlag(WASTEconst.weFOutlineHilite, 0)
self.ted.WEDeactivate()
self.ted.WEFeatureFlag(WASTEconst.weFAutoScroll, 0)
self.ted.WEFeatureFlag(WASTEconst.weFUndo, 0)
pytext = self.get().replace("\r", "\n")
if end is None:
end = len(pytext)
else:
end = min(end, len(pytext))
selstart, selend = self.ted.WEGetSelection()
self.ted.WESetSelection(start, end)
self.ted.WESetStyle(WASTEconst.weDoFace | WASTEconst.weDoColor,
(0, 0, 12, (0, 0, 0)))
tags = PyFontify.fontify(pytext, start, end)
styles = {
'string': (WASTEconst.weDoColor, (0, 0, 0, kStringColor)),
'keyword': (WASTEconst.weDoFace, (0, 1, 0, (0, 0, 0))),
'comment': (WASTEconst.weDoFace | WASTEconst.weDoColor, (0, 0, 0, kCommentColor)),
'identifier': (WASTEconst.weDoColor, (0, 0, 0, (0xbfff, 0, 0)))
}
setselection = self.ted.WESetSelection
setstyle = self.ted.WESetStyle
for tag, start, end, sublist in tags:
setselection(start, end)
mode, style = styles[tag]
setstyle(mode, style)
self.ted.WESetSelection(selstart, selend)
self.SetPort()
self.ted.WEFeatureFlag(WASTEconst.weFAutoScroll, 1)
self.ted.WEFeatureFlag(WASTEconst.weFUndo, 1)
self.ted.WEActivate()
self.ted.WEFeatureFlag(WASTEconst.weFOutlineHilite, 1)
if self.readonly:
self.ted.WEFeatureFlag(WASTEconst.weFReadOnly, 1)
def domenu_shiftleft(self):
self.expandselection()
......@@ -786,8 +888,8 @@ class PyEditor(TextEditor):
else:
self.ted.WEKey(ord(char), modifiers)
if char not in Wkeys.navigationkeys:
self.changed = 1
self.selchanged = 1
self.textchanged()
self.selectionchanged()
self.updatescrollbars()
def balanceparens(self, char):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment