[squeak-dev] Re: SISS serialisation format?

H. Hirzel hannes.hirzel at gmail.com
Wed Aug 31 08:58:28 UTC 2016


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 <timfelgentreff at gmail.com> 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 <hannes.hirzel at gmail.com> 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 <hannes.hirzel at gmail.com> 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 <hannes.hirzel at 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?
>> >>
>> >> 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
>> >>
>> >
>>
>>
>


More information about the Squeak-dev mailing list