> On 13 Mar 2018, at 18:09, Stephane Ducasse <[email protected]> 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 > <[email protected]> wrote: >> On Tue, Mar 13, 2018 at 5:12 PM, Stephane Ducasse >> <[email protected]> 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 <[email protected]> >>> 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 <[email protected]> >>>>> 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' >>>>> } >>>>> ] >>>>> >>>> >>>> >
