[squeak-dev] Re: SISS serialisation format?

H. Hirzel hannes.hirzel at gmail.com
Wed Aug 31 07:16:36 UTC 2016


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