--- a/SmallSense__SmalltalkEditSupport.st Fri Jul 25 21:14:13 2014 +0100
+++ b/SmallSense__SmalltalkEditSupport.st Fri Jul 25 21:15:22 2014 +0100
@@ -70,43 +70,53 @@
"Created: / 04-05-2014 / 23:29:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-undent: text
- | lines indent tabwidth |
+undent: stringOrStringCollection
+ | lines indent tabwidth ignoreIndentOfFirstLineIfZero indentOfFirstLineIsZero |
- lines := text asStringCollection.
+ stringOrStringCollection isStringCollection ifTrue:[
+ ignoreIndentOfFirstLineIfZero := false.
+ stringOrStringCollection removeLast.
+ lines := stringOrStringCollection.
+ ] ifFalse:[
+ ignoreIndentOfFirstLineIfZero := true.
+ lines := stringOrStringCollection asStringCollection.
+ ].
tabwidth := (ListView userDefaultTabPositions = ListView tab4Positions) ifTrue:[ 4 ] ifFalse: [ 8 ].
+ indent := nil.
+ indentOfFirstLineIsZero := false.
+
1 to: lines size do:[:lineNo |
- | line i |
+ | line lineIndent |
line := lines at: lineNo.
- i := line indexOfNonSeparator.
- indent isNil ifTrue:[
- (i ~~ 0) ifTrue:[
- indent := ((i - 1) // tabwidth) * tabwidth.
- indent == 0 ifTrue:[
- lineNo == 1 ifTrue:[
- indent := nil.
- ] ifFalse:[
- ^ text.
- ].
+ lineIndent := line indexOfNonSeparator.
+ (lineIndent ~~ 0) ifTrue:[
+ indent isNil ifTrue:[
+ indent := ((lineIndent - 1) // tabwidth) * tabwidth.
+ ] ifFalse:[
+ indent := (((lineIndent - 1) // tabwidth) * tabwidth) min: indent.
+ ].
+ indent == 0 ifTrue:[
+ (lineNo == 1 and:[ignoreIndentOfFirstLineIfZero]) ifTrue:[
+ indent := nil.
+ indentOfFirstLineIsZero := true.
+ ] ifFalse:[
+ ^ stringOrStringCollection isStringCollection
+ ifTrue:[ stringOrStringCollection asStringWithoutFinalCR ]
+ ifFalse:[ stringOrStringCollection ]
].
].
].
- indent notNil ifTrue:[
- i > indent ifTrue:[
- lines at: lineNo put: (line copyFrom: indent + 1).
- ] ifFalse:[
- ^ text.
- ].
+ ].
+ 1 to: lines size do:[:lineNr |
+ (lineNr ~~ 1 or:[indentOfFirstLineIsZero not]) ifTrue:[
+ lines at: lineNr put: ((lines at: lineNr) copyFrom: indent + 1).
].
].
- ^ (text last == Character cr) ifTrue:[
- lines asString.
- ] ifFalse:[
- lines asStringWithoutFinalCR
- ].
+ ^ lines asStringWithoutFinalCR
"Created: / 04-05-2014 / 23:09:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-07-2014 / 23:24:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!SmalltalkEditSupport methodsFor:'accessing'!