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 |
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 |
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 > > 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 |
> 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 ======================================================================== === |
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 > =========================================================================== > > > > |
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 ======================================================================== === |
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 > =========================================================================== > > > > |
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 >> =========================================================================== >> >> >> >> >> > > > |
> 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 ======================================================================== === |
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 |
Free forum by Nabble | Edit this page |