The Trunk: Multilingual-nice.168.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.168.mcz

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