xref: /trunk/main/xml2cmp/source/xcd/cr_html.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org 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 Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #include <fstream>
29 #include "cr_html.hxx"
30 #include "xmltree.hxx"
31 #include "../support/syshelp.hxx"
32 
33 
34 
35 
36 char C_sHtmlFileHeader1[] =
37     "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n"
38     "<HTML>\n"
39     "<HEAD>\n"
40     "   <TITLE>";
41 
42 char C_sHtmlFileHeader2[] =
43         "</TITLE>\n"
44     "       <META NAME=\"GENERATOR\" CONTENT=\"xml2cmp\">\n"
45     "</HEAD>\n"
46     "<BODY BGCOLOR=\"#ffffff\">\n<P><BR></P>";
47 
48 
49 char C_sHtmlFileFoot[] = "</BODY>\n</HTML>\n";
50 
51 
52 HtmlCreator::HtmlCreator( const char *              i_pOutputFileName,
53                           const XmlElement &        i_rDocument,
54                           const Simstr &            i_sIDL_BaseDirectory )
55     :   aFile(i_pOutputFileName, std::ios::out
56 #if defined(WNT) || defined(OS2)
57                                                | std::ios::binary
58 #endif
59                                                              ),
60         rDocument(i_rDocument),
61         sIdl_BaseDirectory(i_sIDL_BaseDirectory)
62 {
63     if ( !aFile )
64     {
65         std::cerr << "Error: " << i_pOutputFileName << " could not be created." << std::endl;
66         exit(0);
67     }
68 }
69 
70 HtmlCreator::~HtmlCreator()
71 {
72     aFile.close();
73 }
74 
75 void
76 HtmlCreator::Run()
77 {
78     WriteStr( C_sHtmlFileHeader1 );
79     WriteStr( "ModuleDescription" );
80     WriteStr( C_sHtmlFileHeader2 );
81 
82     rDocument.Write2Html(*this);
83 
84     WriteStr( "<P><BR><BR></P>\n" );
85     WriteStr( C_sHtmlFileFoot );
86 }
87 
88 void
89 HtmlCreator::StartTable()
90 {
91     WriteStr( "<P><BR></P>\n" );
92     WriteStr(
93             "<TABLE WIDTH=95% BORDER=1 CELLSPACING=0 CELLPADDING=4>\n"
94             "   <TBODY>\n"  );
95 }
96 
97 void
98 HtmlCreator::FinishTable()
99 {
100     WriteStr( " </TBODY>\n"
101               "</TABLE>\n\n" );
102 }
103 
104 void
105 HtmlCreator::StartBigCell( const char * i_sTitle )
106 {
107     WriteStr( "<TR><TD COLSPAN=2>\n"
108               "<H4><BR>" );
109     WriteStr( i_sTitle );
110     WriteStr( "</H4>\n" );
111 
112 }
113 
114 void
115 HtmlCreator::FinishBigCell()
116 {
117     WriteStr( "</TD><TR>\n" );
118 }
119 
120 void
121 HtmlCreator::Write_SglTextElement( const SglTextElement &  i_rElement,
122                                    bool                    i_bStrong )
123 {
124     StartRow();
125 
126     WriteElementName( i_rElement.Name(), i_bStrong );
127 
128     StartCell( "77%");
129     if (i_bStrong)
130     {
131         WriteStr( "<H4><A NAME=\"" );
132         unsigned nLen = strlen(i_rElement.Data());
133         if ( i_rElement.IsReversedName())
134         {
135             const char * pEnd = strchr(i_rElement.Data(), ' ');
136             nLen = (unsigned)( pEnd - i_rElement.Data() );
137         }
138         aFile.write( i_rElement.Data(), (int) nLen );
139         WriteStr( "\">" );
140     }
141 
142     WriteName( aFile, sIdl_BaseDirectory, i_rElement.Data(),
143                i_bStrong ? lt_nolink : i_rElement.LinkType() );
144 
145     if (i_bStrong)
146         WriteStr( "</A></H4>" );
147     FinishCell();
148 
149     FinishRow();
150 }
151 
152 void
153 HtmlCreator::Write_MultiTextElement( const MultipleTextElement &    i_rElement )
154 {
155     StartRow();
156 
157     WriteElementName( i_rElement.Name(), false );
158 
159     StartCell( "77%");
160     unsigned i_max = i_rElement.Size();
161     for ( unsigned i = 0; i < i_max; ++i )
162     {
163         if (i > 0)
164             WriteStr( "<BR>\n" );
165         WriteName( aFile, sIdl_BaseDirectory, i_rElement.Data(i), i_rElement.LinkType() );
166     }   // end for
167     FinishCell();
168 
169     FinishRow();
170 }
171 
172 void
173 HtmlCreator::Write_SglText( const Simstr &      i_sName,
174                             const Simstr &      i_sValue )
175 {
176     StartRow();
177 
178     WriteElementName( i_sName, false );
179 
180     StartCell( "77%");
181     WriteStr( i_sValue );
182     FinishCell();
183 
184     FinishRow();
185 }
186 
187 void
188 HtmlCreator::Write_ReferenceDocu( const Simstr &      i_sName,
189                                   const Simstr &      i_sRef,
190                                   const Simstr &      i_sRole,
191                                   const Simstr &      i_sTitle )
192 {
193     StartRow();
194 
195     StartCell( "23%" );
196     WriteStr(i_sName);
197     FinishCell();
198 
199     StartCell( "77%" );
200     if ( !i_sRef.is_empty() )
201     {
202         WriteStr("<A href=\"");
203         WriteStr(i_sRef);
204         WriteStr("\">");
205         if ( !i_sTitle.is_empty() )
206             WriteStr( i_sTitle );
207         else
208             WriteStr(i_sRef);
209         WriteStr("</A><BR>\n");
210     }
211     else if ( !i_sTitle.is_empty() )
212     {
213         WriteStr("Title: ");
214         WriteStr( i_sTitle );
215         WriteStr("<BR>\n");
216     }
217     if ( !i_sRole.is_empty() )
218     {
219         WriteStr("Role: ");
220         WriteStr( i_sRole );
221     }
222     FinishCell();
223 
224     FinishRow();
225 }
226 
227 
228 void
229 HtmlCreator::StartRow()
230 {
231     WriteStr( "     <TR VALIGN=TOP>\n" );
232 }
233 
234 void
235 HtmlCreator::FinishRow()
236 {
237     WriteStr( "     </TR>\n" );
238 }
239 
240 void
241 HtmlCreator::StartCell( const char * i_pWidth)
242 {
243     WriteStr( "         <TD WIDTH=" );
244     WriteStr( i_pWidth );
245     WriteStr( ">\n              <P>" );
246 }
247 
248 void
249 HtmlCreator::FinishCell()
250 {
251     WriteStr( "</P>\n           </TD>\n" );
252 }
253 
254 void
255 HtmlCreator::WriteElementName( const Simstr & i_sName,
256                                bool           i_bStrong )
257 {
258     StartCell( "23%" );
259     if (i_bStrong)
260         WriteStr( "<H4>" );
261     WriteStr(i_sName);
262     if (i_bStrong)
263         WriteStr( "</H4>" );
264     FinishCell();
265 }
266 
267 
268 
269