X-Git-Url: http://git.silcnet.org/gitweb/?p=robodoc.git;a=blobdiff_plain;f=Source%2Fhtml_generator.c;fp=Source%2Fhtml_generator.c;h=e296f21833d2109e87255d4bff74e1fac830ad9b;hp=145d5e6d2a0178a33de20a10e9300d33adfa471f;hb=817a506dd9f4992af539609c8a7d90a5c582c4cc;hpb=813ffbb077c8f96dc1f8cc69d78c78fb807bdad9;ds=sidebyside
diff --git a/Source/html_generator.c b/Source/html_generator.c
index 145d5e6..e296f21 100644
--- a/Source/html_generator.c
+++ b/Source/html_generator.c
@@ -685,6 +685,48 @@ void RB_HTML_Generate_TOC_Section(
/*******/
+void RB_HTML_Generate_TOC_Entries(
+ FILE *dest_doc,
+ struct RB_header **headers,
+ int count,
+ struct RB_Part *owner,
+ char *dest_name )
+{
+ struct RB_header *header;
+ char *object_name, *label_name, *file_name;
+ int i, j;
+
+// fprintf( dest_doc, "
Table of Contents
\n" );
+ fprintf( dest_doc, "TABLE OF CONTENTS
\n" );
+ fprintf( dest_doc, "\n" );
+
+ for ( i = count - 1; i >= 0; i-- )
+ {
+ header = headers[i];
+
+ if ( header->htype->typeCharacter != 'h' &&
+ !strcmp( owner->filename->name, header->owner->filename->name ) &&
+ Find_Link( header->function_name,
+ &object_name, &label_name,
+ &file_name ) )
+ {
+ for ( j = 0; j < header->no_names; j++ )
+ {
+ fprintf( dest_doc, "- " );
+ RB_HTML_Generate_Link( dest_doc,
+ dest_name,
+ file_name,
+ "",
+ object_name, 0);
+ fprintf( dest_doc, "
\n" );
+ }
+ }
+ }
+
+ fprintf( dest_doc, "
\n" );
+}
+
+
void RB_HTML_Generate_TOC_2(
FILE *dest_doc,
struct RB_header **headers,
@@ -939,7 +981,7 @@ void RB_HTML_Generate_Doc_Start(
/*
* INPUTS
* o dest_doc -- the output file.
- * o src_name -- The file or directoryname from which
+ * o src_name -- The file or directoryname from which
* this document is generated.
* o name -- The title for this document
* o dest_name -- the name of the output file.
@@ -1024,16 +1066,21 @@ void RB_HTML_Generate_Doc_Start(
// HTML_Generate_Div( dest_doc, "container" );
- /* Generate document title if available (Thuffir) */
- HTML_Generate_Div( dest_doc, "logo" );
- fprintf( dest_doc, "" );
- if ( document_title )
- RB_HTML_Generate_String( dest_doc, document_title );
- fprintf( dest_doc, "\n" );
- HTML_Generate_Div_End( dest_doc, "logo" );
-
-
-
+ /* Use user specified header if present */
+ if ( document_header )
+ {
+ fprintf ( dest_doc, document_header );
+ }
+ else
+ {
+ /* Generate document title if available (Thuffir) */
+ HTML_Generate_Div( dest_doc, "logo" );
+ fprintf( dest_doc, "" );
+ if ( document_title )
+ RB_HTML_Generate_String( dest_doc, document_title );
+ fprintf( dest_doc, "\n" );
+ HTML_Generate_Div_End( dest_doc, "logo" );
+ }
}
/******/
@@ -1056,26 +1103,35 @@ void RB_HTML_Generate_Doc_End(
USE( name );
-
- HTML_Generate_Div( dest_doc, "footer" );
- /* TODO This should be done with
- * RB_Generate_Label()
- */
- if ( course_of_action.do_nogenwith )
+ /* Use user specified footer if present */
+ if ( document_footer )
{
- fprintf( dest_doc, "Generated from %s on ", src_name );
- RB_TimeStamp( dest_doc );
- fprintf( dest_doc, "
\n" );
+ fprintf ( dest_doc, document_footer );
}
else
{
- fprintf( dest_doc,
- "Generated from %s with ROBODoc V%s on ",
- src_name, VERSION );
- RB_TimeStamp( dest_doc );
- fprintf( dest_doc, "
\n" );
+ HTML_Generate_Div( dest_doc, "footer" );
+
+ /* TODO This should be done with
+ * RB_Generate_Label()
+ */
+ if ( course_of_action.do_nogenwith )
+ {
+ fprintf( dest_doc, "Generated from %s on ", src_name );
+ RB_TimeStamp( dest_doc );
+ fprintf( dest_doc, "
\n" );
+ }
+ else
+ {
+ fprintf( dest_doc,
+ "Generated from %s with ROBODoc V%s on ",
+ src_name, VERSION );
+ RB_TimeStamp( dest_doc );
+ fprintf( dest_doc, "
\n" );
+ }
+
+ HTML_Generate_Div_End( dest_doc, "footer" );
}
- HTML_Generate_Div_End( dest_doc, "footer" );
// HTML_Generate_Div_End( dest_doc, "container" );
@@ -1206,7 +1262,7 @@ void RB_HTML_Generate_Header_Start(
if ( cur_header->name && cur_header->function_name )
{
- fprintf( dest_doc, "
\n" );
+/* fprintf( dest_doc, "
\n" ); */
RB_HTML_Generate_Label( dest_doc, cur_header->name );
fprintf( dest_doc, "",
cur_header->unique_name );
@@ -1327,6 +1383,110 @@ void RB_HTML_Generate_IndexMenu(
}
}
+/****f* HTML_Generator/RB_HTML_Generate_Header_IndexMenu
+ * FUNCTION
+ * Generates a menu to jump to the header's entries. The menu is
+ * generated for each entry file.
+ * SYNOPSIS
+ */
+void RB_HTML_Generate_Header_IndexMenu(
+ FILE *dest_doc,
+ char *filename,
+ struct RB_Document *document,
+ struct RB_Part *owner,
+ struct RB_HeaderType *cur_type )
+ /* TODO Use cur_type */
+/*
+ * INPUTS
+ * * dest_doc -- the output file.
+ * * filename -- the name of the output file
+ * * document -- the gathered documention.
+ * * cur_headertype -- the header type that is to be highlighted.
+ ******
+ */
+{
+ struct RB_header *header;
+ char *object_name, *label_name, *file_name;
+ int i, j;
+
+ for ( i = document->no_headers - 1; i >= 0; i-- )
+ {
+ header = document->headers[i];
+
+ if ( !strcmp( owner->filename->name, header->owner->filename->name ) &&
+ ( header->htype->typeCharacter == 'h' ||
+ Find_Link( header->function_name,
+ &object_name, &label_name,
+ &file_name ) ) )
+ {
+ for ( j = 0; j < header->no_names; j++ )
+ {
+ if ( header->htype->typeCharacter == 'h' )
+ {
+ RB_HTML_Generate_Link( dest_doc,
+ filename,
+ header->owner->filename->docname,
+ NULL,
+ header->function_name,
+ "menuitem" );
+ fprintf( dest_doc, "\n" );
+ }
+ else
+ {
+ RB_HTML_Generate_Link( dest_doc,
+ filename,
+ file_name,
+ "",
+ object_name,
+ "menuitem" );
+ fprintf( dest_doc, "\n" );
+ }
+ }
+ }
+ }
+}
+
+/****f* HTML_Generator/RB_HTML_Generate_Module_IndexMenu
+ * FUNCTION
+ * Generates a menu to jump to the different modules. The menu is
+ * generated for each header file.
+ * SYNOPSIS
+ */
+void RB_HTML_Generate_Module_IndexMenu(
+ FILE *dest_doc,
+ char *filename,
+ struct RB_Document *document,
+ struct RB_HeaderType *cur_type )
+ /* TODO Use cur_type */
+/*
+ * INPUTS
+ * * dest_doc -- the output file.
+ * * filename -- the name of the output file
+ * * document -- the gathered documention.
+ * * cur_headertype -- the header type that is to be highlighted.
+ ******
+ */
+{
+ struct RB_Part *i_part;
+
+ for ( i_part = document->parts; i_part != NULL; i_part = i_part->next )
+ {
+ if ( !i_part->headers ||
+ i_part->headers[0].htype->typeCharacter != 'h' ||
+ !strcmp(i_part->headers[0].function_name,
+ "ROBODoc Cascading Style Sheet") )
+ continue;
+ RB_HTML_Generate_Link( dest_doc,
+ filename,
+ i_part->filename->docname,
+ NULL,
+ i_part->headers[0].function_name,
+ "menuitem" );
+ fprintf( dest_doc, "\n" );
+ }
+}
+
+
/****f* HTML_Generator/RB_HTML_Generate_Index_Page
* FUNCTION
* Generate a single file with a index table for headers
@@ -1362,7 +1522,7 @@ void RB_HTML_Generate_Index_Page(
else
{
/* File opened, now we generate an index
- * for the specified header type
+ * for the specified header type
*/
RB_HTML_Generate_Doc_Start( file,
document->srcroot->name,
@@ -1712,21 +1872,26 @@ void RB_HTML_Generate_Link(
{
fprintf( cur_doc, "", r, labelname );
RB_HTML_Generate_String( cur_doc, linkname );
fprintf( cur_doc, "" );
-
}
- else
+ else if (labelname)
{
fprintf( cur_doc, "href=\"#%s\">", labelname );
RB_HTML_Generate_String( cur_doc, linkname );
fprintf( cur_doc, "" );
}
+ else
+ {
+ fprintf( cur_doc, "href=\"%s\">", filename);
+ RB_HTML_Generate_String( cur_doc, linkname );
+ fprintf( cur_doc, "" );
+ }
}
/******/
@@ -1748,7 +1913,7 @@ char *RB_HTML_RelativeAddress(
* The following two
* this /sub1/sub2/sub3/f.html
* that /sub1/sub2/g.html
- * result in
+ * result in
* ../g.html
*
* this /sub1/f.html