@@ -38,6 +38,22 @@ class Main {
3838 }
3939 generateToc (args [1 ], args [2 ]);
4040
41+ case " index" :
42+ if (args .length < 4 ) {
43+ Sys .println (" Error: Missing toc file, output file, or target" );
44+ printUsage ();
45+ Sys .exit (1 );
46+ }
47+ generateIndex (args [1 ], args [2 ], args [3 ]);
48+
49+ case " root-index" :
50+ if (args .length < 2 ) {
51+ Sys .println (" Error: Missing output directory" );
52+ printUsage ();
53+ Sys .exit (1 );
54+ }
55+ generateRootIndex (args [1 ]);
56+
4157 default :
4258 // Legacy mode: if first argument is a file, generate JSON
4359 if (FileSystem .exists (command ) && ! FileSystem .isDirectory (command )) {
@@ -55,11 +71,15 @@ class Main {
5571 Sys .println (" node gen-docs.js json <xml-file>" );
5672 Sys .println (" node gen-docs.js markdown <xml-file> <output-dir>" );
5773 Sys .println (" node gen-docs.js toc <xml-file> <output-file>" );
74+ Sys .println (" node gen-docs.js index <toc-file> <output-file> <target>" );
75+ Sys .println (" node gen-docs.js root-index <output-dir>" );
5876 Sys .println (" " );
5977 Sys .println (" Examples:" );
6078 Sys .println (" node gen-docs.js json ../docs-xml/clay-native.xml" );
6179 Sys .println (" node gen-docs.js markdown ../docs-xml/clay-native.xml ../docs-md/clay-native" );
6280 Sys .println (" node gen-docs.js toc ../docs-xml/clay-native.xml ../docs-md/clay-native/toc.json" );
81+ Sys .println (" node gen-docs.js index ../docs-md/clay-native/toc.json ../docs-md/clay-native/index.md clay-native" );
82+ Sys .println (" node gen-docs.js root-index ../docs-md" );
6383 }
6484
6585 static function generateJson (xmlPath : String ): Void {
@@ -99,9 +119,12 @@ class Main {
99119
100120 Sys .println (' Parsed ${apiData .types .length } types from $xmlPath ' );
101121
122+ // Extract target from output directory (e.g., "docs-md/clay-native" -> "clay-native")
123+ var target = Path .withoutDirectory (outputDir );
124+
102125 // Generate markdown files
103126 var generator = new MarkdownGenerator ();
104- generator .generateMarkdown (apiData , outputDir );
127+ generator .generateMarkdown (apiData , outputDir , target );
105128
106129 Sys .println (' Generated markdown documentation in $outputDir ' );
107130
@@ -141,4 +164,60 @@ class Main {
141164 Sys .exit (1 );
142165 }
143166 }
167+
168+ static function generateIndex (tocFile : String , outputFile : String , target : String ): Void {
169+ if (! FileSystem .exists (tocFile )) {
170+ Sys .println (' Error: File not found: $tocFile ' );
171+ Sys .exit (1 );
172+ }
173+
174+ try {
175+ // Generate index from TOC
176+ var generator = new TocGenerator ();
177+ generator .generateIndexFromToc (tocFile , outputFile , target );
178+
179+ Sys .println (' Generated index in $outputFile ' );
180+
181+ } catch (e : Dynamic ) {
182+ Sys .println (' Error: $e ' );
183+ #if debug
184+ Sys .println (haxe. CallStack .toString (haxe. CallStack .exceptionStack ()));
185+ #end
186+ Sys .exit (1 );
187+ }
188+ }
189+
190+ static function generateRootIndex (outputDir : String ): Void {
191+ if (! FileSystem .exists (outputDir )) {
192+ Sys .println (' Error: Directory not found: $outputDir ' );
193+ Sys .exit (1 );
194+ }
195+
196+ try {
197+ // Find all subdirectories in the output directory
198+ var targets = [];
199+ for (item in FileSystem .readDirectory (outputDir )) {
200+ var path = Path .join ([outputDir , item ]);
201+ if (FileSystem .isDirectory (path ) && FileSystem .exists (Path .join ([path , " index.md" ]))) {
202+ targets .push (item );
203+ }
204+ }
205+
206+ // Sort targets for consistent output
207+ targets .sort (Reflect .compare );
208+
209+ // Generate root index
210+ var generator = new TocGenerator ();
211+ generator .generateRootIndex (targets , Path .join ([outputDir , " index.md" ]));
212+
213+ Sys .println (' Generated root index in $outputDir /index.md' );
214+
215+ } catch (e : Dynamic ) {
216+ Sys .println (' Error: $e ' );
217+ #if debug
218+ Sys .println (haxe. CallStack .toString (haxe. CallStack .exceptionStack ()));
219+ #end
220+ Sys .exit (1 );
221+ }
222+ }
144223}
0 commit comments