xref: /trunk/main/autodoc/source/display/toolkit/htmlfile.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #include <precomp.h>
29*cdf0e10cSrcweir #include <toolkit/htmlfile.hxx>
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir // NOT FULLY DECLARED SERVICES
32*cdf0e10cSrcweir #include <cosv/file.hxx>
33*cdf0e10cSrcweir #include <udm/html/htmlitem.hxx>
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir namespace
36*cdf0e10cSrcweir {
37*cdf0e10cSrcweir bool            bUse_OOoFrameDiv = true;
38*cdf0e10cSrcweir const String    C_sOOoFrameDiv_IdlId("adc-idlref");
39*cdf0e10cSrcweir }
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir using namespace csi;
42*cdf0e10cSrcweir using csi::xml::AnAttribute;
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir DocuFile_Html::DocuFile_Html()
45*cdf0e10cSrcweir     :   sFilePath(),
46*cdf0e10cSrcweir         sTitle(),
47*cdf0e10cSrcweir         sLocation(),
48*cdf0e10cSrcweir         sStyle(),
49*cdf0e10cSrcweir         sCssFile(),
50*cdf0e10cSrcweir         sCopyright(),
51*cdf0e10cSrcweir         aBodyData(),
52*cdf0e10cSrcweir         aBuffer(60000) // Grows dynamically, when necessary.
53*cdf0e10cSrcweir {
54*cdf0e10cSrcweir }
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir void
57*cdf0e10cSrcweir DocuFile_Html::SetLocation( const csv::ploc::Path & i_rFilePath )
58*cdf0e10cSrcweir {
59*cdf0e10cSrcweir     StreamLock sPath(1000);
60*cdf0e10cSrcweir     i_rFilePath.Get( sPath() );
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir     sFilePath = sPath().c_str();
63*cdf0e10cSrcweir }
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir void
66*cdf0e10cSrcweir DocuFile_Html::SetTitle( const char * i_sTitle )
67*cdf0e10cSrcweir {
68*cdf0e10cSrcweir     sTitle = i_sTitle;
69*cdf0e10cSrcweir }
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir void
72*cdf0e10cSrcweir DocuFile_Html::SetRelativeCssPath( const char * i_sCssFile_relativePath )
73*cdf0e10cSrcweir {
74*cdf0e10cSrcweir     sCssFile = i_sCssFile_relativePath;
75*cdf0e10cSrcweir }
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir void
78*cdf0e10cSrcweir DocuFile_Html::SetCopyright( const char * i_sCopyright )
79*cdf0e10cSrcweir {
80*cdf0e10cSrcweir     sCopyright = i_sCopyright;
81*cdf0e10cSrcweir }
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir void
84*cdf0e10cSrcweir DocuFile_Html::EmptyBody()
85*cdf0e10cSrcweir {
86*cdf0e10cSrcweir     aBodyData.SetContent(0);
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir     if (bUse_OOoFrameDiv)
89*cdf0e10cSrcweir     {
90*cdf0e10cSrcweir         // Insert <div> tag to allow better formatting for OOo.
91*cdf0e10cSrcweir         aBodyData
92*cdf0e10cSrcweir             << new xml::XmlCode("<div id=\"")
93*cdf0e10cSrcweir             << new xml::XmlCode(C_sOOoFrameDiv_IdlId)
94*cdf0e10cSrcweir             << new xml::XmlCode("\">\n\n");
95*cdf0e10cSrcweir     }
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir     aBodyData
98*cdf0e10cSrcweir         >> *new html::Label( "_top_" )
99*cdf0e10cSrcweir         << " ";
100*cdf0e10cSrcweir }
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir bool
103*cdf0e10cSrcweir DocuFile_Html::CreateFile()
104*cdf0e10cSrcweir {
105*cdf0e10cSrcweir     csv::File aFile(sFilePath, csv::CFM_CREATE);
106*cdf0e10cSrcweir     if (NOT aFile.open())
107*cdf0e10cSrcweir     {
108*cdf0e10cSrcweir         Cerr() << "Can't create file " << sFilePath << "." << Endl();
109*cdf0e10cSrcweir         return false;
110*cdf0e10cSrcweir     }
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir     WriteHeader(aFile);
113*cdf0e10cSrcweir     WriteBody(aFile);
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir     // Write end
116*cdf0e10cSrcweir     static const char sCompletion[] = "\n</html>\n";
117*cdf0e10cSrcweir     aFile.write( sCompletion );
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir     aFile.close();
120*cdf0e10cSrcweir     Cout() << '.' << Flush();
121*cdf0e10cSrcweir     return true;
122*cdf0e10cSrcweir }
123*cdf0e10cSrcweir 
124*cdf0e10cSrcweir 
125*cdf0e10cSrcweir void
126*cdf0e10cSrcweir DocuFile_Html::WriteHeader( csv::File & io_aFile )
127*cdf0e10cSrcweir {
128*cdf0e10cSrcweir     aBuffer.reset();
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir     static const char s1[] =
131*cdf0e10cSrcweir         "<html>\n<head>\n<title>";
132*cdf0e10cSrcweir     static const char s2[] =
133*cdf0e10cSrcweir         "</title>\n"
134*cdf0e10cSrcweir         "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir     aBuffer.write( s1 );
137*cdf0e10cSrcweir     aBuffer.write( sTitle );
138*cdf0e10cSrcweir     aBuffer.write( s2 );
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir 
141*cdf0e10cSrcweir     if (NOT sCssFile.empty())
142*cdf0e10cSrcweir     {
143*cdf0e10cSrcweir         static const char s3[] =
144*cdf0e10cSrcweir             "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
145*cdf0e10cSrcweir         static const char s4[] =
146*cdf0e10cSrcweir             "\">\n";
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir         aBuffer.write(s3);
149*cdf0e10cSrcweir         aBuffer.write(sCssFile);
150*cdf0e10cSrcweir         aBuffer.write(s4);
151*cdf0e10cSrcweir     }
152*cdf0e10cSrcweir 
153*cdf0e10cSrcweir     if (NOT sStyle.empty())
154*cdf0e10cSrcweir     {
155*cdf0e10cSrcweir         static const char s5[] =
156*cdf0e10cSrcweir             "<style>";
157*cdf0e10cSrcweir         static const char s6[] =
158*cdf0e10cSrcweir             "</style>\n";
159*cdf0e10cSrcweir 
160*cdf0e10cSrcweir         aBuffer.write(s5);
161*cdf0e10cSrcweir         aBuffer.write(sStyle);
162*cdf0e10cSrcweir         aBuffer.write(s6);
163*cdf0e10cSrcweir     }
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir     static const char s7[] =
166*cdf0e10cSrcweir         "</head>\n";
167*cdf0e10cSrcweir     aBuffer.write(s7);
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir     io_aFile.write(aBuffer.c_str(), aBuffer.size());
170*cdf0e10cSrcweir }
171*cdf0e10cSrcweir 
172*cdf0e10cSrcweir void
173*cdf0e10cSrcweir DocuFile_Html::WriteBody( csv::File & io_aFile )
174*cdf0e10cSrcweir {
175*cdf0e10cSrcweir     aBuffer.reset();
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir     aBodyData
178*cdf0e10cSrcweir         >> *new html::Link( "#_top_" )
179*cdf0e10cSrcweir                 << "Top of Page";
180*cdf0e10cSrcweir 
181*cdf0e10cSrcweir     if ( sCopyright.length() > 0 )
182*cdf0e10cSrcweir     {
183*cdf0e10cSrcweir         aBodyData
184*cdf0e10cSrcweir             << new xml::XmlCode("<hr size=\"3\">");
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir         aBodyData
187*cdf0e10cSrcweir             >> *new html::Paragraph
188*cdf0e10cSrcweir                     << new html::ClassAttr( "copyright" )
189*cdf0e10cSrcweir                     << new xml::AnAttribute( "align", "center" )
190*cdf0e10cSrcweir                     << new xml::XmlCode(sCopyright);
191*cdf0e10cSrcweir     }
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir     if (bUse_OOoFrameDiv)
194*cdf0e10cSrcweir     {
195*cdf0e10cSrcweir         // Insert <div> tag to allow better formatting for OOo.
196*cdf0e10cSrcweir         aBodyData
197*cdf0e10cSrcweir             << new xml::XmlCode("\n</div> <!-- id=\"")
198*cdf0e10cSrcweir             << new xml::XmlCode(C_sOOoFrameDiv_IdlId)
199*cdf0e10cSrcweir             << new xml::XmlCode("\" -->\n");
200*cdf0e10cSrcweir     }
201*cdf0e10cSrcweir 
202*cdf0e10cSrcweir     aBodyData.WriteOut(aBuffer);
203*cdf0e10cSrcweir     io_aFile.write(aBuffer.c_str(), aBuffer.size());
204*cdf0e10cSrcweir }
205*cdf0e10cSrcweir 
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir 
208*cdf0e10cSrcweir 
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir 
212