Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <precomp.h>
21 : #include <toolkit/htmlfile.hxx>
22 :
23 : // NOT FULLY DECLARED SERVICES
24 : #include <cosv/file.hxx>
25 : #include <udm/html/htmlitem.hxx>
26 :
27 : namespace
28 : {
29 : bool bUse_OOoFrameDiv = true;
30 1 : const String C_sOOoFrameDiv_IdlId("adc-idlref");
31 : }
32 :
33 : using namespace csi;
34 : using csi::xml::AnAttribute;
35 :
36 1 : DocuFile_Html::DocuFile_Html()
37 : : sFilePath(),
38 : sTitle(),
39 : sLocation(),
40 : sStyle(),
41 : sCssFile(),
42 : sCopyright(),
43 : aBodyData(),
44 1 : aBuffer(60000) // Grows dynamically, when necessary.
45 : {
46 1 : }
47 :
48 : void
49 7831 : DocuFile_Html::SetLocation( const csv::ploc::Path & i_rFilePath )
50 : {
51 7831 : StreamLock sPath(1000);
52 7831 : i_rFilePath.Get( sPath() );
53 :
54 7831 : sFilePath = sPath().c_str();
55 7831 : }
56 :
57 : void
58 7831 : DocuFile_Html::SetTitle( const char * i_sTitle )
59 : {
60 7831 : sTitle = i_sTitle;
61 7831 : }
62 :
63 : void
64 7831 : DocuFile_Html::SetRelativeCssPath( const char * i_sCssFile_relativePath )
65 : {
66 7831 : sCssFile = i_sCssFile_relativePath;
67 7831 : }
68 :
69 : void
70 1 : DocuFile_Html::SetCopyright( const char * i_sCopyright )
71 : {
72 1 : sCopyright = i_sCopyright;
73 1 : }
74 :
75 : void
76 7831 : DocuFile_Html::EmptyBody()
77 : {
78 7831 : aBodyData.SetContent(0);
79 :
80 7831 : if (bUse_OOoFrameDiv)
81 : {
82 : // Insert <div> tag to allow better formatting for OOo.
83 : aBodyData
84 7831 : << new xml::XmlCode("<div id=\"")
85 15662 : << new xml::XmlCode(C_sOOoFrameDiv_IdlId)
86 15662 : << new xml::XmlCode("\">\n\n");
87 : }
88 :
89 : aBodyData
90 15662 : >> *new html::Label( "_top_" )
91 7831 : << " ";
92 7831 : }
93 :
94 : bool
95 7831 : DocuFile_Html::CreateFile()
96 : {
97 7831 : csv::File aFile(sFilePath, csv::CFM_CREATE);
98 7831 : if (NOT aFile.open())
99 : {
100 0 : Cerr() << "Can't create file " << sFilePath << "." << Endl();
101 0 : return false;
102 : }
103 :
104 7831 : WriteHeader(aFile);
105 7831 : WriteBody(aFile);
106 :
107 : // Write end
108 : static const char sCompletion[] = "\n</html>\n";
109 7831 : aFile.write( sCompletion );
110 :
111 7831 : aFile.close();
112 7831 : Cout() << '.' << Flush();
113 7831 : return true;
114 : }
115 :
116 :
117 : void
118 7831 : DocuFile_Html::WriteHeader( csv::File & io_aFile )
119 : {
120 7831 : aBuffer.reset();
121 :
122 : static const char s1[] =
123 : "<html>\n<head>\n<title>";
124 : static const char s2[] =
125 : "</title>\n"
126 : "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
127 :
128 7831 : aBuffer.write( s1 );
129 7831 : aBuffer.write( sTitle );
130 7831 : aBuffer.write( s2 );
131 :
132 :
133 7831 : if (NOT sCssFile.empty())
134 : {
135 : static const char s3[] =
136 : "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
137 : static const char s4[] =
138 : "\">\n";
139 :
140 7831 : aBuffer.write(s3);
141 7831 : aBuffer.write(sCssFile);
142 7831 : aBuffer.write(s4);
143 : }
144 :
145 7831 : if (NOT sStyle.empty())
146 : {
147 : static const char s5[] =
148 : "<style>";
149 : static const char s6[] =
150 : "</style>\n";
151 :
152 0 : aBuffer.write(s5);
153 0 : aBuffer.write(sStyle);
154 0 : aBuffer.write(s6);
155 : }
156 :
157 : static const char s7[] =
158 : "</head>\n";
159 7831 : aBuffer.write(s7);
160 :
161 7831 : io_aFile.write(aBuffer.c_str(), aBuffer.size());
162 7831 : }
163 :
164 : void
165 7831 : DocuFile_Html::WriteBody( csv::File & io_aFile )
166 : {
167 7831 : aBuffer.reset();
168 :
169 : aBodyData
170 15662 : >> *new html::Link( "#_top_" )
171 7831 : << "Top of Page";
172 :
173 7831 : if ( sCopyright.length() > 0 )
174 : {
175 : aBodyData
176 7831 : << new xml::XmlCode("<hr size=\"3\">");
177 :
178 : aBodyData
179 7831 : >> *new html::Paragraph
180 23493 : << new html::ClassAttr( "copyright" )
181 15662 : << new xml::AnAttribute( "align", "center" )
182 15662 : << new xml::XmlCode(sCopyright);
183 : }
184 :
185 7831 : if (bUse_OOoFrameDiv)
186 : {
187 : // Insert <div> tag to allow better formatting for OOo.
188 : aBodyData
189 7831 : << new xml::XmlCode("\n</div> <!-- id=\"")
190 15662 : << new xml::XmlCode(C_sOOoFrameDiv_IdlId)
191 15662 : << new xml::XmlCode("\" -->\n");
192 : }
193 :
194 7831 : aBodyData.WriteOut(aBuffer);
195 7831 : io_aFile.write(aBuffer.c_str(), aBuffer.size());
196 7834 : }
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|