[squeak-dev] The Trunk: Multilingual-ul.218.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Mar 13 14:55:49 UTC 2017
Levente Uzonyi uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-ul.218.mcz
==================== Summary ====================
Name: Multilingual-ul.218
Author: ul
Time: 13 March 2017, 2:44:49.462944 pm
UUID: 69427b43-9743-47fa-925f-7759a34c58df
Ancestors: Multilingual-tfel.217
SortedCollection Whack-a-mole
=============== Diff against Multilingual-tfel.217 ===============
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.
] 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 sorted: [:x :y | (x at: 2) <= (y at: 2)].
- 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 at 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 at 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.
] 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 sorted: [:x :y | (x at: 2) <= (y at: 2)].
- 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 at 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 at 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.
] 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 sorted: [:x :y | (x at: 2) <= (y at: 2)].
- 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 at 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 at 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: StrikeFontSet class>>familyName:size: (in category 'as yet unclassified') -----
familyName: aName size: aSize
"Answer a font (or the default font if the name is unknown) in the specified size."
| collection |
collection := self allInstances select: [:inst | (inst name beginsWith: aName) and: [inst emphasis = 0]].
collection isEmpty ifTrue: [
(aName = 'DefaultMultiStyle') ifTrue: [
collection := (TextConstants at: #DefaultMultiStyle) fontArray.
] ifFalse: [
^ TextStyle defaultFont
]
].
+ collection sort: [:a :b | a pointSize <= b pointSize].
- collection := collection asSortedCollection: [:a :b | a pointSize <= b pointSize].
collection do: [:s | (s pointSize >= aSize) ifTrue: [^ s]].
^ TextStyle defaultFont.
!
More information about the Squeak-dev
mailing list
|