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. ! |
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, [hidden email] <[hidden email]> 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. > ! > > > |
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 <[hidden email]> 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, [hidden email] > <[hidden email]> 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. >> ! >> >> >> > |
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 <[hidden email]> 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 <[hidden email]> 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, [hidden email] >> <[hidden email]> 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. >>> ! >>> >>> >>> >> > |
Free forum by Nabble | Edit this page |