[squeak-dev] The Trunk: Multilingual-tpr.167.mcz

H. Hirzel hannes.hirzel at gmail.com
Wed Sep 4 04:05:19 UTC 2013


Great to have these additional comments on the methods

StrikeFontSet>>characterToGlyphMap
StrikeFontSet>>displayMultiString:on:from:to:at:kern:baselineY:
StrikeFontSet>>glyphInfoOf:into:
StrikeFontSet>>questionGlyphInfoInto:

--Hannes

On Wed, 4 Sep 2013 00:02:21.542 0000, commits at source.squeak.org
<commits at source.squeak.org> wrote:
> 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 Squeak-dev mailing list