SISS serialisation format?

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

SISS serialisation format?

Hannes Hirzel
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?

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?

Where can I find more information on the SISS format?

Regards

Hannes

Reply | Threaded
Open this post in threaded view
|

Re: SISS serialisation format?

Hannes Hirzel
An entry point for reading about SISS in the Squeakland Etoys 5.0 image

QuickGuideMorph>>

convertProjectsWithBooksToSISSIn: dir to: outDir

        | p book |
        dir fileNames do: [:f |
                (f endsWith: '.pr') ifTrue: [
                        p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f)
fromDirectory: dir withProjectView: nil.
                        book _ p world submorphs detect: [:b | b isMemberOf: BookMorph]
ifNone: [nil].
                        book ifNotNil: [
                                book hidePageControls.
                                book storeAsDataStreamNamed: (outDir fullNameFor: (f copyUpTo:
$.), '.sexp.data.gz').
                        ].
                        p okToChangeSilently.
                ].
        ].

On 8/31/16, H. Hirzel <[hidden email]> 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?
>
> 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?
>
> Where can I find more information on the SISS format?
>
> Regards
>
> Hannes
>

Reply | Threaded
Open this post in threaded view
|

Re: SISS serialisation format?

Hannes Hirzel
The class comment of QuickGuideMorph. It refers to the place where the
exported SISS files of the projects are stored. The Squeakland image
contains many examples of SISS files.

----------------------------------------------------


A BookMorph that holds QuickGuides.

World
an AlignmentMorph (the flap)
an AlignmentMorph
a QuickGuideMorph  (one page per guide, 54 pages.
                Page may be a stub if guide not in)
a QuickGuideHolderMorph
a BookMorph (4 pages)
a PasteUpMorph (a page)

QuickGuides are stored in Contents/Resources/QuickGuides/
or by language in Contents/Resources/locale/<id>/QuickGuides/
(see guidePath)

Categories = OrderedCollection of {catKey. catTitle}
        where catKey appears at the start of a file name 'Menu'
        catTitle may be UTF-8 full name.
PagesForCategory dictionary of (catKey -> list).  list has elements
{guideName. guideTitle}.  guideName is last part of a file name and
guideTitle may be in UTF-8.

On 8/31/16, H. Hirzel <[hidden email]> wrote:

> An entry point for reading about SISS in the Squeakland Etoys 5.0 image
>
> QuickGuideMorph>>
>
> convertProjectsWithBooksToSISSIn: dir to: outDir
>
> | p book |
> dir fileNames do: [:f |
> (f endsWith: '.pr') ifTrue: [
> p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f)
> fromDirectory: dir withProjectView: nil.
> book _ p world submorphs detect: [:b | b isMemberOf: BookMorph]
> ifNone: [nil].
> book ifNotNil: [
> book hidePageControls.
> book storeAsDataStreamNamed: (outDir fullNameFor: (f copyUpTo:
> $.), '.sexp.data.gz').
> ].
> p okToChangeSilently.
> ].
> ].
>
> On 8/31/16, H. Hirzel <[hidden email]> 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?
>>
>> 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?
>>
>> Where can I find more information on the SISS format?
>>
>> Regards
>>
>> Hannes
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: SISS serialisation format?

timfelgentreff
Hi,

I would recommend to look at the slightly cleaned up project export code in the Etoys 6 package (file.squeak.org/etoys). You can export plain morphic projects just fine in that package. However, all SystemWindows except workspaces are currently explicitly ignored.

As far as saving is concerned, the QuickGuides simply use a special exporter (for book morphs), rather than the Project exporter. 

cheers,
Tim



On Wed, 31 Aug 2016 at 09:16 H. Hirzel <[hidden email]> wrote:
The class comment of QuickGuideMorph. It refers to the place where the
exported SISS files of the projects are stored. The Squeakland image
contains many examples of SISS files.

----------------------------------------------------


A BookMorph that holds QuickGuides.

World
an AlignmentMorph (the flap)
an AlignmentMorph
a QuickGuideMorph  (one page per guide, 54 pages.
                Page may be a stub if guide not in)
a QuickGuideHolderMorph
a BookMorph (4 pages)
a PasteUpMorph (a page)

QuickGuides are stored in Contents/Resources/QuickGuides/
or by language in Contents/Resources/locale/<id>/QuickGuides/
(see guidePath)

Categories = OrderedCollection of {catKey. catTitle}
        where catKey appears at the start of a file name 'Menu'
        catTitle may be UTF-8 full name.
PagesForCategory dictionary of (catKey -> list).  list has elements
{guideName. guideTitle}.  guideName is last part of a file name and
guideTitle may be in UTF-8.

On 8/31/16, H. Hirzel <[hidden email]> wrote:
> An entry point for reading about SISS in the Squeakland Etoys 5.0 image
>
> QuickGuideMorph>>
>
> convertProjectsWithBooksToSISSIn: dir to: outDir
>
>       | p book |
>       dir fileNames do: [:f |
>               (f endsWith: '.pr') ifTrue: [
>                       p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f)
> fromDirectory: dir withProjectView: nil.
>                       book _ p world submorphs detect: [:b | b isMemberOf: BookMorph]
> ifNone: [nil].
>                       book ifNotNil: [
>                               book hidePageControls.
>                               book storeAsDataStreamNamed: (outDir fullNameFor: (f copyUpTo:
> $.), '.sexp.data.gz').
>                       ].
>                       p okToChangeSilently.
>               ].
>       ].
>
> On 8/31/16, H. Hirzel <[hidden email]> 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?
>>
>> 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?
>>
>> Where can I find more information on the SISS format?
>>
>> Regards
>>
>> Hannes
>>
>



Reply | Threaded
Open this post in threaded view
|

Re: SISS serialisation format?

Hannes Hirzel
Thank you Tim,

The reference is
http://files.squeak.org/etoys/6.0beta/Etoys6.0beta-7605-32bit/

(not file.squeak.org)
--Hannes

On 8/31/16, Tim Felgentreff <[hidden email]> wrote:

> Hi,
>
> I would recommend to look at the slightly cleaned up project export code in
> the Etoys 6 package (file.squeak.org/etoys). You can export plain morphic
> projects just fine in that package. However, all SystemWindows except
> workspaces are currently explicitly ignored.
>
> As far as saving is concerned, the QuickGuides simply use a special
> exporter (for book morphs), rather than the Project exporter.
>
> cheers,
> Tim
>
>
>
> On Wed, 31 Aug 2016 at 09:16 H. Hirzel <[hidden email]> wrote:
>
>> The class comment of QuickGuideMorph. It refers to the place where the
>> exported SISS files of the projects are stored. The Squeakland image
>> contains many examples of SISS files.
>>
>> ----------------------------------------------------
>>
>>
>> A BookMorph that holds QuickGuides.
>>
>> World
>> an AlignmentMorph (the flap)
>> an AlignmentMorph
>> a QuickGuideMorph  (one page per guide, 54 pages.
>>                 Page may be a stub if guide not in)
>> a QuickGuideHolderMorph
>> a BookMorph (4 pages)
>> a PasteUpMorph (a page)
>>
>> QuickGuides are stored in Contents/Resources/QuickGuides/
>> or by language in Contents/Resources/locale/<id>/QuickGuides/
>> (see guidePath)
>>
>> Categories = OrderedCollection of {catKey. catTitle}
>>         where catKey appears at the start of a file name 'Menu'
>>         catTitle may be UTF-8 full name.
>> PagesForCategory dictionary of (catKey -> list).  list has elements
>> {guideName. guideTitle}.  guideName is last part of a file name and
>> guideTitle may be in UTF-8.
>>
>> On 8/31/16, H. Hirzel <[hidden email]> wrote:
>> > An entry point for reading about SISS in the Squeakland Etoys 5.0 image
>> >
>> > QuickGuideMorph>>
>> >
>> > convertProjectsWithBooksToSISSIn: dir to: outDir
>> >
>> >       | p book |
>> >       dir fileNames do: [:f |
>> >               (f endsWith: '.pr') ifTrue: [
>> >                       p _ ProjectLoading loadName: f stream: (dir
>> readOnlyFileNamed: f)
>> > fromDirectory: dir withProjectView: nil.
>> >                       book _ p world submorphs detect: [:b | b
>> isMemberOf: BookMorph]
>> > ifNone: [nil].
>> >                       book ifNotNil: [
>> >                               book hidePageControls.
>> >                               book storeAsDataStreamNamed: (outDir
>> fullNameFor: (f copyUpTo:
>> > $.), '.sexp.data.gz').
>> >                       ].
>> >                       p okToChangeSilently.
>> >               ].
>> >       ].
>> >
>> > On 8/31/16, H. Hirzel <[hidden email]> 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?
>> >>
>> >> 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?
>> >>
>> >> Where can I find more information on the SISS format?
>> >>
>> >> Regards
>> >>
>> >> Hannes
>> >>
>> >
>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: SISS serialisation format?

Yoshiki Ohshima-3
In reply to this post by Hannes Hirzel
On Tue, Aug 30, 2016 at 11:21 PM, H. Hirzel <[hidden email]> 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^^;

--
-- Yoshiki

Reply | Threaded
Open this post in threaded view
|

Re: SISS serialisation format?

Hannes Hirzel
On 8/31/16, Yoshiki Ohshima <[hidden email]> wrote:

> On Tue, Aug 30, 2016 at 11:21 PM, H. Hirzel <[hidden email]>
> 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.
The Etoys 6 image contains a slightly refactored version according to
Tim Felgentreff.
http://files.squeak.org/etoys/6.0beta/Etoys6.0beta-7605-32bit/

Three class categories

('SISS-Core' SISSDictionaryForGuideBook SISSDictionaryForMorphCopying
SISSDictionaryForReading SISSDictionaryForScanning SISSProxy)

('SISS-Meta' MSExpParser MSExpTokenizer SExpAttributes SExpElement)

('Etoys-Squeakland-SISS-Serialization' ParseNodeBuilder)



>> Where can I find more information on the SISS format?
>
> I'd like to know about that, too^^;
>
> --
> -- Yoshiki
>



SISS_in_Etoys6_beta_2016-08.png (37K) Download Attachment