Nicolas Cellier uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-nice.176.mcz ==================== Summary ==================== Name: Multilingual-nice.176 Author: nice Time: 27 September 2013, 1:43:11.99 am UUID: c3723402-2de2-4f11-83cb-d6dca977f57c Ancestors: Multilingual-nice.175 Don't registerBreakableIndex in Latin1Environment, the DefaultStopConditions will handle that graciously. isBreakableAt:in:in usage should be reserved to eastern asian language environments. Take back two methods stolen by Morphic. They do not refer to Morphic and are sent by Multilingual and Graphics (ok 1 Morphic sender does not make a reason for being hijacked). =============== Diff against Multilingual-nice.175 =============== Item was changed: ----- Method: MultiCharacterScanner>>scanMultiCharactersCombiningFrom:to:in:rightX:stopConditions:kern: (in category 'scanner methods') ----- scanMultiCharactersCombiningFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta "appears to be unused" | charCode encoding f startEncoding combining combined combiningIndex c | lastIndex := startIndex. lastIndex > stopIndex ifTrue: [lastIndex := stopIndex. ^ stops endOfRun]. startEncoding := (sourceString at: startIndex) leadingChar. font ifNil: [font := (TextConstants at: #DefaultMultiStyle) fontArray at: 1]. ((font isMemberOf: StrikeFontSet) or: [font isKindOf: TTCFontSet]) ifTrue: [ f := [font fontArray at: startEncoding + 1] on: Exception do: [:ex | nil]. f ifNil: [ f := font fontArray at: 1]. ]. spaceWidth := font widthOf: Space. combining := nil. [lastIndex <= stopIndex] whileTrue: [ charCode := (sourceString at: lastIndex) charCode. c := (sourceString at: lastIndex). combining ifNil: [ combining := CombinedChar new. combining add: c. combiningIndex := lastIndex. lastIndex := lastIndex + 1. ] ifNotNil: [ (combining add: c) ifFalse: [ self addCharToPresentation: (combined := combining combined). combining := CombinedChar new. combining add: c. charCode := combined charCode. encoding := combined leadingChar. encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. (encoding = 0 and: [charCode < 256 and:[(stops at: charCode + 1) notNil]]) ifTrue: [ ^ stops at: charCode + 1 ] ifFalse: [ ^ stops endOfRun ]. ]. (encoding = 0 and: [charCode < 256 and:[(stops at: charCode + 1) notNil]]) ifTrue: [ combining ifNotNil: [ self addCharToPresentation: (combining combined). ]. ^ stops at: charCode + 1 ]. - (self isBreakableAt: lastIndex in: sourceString in: Latin1Environment) ifTrue: [ - self registerBreakableIndex. - ]. destX > rightX ifTrue: [ destX ~= firstDestX ifTrue: [ lastIndex := combiningIndex. self removeLastCharFromPresentation. ^ stops crossedX]]. combiningIndex := lastIndex. lastIndex := lastIndex + 1. ] ifTrue: [ lastIndex := lastIndex + 1. ]. ]. ]. lastIndex := stopIndex. combining ifNotNil: [ combined := combining combined. self addCharToPresentation: combined. ]. ^ stops endOfRun! Item was changed: ----- Method: MultiCharacterScanner>>scanMultiCharactersFrom:to:in:rightX:stopConditions:kern: (in category 'scanning') ----- scanMultiCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta | ascii encoding f nextDestX startEncoding floatDestX widthAndKernedWidth nextChar atEndOfRun | lastIndex := startIndex. lastIndex > stopIndex ifTrue: [lastIndex := stopIndex. ^ stops endOfRun]. startEncoding := (sourceString at: startIndex) leadingChar. font ifNil: [font := (TextConstants at: #DefaultMultiStyle) fontArray at: 1]. ((font isMemberOf: StrikeFontSet) or: [font isKindOf: TTCFontSet]) ifTrue: [ f := [font fontArray at: startEncoding + 1] ifError: [nil]. f ifNil: [ f := font fontArray at: 1]. spaceWidth := f widthOf: Space. ]. floatDestX := destX. widthAndKernedWidth := Array new: 2. atEndOfRun := false. [lastIndex <= stopIndex] whileTrue: [ encoding := (sourceString at: lastIndex) leadingChar. encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^ stops endOfRun]. ascii := (sourceString at: lastIndex) charCode. (ascii < 256 and: [(stops at: ascii + 1) ~~ nil]) ifTrue: [^ stops at: ascii + 1]. - (self isBreakableAt: lastIndex in: sourceString in: Latin1Environment) ifTrue: [ - self registerBreakableIndex. - ]. nextChar := (lastIndex + 1 <= stopIndex) ifTrue:[sourceString at: lastIndex + 1] ifFalse:[ atEndOfRun := true. "if there is a next char in sourceString, then get the kern and store it in pendingKernX" lastIndex + 1 <= sourceString size ifTrue:[sourceString at: lastIndex + 1] ifFalse:[ nil]]. font widthAndKernedWidthOfLeft: (sourceString at: lastIndex) right: nextChar into: widthAndKernedWidth. nextDestX := floatDestX + (widthAndKernedWidth at: 1). nextDestX > rightX ifTrue: [destX ~= firstDestX ifTrue: [^stops crossedX]]. floatDestX := floatDestX + kernDelta + (widthAndKernedWidth at: 2). atEndOfRun ifTrue:[ pendingKernX := (widthAndKernedWidth at: 2) - (widthAndKernedWidth at: 1). floatDestX := floatDestX - pendingKernX]. destX := floatDestX . lastIndex := lastIndex + 1. ]. lastIndex := stopIndex. ^ stops endOfRun! Item was added: + ----- Method: MultiCompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide: (in category 'scanning') ----- + composeFrom: startIndex inRectangle: lineRectangle + firstLine: firstLine leftSide: leftSide rightSide: rightSide + "Answer an instance of TextLineInterval that represents the next line in the paragraph." + | runLength stopCondition | + "Set up margins" + leftMargin := lineRectangle left. + leftSide ifTrue: [leftMargin := leftMargin + + (firstLine ifTrue: [textStyle firstIndent] + ifFalse: [textStyle restIndent])]. + destX := spaceX := leftMargin. + firstDestX := destX. + rightMargin := lineRectangle right. + rightSide ifTrue: [rightMargin := rightMargin - textStyle rightIndent]. + lastIndex := startIndex. "scanning sets last index" + destY := lineRectangle top. + lineHeight := baseline := 0. "Will be increased by setFont" + self setStopConditions. "also sets font" + runLength := text runLengthFor: startIndex. + runStopIndex := (lastIndex := startIndex) + (runLength - 1). + line := (TextLine start: lastIndex stop: 0 internalSpaces: 0 paddingWidth: 0) + rectangle: lineRectangle. + spaceCount := 0. + self handleIndentation. + leftMargin := destX. + line leftMargin: leftMargin. + + [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. + + ^ line + lineHeight: lineHeight + textStyle leading + baseline: baseline + textStyle leading! Item was added: + ----- Method: MultiCompositionScanner>>setFont (in category 'stop conditions') ----- + setFont + super setFont. + breakAtSpace := false.! |
Free forum by Nabble | Edit this page |