[Python-checkins] CVS: python/dist/src/Mac/Tools/IDE Wtext.py,1.13,1.14 PyEdit.py,1.23,1.24

Just van Rossum jvr@users.sourceforge.net
Fri, 02 Nov 2001 11:24:43 -0800


Update of /cvsroot/python/python/dist/src/Mac/Tools/IDE
In directory usw-pr-cvs1:/tmp/cvs-serv4017

Modified Files:
	Wtext.py PyEdit.py 
Log Message:
some support for syntax coloring, disabled for now

Index: Wtext.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Tools/IDE/Wtext.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** Wtext.py	2001/08/27 10:54:50	1.13
--- Wtext.py	2001/11/02 19:24:41	1.14
***************
*** 1,22 ****
! from Carbon import Qd
! from Carbon import TE
! from Carbon import Fm
  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
! 
  
  
--- 1,13 ----
! from Carbon import Evt, Events, Fm, Fonts
! from Carbon import Qd, Res, Scrap
! from Carbon import TE, TextEdit, Win
  import waste
  import WASTEconst
  import Wbase
  import Wkeys
  import Wcontrols
  import PyFontify
! import string
! from types import TupleType, StringType
  
  
***************
*** 106,109 ****
--- 97,101 ----
  		self.ted = None
  		self.selection = None
+ 		self.oldselection = None
  		self._callback = callback
  		self.changed = 0
***************
*** 156,159 ****
--- 148,158 ----
  		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
***************
*** 209,213 ****
  		Qd.EraseRect(viewrect)
  		self.ted.WEUpdate(self._parentwindow.wid.GetWindowPort().visRgn)
! 		self.selchanged = 1
  		self.updatescrollbars()
  	
--- 208,212 ----
  		Qd.EraseRect(viewrect)
  		self.ted.WEUpdate(self._parentwindow.wid.GetWindowPort().visRgn)
! 		self.selectionchanged()
  		self.updatescrollbars()
  	
***************
*** 236,240 ****
  	def selectall(self):
  		self.ted.WESetSelection(0, self.ted.WEGetTextLength())
! 		self.selchanged = 1
  		self.updatescrollbars()
  	
--- 235,239 ----
  	def selectall(self):
  		self.ted.WESetSelection(0, self.ted.WEGetTextLength())
! 		self.selectionchanged()
  		self.updatescrollbars()
  	
***************
*** 247,251 ****
  		self.ted.WESetSelection(newselstart + charoffset, newselend-1)
  		self.ted.WESetSelection(newselstart + charoffset, newselend)
! 		self.selchanged = 1
  		self.updatescrollbars()
  	
--- 246,250 ----
  		self.ted.WESetSelection(newselstart + charoffset, newselend-1)
  		self.ted.WESetSelection(newselstart + charoffset, newselend)
! 		self.selectionchanged()
  		self.updatescrollbars()
  	
***************
*** 257,261 ****
  	
  	def setselection(self, selstart, selend):
! 		self.selchanged = 1
  		if self.ted:
  			self.ted.WESetSelection(selstart, selend)
--- 256,260 ----
  	
  	def setselection(self, selstart, selend):
! 		self.selectionchanged()
  		if self.ted:
  			self.ted.WESetSelection(selstart, selend)
***************
*** 285,294 ****
  			self.ted.WESetSelection(newselstart, newselend)
  			self.updatescrollbars()
! 		self.selchanged = 1
  	
  	def insert(self, text):
  		self.ted.WEInsert(text, None, None)
! 		self.changed = 1
! 		self.selchanged = 1
  	
  	# text
--- 284,293 ----
  			self.ted.WESetSelection(newselstart, newselend)
  			self.updatescrollbars()
! 		self.selectionchanged()
  	
  	def insert(self, text):
  		self.ted.WEInsert(text, None, None)
! 		self.textchanged()
! 		self.selectionchanged()
  	
  	# text
***************
*** 307,312 ****
  			Qd.EraseRect(viewrect)
  			self.draw(rgn)
- 			#self.GetWindow().InvalWindowRect(self.ted.WEGetViewRect())
  			self.updatescrollbars()
  	
  	def get(self):
--- 306,311 ----
  			Qd.EraseRect(viewrect)
  			self.draw(rgn)
  			self.updatescrollbars()
+ 			self.textchanged(1)
  	
  	def get(self):
***************
*** 322,328 ****
  			self.ted.WEKey(ord(char), modifiers)
  			if char not in Wkeys.navigationkeys:
! 				self.changed = 1
  			if char not in Wkeys.scrollkeys:
! 				self.selchanged = 1
  			self.updatescrollbars()
  			if self._callback:
--- 321,327 ----
  			self.ted.WEKey(ord(char), modifiers)
  			if char not in Wkeys.navigationkeys:
! 				self.textchanged()
  			if char not in Wkeys.scrollkeys:
! 				self.selectionchanged()
  			self.updatescrollbars()
  			if self._callback:
***************
*** 333,337 ****
  			return
  		self.ted.WEClick(point, modifiers, Evt.TickCount())
! 		self.selchanged = 1
  		self.updatescrollbars()
  		return 1
--- 332,336 ----
  			return
  		self.ted.WEClick(point, modifiers, Evt.TickCount())
! 		self.selectionchanged()
  		self.updatescrollbars()
  		return 1
***************
*** 412,417 ****
  		self.updatescrollbars()
  		self.selview()
! 		self.changed = 1
! 		self.selchanged = 1
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
--- 411,416 ----
  		self.updatescrollbars()
  		self.selview()
! 		self.textchanged()
! 		self.selectionchanged()
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
***************
*** 423,428 ****
  		self.ted.WEPaste()
  		self.updatescrollbars()
! 		self.changed = 1
! 		self.selchanged = 1
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
--- 422,427 ----
  		self.ted.WEPaste()
  		self.updatescrollbars()
! 		self.textchanged()
! 		self.selectionchanged()
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
***************
*** 432,437 ****
  		self.selview()
  		self.updatescrollbars()
! 		self.changed = 1
! 		self.selchanged = 1
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
--- 431,436 ----
  		self.selview()
  		self.updatescrollbars()
! 		self.textchanged()
! 		self.selectionchanged()
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
***************
*** 443,448 ****
  		self.ted.WEUndo()
  		self.updatescrollbars()
! 		self.changed = 1
! 		self.selchanged = 1
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
--- 442,447 ----
  		self.ted.WEUndo()
  		self.updatescrollbars()
! 		self.textchanged()
! 		self.selectionchanged()
  		if self._callback:
  			Wbase.CallbackCall(self._callback, 0, "", None)
***************
*** 611,614 ****
--- 610,615 ----
  commentPat = re.compile("[ \t]*(#)")
  indentPat = re.compile("[ \t]*")
+ kStringColor = (0, 0x7fff, 0)
+ kCommentColor = (0, 0, 0xb000)
  
  
***************
*** 628,635 ****
--- 629,737 ----
  		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):
***************
*** 787,792 ****
  			self.ted.WEKey(ord(char), modifiers)
  		if char not in Wkeys.navigationkeys:
! 			self.changed = 1
! 		self.selchanged = 1
  		self.updatescrollbars()
  	
--- 889,894 ----
  			self.ted.WEKey(ord(char), modifiers)
  		if char not in Wkeys.navigationkeys:
! 			self.textchanged()
! 		self.selectionchanged()
  		self.updatescrollbars()
  	

Index: PyEdit.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Tools/IDE/PyEdit.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** PyEdit.py	2001/08/25 12:10:15	1.23
--- PyEdit.py	2001/11/02 19:24:41	1.24
***************
*** 97,101 ****
  		self.setupwidgets(text)
  		if change > 0:
! 			self.editgroup.editor.changed = 1
  		
  		if self.settings.has_key("selection"):
--- 97,101 ----
  		self.setupwidgets(text)
  		if change > 0:
! 			self.editgroup.editor.textchanged()
  		
  		if self.settings.has_key("selection"):
***************
*** 248,257 ****
  		self.run_as_main = not self.run_as_main
  		self.run_with_interpreter = 0
! 		self.editgroup.editor.selchanged = 1
  	
  	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
  	
  	def showbreakpoints(self, onoff):
--- 248,257 ----
  		self.run_as_main = not self.run_as_main
  		self.run_with_interpreter = 0
! 		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.selectionchanged()
  	
  	def showbreakpoints(self, onoff):
***************
*** 315,319 ****
  		rv = SaveOptions(self._creator)
  		if rv:
! 			self.editgroup.editor.selchanged = 1 # ouch...
  			self._creator = rv
  	
--- 315,319 ----
  		rv = SaveOptions(self._creator)
  		if rv:
! 			self.editgroup.editor.selectionchanged() # ouch...
  			self._creator = rv
  	
***************
*** 634,637 ****
--- 634,639 ----
  				modname = dirname + '.' + modname
  			subname = _filename_as_modname(self.title)
+ 			if subname is None:
+ 				return self.globals, file, None
  			if modname:
  				if subname == "__init__":
***************
*** 950,955 ****
  			import EasyDialogs
  			from Carbon import Res
! 			editor.changed = 1
! 			editor.selchanged = 1
  			editor.ted.WEUseText(Res.Resource(Text))
  			editor.ted.WECalText()
--- 952,957 ----
  			import EasyDialogs
  			from Carbon import Res
! 			editor.textchanged()
! 			editor.selectionchanged()
  			editor.ted.WEUseText(Res.Resource(Text))
  			editor.ted.WECalText()
***************
*** 1148,1151 ****
--- 1150,1156 ----
  	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:
***************
*** 1269,1273 ****
  		windowsize = prefs.pyedit.windowsize
  	except:
! 		fontsettings = prefs.pyedit.fontsettings = ("Python-Sans", 0, 9, (0, 0, 0))
  		tabsettings = prefs.pyedit.tabsettings = (8, 1)
  		windowsize = prefs.pyedit.windowsize = (500, 250)
--- 1274,1278 ----
  		windowsize = prefs.pyedit.windowsize
  	except:
! 		fontsettings = prefs.pyedit.fontsettings = ("Geneva", 0, 10, (0, 0, 0))
  		tabsettings = prefs.pyedit.tabsettings = (8, 1)
  		windowsize = prefs.pyedit.windowsize = (500, 250)