multilingual A-macron howto ?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

multilingual A-macron howto ?

Nicolas Cellier-3

Hello list,

I wonder how a A-macron (Character value: 256) or a-macron (Character
value: 257) would display in Squeak.

I have no extended latin font loaded in the image, but it seems to me
that those characters would be interpreted as EndOfRun or CrossedX when
i read the code in
(Multi)CharacterScanner>>scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:

(encoding = 0 and: [ascii < stopConditions size and: [(stopConditions
at: ascii + 1) ~~ nil]]) ifTrue: [^ stops at: ascii + 1].

Am i wrong or is this a known problem?

Nicolas


Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

Yoshiki Ohshima
  Nicolas,

> I wonder how a A-macron (Character value: 256) or a-macron (Character
> value: 257) would display in Squeak.
>
> I have no extended latin font loaded in the image, but it seems to me
> that those characters would be interpreted as EndOfRun or CrossedX when
> i read the code in
> (Multi)CharacterScanner>>scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:
>
> (encoding = 0 and: [ascii < stopConditions size and: [(stopConditions
> at: ascii + 1) ~~ nil]]) ifTrue: [^ stops at: ascii + 1].
>
> Am i wrong or is this a known problem?

  The stopCondition logic comes from some ancient time, and it simply
use a few values above 255 for internal purpose to indicate what to do
when "EndOfRun" or "CrossedX" happens.

  To display (Character value: 256) or a-macron (Character value:
257)...  I actually haven't made a font file for these range of
characters, but you should be able to load (for example) a TrueType
font with these glyphs.

-- Yoshiki

Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

Nicolas Cellier-3
Yoshiki Ohshima a écrit :

>   Nicolas,
>
>> I wonder how a A-macron (Character value: 256) or a-macron (Character
>> value: 257) would display in Squeak.
>>
>> I have no extended latin font loaded in the image, but it seems to me
>> that those characters would be interpreted as EndOfRun or CrossedX when
>> i read the code in
>> (Multi)CharacterScanner>>scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:
>>
>> (encoding = 0 and: [ascii < stopConditions size and: [(stopConditions
>> at: ascii + 1) ~~ nil]]) ifTrue: [^ stops at: ascii + 1].
>>
>> Am i wrong or is this a known problem?
>
>   The stopCondition logic comes from some ancient time, and it simply
> use a few values above 255 for internal purpose to indicate what to do
> when "EndOfRun" or "CrossedX" happens.
>
>   To display (Character value: 256) or a-macron (Character value:
> 257)...  I actually haven't made a font file for these range of
> characters, but you should be able to load (for example) a TrueType
> font with these glyphs.
>
> -- Yoshiki
>
>
Yes the single byte ages. Quite sure I saw the trick in st80 v2.3.

The bug is theoretical for me, it's just by reading code.
French do not use a-macron.
Trusting http://en.wikipedia.org/wiki/Macron very few languages do,
mostly some latin transliterations.

Maybe that would be a problem in a framework like Sophie.
So I tried running Sophie to check if corrected there.
Unfortunately my old linux base PC fails to run it correctly.
The bug is in Sophie image, but I am not even sure the code is used.

I do not feel like crawling in FreeType plugin, VM version, or other
time-consuming funless activity just to check for such a minor problem.

So the issue will stay opened until a real a-macron user shows some
motivated interest.

Thanks anyway for taking care of answering

Nicolas


Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

johnmci

> So I tried running Sophie to check if corrected there.
> Unfortunately my old linux base PC fails to run it correctly.
> The bug is in Sophie image, but I am not even sure the code is used.

Well of course the Sophie team would like to know the problem you had  
running on your old linux base PC?


--
========================================================================
===
John M. McIntosh <[hidden email]>
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
========================================================================
===



Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

Nicolas Cellier-3
Oh, sure John, I let Sophie send the automatic bug report

Anyway, if sending ever failed here's the symptoms:

Some frames and tabs show up, also some sort of Sophie splash centered,
then a progress bar loading fonts..., then a hour glass, then a debugger
after some times and the 'Error: send to Sophie support' fill in the blank.

Nicolas


In the bash console:
./Sophie.sh
:./Contents/Linux686/cairo
ioLoadModule(./Contents/Linux686/FT2Plugin):
   ./Contents/Linux686/FT2Plugin: undefined symbol: FT_Outline_Embolden

In the debugger:
'config2007040901swr'
3 May 2007 10:56:43 pm

VM: unix - a SmalltalkImage
Image: Squeak3.8.1 [latest update: #6747]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/nicolas/Sophie.app/Contents/Resources
Trusted Dir /home/nicolas/Sophie.app/Contents/Resources/secure
Untrusted Dir /home/nicolas/Sophie.app/Contents/Resources/My Squeak

UndefinedObject(Object)>>doesNotUnderstand:
        Receiver: nil
        Arguments and temporary variables:
                t1: last
        Receiver's instance variables:
nil

CTextParagraph>>extent
        Receiver: a CTextParagraph
        Arguments and temporary variables:

        Receiver's instance variables:
                text: nil
                textStyle: nil
                container: nil
                lines: nil
                maxRightX: nil
                editor: nil
                selectionColor: nil

CCostumeTextHolder>>bounds
        Receiver: CostumeTextHolder
        Arguments and temporary variables:

        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[LabelCostume]
                text: a Text for 'comment'
                paragraph: a CTextParagraph
                editor: nil
                offset: 0@0
                color: Color black
                borderWidth: 0
                borderColor: Color transparent
                anchorPoint: #leftCenter
                inset: 3@1
                displaying: false
                showCaret: nil
                wrapContents: false
                emphasis: 0
                font: <<error during printing>>

CPrimitiveCostume>>contentsBounds
        Receiver: a CPrimitiveCostume[LabelCostume]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: nil
                t4: nil
        Receiver's instance variables:
                container: a CPrimitiveCostume[ListItemCostume]
                contents: #()
                bounds: 0@0 corner: 50@40
                fill: CostumeFill
                border: CostumeBorder
                flags: 140064
                properties: an IdentityDictionary(#layoutProperties->a
CLayoutProperties #player->LabelCostume #textHolder->CostumeTextHolder
#transform->COffsetTransform(0@0) )

CPrimitiveCostume>>minimalPartsExtent
        Receiver: a CPrimitiveCostume[LabelCostume]
        Arguments and temporary variables:
                t1: nil
                t2: nil
        Receiver's instance variables:
                container: a CPrimitiveCostume[ListItemCostume]
                contents: #()
                bounds: 0@0 corner: 50@40
                fill: CostumeFill
                border: CostumeBorder
                flags: 140064
                properties: an IdentityDictionary(#layoutProperties->a
CLayoutProperties #player->LabelCostume #textHolder->CostumeTextHolder
#transform->COffsetTransform(0@0) )

CPrimitiveCostume>>minExtent
        Receiver: a CPrimitiveCostume[LabelCostume]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: #spaceFill
                t4: #shrinkWrap
        Receiver's instance variables:
                container: a CPrimitiveCostume[ListItemCostume]
                contents: #()
                bounds: 0@0 corner: 50@40
                fill: CostumeFill
                border: CostumeBorder
                flags: 140064
                properties: an IdentityDictionary(#layoutProperties->a
CLayoutProperties #player->LabelCostume #textHolder->CostumeTextHolder
#transform->COffsetTransform(0@0) )

[] in CTableLayout>>minExtentHorizontal: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[ListItemCostume]
                t2: 0@0
                t3: 2
                t4: 50@40
                t5: 50
                t6: 40
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: 50
                t12: 40
                t13: a CPrimitiveCostume[LabelCostume]

Array(SequenceableCollection)>>do:
        Receiver: #(a CPrimitiveCostume[Player] a CPrimitiveCostume[LabelCostume])
        Arguments and temporary variables:
                t1: [] in CTableLayout>>minExtentHorizontal: {[:t13 |  t3 := t3 + 1.
  t4 := t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
                t2: 2
                t3: 2
        Receiver's instance variables:
#(a CPrimitiveCostume[Player] a CPrimitiveCostume[LabelCostume])

CTableLayout>>minExtentHorizontal:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[ListItemCostume]
                t2: 0@0
                t3: 2
                t4: 50@40
                t5: 50
                t6: 40
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: 50
                t12: 40
                t13: a CPrimitiveCostume[LabelCostume]
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[ListItemCostume]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CTableLayout>>minExtentOf:in:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[ListItemCostume]
                t2: 0@0 corner: 50@16
                t3: nil
                t4: nil
                t5: nil
                t6: nil
                t7: nil
                t8: nil
                t9: #leftToRight
                t10: nil
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[ListItemCostume]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CPrimitiveCostume>>minimalPartsExtent
        Receiver: a CPrimitiveCostume[ListItemCostume]
        Arguments and temporary variables:
                t1: TableLayout
                t2: nil
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                contents: #(a CPrimitiveCostume[Player] a
CPrimitiveCostume[LabelCostume])
                bounds: 0@0 corner: 50@16
                fill: CostumeFill
                border: CostumeBorder
                flags: 139810
                properties: an IdentityDictionary(#elements->PlayerCollection(Player
Label[SophieComponentListItem's itemLabel]) #layout->TableLayout
#layoutProperties->a CLayoutProperties #minWidth->8
#player->ListItemCostume #textHolder->CostumeTextHolder
#transform->COffsetTransform(0@0) )

CPrimitiveCostume>>minExtent
        Receiver: a CPrimitiveCostume[ListItemCostume]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: #spaceFill
                t4: #shrinkWrap
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                contents: #(a CPrimitiveCostume[Player] a
CPrimitiveCostume[LabelCostume])
                bounds: 0@0 corner: 50@16
                fill: CostumeFill
                border: CostumeBorder
                flags: 139810
                properties: an IdentityDictionary(#elements->PlayerCollection(Player
Label[SophieComponentListItem's itemLabel]) #layout->TableLayout
#layoutProperties->a CLayoutProperties #minWidth->8
#player->ListItemCostume #textHolder->CostumeTextHolder
#transform->COffsetTransform(0@0) )

[] in CTableLayout>>layoutTopToBottom:in: {[:t27 |  t4 := t4 + 1.  t26
:= CLayoutCell new target: t27.  t27 vResizing =...]}
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                t2: 0@0 corner: 114@354
                t3: 0
                t4: 1
                t5: 1073741823@1073741823
                t6: 114@354
                t7: 0
                t8: 0
                t9: [] in CTableLayout>>layoutTopToBottom:in: {[:t27 |  t4 := t4 + 1.
  t26 := CLayoutCell new target: t27.  t27 vResizing =...]}
                t10: 0
                t11: true
                t12: nil
                t13: nil
                t14: nil
                t15: nil
                t16: nil
                t17: nil
                t18: nil
                t19: 0
                t20: 0
                t21: 1073741823
                t22: 1073741823
                t23: nil
                t24: nil
                t25: nil
                t26: a CLayoutCell
                t27: a CPrimitiveCostume[ListItemCostume]

Array(SequenceableCollection)>>do:
        Receiver: #(a CPrimitiveCostume[ListItemCostume] a
CPrimitiveCostume[ListItemCostume] a CPrimitiveCostume[ListItemCostume])
        Arguments and temporary variables:
                t1: [] in CTableLayout>>layoutTopToBottom:in: {[:t27 |  t4 := t4 + 1.
  t26 := CLayoutCell new target: t27.  t27 vResizing =...]}
                t2: 1
                t3: 3
        Receiver's instance variables:
#(a CPrimitiveCostume[ListItemCostume] a
CPrimitiveCostume[ListItemCostume] a CPrimitiveCostume[ListItemCostume])

CTableLayout>>layoutTopToBottom:in:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                t2: 0@0 corner: 114@354
                t3: 0
                t4: 1
                t5: 1073741823@1073741823
                t6: 114@354
                t7: 0
                t8: 0
                t9: [] in CTableLayout>>layoutTopToBottom:in: {[:t27 |  t4 := t4 + 1.
  t26 := CLayoutCell new target: t27.  t27 vResizing =...]}
                t10: 0
                t11: true
                t12: nil
                t13: nil
                t14: nil
                t15: nil
                t16: nil
                t17: nil
                t18: nil
                t19: 0
                t20: 0
                t21: 1073741823
                t22: 1073741823
                t23: nil
                t24: nil
                t25: nil
                t26: a CLayoutCell
                t27: a CPrimitiveCostume[ListItemCostume]
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CTableLayout>>layout:in:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                t2: 0@0 corner: 114@354
                t3: nil
                t4: nil
                t5: nil
                t6: 0@0 corner: 114@354
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CPrimitiveCostume>>doLayoutIn:
        Receiver: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
        Arguments and temporary variables:
                t1: 0@0 corner: 114@354
                t2: TableLayout
                t3: nil
                t4: 0@0 corner: 114@354
                t5: a CPrimitiveCostume[ListItemCostume]
        Receiver's instance variables:
                container: a CPrimitiveCostume[SophieCListCostume (759)]
                contents: #(a CPrimitiveCostume[ListItemCostume] a
CPrimitiveCostume[ListItemCostume] a CPrimitiveCostume[ListItemCostume])
                bounds: 0@0 corner: 114@354
                fill: NoFill
                border: NoBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(SophieComponentListItem
SophieComponentListItem SophieComponentListItem) #layout->TableLayout
#player->Player[SophieCListCostume's scrollTarget]
#transform->COffsetTransform(1@1) )

[] in CPrimitiveCostume>>fullBounds {[self doLayoutIn: self layoutBounds]}
        Arguments and temporary variables:
                t1: MessageNotUnderstood: UndefinedObject>>last

BlockContext>>on:do:
        Receiver: [] in CPrimitiveCostume>>fullBounds {[self doLayoutIn: self
layoutBounds]}
        Arguments and temporary variables:
                t1: Error
                t2: [] in CPrimitiveCostume>>fullBounds {[:t1 | t1 pass]}
                t3: false
        Receiver's instance variables:
                sender: BlockContext>>on:do:
                pc: 46
                stackp: 0
                nargs: 0
                startpc: 42
                home: CPrimitiveCostume>>fullBounds

CPrimitiveCostume>>fullBounds
        Receiver: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
        Arguments and temporary variables:
                t1: MessageNotUnderstood: UndefinedObject>>last
        Receiver's instance variables:
                container: a CPrimitiveCostume[SophieCListCostume (759)]
                contents: #(a CPrimitiveCostume[ListItemCostume] a
CPrimitiveCostume[ListItemCostume] a CPrimitiveCostume[ListItemCostume])
                bounds: 0@0 corner: 114@354
                fill: NoFill
                border: NoBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(SophieComponentListItem
SophieComponentListItem SophieComponentListItem) #layout->TableLayout
#player->Player[SophieCListCostume's scrollTarget]
#transform->COffsetTransform(1@1) )

[] in CPrimitiveCostume>>contentsBounds {[:t4 | t4 visible   ifTrue: [t2
:= t4 fullBounds.    t1     ifNil: [t1 := t2...]}
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: nil
                t4: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]

Array(SequenceableCollection)>>do:
        Receiver: #(a CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]])
        Arguments and temporary variables:
                t1: [] in CPrimitiveCostume>>contentsBounds {[:t4 | t4 visible
ifTrue: [t2 := t4 fullBounds.    t1     ifNil: [t1 := t2...]}
                t2: 3
                t3: 3
        Receiver's instance variables:
#(a CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]])

CPrimitiveCostume>>contentsBounds
        Receiver: a CPrimitiveCostume[SophieCListCostume (759)]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: nil
                t4: a CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]]
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                contents: #(a CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]])
                bounds: 0@0 corner: 116@356
                fill: CostumeFill
                border: CostumeBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(ScrollBar[SophieCListCostume's
hScrollBar] ScrollBar[SophieCListCostume's vScrollBar]
Player[SophieCListCostume's scrollTarget]) #layoutProperties->a
CLayoutProperties #player->SophieCListCostume (759)
#transform->COffsetTransform(0@0) )

CPrimitiveCostume>>minimalPartsExtent
        Receiver: a CPrimitiveCostume[SophieCListCostume (759)]
        Arguments and temporary variables:
                t1: nil
                t2: nil
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                contents: #(a CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]])
                bounds: 0@0 corner: 116@356
                fill: CostumeFill
                border: CostumeBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(ScrollBar[SophieCListCostume's
hScrollBar] ScrollBar[SophieCListCostume's vScrollBar]
Player[SophieCListCostume's scrollTarget]) #layoutProperties->a
CLayoutProperties #player->SophieCListCostume (759)
#transform->COffsetTransform(0@0) )

CPrimitiveCostume>>minExtent
        Receiver: a CPrimitiveCostume[SophieCListCostume (759)]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: #spaceFill
                t4: #spaceFill
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                contents: #(a CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[ScrollBarCostume] a
CPrimitiveCostume[Player[SophieCListCostume's scrollTarget]])
                bounds: 0@0 corner: 116@356
                fill: CostumeFill
                border: CostumeBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(ScrollBar[SophieCListCostume's
hScrollBar] ScrollBar[SophieCListCostume's vScrollBar]
Player[SophieCListCostume's scrollTarget]) #layoutProperties->a
CLayoutProperties #player->SophieCListCostume (759)
#transform->COffsetTransform(0@0) )

[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                t2: 0@0
                t3: 1
                t4: 1073741823@1073741823
                t5: 0
                t6: 0
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: nil
                t12: nil
                t13: a CPrimitiveCostume[SophieCListCostume (759)]

Array(SequenceableCollection)>>do:
        Receiver: #(a CPrimitiveCostume[SophieCListCostume (759)])
        Arguments and temporary variables:
                t1: [] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.
t4 := t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
                t2: 1
                t3: 1
        Receiver's instance variables:
#(a CPrimitiveCostume[SophieCListCostume (759)])

CTableLayout>>minExtentVertical:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                t2: 0@0
                t3: 1
                t4: 1073741823@1073741823
                t5: 0
                t6: 0
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: nil
                t12: nil
                t13: a CPrimitiveCostume[SophieCListCostume (759)]
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CTableLayout>>minExtentOf:in:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                t2: 0@0 corner: 116@356
                t3: nil
                t4: nil
                t5: nil
                t6: nil
                t7: nil
                t8: nil
                t9: #topToBottom
                t10: nil
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CPrimitiveCostume>>minimalPartsExtent
        Receiver: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
        Arguments and temporary variables:
                t1: TableLayout
                t2: nil
        Receiver's instance variables:
                container: a CPrimitiveCostume[SophieDockViewCostume]
                contents: #(a CPrimitiveCostume[SophieCListCostume (759)])
                bounds: 0@0 corner: 116@356
                fill: NoFill
                border: NoBorder
                flags: 131616
                properties: an
IdentityDictionary(#elements->PlayerCollection(SophieCList)
#layout->TableLayout #layoutProperties->a CLayoutProperties
#player->Player[SophieDockViewCostume's holder]
#transform->COffsetTransform(0@20) )

CPrimitiveCostume>>minExtent
        Receiver: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: #spaceFill
                t4: #spaceFill
        Receiver's instance variables:
                container: a CPrimitiveCostume[SophieDockViewCostume]
                contents: #(a CPrimitiveCostume[SophieCListCostume (759)])
                bounds: 0@0 corner: 116@356
                fill: NoFill
                border: NoBorder
                flags: 131616
                properties: an
IdentityDictionary(#elements->PlayerCollection(SophieCList)
#layout->TableLayout #layoutProperties->a CLayoutProperties
#player->Player[SophieDockViewCostume's holder]
#transform->COffsetTransform(0@20) )

[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[SophieDockViewCostume]
                t2: 0@0
                t3: 2
                t4: 1@20
                t5: 1
                t6: 20
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: 1
                t12: 20
                t13: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]

Array(SequenceableCollection)>>do:
        Receiver: #(a CPrimitiveCostume[WidgetCostume] a
CPrimitiveCostume[Player[SophieDockViewCostume's holder]])
        Arguments and temporary variables:
                t1: [] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.
t4 := t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
                t2: 2
                t3: 2
        Receiver's instance variables:
#(a CPrimitiveCostume[WidgetCostume] a
CPrimitiveCostume[Player[SophieDockViewCostume's holder]])

CTableLayout>>minExtentVertical:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[SophieDockViewCostume]
                t2: 0@0
                t3: 2
                t4: 1@20
                t5: 1
                t6: 20
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: 1
                t12: 20
                t13: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[SophieDockViewCostume]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CTableLayout>>minExtentOf:in:
        Receiver: TableLayout
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[SophieDockViewCostume]
                t2: 0@0 corner: 116@376
                t3: nil
                t4: nil
                t5: nil
                t6: nil
                t7: nil
                t8: nil
                t9: #topToBottom
                t10: nil
        Receiver's instance variables:
                myProperties: nil
                myScripts: nil
                myEventMap: nil
                costume: a CPrimitiveCostume[SophieDockViewCostume]
                properties: a CTableLayoutProperties
                minExtentCache: nil

CPrimitiveCostume>>minimalPartsExtent
        Receiver: a CPrimitiveCostume[SophieDockViewCostume]
        Arguments and temporary variables:
                t1: TableLayout
                t2: nil
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                contents: #(a CPrimitiveCostume[WidgetCostume] a
CPrimitiveCostume[Player[SophieDockViewCostume's holder]])
                bounds: 0@0 corner: 116@376
                fill: CostumeFill
                border: CostumeBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(SophieDockViewBar
Player[SophieDockViewCostume's holder]) #layout->TableLayout
#layoutProperties->a CLayoutProperties #nose->1.0@0.0
#player->SophieDockViewCostume #transform->COffsetTransform(0@0) )

CPrimitiveCostume>>minExtent
        Receiver: a CPrimitiveCostume[SophieDockViewCostume]
        Arguments and temporary variables:
                t1: nil
                t2: nil
                t3: #spaceFill
                t4: #spaceFill
        Receiver's instance variables:
                container: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                contents: #(a CPrimitiveCostume[WidgetCostume] a
CPrimitiveCostume[Player[SophieDockViewCostume's holder]])
                bounds: 0@0 corner: 116@376
                fill: CostumeFill
                border: CostumeBorder
                flags: 131872
                properties: an
IdentityDictionary(#elements->PlayerCollection(SophieDockViewBar
Player[SophieDockViewCostume's holder]) #layout->TableLayout
#layoutProperties->a CLayoutProperties #nose->1.0@0.0
#player->SophieDockViewCostume #transform->COffsetTransform(0@0) )

[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
        Arguments and temporary variables:
                t1: a CPrimitiveCostume[Player[SophieDockViewCostume's holder]]
                t2: 0@0
                t3: 1
                t4: 1073741823@1073741823
                t5: 0
                t6: 0
                t7: 0
                t8: 0
                t9: 1073741823
                t10: 1073741823
                t11: nil
                t12: nil
                t13: a CPrimitiveCostume[SophieDockViewCostume]

Array(SequenceableCollection)>>do:
        Receiver: #(a CPrimitiveCostume[SophieDockViewCostume] a
CPrimitiveCostume[PushButtonCostume] a
CPrimitiveCostume[SophieDockViewCostume])
        Arguments and temporary variables:
                t1: [] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.
t4 := t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
                t2: 1
                t3: 3
        Receiver's instance variables:
#(a CPrimitiveCostume[SophieDockViewCostume] a
CPrimitiveCostume[PushButtonCostume] a
CPrimitiveCostume[SophieDockViewCostume])


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand:
CTextParagraph>>extent
CCostumeTextHolder>>bounds
CPrimitiveCostume>>contentsBounds
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentHorizontal: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentHorizontal:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>layoutTopToBottom:in: {[:t27 |  t4 := t4 + 1.  t26
:= CLayoutCell new target: t27.  t27 vResizing =...]}
Array(SequenceableCollection)>>do:
CTableLayout>>layoutTopToBottom:in:
CTableLayout>>layout:in:
CPrimitiveCostume>>doLayoutIn:
[] in CPrimitiveCostume>>fullBounds {[self doLayoutIn: self layoutBounds]}
BlockContext>>on:do:
CPrimitiveCostume>>fullBounds
[] in CPrimitiveCostume>>contentsBounds {[:t4 | t4 visible   ifTrue: [t2
:= t4 fullBounds.    t1     ifNil: [t1 := t2...]}
Array(SequenceableCollection)>>do:
CPrimitiveCostume>>contentsBounds
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentHorizontal: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentHorizontal:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>minExtentVertical: {[:t13 |  t3 := t3 + 1.  t4 :=
t13 minExtent.  t11 := t4 x.  t12 := t4 y.  t1...]}
Array(SequenceableCollection)>>do:
CTableLayout>>minExtentVertical:
CTableLayout>>minExtentOf:in:
CPrimitiveCostume>>minimalPartsExtent
CPrimitiveCostume>>minExtent
[] in CTableLayout>>layoutTopToBottom:in: {[:t27 |  t4 := t4 + 1.  t26
:= CLayoutCell new target: t27.  t27 vResizing =...]}
Array(SequenceableCollection)>>do:
CTableLayout>>layoutTopToBottom:in:
CTableLayout>>layout:in:
CPrimitiveCostume>>doLayoutIn:
[] in CPrimitiveCostume>>fullBounds {[self doLayoutIn: self layoutBounds]}
BlockContext>>on:do:
CPrimitiveCostume>>fullBounds
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:dirtyRect:startingAt:
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:dirtyRect:startingAt:
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:dirtyRect:startingAt:
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:dirtyRect:startingAt:
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:dirtyRect:startingAt:
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:dirtyRect:startingAt:
CWorldCostume(CPrimitiveCostume)>>topDownFullDrawOn:damageList:
[] in SophieWorldPlayer>>displayWorld {[:t11 |  self costume
topDownFullDrawOn: t11 damageList: t3.  hands   do: [:...]}
CTransformCanvas>>clipBy:during:
SophieWorldPlayer>>displayWorld
[] in SophieWorldPlayer(CWorldPlayer)>>runMorphicCycle {[Processor
activeIsland project: self.  t4 := Processor activeProcess schedu...]}
BlockContext>>on:do:
SophieWorldPlayer(CWorldPlayer)>>runMorphicCycle
SophieRootMorph>>step
SophieRootMorph(Morph)>>stepAt:
StepMessage(MorphicAlarm)>>value:
WorldState>>runLocalStepMethodsIn:
WorldState>>runStepMethodsIn:
PasteUpMorph>>runStepMethods
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess {[[World doOneCycle.  Processor
yield.  false] whileFalse.  nil]}
[] in BlockContext>>newProcess {[self value.  Processor terminateActive]}

John M McIntosh a écrit :

>
>> So I tried running Sophie to check if corrected there.
>> Unfortunately my old linux base PC fails to run it correctly.
>> The bug is in Sophie image, but I am not even sure the code is used.
>
> Well of course the Sophie team would like to know the problem you had
> running on your old linux base PC?
>
>
> --
> ===========================================================================
> John M. McIntosh <[hidden email]>
> Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
> ===========================================================================
>
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

johnmci
Ok, well we did get that

http://bugs.impara.de/sophie/view.php?id=6608

The problem of course is that FT_Outline_Embolden which is a  
FreeType  entry point isn't there, I guess because you said your  
Linux box is old.
Then it's all downhill since the Sophie visual layer really assumes  
it can render font bits to the screen.


On May 3, 2007, at 2:10 PM, nicolas cellier wrote:

> FT_Outline_Embolden

--
========================================================================
===
John M. McIntosh <[hidden email]>
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
========================================================================
===



Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

Nicolas Cellier-3
Thank you, so obvious.

So i went to http://sourceforge.net/project/showfiles.php?group_id=3157
downloaded freetype 2.3.4
uncompress/untar
./configure --prefix=/usr
make
su
make install

et voila, Sophie now runs fine

Well, my french keyboard is not really configured as french.
a-grave, e-grave, e-acute, currency, paragraph, c-cedilla don't render
as expected.

Concerning a-macron, i do not know how to type it in.
So i type some 'azertyuiop', explore the book, hack a little
string
     at: 3 put: (Character value: 256);
     at: 7 put (Character value: 257).
close the book, reopen and hourah, got the EndOfRun bug: (Character
value: 256) does not render (even not a square box) and (Character
value: 257) render as a carriage return...

azrty
uiop

Well, using URI gothic font I can see the A-macron superimposed to other
r and t characters, and a-macron before the (false) carriage return.

So I confirm the bug is in. A minor one. But a bug.

John M McIntosh a écrit :

> Ok, well we did get that
>
> http://bugs.impara.de/sophie/view.php?id=6608
>
> The problem of course is that FT_Outline_Embolden which is a FreeType  
> entry point isn't there, I guess because you said your Linux box is old.
> Then it's all downhill since the Sophie visual layer really assumes it
> can render font bits to the screen.
>
>
> On May 3, 2007, at 2:10 PM, nicolas cellier wrote:
>
>> FT_Outline_Embolden
>
> --
> ===========================================================================
> John M. McIntosh <[hidden email]>
> Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
> ===========================================================================
>
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

Nicolas Cellier-3
Just one more thing.

After saving the book, then reloading, the bug does not show anymore.
Exploring the book, i find A-macron and a-macron characters are now:

16r3FC00100 and 16r3FC00101 instead of 16r100 (256) and 16r101 (257)

So I guess this is a work around for what was a known bug.
Or is it a coincidence?

nicolas

nicolas cellier a écrit :

> Thank you, so obvious.
>
> So i went to http://sourceforge.net/project/showfiles.php?group_id=3157
> downloaded freetype 2.3.4
> uncompress/untar
> ./configure --prefix=/usr
> make
> su
> make install
>
> et voila, Sophie now runs fine
>
> Well, my french keyboard is not really configured as french.
> a-grave, e-grave, e-acute, currency, paragraph, c-cedilla don't render
> as expected.
>
> Concerning a-macron, i do not know how to type it in.
> So i type some 'azertyuiop', explore the book, hack a little
> string
>     at: 3 put: (Character value: 256);
>     at: 7 put (Character value: 257).
> close the book, reopen and hourah, got the EndOfRun bug: (Character
> value: 256) does not render (even not a square box) and (Character
> value: 257) render as a carriage return...
>
> azrty
> uiop
>
> Well, using URI gothic font I can see the A-macron superimposed to other
> r and t characters, and a-macron before the (false) carriage return.
>
> So I confirm the bug is in. A minor one. But a bug.
>
> John M McIntosh a écrit :
>> Ok, well we did get that
>>
>> http://bugs.impara.de/sophie/view.php?id=6608
>>
>> The problem of course is that FT_Outline_Embolden which is a FreeType  
>> entry point isn't there, I guess because you said your Linux box is old.
>> Then it's all downhill since the Sophie visual layer really assumes it
>> can render font bits to the screen.
>>
>>
>> On May 3, 2007, at 2:10 PM, nicolas cellier wrote:
>>
>>> FT_Outline_Embolden
>>
>> --
>> ===========================================================================
>>
>> John M. McIntosh <[hidden email]>
>> Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
>> ===========================================================================
>>
>>
>>
>>
>>
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

johnmci

> After saving the book, then reloading, the bug does not show anymore.
> Exploring the book, i find A-macron and a-macron characters are now:
>
> 16r3FC00100 and 16r3FC00101 instead of 16r100 (256) and 16r101 (257)
>
> So I guess this is a work around for what was a known bug.
> Or is it a coincidence?
>
> nicolas


Yes they would come in as 16r3FC00100 and 16r3FC00101 because they  
are converted to UTF8 on save, then later read back as UTF8 and
converted to unicode.

How about sending me the book (not the list) and I'll look at it.  
Does the characters displayed look correct?


> string
>     at: 3 put: (Character value: 256);
>     at: 7 put (Character value: 257).

Well normally you would enter the data using the keyboard, I'm not  
sure exactly what would end up in the string slots as a result of  
keyboard entry, it might not be 16r100.

> Well, my french keyboard is not really configured as french.
> a-grave, e-grave, e-acute, currency, paragraph, c-cedilla don't  
> render as expected.

If you could supply a Sophie book, and tell us what you think the  
values should be we'll look into why they are not what you expect.  
Since you are
on LInux I'm not exactly sure where the character code and/or unicode  
is coming from. I would have to look. It's possible of course it's  
broken. Still then I would think
this is a problem for any user of the the Unix VM.


On May 3, 2007, at 4:43 PM, nicolas cellier wrote:

--
========================================================================
===
John M. McIntosh <[hidden email]>
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
========================================================================
===



Reply | Threaded
Open this post in threaded view
|

Re: multilingual A-macron howto ?

Nicolas Cellier-3
John M McIntosh a écrit :

>
>> After saving the book, then reloading, the bug does not show anymore.
>> Exploring the book, i find A-macron and a-macron characters are now:
>>
>> 16r3FC00100 and 16r3FC00101 instead of 16r100 (256) and 16r101 (257)
>>
>> So I guess this is a work around for what was a known bug.
>> Or is it a coincidence?
>>
>> nicolas
>
>
> Yes they would come in as 16r3FC00100 and 16r3FC00101 because they are
> converted to UTF8 on save, then later read back as UTF8 and
> converted to unicode.
>
> How about sending me the book (not the list) and I'll look at it. Does
> the characters displayed look correct?
>
>
>> string
>>     at: 3 put: (Character value: 256);
>>     at: 7 put (Character value: 257).
>
> Well normally you would enter the data using the keyboard, I'm not sure
> exactly what would end up in the string slots as a result of keyboard
> entry, it might not be 16r100.
>

Hi john,
I do not know how to type a-macron? Is there a compose key on the
keyboard? If so we could maybe type compose _ a, or compose - a.

Other ways like importing from external format (rtf, clipboard, ...)
must also be checked.

>> Well, my french keyboard is not really configured as french.
>> a-grave, e-grave, e-acute, currency, paragraph, c-cedilla don't render
>> as expected.
>
> If you could supply a Sophie book, and tell us what you think the values
> should be we'll look into why they are not what you expect.  Since you are
> on LInux I'm not exactly sure where the character code and/or unicode is
> coming from. I would have to look. It's possible of course it's broken.
> Still then I would think
> this is a problem for any user of the the Unix VM.
>

Yes, what is in the string is what is displayed.
Just not what I typed.
So the book won't be of any help.

Knowing this does not occur with my 3.8 image (i can type éèàç§...), I
just tried various VM with various images.

It appears to be the -encoding latin1 vm option that scramble my
keyboard input. I don't know if this is expected behaviour, but in this
case, why to put this option in Sophie.sh?

Nicolas