[squeak-dev] CustomHelpToOrg dev question.

gettimothy gettimothy at zoho.com
Sat Sep 4 09:58:31 UTC 2021


Hi Levente



 
>Using #, works, but it is quite suboptimal. It'll result in the creation 
>of many intermediate objects and will result in quadratic runtime. 
 
>An easy way to avoid that would be to write directly into the file stream, 
>but Squeak's file streams are not write-buffered, so I advise against 
>that. 
>Instead, you should create an in-memory stream, and write data into that 
>stream. Once done, write the contents of the stream into the file. 
 
>For example: 
 >
>| contents | 
>contents := String streamContents: [ :stream | 
>    <write stuff to the stream here with #nextPut:, #nextPutAll:, etc> ]. 
>FileStream newFileNamed: <file name here> do: [ :file | 
>    file nextPutAll: contents ] 
  
>Levente




Thank you for the pointers.



Here is a stab at it with your recommendations:



toTestFile: aCustomHelp



|ios filename recurse  break newline |



newline := (Character cr asString).

break:= newline, newline.



ios := String streamContents:[:stream|

      stream nextPutAll: ( '*   ', aCustomHelp name asString , newline).

      recurse := [:help |

                  help pages do:[:each | | v  |

                  each asString first isUppercase

                        ifTrue:[

                              stream nextPutAll: ( '*  '  , each, break).

                              recurse value: (Smalltalk at: each)]

                        ifFalse:[

                              v := help perform: each.

                              stream nextPutAll: ( break, '** ' ,  (v title) , (Character cr asString), break , (v contents)  ,break)]]].

recurse value: aCustomHelp

].





filename := ((aCustomHelp  name  asString), '.org').

StandardFileStream forceNewFileNamed: filename do: [ :file |

        file nextPutAll: ios ].






then:



DocCustomHelpToOrg  toTestFile: PostgresV3Help.




The output is beautiful org mode content, but only for that superclass.



The Help System treats subclasses of a CustomHelp class as 'books'.



I am going to try to figure out how to do that next. 

maybe a new method that calls this method.



anyhoo, thank you to all who responded, Much appreciated!





P.S.  I am thinking a HelpTerseGuideNot  with all the subjects in the terse guide expanded with examples of really cool code that is all over the mailing lists will be a nice feature. These examples here will definitely be on that book.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20210904/532563c0/attachment.html>


More information about the Squeak-dev mailing list