4 Copyright (C) 1994-2007 Frans Slothouber, Jacco van Weert, Petteri Kettunen,
5 Bernd Koesling, Thomas Aglassinger, Anthon Pang, Stefan Kost, David Druffner,
6 Sasha Vasko, Kai Hofmann, Thierry Pierron, Friedrich Haase, and Gergely Budai.
8 This file is part of ROBODoc
10 ROBODoc is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
26 /****h* ROBODoc/RTF_Generator
28 * A collection of functions to generate output in RTF format.
29 * Supports sections upto 7 levels deep.
32 * MODIFICATION HISTORY
33 * ????-??-?? Anthon Pang V1.0
34 * 2003-02-03 Frans Slothouber Refactoring
37 * $Id: rtf_generator.c,v 1.27 2007/07/10 19:13:52 gumpu Exp $
45 #include "rtf_generator.h"
50 #include "generator.h"
57 void RB_RTF_Generate_False_Link(
61 /* Find out how to emphasize this in rtf */
62 fprintf( dest_doc, "%s", name );
65 void RB_RTF_Generate_TOC_2(
67 struct RB_header **headers,
72 for ( i = 0; i < count; ++i )
74 struct RB_header *cur_header = headers[i];
76 if ( cur_header->name && cur_header->function_name )
78 fprintf( dest_doc, "{" );
79 RB_RTF_Generate_String( dest_doc, cur_header->name );
80 fprintf( dest_doc, "}{\\v " );
81 RB_RTF_Generate_String( dest_doc, cur_header->function_name );
82 fprintf( dest_doc, "}\\line\n" );
87 void RB_RTF_Generate_Label(
96 void RB_RTF_Generate_Item_Name(
100 fprintf( dest_doc, "\\par \\fs18 %s ", name );
103 char *RB_RTF_Get_Default_Extension(
110 void RB_RTF_Generate_BeginSection(
115 fprintf( dest_doc, "\\par {\\s%d %s \\par} \\pard\\plain\n", depth, name );
118 void RB_RTF_Generate_EndSection(
129 /*x**f* RTF_Generator/RB_RTF_Generate_Doc_Start
131 * RB_RTF_Generate_Doc_Start --
135 void RB_RTF_Generate_Doc_Start(
144 fprintf( dest_doc, "{\\rtf1\\ansi \\deff0"
146 "\\f0\\fswiss MS Sans Serif;"
147 "\\f1\\fmodern Courier New;"
148 "\\f2\\ftech Symbol;"
151 "\\red255\\green255\\blue255;"
152 "\\red0\\green0\\blue0;" "\\red0\\green0\\blue255;" "}" );
154 /* RTF document info */
155 fprintf( dest_doc, "{\\info"
156 "{\\title %s}" "{\\comment\n" " Source: %s\n", name, src_name );
157 if ( course_of_action.do_nogenwith )
159 fprintf( dest_doc, " " "}" "}" );
163 fprintf( dest_doc, " " COMMENT_ROBODOC " " "}" "}" );
169 "{\\s1 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel0\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 1;}\n"
170 "{\\s2 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel1\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 2;}\n"
171 "{\\s3 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel2\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 3;}\n"
172 "{\\s4 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel3\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 4;}\n"
173 "{\\s5 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel4\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 5;}\n"
174 "{\\s6 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel5\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 6;}\n"
175 "{\\s7 \\fs20 \\keepn\\widctlpar\\jclisttab \\outlinelevel6\\adjustright \\cgrid \\sbasedon0 \\snext0 heading 7;}}\n" );
176 /* RTF document format */
177 fprintf( dest_doc, "{\\margl1440\\margr1440}\\fs18\n" );
179 /* RTF document section */
180 fprintf( dest_doc, "\\f0\\cb1\\cf3\\b1\\qc"
181 "{\\super #{\\footnote{\\super #}%s_TOC}}"
182 "{\\super ${\\footnote{\\super $}Contents}}"
183 "{TABLE OF CONTENTS}\\ql\\b0\\fs20\\cf2\\par\n", src_name );
186 /*x**f* RTF_Generator/RB_RTF_Generate_Doc_End
188 * RB_RTF_Generate_Doc_End --
192 void RB_RTF_Generate_Doc_End(
198 fputc( '}', dest_doc );
201 /*x**f* RTF_Generator/RB_RTF_Generate_Header_Start
203 * RB_RTF_Generate_Header_Start --
207 void RB_RTF_Generate_Header_Start(
209 struct RB_header *cur_header )
211 if ( cur_header->name && cur_header->function_name )
213 RB_RTF_Generate_String( dest_doc, cur_header->function_name );
214 fprintf( dest_doc, "\\page {\\super #{\\footnote{\\super #}" );
215 RB_RTF_Generate_String( dest_doc, cur_header->function_name );
216 fprintf( dest_doc, "}}{\\super ${\\footnote{\\super $}" );
217 RB_RTF_Generate_String( dest_doc, cur_header->name );
218 fprintf( dest_doc, "}} " );
219 RB_RTF_Generate_String( dest_doc, cur_header->name );
220 fprintf( dest_doc, "\\line\n" );
224 /*x**f* RTF_Generator/RB_RTF_Generate_Header_End
226 * RB_RTF_Generate_Header_End --
230 void RB_RTF_Generate_Header_End(
232 struct RB_header *cur_header )
236 fprintf( dest_doc, "\\par\n" );
240 void RB_RTF_Generate_Item_Begin(
243 fprintf( dest_doc, "\\line {\\f1{} \\fs18" );
246 void RB_RTF_Generate_Item_End(
249 fputc( '}', dest_doc );
250 fputc( '\n', dest_doc );
253 /*x**f* RTF_Generator/RB_RTF_Generate_Empty_Item
255 * RB_RTF_Generate_Empty_Item --
259 void RB_RTF_Generate_Empty_Item(
262 fprintf( dest_doc, "\n" );
266 void RB_RTF_Generate_Link(
277 if ( strcmp( labelname, linkname ) )
279 fprintf( dest_doc, "{\\b " );
280 RB_RTF_Generate_String( dest_doc, linkname );
281 fprintf( dest_doc, "}{\\v " );
282 RB_RTF_Generate_String( dest_doc, labelname );
283 fprintf( dest_doc, "}" );
287 RB_RTF_Generate_String( dest_doc, labelname );
291 void RB_RTF_Generate_String(
296 int l = strlen( a_string );
299 for ( i = 0; i < l; ++i )
302 RB_RTF_Generate_Char( dest_doc, c );
306 void RB_RTF_Generate_Char(
321 fputc( '\\', dest_doc );
322 fputc( c, dest_doc );
325 fputc( c, dest_doc );