1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
11 #include <svtools/HtmlWriter.hxx>
12 #include <tools/stream.hxx>
13 #include <sal/log.hxx>
14 #include <svtools/htmlout.hxx>
16 HtmlWriter::HtmlWriter(SvStream
& rStream
, std::string_view rNamespace
) :
19 mbCharactersWritten(false),
22 if (!rNamespace
.empty())
24 // Convert namespace alias to a prefix.
25 maNamespace
= OString::Concat(rNamespace
) + ":";
29 HtmlWriter::~HtmlWriter()
32 void HtmlWriter::prettyPrint(bool b
)
37 void HtmlWriter::start(const OString
& aElement
)
41 mrStream
.WriteChar('>');
43 mrStream
.WriteChar('\n');
45 maElementStack
.push_back(aElement
);
49 for(size_t i
= 0; i
< maElementStack
.size() - 1; i
++)
51 mrStream
.WriteOString(" ");
55 mrStream
.WriteChar('<');
56 mrStream
.WriteOString(Concat2View(maNamespace
+ aElement
));
60 void HtmlWriter::single(const OString
&aContent
)
66 void HtmlWriter::endAttribute()
70 mrStream
.WriteOString("/>");
72 mrStream
.WriteOString("\n");
73 mbElementOpen
= false;
77 void HtmlWriter::flushStack()
79 while (!maElementStack
.empty())
85 bool HtmlWriter::end(const OString
& aElement
)
87 bool bExpected
= maElementStack
.back() == aElement
;
88 SAL_WARN_IF(!bExpected
, "svtools", "HtmlWriter: end element mismatch - '" << aElement
<< "' expected '" << maElementStack
.back() << "'");
93 void HtmlWriter::end()
95 if (mbElementOpen
&& !mbCharactersWritten
)
97 mrStream
.WriteOString("/>");
99 mrStream
.WriteOString("\n");
105 for(size_t i
= 0; i
< maElementStack
.size() - 1; i
++)
107 mrStream
.WriteOString(" ");
110 mrStream
.WriteOString("</");
111 mrStream
.WriteOString(Concat2View(maNamespace
+ maElementStack
.back()));
112 mrStream
.WriteOString(">");
114 mrStream
.WriteOString("\n");
116 maElementStack
.pop_back();
117 mbElementOpen
= false;
118 mbCharactersWritten
= false;
121 void HtmlWriter::writeAttribute(SvStream
& rStream
, std::string_view aAttribute
, sal_Int32 aValue
)
123 writeAttribute(rStream
, aAttribute
, OString::number(aValue
));
126 void HtmlWriter::writeAttribute(SvStream
& rStream
, std::string_view aAttribute
, std::string_view aValue
)
128 rStream
.WriteOString(aAttribute
);
129 rStream
.WriteChar('=');
130 rStream
.WriteChar('"');
131 HTMLOutFuncs::Out_String(rStream
, OStringToOUString(aValue
, RTL_TEXTENCODING_UTF8
));
132 rStream
.WriteChar('"');
135 void HtmlWriter::attribute(std::string_view aAttribute
, std::string_view aValue
)
137 if (mbElementOpen
&& !aAttribute
.empty() && !aValue
.empty())
139 mrStream
.WriteChar(' ');
140 writeAttribute(mrStream
, aAttribute
, aValue
);
144 void HtmlWriter::attribute(std::string_view aAttribute
, const sal_Int32 aValue
)
146 attribute(aAttribute
, OString::number(aValue
));
149 void HtmlWriter::attribute(std::string_view aAttribute
, const char* pValue
)
151 attribute(aAttribute
, std::string_view(pValue
));
154 void HtmlWriter::attribute(std::string_view aAttribute
, std::u16string_view aValue
)
156 attribute(aAttribute
, OUStringToOString(aValue
, RTL_TEXTENCODING_UTF8
));
159 void HtmlWriter::attribute(std::string_view aAttribute
)
161 if (mbElementOpen
&& !aAttribute
.empty())
163 mrStream
.WriteChar(' ');
164 mrStream
.WriteOString(aAttribute
);
168 void HtmlWriter::characters(std::string_view rChars
)
170 if (!mbCharactersWritten
)
171 mrStream
.WriteOString(">");
172 mrStream
.WriteOString(rChars
);
173 mbCharactersWritten
= true;
176 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */