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

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


I think it would be good if somebody can check what Pharo has as
additional comments in this area (I do not have a Pharo image ready at
the machine I am writing this email).

On 9/4/13, H. Hirzel <hannes.hirzel at gmail.com> wrote:
> In addition to these method comments fixed here
>
> StrikeFontSet>>characterToGlyphMap
> StrikeFontSet>>displayMultiString:on:from:to:at:kern:baselineY:
> StrikeFontSet>>glyphInfoOf:into:
> StrikeFontSet>>questionGlyphInfoInto:
>
>
> With http://source.squeak.org/trunk/TrueType-tpr.26.mcz
>
> comments added to
>
> TTCFontSet>>questionGlyphInfoInto:
> TTCFontSet>>glyphInfoOf:into:
> TTCFont>>glyphInfoOf:into:
> MultiTTCFont>>glyphInfoOf:into:
>
>
> With http://source.squeak.org/trunk/Graphics-tpr.222.mcz
> comments added to
>
> FixedFaceFont>>glyphInfoOf:into:
> StrikeFont>>displayMultiString:on:from:to:at:kern:baselineY:
> StrikeFont>>glyphInfoOf:into:
>
>
> On 9/4/13, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>> 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