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 : */
10 :
11 : #include <svtools/HtmlWriter.hxx>
12 :
13 265 : HtmlWriter::HtmlWriter(SvStream& rStream) :
14 : mrStream(rStream),
15 : mbElementOpen(false),
16 : mbContentWritten(false),
17 265 : mbPrettyPrint(true)
18 265 : {}
19 :
20 265 : HtmlWriter::~HtmlWriter()
21 265 : {}
22 :
23 7 : void HtmlWriter::prettyPrint(bool bChoice)
24 : {
25 7 : mbPrettyPrint = bChoice;
26 7 : }
27 :
28 267 : void HtmlWriter::start(const OString &aElement)
29 : {
30 267 : if (mbElementOpen)
31 : {
32 1 : mrStream.WriteChar('>');
33 1 : if (!mbContentWritten && mbPrettyPrint)
34 0 : mrStream.WriteChar('\n');
35 1 : mbContentWritten = false;
36 : }
37 267 : maElementStack.push_back(aElement);
38 :
39 267 : if (mbPrettyPrint)
40 : {
41 259 : for(size_t i = 0; i < maElementStack.size() - 1; i++)
42 : {
43 0 : mrStream.WriteCharPtr(" ");
44 : }
45 : }
46 :
47 267 : mrStream.WriteChar('<');
48 267 : mrStream.WriteOString(aElement);
49 267 : mbElementOpen = true;
50 267 : }
51 :
52 260 : void HtmlWriter::single(const OString &aContent)
53 : {
54 260 : start(aContent);
55 260 : end();
56 260 : }
57 :
58 0 : void HtmlWriter::endAttribute()
59 : {
60 0 : if (mbElementOpen)
61 : {
62 0 : mrStream.WriteCharPtr("/>");
63 0 : if (mbPrettyPrint)
64 0 : mrStream.WriteCharPtr("\n");
65 0 : mbElementOpen = false;
66 : }
67 0 : }
68 :
69 267 : void HtmlWriter::end()
70 : {
71 267 : if (mbElementOpen)
72 : {
73 263 : mrStream.WriteCharPtr("/>");
74 263 : if (mbPrettyPrint)
75 259 : mrStream.WriteCharPtr("\n");
76 : }
77 : else
78 : {
79 4 : if (!mbContentWritten && mbPrettyPrint)
80 : {
81 0 : for(size_t i = 0; i < maElementStack.size() - 1; i++)
82 : {
83 0 : mrStream.WriteCharPtr(" ");
84 : }
85 : }
86 4 : mrStream.WriteCharPtr("</");
87 4 : mrStream.WriteOString(maElementStack.back());
88 4 : mrStream.WriteCharPtr(">");
89 4 : if (mbPrettyPrint)
90 0 : mrStream.WriteCharPtr("\n");
91 : }
92 267 : maElementStack.pop_back();
93 267 : mbElementOpen = false;
94 267 : mbContentWritten = false;
95 267 : }
96 :
97 3 : void HtmlWriter::write(const OString &aContent)
98 : {
99 3 : if (mbElementOpen)
100 : {
101 3 : mrStream.WriteChar('>');
102 3 : mbElementOpen = false;
103 : }
104 3 : mbContentWritten = true;
105 3 : mrStream.WriteOString(aContent);
106 3 : }
107 :
108 5 : void HtmlWriter::attribute(const OString &aAttribute, const OString &aValue)
109 : {
110 5 : if (mbElementOpen && !aAttribute.isEmpty() && !aValue.isEmpty())
111 : {
112 5 : mrStream.WriteChar(' ');
113 5 : mrStream.WriteOString(aAttribute);
114 5 : mrStream.WriteChar('=');
115 5 : mrStream.WriteChar('"');
116 5 : mrStream.WriteOString(aValue);
117 5 : mrStream.WriteChar('"');
118 : }
119 5 : }
120 :
121 :
122 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|