LibreOffice Module svtools (master) 1
HtmlWriter.cxx
Go to the documentation of this file.
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
12#include <tools/stream.hxx>
13#include <sal/log.hxx>
14#include <svtools/htmlout.hxx>
15
16HtmlWriter::HtmlWriter(SvStream& rStream, std::string_view rNamespace) :
17 mrStream(rStream),
18 mbElementOpen(false),
19 mbCharactersWritten(false),
20 mbPrettyPrint(true)
21{
22 if (!rNamespace.empty())
23 {
24 // Convert namespace alias to a prefix.
25 maNamespace = OString::Concat(rNamespace) + ":";
26 }
27}
28
30{}
31
33{
34 mbPrettyPrint = b;
35}
36
37void HtmlWriter::start(const OString& aElement)
38{
39 if (mbElementOpen)
40 {
42 if (mbPrettyPrint)
43 mrStream.WriteChar('\n');
44 }
45 maElementStack.push_back(aElement);
46
47 if (mbPrettyPrint)
48 {
49 for(size_t i = 0; i < maElementStack.size() - 1; i++)
50 {
52 }
53 }
54
56 mrStream.WriteOString(Concat2View(maNamespace + aElement));
57 mbElementOpen = true;
58}
59
60void HtmlWriter::single(const OString &aContent)
61{
62 start(aContent);
63 end();
64}
65
67{
68 if (mbElementOpen)
69 {
71 if (mbPrettyPrint)
73 mbElementOpen = false;
74 }
75}
76
78{
79 while (!maElementStack.empty())
80 {
81 end();
82 }
83}
84
85bool HtmlWriter::end(const OString& aElement)
86{
87 bool bExpected = maElementStack.back() == aElement;
88 SAL_WARN_IF(!bExpected, "svtools", "HtmlWriter: end element mismatch - '" << aElement << "' expected '" << maElementStack.back() << "'");
89 end();
90 return bExpected;
91}
92
94{
96 {
98 if (mbPrettyPrint)
100 }
101 else
102 {
103 if (mbPrettyPrint)
104 {
105 for(size_t i = 0; i < maElementStack.size() - 1; i++)
106 {
108 }
109 }
111 mrStream.WriteOString(Concat2View(maNamespace + maElementStack.back()));
113 if (mbPrettyPrint)
115 }
116 maElementStack.pop_back();
117 mbElementOpen = false;
118 mbCharactersWritten = false;
119}
120
121void HtmlWriter::writeAttribute(SvStream& rStream, std::string_view aAttribute, sal_Int32 aValue)
122{
123 writeAttribute(rStream, aAttribute, OString::number(aValue));
124}
125
126void HtmlWriter::writeAttribute(SvStream& rStream, std::string_view aAttribute, std::string_view aValue)
127{
128 rStream.WriteOString(aAttribute);
129 rStream.WriteChar('=');
130 rStream.WriteChar('"');
131 HTMLOutFuncs::Out_String(rStream, OStringToOUString(aValue, RTL_TEXTENCODING_UTF8));
132 rStream.WriteChar('"');
133}
134
135void HtmlWriter::attribute(std::string_view aAttribute, std::string_view aValue)
136{
137 if (mbElementOpen && !aAttribute.empty() && !aValue.empty())
138 {
139 mrStream.WriteChar(' ');
140 writeAttribute(mrStream, aAttribute, aValue);
141 }
142}
143
144void HtmlWriter::attribute(std::string_view aAttribute, const sal_Int32 aValue)
145{
146 attribute(aAttribute, OString::number(aValue));
147}
148
149void HtmlWriter::attribute(std::string_view aAttribute, const char* pValue)
150{
151 attribute(aAttribute, std::string_view(pValue));
152}
153
154void HtmlWriter::attribute(std::string_view aAttribute, std::u16string_view aValue)
155{
156 attribute(aAttribute, OUStringToOString(aValue, RTL_TEXTENCODING_UTF8));
157}
158
159void HtmlWriter::attribute(std::string_view aAttribute)
160{
161 if (mbElementOpen && !aAttribute.empty())
162 {
163 mrStream.WriteChar(' ');
164 mrStream.WriteOString(aAttribute);
165 }
166}
167
168void HtmlWriter::characters(std::string_view rChars)
169{
172 mrStream.WriteOString(rChars);
173 mbCharactersWritten = true;
174}
175
176/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void prettyPrint(bool b)
Definition: HtmlWriter.cxx:32
void end()
Definition: HtmlWriter.cxx:93
OString maNamespace
XML namespace, in case of XHTML.
Definition: HtmlWriter.hxx:31
void attribute(std::string_view aAttribute, const char *aValue)
Definition: HtmlWriter.cxx:149
void flushStack()
Definition: HtmlWriter.cxx:77
bool mbElementOpen
Definition: HtmlWriter.hxx:27
bool mbPrettyPrint
Definition: HtmlWriter.hxx:29
void endAttribute()
Definition: HtmlWriter.cxx:66
HtmlWriter(SvStream &rStream, std::string_view rNamespace=std::string_view())
Definition: HtmlWriter.cxx:16
void start(const OString &aElement)
Definition: HtmlWriter.cxx:37
static void writeAttribute(SvStream &rStream, std::string_view aAttribute, sal_Int32 aValue)
Definition: HtmlWriter.cxx:121
bool mbCharactersWritten
Definition: HtmlWriter.hxx:28
void single(const OString &aContent)
Definition: HtmlWriter.cxx:60
void characters(std::string_view rChars)
Writes character data.
Definition: HtmlWriter.cxx:168
std::vector< OString > maElementStack
Definition: HtmlWriter.hxx:23
SvStream & mrStream
Definition: HtmlWriter.hxx:25
SvStream & WriteOString(std::string_view rStr)
SvStream & WriteChar(char nChar)
#define SAL_WARN_IF(condition, area, stream)
int i
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
static SVT_DLLPUBLIC SvStream & Out_String(SvStream &, const OUString &, OUString *pNonConvertableChars=nullptr)
Definition: htmlout.cxx:530