<div dir="ltr">Hi,<div><br></div><div>I would recommend to look at the slightly cleaned up project export code in the Etoys 6 package (<a href="http://file.squeak.org/etoys">file.squeak.org/etoys</a>). You can export plain morphic projects just fine in that package. However, all SystemWindows except workspaces are currently explicitly ignored.</div><div><br></div><div>As far as saving is concerned, the QuickGuides simply use a special exporter (for book morphs), rather than the Project exporter. </div><div><br></div><div>cheers,</div><div>Tim</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, 31 Aug 2016 at 09:16 H. Hirzel &lt;<a href="mailto:hannes.hirzel@gmail.com">hannes.hirzel@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The class comment of QuickGuideMorph. It refers to the place where the<br>
exported SISS files of the projects are stored. The Squeakland image<br>
contains many examples of SISS files.<br>
<br>
----------------------------------------------------<br>
<br>
<br>
A BookMorph that holds QuickGuides.<br>
<br>
World<br>
an AlignmentMorph (the flap)<br>
an AlignmentMorph<br>
a QuickGuideMorph  (one page per guide, 54 pages.<br>
                Page may be a stub if guide not in)<br>
a QuickGuideHolderMorph<br>
a BookMorph (4 pages)<br>
a PasteUpMorph (a page)<br>
<br>
QuickGuides are stored in Contents/Resources/QuickGuides/<br>
or by language in Contents/Resources/locale/&lt;id&gt;/QuickGuides/<br>
(see guidePath)<br>
<br>
Categories = OrderedCollection of {catKey. catTitle}<br>
        where catKey appears at the start of a file name &#39;Menu&#39;<br>
        catTitle may be UTF-8 full name.<br>
PagesForCategory dictionary of (catKey -&gt; list).  list has elements<br>
{guideName. guideTitle}.  guideName is last part of a file name and<br>
guideTitle may be in UTF-8.<br>
<br>
On 8/31/16, H. Hirzel &lt;<a href="mailto:hannes.hirzel@gmail.com" target="_blank">hannes.hirzel@gmail.com</a>&gt; wrote:<br>
&gt; An entry point for reading about SISS in the Squeakland Etoys 5.0 image<br>
&gt;<br>
&gt; QuickGuideMorph&gt;&gt;<br>
&gt;<br>
&gt; convertProjectsWithBooksToSISSIn: dir to: outDir<br>
&gt;<br>
&gt;       | p book |<br>
&gt;       dir fileNames do: [:f |<br>
&gt;               (f endsWith: &#39;.pr&#39;) ifTrue: [<br>
&gt;                       p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f)<br>
&gt; fromDirectory: dir withProjectView: nil.<br>
&gt;                       book _ p world submorphs detect: [:b | b isMemberOf: BookMorph]<br>
&gt; ifNone: [nil].<br>
&gt;                       book ifNotNil: [<br>
&gt;                               book hidePageControls.<br>
&gt;                               book storeAsDataStreamNamed: (outDir fullNameFor: (f copyUpTo:<br>
&gt; $.), &#39;.sexp.data.gz&#39;).<br>
&gt;                       ].<br>
&gt;                       p okToChangeSilently.<br>
&gt;               ].<br>
&gt;       ].<br>
&gt;<br>
&gt; On 8/31/16, H. Hirzel &lt;<a href="mailto:hannes.hirzel@gmail.com" target="_blank">hannes.hirzel@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Hello<br>
&gt;&gt;<br>
&gt;&gt; I understand that the SISS serialisation format has been used in the<br>
&gt;&gt; Etoys 5.0 image to store quick guides. It is a plain text format.<br>
&gt;&gt;<br>
&gt;&gt; What does SISS stand for?<br>
&gt;&gt;<br>
&gt;&gt; Browsing the Etoys 5.0 image .....<br>
&gt;&gt;<br>
&gt;&gt; To use SISS classes need to implement a method<br>
&gt;&gt;<br>
&gt;&gt;    sissExportSpecification<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; For example for Workspace it is<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; sissExportSpecification<br>
&gt;&gt;<br>
&gt;&gt;      ^ #((&#39;contents&#39; #sissGetContents)<br>
&gt;&gt;              (&#39;bindings&#39; #bindings)<br>
&gt;&gt;              (&#39;acceptDroppedMorphs&#39; #acceptsDroppingMorphForReference)<br>
&gt;&gt;      )<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; And a method<br>
&gt;&gt;<br>
&gt;&gt; sissWriteValue<br>
&gt;&gt;<br>
&gt;&gt; Morph &gt;&gt; sissWriteValue<br>
&gt;&gt; sissWriteValue<br>
&gt;&gt;<br>
&gt;&gt;      self prepareToBeSaved.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; or<br>
&gt;&gt;<br>
&gt;&gt; Object&gt;&gt;sissWriteValue<br>
&gt;&gt; sissWriteValue<br>
&gt;&gt;      &quot;Override if you wish&quot;<br>
&gt;&gt;<br>
&gt;&gt;      ^self<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; PasteUpMorph&gt;&gt;sissWriteValue<br>
&gt;&gt; sissWriteValue<br>
&gt;&gt;      &quot;Override if you wish&quot;<br>
&gt;&gt;<br>
&gt;&gt;      | new |<br>
&gt;&gt;      self prepareToBeSaved.<br>
&gt;&gt;      new _ self clone.<br>
&gt;&gt;      new privateSubmorphs: (submorphs reject: [:e |<br>
&gt;&gt;              (e isKindOf: SolidSugarSuppliesTab)<br>
&gt;&gt;                      or: [(e isKindOf: Viewer)<br>
&gt;&gt;                              or: [(e isKindOf: SugarNavTab)<br>
&gt;&gt;                                      or: [((e isKindOf: SystemWindow) and: [(e model isKindOf: Workspace)<br>
&gt;&gt; not])<br>
&gt;&gt;                                              or: [(e isMemberOf: FlapTab) and: [e isGlobalFlap]]]]]]).<br>
&gt;&gt;      new instVarNamed: &#39;presenter&#39; put: nil.<br>
&gt;&gt;      new instVarNamed: &#39;worldState&#39; put: nil.<br>
&gt;&gt;      new privateExtension: self extension copy.<br>
&gt;&gt;      new extension removeOtherProperties.<br>
&gt;&gt;      self extension otherProperties keysDo: [:sym |<br>
&gt;&gt;              (#(commandKeySelectors lastKeystroke locked) includes: sym) ifFalse: [<br>
&gt;&gt;                      new setProperty: sym toValue: (self extension valueOfProperty: sym)<br>
&gt;&gt;              ].<br>
&gt;&gt;      ].<br>
&gt;&gt;<br>
&gt;&gt;      ^ new.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Form&gt;&gt;<br>
&gt;&gt; sissWriteValue<br>
&gt;&gt;<br>
&gt;&gt;      SISSDictionaryForScanning reduceFormDepth ifTrue: [<br>
&gt;&gt;              ^ (self asFormOfDepth: 8) hibernate.<br>
&gt;&gt;      ].<br>
&gt;&gt;      ^ self hibernate.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; An example of the format<br>
&gt;&gt;<br>
&gt;&gt; MSExpParser test1<br>
&gt;&gt;<br>
&gt;&gt;         | str1 str2 str3 |<br>
&gt;&gt;         str1 _ &#39;(script :name &quot;testscript1:&quot; :type &quot;Player&quot; :player &quot;12&quot;<br>
&gt;&gt;                 (parameter :name &quot;parameter&quot; :type &quot;Number&quot; :position<br>
&gt;&gt; &quot;1&quot;)<br>
&gt;&gt;                 (sequence<br>
&gt;&gt;                         (loop :type &quot;repeat&quot;<br>
&gt;&gt;                                 (initial (literal :value &quot;0&quot;))<br>
&gt;&gt;                                 (increment (literal :value &quot;1&quot;))<br>
&gt;&gt;                                 (test (send :type &quot;Number&quot;<br>
&gt;&gt;                 (selector :selector &quot;+&quot;)<br>
&gt;&gt;                 (send :type &quot;Number&quot;<br>
&gt;&gt;                         (selector :getter &quot;x&quot;)<br>
&gt;&gt;                         (literal :type &quot;Player&quot; :value &quot;self&quot;))<br>
&gt;&gt;                 (literal :type &quot;Number&quot; :value &quot;1&quot;)))<br>
&gt;&gt;                                 (sequence<br>
&gt;&gt;                                         (assign :type &quot;Number&quot;<br>
&gt;&gt; :updating &quot;Incr:&quot; :property &quot;x&quot;<br>
&gt;&gt;                                                 (literal :type<br>
&gt;&gt; &quot;Player&quot; :value &quot;4&quot;)<br>
&gt;&gt;                                                 (send :type &quot;Number&quot;<br>
&gt;&gt;                                                         (selector<br>
&gt;&gt; :selector<br>
&gt;&gt; &quot;+&quot;)<br>
&gt;&gt;                                                         (literal :type<br>
&gt;&gt; &quot;Number&quot; :value &quot;244.0&quot;)<br>
&gt;&gt;                                                         (literal :type<br>
&gt;&gt; &quot;Number&quot; :value &quot;1&quot;)))))))&#39;.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; I understand that the SISS format has been used successfully in the<br>
&gt;&gt; Etoys image to store quick guide projects.<br>
&gt;&gt;<br>
&gt;&gt; As far as Project saving is concerned it there a  difference between<br>
&gt;&gt; Etoy Quick guide projects and regular Squeak Morphic projects?<br>
&gt;&gt;<br>
&gt;&gt; Where can I find more information on the SISS format?<br>
&gt;&gt;<br>
&gt;&gt; Regards<br>
&gt;&gt;<br>
&gt;&gt; Hannes<br>
&gt;&gt;<br>
&gt;<br>
<br>
</blockquote></div>