[squeak-dev] The Inbox: Morphic-ct.1792.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Nov 1 18:53:41 UTC 2021
A new version of Morphic was added to project The Inbox:
http://source.squeak.org/inbox/Morphic-ct.1792.mcz
==================== Summary ====================
Name: Morphic-ct.1792
Author: ct
Time: 1 November 2021, 7:53:35.595429 pm
UUID: d73224ba-841c-b647-a544-0d171ae13e69
Ancestors: Morphic-eem.1784
Editors: Extends autoEnclose and blinkPrevParen: to also support quotes and chevrons, which is just consistent with encloseSelection imho.
=============== Diff against Morphic-eem.1784 ===============
Item was changed:
----- Method: SmalltalkEditor>>blinkPrevParen: (in category 'parenblinking') -----
blinkPrevParen: aCharacter
"Same as super, but tries to follow the Smalltalk syntax."
| openDelimiter closeDelimiter level string here inside |
string := paragraph text string.
here := pointBlock stringIndex.
openDelimiter := aCharacter.
+ closeDelimiter := '([{<"''|' at: (')]}>"''|' indexOf: openDelimiter).
- closeDelimiter := '([{' at: (')]}' indexOf: openDelimiter).
level := 1.
inside := nil. "Tricky."
(here > 1 and: [ (string at: here - 1) = $$ ]) ifTrue: [ ^self ]. "Just a character literal."
[ level > 0 and: [ here > 1 ] ] whileTrue: [
| hereChar |
hereChar := string at: (here := here - 1).
inside "Are we inside a comment or string literal?"
ifNotNil: [ "Yes."
hereChar = inside ifTrue: [
(here > 1 and: [ (string at: here - 1) ~= inside ])
ifTrue: [ inside := nil ]
ifFalse: [ here := here - 1 ] ] ]
ifNil: [
(here > 1 and: [ (string at: here - 1) = $$ ]) "Just a character literal."
ifTrue: [ here := here - 1 ]
ifFalse: [
hereChar
caseOf: {
[ closeDelimiter ] -> [
(level := level - 1) = 0 ifTrue: [
^self blinkParenAt: here ] ].
[ openDelimiter ] -> [ level := level + 1 ].
[ $" ] -> [ inside := $" ].
[ $' ] -> [ inside := $' ] }
otherwise: [] ] ] ]!
Item was changed:
----- Method: TextEditor class>>autoEnclose (in category 'preferences') -----
autoEnclose
+ <preference: 'Auto enclose brackets () {} [] '''' "" || <>'
- <preference: 'Auto enclose brackets () {} []'
categoryList: #('Morphic' 'editing')
description: 'When true, typing an opening parenthesis, bracket or square-bracket will also add its corresponding closing character after the cursor so you can type within the bracket.'
type: #Boolean>
^ AutoEnclose ifNil: [ false ]!
Item was changed:
----- Method: TextEditor>>autoEncloseFor: (in category 'typing support') -----
autoEncloseFor: typedChar
"Answer whether typeChar was handled by auto-enclosure. Caller should call normalCharacter if not."
| openers closers |
+ openers := '([{<"''|'.
+ closers := ')]}>"''|'.
- openers := '([{'.
- closers := ')]}'.
(closers includes: typedChar) ifTrue:
[ | pos |
self blinkPrevParen: typedChar.
((pos := self indexOfNextNonwhitespaceCharacter) notNil and: [ (paragraph string at: pos) = typedChar ])
ifTrue:
[ self
moveCursor: [ : position | position + pos - pointBlock stringIndex + 1 ]
forward: true
select: false.
+ ^ true ] ].
- ^ true ]
- ifFalse: [ ^ false ] ].
(openers includes: typedChar) ifTrue:
[ self
openTypeIn;
addString: typedChar asString;
addString: (closers at: (openers indexOf: typedChar)) asString;
insertAndCloseTypeIn;
moveCursor: [ : position | position - 1 ]
forward: false
select: false.
^ true ].
^ false!
Item was changed:
----- Method: TextEditor>>blinkPrevParen: (in category 'parenblinking') -----
blinkPrevParen: aCharacter
"Used if not Shout"
| openDelimiter closeDelimiter level string here hereChar |
string := paragraph string.
here := pointBlock stringIndex.
openDelimiter := aCharacter.
+ closeDelimiter := '([{<"''|' at: (')]}>''"|' indexOf: openDelimiter).
- closeDelimiter := '([{' at: (')]}' indexOf: openDelimiter).
level := 1.
[level > 0 and: [here > 1]]
whileTrue:
[hereChar := string at: (here := here - 1).
hereChar = closeDelimiter
ifTrue:
[level := level - 1.
level = 0
ifTrue: [^ self blinkParenAt: here]]
ifFalse:
[hereChar = openDelimiter
ifTrue: [level := level + 1]]]!
More information about the Squeak-dev
mailing list
|