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.
squeak-dev@lists.squeakfoundation.org