> On 13 Mar 2018, at 18:09, Stephane Ducasse <stepharo.s...@gmail.com> wrote:
> 
> I originally did
> 
> addDescriptionMethodBodyIn: aStream forItems: descriptionItems
>    aStream nextPutAll: 'STON fromString: '.
>    STON put: descriptionItems onStream: aStream
> 
> 
> and I get
> 
> STON fromString:
> [StringConfigurationItem{#propertyName:'title',#default:'my super cool
> book'},BooleanConfigurationItem{#propertyName:'verbose',#default:'true'},StringConfigurationItem{#propertyName:'attribution',#default:'me,
> myself and I'},StringConfigurationItem{#propertyName:'series',#default:'Square
> Bracket Associate
> Collection'},StringConfigurationItem{#propertyName:'keywords',#default:'Pharo'},FolderConfigurationItem{#propertyName:'outputDirectory',#default:'build'},FileConfigurationItem{#propertyName:'mainDocument',#default:'book'},FileConfigurationItem{#propertyName:'latexTemplate',#default:'_support/templates/main.latex.mustache'},FileConfigurationItem{#propertyName:'latexChapterTemplate',#default:'_support/templates/chapter.latex.mustache'},FileConfigurationItem{#propertyName:'htmlTemplate',#default:'_support/templates/html.mustache'},FileConfigurationItem{#propertyName:'htmlChapterTemplate',#default:'_support/templates/html.mustache'},NewLineConfigurationItem{#propertyName:'newLine',#defaultKey:#unix},SymbolConfigurationItem{#propertyName:'latexWriter',#default:#'latex:sbabook'}]
> 
> I see that you pass via a string and me via a stream but I wonder why
> with my solution strings where not escaped.

You're sick that is why you are not thinking clearly ;-)

This has nothing to do with STON, but with Smalltalk syntax.

Say you want to write out a Date creation expression, then the following (what 
you do) would not work:

Compiler evaluate: (String streamContents: [ :out |
  out << 'Date fromString: '.
  Date today printOn: out ]).

But the following does (as I did):

Compiler evaluate: (String streamContents: [ :out |
  out << 'Date fromString: '.
  out print: Date today printString ]).

You need to take the printed representation and turn it into a Smalltalk String 
literal. If you just put it there, all the characters will be there but the 
string will not be quoted, nor will embedded quotes be escaped properly.

> Stef
> 
> On Tue, Mar 13, 2018 at 5:13 PM, Stephane Ducasse
> <stepharo.s...@gmail.com> wrote:
>> On Tue, Mar 13, 2018 at 5:12 PM, Stephane Ducasse
>> <stepharo.s...@gmail.com> wrote:
>>> Tx sven got caught by a flu... freezing in my bed.
>>> I will check.
>>> 
>>> On Mon, Mar 12, 2018 at 11:01 PM, Sven Van Caekenberghe <s...@stfx.eu> 
>>> wrote:
>>>> So I guess that you want a Smalltalk expression that, when evaluated, 
>>>> returns an arbitrary STON-ified object as a real object.
>>>> 
>>>> Let's say you want to STON-ify the following object:
>>>> 
>>>> { #firstName->'Stéphane'. #lastName->'Ducasse'. #note->'Look: '', that was 
>>>> a single quote.' } asDictionary.
>>>> 
>>>> Note there is a single quote character inside the #note.
>>>> 
>>>> You can do that using #print: when needed. Here is an expression to see 
>>>> how that works:
>>>> 
>>>> Compiler evaluate: (String streamContents: [ :out |
>>>>  out
>>>>    nextPutAll: 'STON fromString: ';
>>>>    print: (STON toString: ({ #firstName->'Stéphane'. #lastName->'Ducasse'. 
>>>> #note->'Look: '', that was a single quote.' } asDictionary)) ]).
>>>> 
>>>> The Smalltalk expression then looks like this:
>>>> 
>>>> STON fromString: '{#note:''Look: \'', that was a single 
>>>> quote.'',#firstName:''Stéphane'',#lastName:''Ducasse''}'
>>>> 
>>>> The double single quotes are Smalltalk's syntax's escaping, while the 
>>>> backslashes are STON's. Yes, that is a bit confusing, but consistent.
>>>> 
>>>> Is this what you need ?
>>>> 
>>>>> On 12 Mar 2018, at 22:43, Stephane Ducasse <stepharo.s...@gmail.com> 
>>>>> wrote:
>>>>> 
>>>>> Hi
>>>>> 
>>>>> I want to write a method that generate a method that when I execute
>>>>> this recreates the objects that I STONified.
>>>>> (I love STON).
>>>>> 
>>>>> So I did something like that
>>>>> 
>>>>> descriptionMethodFrom: descriptionItems
>>>>> "self new descriptionMethodFrom: ChrysalConfigurationDescription
>>>>> itemDescriptionForXX"
>>>>> 
>>>>> ^ String streamContents: [ :s |
>>>>>           s nextPutAll: 'descriptions'; cr.
>>>>>           s nextPutAll: '^ STON fromString: '.
>>>>>           s nextPutAll: (STON toStringPretty: descriptionItems) ]
>>>>> 
>>>>> and I get of course something wrong :) because the strings are not
>>>>> doubel quoted and the first expression is not surrounded by single
>>>>> quote.
>>>>> 
>>>>> And I could do it but I want a smart way to do it. I was thinking that
>>>>> may be I'm missing something obvious.
>>>>> 
>>>>> descriptions
>>>>> ^ STON fromString: [
>>>>> StringConfigurationItem {
>>>>> #propertyName : 'title',
>>>>> #default : 'my super cool book'
>>>>> },
>>>>> BooleanConfigurationItem {
>>>>> #propertyName : 'verbose',
>>>>> #default : 'true'
>>>>> },
>>>>> StringConfigurationItem {
>>>>> #propertyName : 'attribution',
>>>>> #default : 'me, myself and I'
>>>>> },
>>>>> StringConfigurationItem {
>>>>> #propertyName : 'series',
>>>>> #default : 'Square Bracket Associate Collection'
>>>>> }
>>>>> ]
>>>>> 
>>>> 
>>>> 
> 


Reply via email to