[PATCH] teach gst-doc to generate HTML documentation

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] teach gst-doc to generate HTML documentation

Thomas Girard
Hello,

with the attached patches it is possible to generate HTML documentation
for classes using gst-doc.

For example, the following command:

  gst-doc -d HTML -o outputdir 'Smalltalk.*'

will generate HTML documentation into the directory outputdir for all
classes in the Smalltalk namespace.

These patches add #publishAll: toLocation:, where location can be a file
(for Texinfo publisher) or a directory (for HTML publisher). The `-o'
argument can be used to change the default location (stdout for the
Texinfo publisher and `.' for the HTML publisher).

Regards,

Thomas

commit 003e66526150a2aaf9ac66a6ae1dff23d3e914d8
Author: Thomas Girard <[hidden email]>
Date:   Fri Aug 15 15:11:14 2008 +0200

    add `-d' argument to choose the publisher

diff --git a/gst-tool.c b/gst-tool.c
index 8b37cdd..e6e25c1 100644
--- a/gst-tool.c
+++ b/gst-tool.c
@@ -125,7 +125,7 @@ struct tool tools[] = {
   {
     "gst-doc", "scripts/GenDoc.st",
     "-h|--help --version -p|--package: -f|--file: -I|--image-file: \
-        -n|--namespace: -o|--output: --kernel-directory:",
+        -n|--namespace: -o|--output: --kernel-directory: -d|--doc:",
     NULL
   },
   {
diff --git a/scripts/GenDoc.st b/scripts/GenDoc.st
index 399940b..4167d97 100644
--- a/scripts/GenDoc.st
+++ b/scripts/GenDoc.st
@@ -34,7 +34,6 @@ PackageLoader fileInPackage: #ClassPublisher!
 | package outFile publisher files classes classPatterns loader defaultNamespace |
 
 classPatterns := OrderedCollection new.
-publisher := STInST.TexinfoDocPublisher.
 defaultNamespace := Smalltalk.
 
 helpString :=
@@ -48,6 +47,7 @@ Options:
     -n --namespace=NAMESP load files in the given namespace
     -o --output=FILE      emit documentation in the given file (default=stdout)
        --kernel-dir=PATH  use the specified kernel directory
+    -d --doc=KIND         use the given publisher (HTML or default=Texinfo)
     -h --help             show this message
        --version          print version information and exit
 '.
@@ -59,7 +59,7 @@ Options:
     "Parse the command-line arguments."
     Smalltalk
         arguments: '-h|--help --version -p|--package: -f|--file: -n|--namespace:
-                    -I|--image-file: -o|--output: --kernel-directory:'
+                    -I|--image-file: -o|--output: --kernel-directory: -d|--doc:'
         do: [ :opt :arg |
 
         opt = 'help' ifTrue: [
@@ -104,12 +104,24 @@ Options:
         parseSmalltalkStream: file
         with: STInST.GSTFileInParser ].
 
+        opt = 'doc' ifTrue: [
+            publisher isNil ifFalse: [
+                self error: '--doc specified multiple times' ].
+            arg = 'HTML'
+                ifTrue: [ publisher := STInST.HTMLDocPublisher ]
+                ifFalse: [
+                    arg = 'Texinfo'
+                        ifTrue: [ publisher:= STInST.TexinfoDocPublisher ]
+                        ifFalse: [ self error: 'unknown --doc arg' ] ] ].
+
         opt isNil ifTrue: [ classPatterns add: arg ] ]
 
         ifError: [
             helpString displayOn: stderr.
             ObjectMemory quit: 1 ].
 
+    publisher isNil ifTrue: [ publisher := STInST.TexinfoDocPublisher ].
+
     classPatterns isEmpty
         ifTrue: [
             classes := loader fullyDefinedLoadedClasses.

commit da060175537597f32a5e905268b3a8f6b58071c5
Author: Thomas Girard <[hidden email]>
Date:   Fri Aug 15 15:56:03 2008 +0200

    be consistent in extensions, always use .html

diff --git a/packages/stinst/doc/Publish.st b/packages/stinst/doc/Publish.st
index 516cbb2..c2d5100 100644
--- a/packages/stinst/doc/Publish.st
+++ b/packages/stinst/doc/Publish.st
@@ -954,10 +954,10 @@ Alphabetic list of classes:'.
  [:each |
  | fileName |
  fileName := each nameIn: Namespace current.
- ('writing documentation into ' , fileName , '.htm') displayNl.
- self publish: each onFile: fileName , '.htm'.
+ ('writing documentation into ' , fileName , '.html') displayNl.
+ self publish: each onFile: fileName , '.html'.
  aFileStream
-    nextPutAll: '<A HREF="%1.htm">%1</A>' % {fileName};
+    nextPutAll: '<A HREF="%1.html">%1</A>' % {fileName};
     nl].
  aFileStream nextPutAll: '</PRE></BODY></HTML>'
     ]
@@ -977,7 +977,7 @@ Alphabetic list of classes:'.
     nextPutAll: indent.
  fileName := class nameIn: Namespace current.
  aBoolean
-    ifTrue: [aFileStream nextPutAll: '<A HREF="' , fileName , '.htm">']
+    ifTrue: [aFileStream nextPutAll: '<A HREF="' , fileName , '.html">']
     ifFalse: [aFileStream nextPut: $(].
  aFileStream nextPutAll: (class nameIn: Namespace current).
  aBoolean

commit d80d3a1fc4a92b15a0894ae5ca5131e294c3b7a2
Author: Thomas Girard <[hidden email]>
Date:   Fri Aug 15 16:58:06 2008 +0200

    add #publishAll: toLocation: and use it

diff --git a/packages/stinst/doc/Publish.st b/packages/stinst/doc/Publish.st
index c2d5100..032c12a 100644
--- a/packages/stinst/doc/Publish.st
+++ b/packages/stinst/doc/Publish.st
@@ -1166,6 +1166,14 @@ DocPublisher subclass: TexinfoDocPublisher [
  aFileStream nextPutAll: self footer
     ]
 
+    TexinfoDocPublisher class >> publishAll: classArray [
+ self publishAll: classArray on: stdout
+    ]
+
+    TexinfoDocPublisher class >> publishAll: classArray toLocation: aFileName [
+ self publishAll: classArray onFile: aFileName
+    ]
+
     TexinfoDocPublisher class >> publish: aClass on: aFileStream [
  "Publish aClass, in the format supported by the receiver, on aFileStream"
 
diff --git a/scripts/GenDoc.st b/scripts/GenDoc.st
index 4167d97..28aed81 100644
--- a/scripts/GenDoc.st
+++ b/scripts/GenDoc.st
@@ -31,7 +31,7 @@
 "Load the prerequisites"
 PackageLoader fileInPackage: #ClassPublisher!
 
-| package outFile publisher files classes classPatterns loader defaultNamespace |
+| package location publisher files classes classPatterns loader defaultNamespace |
 
 classPatterns := OrderedCollection new.
 defaultNamespace := Smalltalk.
@@ -71,9 +71,9 @@ Options:
             ObjectMemory quit: 0 ].
 
         opt = 'output' ifTrue: [
-    outFile isNil ifFalse: [
+    location isNil ifFalse: [
         self error: '--output specified multiple times' ].
-    outFile := arg ].
+    location := arg ].
 
  opt = 'namespace' ifTrue: [
             defaultNamespace := Smalltalk.
@@ -145,12 +145,12 @@ Options:
     (allClasses select: [ :each |
         pat match: (each nameIn: Smalltalk) ]) ] ] ].
 
-    outFile isNil
+    location isNil
         ifTrue: [
     Transcript message: stderr -> #nextPutAllFlush:.
-    publisher publishAll: classes on: stdout ]
+    publisher publishAll: classes ]
         ifFalse: [
-    publisher publishAll: classes onFile: outFile ]
+    publisher publishAll: classes toLocation: location ]
 ]
     on: Error
     do: [ :ex |

commit 9b54f61af407f8d6f50998517e3f883662548ed0
Author: Thomas Girard <[hidden email]>
Date:   Fri Aug 15 17:18:28 2008 +0200

    adapt HTMLDocPublisher to new messages

diff --git a/packages/stinst/doc/Publish.st b/packages/stinst/doc/Publish.st
index 032c12a..fb8ec31 100644
--- a/packages/stinst/doc/Publish.st
+++ b/packages/stinst/doc/Publish.st
@@ -969,6 +969,21 @@ Alphabetic list of classes:'.
  [self publishAll: classArray withIndexOn: stream] ensure: [stream close]
     ]
 
+    HTMLDocPublisher class >> publishAll: classArray toLocation: dirName [
+ | currentDir |
+ currentDir := Directory working.
+ dirName = '.'
+            ifFalse: [
+ (File isAccessible: dirName) ifFalse: [ Directory create: dirName ].
+ Directory working: dirName ].
+ self publishAll: classArray withIndexOnFile: 'classes.html'.
+ dirName = '.' ifFalse: [ Directory working: currentDir ]
+    ]
+
+    HTMLDocPublisher class >> publishAll: classArray [
+ self publishAll: classArray toLocation: '.'
+    ]
+
     HTMLDocPublisher class >> printTreeClass: class shouldLink: aBoolean on: aFileStream indent: indent [
  <category: 'writing the class tree'>
  | fileName |

commit 0ad7bcb6f8380fdbd4fb0a0dcf7ef976b5ce84bd
Author: Thomas Girard <[hidden email]>
Date:   Fri Aug 15 23:15:50 2008 +0200

    add missing new line in generated HTML

diff --git a/packages/stinst/doc/Publish.st b/packages/stinst/doc/Publish.st
index f22b40e..ccf5e19 100644
--- a/packages/stinst/doc/Publish.st
+++ b/packages/stinst/doc/Publish.st
@@ -949,7 +949,7 @@ Automatically yours from GNU Smalltalk''s HTMLDocPublisher! -->
  self printHierarchyOf: sorted on: aFileStream.
  aFileStream nextPutAll: '
     
-Alphabetic list of classes:'.
+Alphabetic list of classes:'; nl.
  sorted do:
  [:each |
  | fileName |

_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] teach gst-doc to generate HTML documentation

Paolo Bonzini-2
Thomas Girard wrote:
> Hello,
>
> with the attached patches it is possible to generate HTML documentation
> for classes using gst-doc.
>
> For example, the following command:
>
>  gst-doc -d HTML -o outputdir 'Smalltalk.*'

Great.  I'll change -d to -F/--output-format though (I planned to have
it in gst-convert too).

Paolo


_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk