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