Nicolas Cellier uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-nice.168.mcz ==================== Summary ==================== Name: Multilingual-nice.168 Author: nice Time: 4 September 2013, 10:19:27.305 pm UUID: f359e589-1b80-460d-a9c1-876436a0e056 Ancestors: Multilingual-tpr.167 1) avoid 'a litral string' asSymbol, #'a literal symbol' is the syntax. 2) Transform this construct into something not less understandable: [ doSomeLoop. testStopCondition ifTrue: [^something] ] repeat => [ doSomeLoop. testStopCondition ] whileFalse. ^something =============== Diff against Multilingual-tpr.167 =============== Item was changed: ----- Method: EFontBDFFontReader>>readFrom:to: (in category 'as yet unclassified') ----- readFrom: start to: end | xTable glyphs ascent descent chars charsNum height form blt lastAscii pointSize ret lastValue encoding bbx strikeWidth minAscii maxAscii maxWidth | form := encoding := bbx := nil. self initialize. self readAttributes. height := Integer readFromString: ((properties at: #FONTBOUNDINGBOX) at: 2). + ascent := Integer readFromString: (properties at: #'FONT_ASCENT') first. + descent := Integer readFromString: (properties at: #'FONT_DESCENT') first. + (properties includesKey: #'POINT_SIZE') ifTrue: [ + pointSize := (Integer readFromString: (properties at: #'POINT_SIZE') first) // 10. - ascent := Integer readFromString: (properties at: 'FONT_ASCENT' asSymbol) first. - descent := Integer readFromString: (properties at: 'FONT_DESCENT' asSymbol) first. - (properties includesKey: 'POINT_SIZE' asSymbol) ifTrue: [ - pointSize := (Integer readFromString: (properties at: 'POINT_SIZE' asSymbol) first) // 10. ] ifFalse: [ pointSize := (ascent + descent) * 72 // 96. ]. maxWidth := 0. minAscii := 16r200000. strikeWidth := 0. maxAscii := 0. charsNum := Integer readFromString: (properties at: #CHARS) first. chars := Set new: charsNum. self readCharactersInRangeFrom: start to: end totalNums: charsNum storeInto: chars. chars := chars asSortedCollection: [:x :y | (x at: 2) <= (y at: 2)]. charsNum := chars size. "undefined encodings make this different" chars do: [:array | | width | encoding := array at: 2. bbx := array at: 3.. width := bbx at: 1. maxWidth := maxWidth max: width. minAscii := minAscii min: encoding. maxAscii := maxAscii max: encoding. strikeWidth := strikeWidth + width. ]. glyphs := Form extent: strikeWidth@height. blt := BitBlt toForm: glyphs. "xTable := XTableForUnicodeFont new ranges: (Array with: (Array with: start with: end))." xTable := SparseLargeTable new: end + 3 chunkSize: 32 arrayClass: Array base: start + 1 defaultValue: -1. lastAscii := start. 1 to: charsNum do: [:i | form := (chars at: i) first. encoding := (chars at: i) second. bbx := (chars at: i) third. "lastAscii+1 to: encoding-1 do: [:a | xTable at: a+2 put: (xTable at: a+1)]." lastValue := xTable at: lastAscii + 1 + 1. xTable at: encoding + 1 put: lastValue. blt copy: (((xTable at: encoding+1)@(ascent - (bbx at: 2) - (bbx at: 4))) extent: (bbx at: 1)@(bbx at: 2)) from: 0@0 in: form. xTable at: encoding+2 put: (xTable at: encoding+1)+(bbx at: 1). lastAscii := encoding. ]. xTable zapDefaultOnlyEntries. ret := Array new: 8. ret at: 1 put: xTable. ret at: 2 put: glyphs. ret at: 3 put: minAscii. ret at: 4 put: maxAscii. ret at: 5 put: maxWidth. ret at: 6 put: ascent. ret at: 7 put: descent. ret at: 8 put: pointSize. ^ret. " ^{xTable. glyphs. minAscii. maxAscii. maxWidth. ascent. descent. pointSize}" ! Item was changed: ----- Method: EFontBDFFontReaderForRanges>>readRanges: (in category 'as yet unclassified') ----- readRanges: ranges | xTable glyphs ascent descent chars charsNum height form blt lastAscii pointSize ret lastValue start end encoding bbx strikeWidth minAscii maxAscii maxWidth | form := encoding := bbx := nil. self initialize. self readAttributes. height := Integer readFromString: ((properties at: #FONTBOUNDINGBOX) at: 2). + ascent := Integer readFromString: (properties at: #'FONT_ASCENT') first. + descent := Integer readFromString: (properties at: #'FONT_DESCENT') first. + (properties includesKey: #'POINT_SIZE') ifTrue: [ + pointSize := (Integer readFromString: (properties at: #'POINT_SIZE') first) // 10. - ascent := Integer readFromString: (properties at: 'FONT_ASCENT' asSymbol) first. - descent := Integer readFromString: (properties at: 'FONT_DESCENT' asSymbol) first. - (properties includesKey: 'POINT_SIZE' asSymbol) ifTrue: [ - pointSize := (Integer readFromString: (properties at: 'POINT_SIZE' asSymbol) first) // 10. ] ifFalse: [ pointSize := (ascent + descent) * 72 // 96. ]. maxWidth := 0. minAscii := 16r200000. strikeWidth := 0. maxAscii := 0. charsNum := Integer readFromString: (properties at: #CHARS) first. chars := Set new: charsNum. self readCharactersInRanges: ranges storeInto: chars. chars := chars asSortedCollection: [:x :y | (x at: 2) <= (y at: 2)]. charsNum := chars size. "undefined encodings make this different" chars do: [:array | | width | encoding := array at: 2. bbx := array at: 3.. width := bbx at: 1. maxWidth := maxWidth max: width. minAscii := minAscii min: encoding. maxAscii := maxAscii max: encoding. strikeWidth := strikeWidth + width. ]. glyphs := Form extent: strikeWidth@height. blt := BitBlt toForm: glyphs. start := (ranges collect: [:r | r first]) min. end := (ranges collect: [:r | r second]) max + 3. xTable := SparseLargeTable new: end chunkSize: 64 arrayClass: Array base: start +1 defaultValue: -1. lastAscii := start. xTable at: lastAscii + 2 put: 0. 1 to: charsNum do: [:i | form := (chars at: i) first. encoding := (chars at: i) second. bbx := (chars at: i) third. "lastAscii+1 to: encoding-1 do: [:a | xTable at: a+2 put: (xTable at: a+1)]." lastValue := xTable at: lastAscii + 1 + 1. xTable at: encoding + 1 put: lastValue. blt copy: (((xTable at: encoding+1)@(ascent - (bbx at: 2) - (bbx at: 4))) extent: (bbx at: 1)@(bbx at: 2)) from: 0@0 in: form. xTable at: encoding+2 put: (xTable at: encoding+1)+(bbx at: 1). lastAscii := encoding. ]. xTable at: xTable size put: (xTable at: xTable size - 1). xTable zapDefaultOnlyEntries. ret := Array new: 8. ret at: 1 put: xTable. ret at: 2 put: glyphs. ret at: 3 put: minAscii. ret at: 4 put: maxAscii. ret at: 5 put: maxWidth. ret at: 6 put: ascent. ret at: 7 put: descent. ret at: 8 put: pointSize. ^ret. " ^{xTable. glyphs. minAscii. maxAscii. maxWidth. ascent. descent. pointSize}" ! Item was changed: ----- Method: EFontBDFFontReaderForRanges>>readRanges:overrideWith:otherRanges:additionalOverrideRange: (in category 'as yet unclassified') ----- readRanges: ranges overrideWith: otherFileName otherRanges: otherRanges additionalOverrideRange: additionalRange | xTable glyphs ascent descent chars charsNum height form blt lastAscii pointSize ret lastValue start end encoding bbx strikeWidth minAscii maxAscii maxWidth | form := encoding := bbx := nil. self initialize. self readAttributes. height := Integer readFromString: ((properties at: #FONTBOUNDINGBOX) at: 2). + ascent := Integer readFromString: (properties at: #'FONT_ASCENT') first. + descent := Integer readFromString: (properties at: #'FONT_DESCENT') first. + (properties includesKey: #'POINT_SIZE') ifTrue: [ + pointSize := (Integer readFromString: (properties at: #'POINT_SIZE') first) // 10. - ascent := Integer readFromString: (properties at: 'FONT_ASCENT' asSymbol) first. - descent := Integer readFromString: (properties at: 'FONT_DESCENT' asSymbol) first. - (properties includesKey: 'POINT_SIZE' asSymbol) ifTrue: [ - pointSize := (Integer readFromString: (properties at: 'POINT_SIZE' asSymbol) first) // 10. ] ifFalse: [ pointSize := (ascent + descent) * 72 // 96. ]. maxWidth := 0. minAscii := 16r200000. strikeWidth := 0. maxAscii := 0. charsNum := Integer readFromString: (properties at: #CHARS) first. chars := Set new: charsNum. self readCharactersInRanges: ranges storeInto: chars. chars := self override: chars with: otherFileName ranges: otherRanges transcodingTable: (UCSTable jisx0208Table) additionalRange: additionalRange. chars := chars asSortedCollection: [:x :y | (x at: 2) <= (y at: 2)]. charsNum := chars size. "undefined encodings make this different" chars do: [:array | | width | encoding := array at: 2. bbx := array at: 3.. width := bbx at: 1. maxWidth := maxWidth max: width. minAscii := minAscii min: encoding. maxAscii := maxAscii max: encoding. strikeWidth := strikeWidth + width. ]. glyphs := Form extent: strikeWidth@height. blt := BitBlt toForm: glyphs. start := ((ranges collect: [:r | r first]), (additionalRange collect: [:r2 | r2 first])) min. end := ((ranges collect: [:r | r second]), (additionalRange collect: [:r2 | r2 second])) max + 3. "xRange := Array with: (Array with: ((ranges collect: [:r | r first]), (additionalRange collect: [:r2 | r2 first])) min with: (((ranges collect: [:r | r second]), (additionalRange collect: [:r2 | r2 second])) max + 2))." "xTable := XTableForUnicodeFont new ranges: xRange." xTable := SparseLargeTable new: end chunkSize: 64 arrayClass: Array base: start defaultValue: -1. lastAscii := start. xTable at: lastAscii + 2 put: 0. 1 to: charsNum do: [:i | form := (chars at: i) first. encoding := (chars at: i) second. bbx := (chars at: i) third. "lastAscii+1 to: encoding-1 do: [:a | xTable at: a+2 put: (xTable at: a+1)]." lastValue := xTable at: lastAscii + 1 + 1. xTable at: encoding + 1 put: lastValue. blt copy: (((xTable at: encoding+1)@(ascent - (bbx at: 2) - (bbx at: 4))) extent: (bbx at: 1)@(bbx at: 2)) from: 0@0 in: form. xTable at: encoding+2 put: (xTable at: encoding+1)+(bbx at: 1). lastAscii := encoding. ]. xTable at: xTable size put: (xTable at: xTable size - 1). xTable zapDefaultOnlyEntries. ret := Array new: 8. ret at: 1 put: xTable. ret at: 2 put: glyphs. ret at: 3 put: minAscii. ret at: 4 put: maxAscii. ret at: 5 put: maxWidth. ret at: 6 put: ascent. ret at: 7 put: descent. ret at: 8 put: pointSize. ^ret. " ^{xTable. glyphs. minAscii. maxAscii. maxWidth. ascent. descent. pointSize}" ! Item was changed: ----- Method: MultiCharacterBlockScanner>>characterBlockAtPoint:index:in: (in category 'scanning') ----- characterBlockAtPoint: aPoint index: index in: textLine "This method is the Morphic characterBlock finder. It combines MVC's characterBlockAtPoint:, -ForIndex:, and buildCharcterBlock:in:" | runLength lineStop stopCondition | line := textLine. rightMargin := line rightMargin. lastIndex := line first. self setStopConditions. "also sets font" characterIndex := index. " == nil means scanning for point" characterPoint := aPoint. (characterPoint isNil or: [characterPoint y > line bottom]) ifTrue: [characterPoint := line bottomRight]. (text isEmpty or: [(characterPoint y < line top or: [characterPoint x < line left]) or: [characterIndex notNil and: [characterIndex < line first]]]) ifTrue: [^ (CharacterBlock new stringIndex: line first text: text topLeft: line leftMargin@line top extent: 0 @ textStyle lineGrid) textLine: line]. destX := leftMargin := line leftMarginForAlignment: alignment. destY := line top. runLength := text runLengthFor: line first. characterIndex ifNotNil: [lineStop := characterIndex "scanning for index"] ifNil: [lineStop := line last "scanning for point"]. runStopIndex := lastIndex + (runLength - 1) min: lineStop. lastCharacterExtent := 0 @ line lineHeight. spaceCount := 0. [stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: characterPoint x stopConditions: stopConditions kern: kern. "see setStopConditions for stopping conditions for character block operations." self lastCharacterExtentSetX: (specialWidth ifNil: [font widthOf: (text at: lastIndex)] ifNotNil: [specialWidth]). + self perform: stopCondition] whileFalse. + + characterIndex - (self perform: stopCondition) ifTrue: - [characterIndex ifNil: [ "Result for characterBlockAtPoint: " (stopCondition ~~ #cr and: [ lastIndex == line last and: [ aPoint x > ((characterPoint x) + (lastCharacterExtent x / 2)) ]]) ifTrue: [ "Correct for right half of last character in line" ^ (CharacterBlock new stringIndex: lastIndex + 1 text: text topLeft: characterPoint + (lastCharacterExtent x @ 0) + (font descentKern @ 0) extent: 0 @ lastCharacterExtent y) textLine: line ]. ^ (CharacterBlock new stringIndex: lastIndex text: text topLeft: characterPoint + (font descentKern @ 0) extent: lastCharacterExtent - (font baseKern @ 0)) textLine: line] ifNotNil: ["Result for characterBlockForIndex: " ^ (CharacterBlock new stringIndex: characterIndex text: text topLeft: characterPoint + ((font descentKern) - kern @ 0) extent: lastCharacterExtent) + textLine: line]! - textLine: line]]] repeat! Item was changed: ----- Method: MultiCompositionScanner>>composeLine:fromCharacterIndex:inParagraph: (in category 'scanning') ----- composeLine: lineIndex fromCharacterIndex: startIndex inParagraph: aParagraph "Answer an instance of TextLineInterval that represents the next line in the paragraph." | runLength stopCondition | destX := spaceX := leftMargin := aParagraph leftMarginForCompositionForLine: lineIndex. destY := 0. rightMargin := aParagraph rightMarginForComposition. leftMargin >= rightMargin ifTrue: [self error: 'No room between margins to compose']. lastIndex := startIndex. "scanning sets last index" lineHeight := textStyle lineGrid. "may be increased by setFont:..." baseline := textStyle baseline. baselineY := destY + baseline. self setStopConditions. "also sets font" self handleIndentation. runLength := text runLengthFor: startIndex. runStopIndex := (lastIndex := startIndex) + (runLength - 1). line := TextLineInterval start: lastIndex stop: 0 internalSpaces: 0 paddingWidth: 0. presentationLine := TextLineInterval start: lastIndex stop: 0 internalSpaces: 0 paddingWidth: 0. numOfComposition := 0. presentation := TextStream on: (Text fromString: (WideString new: text size)). spaceCount := 0. [stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: rightMargin stopConditions: stopConditions kern: kern. "See setStopConditions for stopping conditions for composing." + self perform: stopCondition] whileFalse. + + presentationLine + lineHeight: lineHeight + textStyle leading + baseline: baseline + textStyle leading. + ^line + lineHeight: lineHeight + textStyle leading + baseline: baseline + textStyle leading! - (self perform: stopCondition) - ifTrue: [presentationLine lineHeight: lineHeight + textStyle leading - baseline: baseline + textStyle leading. - ^line lineHeight: lineHeight + textStyle leading - baseline: baseline + textStyle leading]] repeat! |
Free forum by Nabble | Edit this page |