The Trunk: Multilingual-nice.176.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Multilingual-nice.176.mcz

commits-2
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.!