On Tue, Aug 30, 2016 at 11:21 PM, H. Hirzel hannes.hirzel@gmail.com wrote:
Hello
I understand that the SISS serialisation format has been used in the Etoys 5.0 image to store quick guides. It is a plain text format.
What does SISS stand for?
I am really bad at naming things but Umezawa-san had an inter-implementation object exchange format called SIXX, based on XML; SISS was based on S-Expression instead of XML.
Browsing the Etoys 5.0 image .....
To use SISS classes need to implement a method
sissExportSpecification
For example for Workspace it is
sissExportSpecification
^ #(('contents' #sissGetContents) ('bindings' #bindings) ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) )
And a method
sissWriteValue
Morph >> sissWriteValue sissWriteValue
self prepareToBeSaved.
or
Object>>sissWriteValue sissWriteValue "Override if you wish"
^self
PasteUpMorph>>sissWriteValue sissWriteValue "Override if you wish"
| new | self prepareToBeSaved. new _ self clone. new privateSubmorphs: (submorphs reject: [:e | (e isKindOf: SolidSugarSuppliesTab) or: [(e isKindOf: Viewer) or: [(e isKindOf: SugarNavTab) or: [((e isKindOf: SystemWindow) and: [(e model isKindOf: Workspace) not]) or: [(e isMemberOf: FlapTab) and: [e isGlobalFlap]]]]]]). new instVarNamed: 'presenter' put: nil. new instVarNamed: 'worldState' put: nil. new privateExtension: self extension copy. new extension removeOtherProperties. self extension otherProperties keysDo: [:sym | (#(commandKeySelectors lastKeystroke locked) includes: sym) ifFalse: [ new setProperty: sym toValue: (self extension valueOfProperty: sym) ]. ]. ^ new.
Form>> sissWriteValue
SISSDictionaryForScanning reduceFormDepth ifTrue: [ ^ (self asFormOfDepth: 8) hibernate. ]. ^ self hibernate.
An example of the format
MSExpParser test1
| str1 str2 str3 | str1 _ '(script :name "testscript1:" :type "Player" :player "12" (parameter :name "parameter" :type "Number" :position "1") (sequence (loop :type "repeat" (initial (literal :value "0")) (increment (literal :value "1")) (test (send :type "Number" (selector :selector "+") (send :type "Number" (selector :getter "x") (literal :type "Player" :value "self")) (literal :type "Number" :value "1"))) (sequence (assign :type "Number"
:updating "Incr:" :property "x" (literal :type "Player" :value "4") (send :type "Number" (selector :selector "+") (literal :type "Number" :value "244.0") (literal :type "Number" :value "1")))))))'.
I understand that the SISS format has been used successfully in the Etoys image to store quick guide projects.
As far as Project saving is concerned it there a difference between Etoy Quick guide projects and regular Squeak Morphic projects?
I can't remember for sure but the difference must be small. I can't even locate etoys-dev image on my computer in front of me so it'd need some digging.
Where can I find more information on the SISS format?
I'd like to know about that, too^^;