[Pkg] The Trunk: Multilingual-tpr.167.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Sep 4 00:02:41 UTC 2013
tim Rowledge uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-tpr.167.mcz
==================== Summary ====================
Name: Multilingual-tpr.167
Author: tpr
Time: 3 September 2013, 5:02:14.904 pm
UUID: 370d09db-992b-4348-9062-79cfaacf0e5e
Ancestors: Multilingual-fbs.166
Provide a sensible implementation of #characterToGlyphMap to allow the intended primitive to do what it primitively does.
Add some comments to a few important methods to, y'know, actually help readers understand WTF is going on.
Part of fixing Mantis-01781 7 years after it was reported.
=============== Diff against Multilingual-fbs.166 ===============
Item was added:
+ ----- Method: StrikeFontSet>>characterToGlyphMap (in category 'accessing') -----
+ characterToGlyphMap
+ "return the mapping for my first font; this follows the general form of all the other accessing methods but since we can't specifically find a font for a particualr character her we devolve to the first font in the fontArray - just like the other non-character-specific messages (#ascent etc).
+ This is only sent by the BitBlt>primDisplayString:from:to:map:xTable: method (other than internally by StrikeFont)"
+ ^fontArray first characterToGlyphMap!
Item was changed:
----- Method: StrikeFontSet>>displayMultiString:on:from:to:at:kern:baselineY: (in category 'displaying') -----
displayMultiString: aString on: aBitBlt from: startIndex to: stopIndex at: aPoint kern: kernDelta baselineY: baselineY
+ "display a multi-byte characterset string; each character may require swapping to a new strikefont as discovered by glyphInfoOf:"
-
| destPoint leftX rightX glyphInfo g destY |
destPoint := aPoint.
glyphInfo := Array new: 5.
startIndex to: stopIndex do: [:charIndex |
self glyphInfoOf: (aString at: charIndex) into: glyphInfo.
g := glyphInfo at:1.
leftX := glyphInfo at:2.
rightX := glyphInfo at:3.
((glyphInfo at:5) ~= aBitBlt lastFont) ifTrue: [
(glyphInfo at:5) installOn: aBitBlt.
].
aBitBlt sourceForm: g.
destY := baselineY - (glyphInfo at:4).
aBitBlt destX: (destPoint x) destY: destY width: (rightX - leftX) height: (self height).
aBitBlt sourceOrigin: leftX @ 0.
aBitBlt copyBits.
destPoint := destPoint x + (rightX - leftX + kernDelta) @ destPoint y.
].
^ destPoint.!
Item was changed:
----- Method: StrikeFontSet>>glyphInfoOf:into: (in category 'private') -----
glyphInfoOf: aCharacter into: glyphInfoArray
+ "return glyph info for the character; it can get complicated."
-
| index f code leftX |
+ "the leadingChar gives us an encoding. if that is outside the range of fonts in my fontArray, just return the default glyphInfo for a question-mark"
index := aCharacter leadingChar + 1.
fontArray size < index ifTrue: [^ self questionGlyphInfoInto: glyphInfoArray].
(f := fontArray at: index) ifNil: [^ self questionGlyphInfoInto: glyphInfoArray].
+ "if the actual character is not in the range supported by the chosen font, return that default question-mark info "
code := aCharacter charCode.
((code between: f minAscii and: f maxAscii) not) ifTrue: [
^ self questionGlyphInfoInto: glyphInfoArray.
].
+
+ "if the xTable doesn't like the character, return that question-mark default info"
leftX := f xTable at: code + 1.
leftX < 0 ifTrue: [
^ self questionGlyphInfoInto: glyphInfoArray.
].
+
+ "finally, we have an ok font and character to return glyph info about"
glyphInfoArray at: 1 put: f glyphs;
at: 2 put: leftX;
at: 3 put: (f xTable at: code + 2);
at: 4 put: (f ascentOf: aCharacter);
at: 5 put: self.
^ glyphInfoArray.
!
Item was changed:
----- Method: StrikeFontSet>>questionGlyphInfoInto: (in category 'private') -----
questionGlyphInfoInto: glyphInfoArray
+ "return glyph info for the question mark character in the first font of the fontArray -sort of a default set of info"
-
| f ascii |
f := fontArray at: 1.
ascii := $? asciiValue.
glyphInfoArray at: 1 put: f glyphs;
at: 2 put: (f xTable at: ascii + 1);
at: 3 put: (f xTable at: ascii + 2);
at: 4 put: (self ascentOf: $?);
at: 5 put: self.
^ glyphInfoArray.
!
More information about the Packages
mailing list