[squeak-dev] The Inbox: Morphic-jar.1815.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Dec 6 19:56:55 UTC 2021


A new version of Morphic was added to project The Inbox:
http://source.squeak.org/inbox/Morphic-jar.1815.mcz

==================== Summary ====================

Name: Morphic-jar.1815
Author: jar
Time: 6 December 2021, 8:56:48.006443 pm
UUID: b73bc9c0-eec1-a645-80f7-39eb98778d2c
Ancestors: Morphic-ct.1814

Allow enclosing a selection with multiple levels of brackets with EncloseTextSelections preference on. Both opening and closing brackets on a selection enclose the selection with the first level of brackets; on higher levels opening brackets add and closing brackets remove one level...

Currently, enclosing a selection with only one level of brackets is supported; pressing an opening bracket for the second time removes the enclosing brackets; pressing a closing bracket replaces the selection altogether.

=============== Diff against Morphic-ct.1814 ===============

Item was changed:
  ----- Method: TextEditor>>enclose: (in category 'editing keys') -----
  enclose: aKeyboardEvent
+ 	"Insert or remove bracket characters around the current selection.
+ 	Pressing a right bracket removes one level of brackets of the same kind if there are any."
- 	"Insert or remove bracket characters around the current selection."
  
+ 	| character left right startIndex stopIndex oldSelection which closingBracket t |
- 	| character left right startIndex stopIndex oldSelection which t |
  	character := aKeyboardEvent keyCharacter.
  	self closeTypeIn.
  	startIndex := self startIndex.
  	stopIndex := self stopIndex.
  	oldSelection := self selection.
+ 	closingBracket := false.
+ 	which := '([<{|"''' indexOf: character ifAbsent: [ 
+ 		closingBracket := true.
+ 		')]>}|"''' indexOf: character ifAbsent: [^ false ]].
- 	which := '([<{|"''' indexOf: character ifAbsent: [ ^ false ].
  	left := '([<{|"''' at: which.
  	right := ')]>}|"''' at: which.
  	t := self text.
  	((startIndex > 1 and: [stopIndex <= t size])
+ 			and: [ (t at: startIndex-1) = left and: [(t at: stopIndex) = right]]
+ 			and: [closingBracket])
- 			and: [ (t at: startIndex-1) = left and: [(t at: stopIndex) = right]])
  		ifTrue:
+ 			["already enclosed and the pressed character is a closing bracket; strip off brackets"
- 			["already enclosed; strip off brackets"
  			self selectFrom: startIndex-1 to: stopIndex.
  			self replaceSelectionWith: oldSelection]
  		ifFalse:
+ 			["not enclosed or the pressed character is an opening bracket; enclose by matching brackets"
- 			["not enclosed; enclose by matching brackets"
  			self replaceSelectionWith:
  				(Text string: (String with: left), oldSelection string, (String with: right) attributes: emphasisHere).
  			self selectFrom: startIndex+1 to: stopIndex].
  	^true!



More information about the Squeak-dev mailing list