Nicolas Cellier uploaded a new version of ST80 to project The Trunk:
http://source.squeak.org/trunk/ST80-nice.95.mcz ==================== Summary ==================== Name: ST80-nice.95 Author: nice Time: 8 February 2010, 12:35:33.95 pm UUID: c0f59d7d-3015-5148-8a7c-c65867745c77 Ancestors: ST80-dtl.94 make cr-indentation work in case of LF clean up dead code in inOutdent:delta: Note: currently, shift+cmd+L will outdent even if line with min outdent is zero. his was the old behaviour, but we can change it by uncommenting the "^false" =============== Diff against ST80-dtl.94 =============== Item was changed: ----- Method: ParagraphEditor>>crWithIndent: (in category 'typing/selecting keys') ----- crWithIndent: characterStream "Replace the current text selection with CR followed by as many tabs as on the current line (+/- bracket count) -- initiated by Shift-Return." | char s i tabCount | sensor keyboard. "flush character" s := paragraph string. i := self stopIndex. tabCount := 0. + [(i := i-1) > 0 and: [(char := s at: i) ~= Character cr and: [char ~= Character lf]]] - [(i := i-1) > 0 and: [(char := s at: i) ~= Character cr]] whileTrue: "Count tabs and brackets (but not a leading bracket)" [(char = Character tab and: [i < s size and: [(s at: i+1) ~= $[ ]]) ifTrue: [tabCount := tabCount + 1]. char = $[ ifTrue: [tabCount := tabCount + 1]. char = $] ifTrue: [tabCount := tabCount - 1]]. characterStream crtab: tabCount. "Now inject CR with tabCount tabs" ^ false! Item was changed: ----- Method: ParagraphEditor>>selectedSymbol (in category 'menu messages') ----- selectedSymbol "Return the currently selected symbol, or nil if none. Spaces, tabs and returns are ignored" | aString | self hasCaret ifTrue: [^ nil]. aString := self selection string. aString isOctetString ifTrue: [aString := aString asOctetString]. + aString := self selection string copyWithoutAll: CharacterSet separators. - aString := aString copyWithoutAll: - {Character space. Character cr. Character lf. Character tab}. aString size == 0 ifTrue: [^ nil]. Symbol hasInterned: aString ifTrue: [:sym | ^ sym]. ^ nil! Item was changed: + SystemOrganization addCategory: #'ST80-Controllers'! SystemOrganization addCategory: #'ST80-Editors'! SystemOrganization addCategory: #'ST80-Framework'! - SystemOrganization addCategory: #'ST80-Controllers'! SystemOrganization addCategory: #'ST80-Menus'! SystemOrganization addCategory: #'ST80-Menus-Tests'! SystemOrganization addCategory: #'ST80-Paths'! SystemOrganization addCategory: #'ST80-Pluggable Views'! SystemOrganization addCategory: #'ST80-Support'! SystemOrganization addCategory: #'ST80-Support-Tests'! SystemOrganization addCategory: #'ST80-Symbols'! SystemOrganization addCategory: #'ST80-Views'! Item was changed: ----- Method: ParagraphEditor>>inOutdent:delta: (in category 'editing keys') ----- inOutdent: characterStream delta: delta "Add/remove a tab at the front of every line occupied by the selection. Flushes typeahead. Derived from work by Larry Tesler back in December 1985. Now triggered by Cmd-L and Cmd-R. 2/29/96 sw" | realStart realStop lines startLine stopLine start stop adjustStart indentation size numLines inStream newString outStream | - sensor keyboard. "Flush typeahead" "Operate on entire lines, but remember the real selection for re-highlighting later" realStart := self startIndex. realStop := self stopIndex - 1. "Special case a caret on a line of its own, including weird case at end of paragraph" (realStart > realStop and: [realStart < 2 or: [(paragraph string at: realStart - 1) == Character cr or: [(paragraph string at: realStart - 1) == Character lf]]]) ifTrue: [delta < 0 ifTrue: [view flash] ifFalse: [self replaceSelectionWith: Character tab asSymbol asText. self selectAt: realStart + 1]. + ^true]. - ^ true]. lines := paragraph lines. startLine := paragraph lineIndexOfCharacterIndex: realStart. stopLine := paragraph lineIndexOfCharacterIndex: (realStart max: realStop). start := (lines at: startLine) first. stop := (lines at: stopLine) last. "Pin the start of highlighting unless the selection starts a line" adjustStart := realStart > start. "Find the indentation of the least-indented non-blank line; never outdent more" indentation := (startLine to: stopLine) inject: 1000 into: [:m :l | + m min: (paragraph indentationOfLineIndex: l ifBlank: [:tabs | 1000])]. + indentation + delta <= 0 ifTrue: ["^false"]. - m min: (paragraph indentationOfLineIndex: l ifBlank: [:tabs | 1000])]. size := stop + 1 - start. numLines := stopLine + 1 - startLine. inStream := ReadStream on: paragraph string from: start to: stop. + newString := String new: size + ((numLines * delta) max: 0). + outStream := WriteStream on: newString. - newString := WideString new: size + ((numLines * delta) max: 0). - outStream := ReadWriteStream on: newString. "This subroutine does the actual work" self indent: delta fromStream: inStream toStream: outStream. + newString := outStream contents. "Adjust the range that will be highlighted later" adjustStart ifTrue: [realStart := (realStart + delta) max: start]. + realStop := realStop + newString size - size. - realStop := realStop + outStream position - size. + "Replace selection" + self selectInvisiblyFrom: start to: stop. + self replaceSelectionWith: newString asText. - "Prepare for another iteration" - indentation := indentation + delta. - size := outStream position. - inStream := outStream setFrom: 1 to: size. - - outStream == nil - ifTrue: "tried to outdent but some line(s) were already left flush" - [view flash] - ifFalse: - [self selectInvisiblyFrom: start to: stop. - size = newString size ifFalse: [newString := outStream contents]. - self replaceSelectionWith: newString asText]. self selectFrom: realStart to: realStop. "highlight only the original range" ^ true! |
Free forum by Nabble | Edit this page |