android: Update app-specific/MIME type icons
[LibreOffice.git] / svtools / source / svhtml / HtmlWriter.cxx
blob3409461d363c52bc39b264d0868e5a5bca3fcc01
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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/.
9 */
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) :
17 mrStream(rStream),
18 mbElementOpen(false),
19 mbCharactersWritten(false),
20 mbPrettyPrint(true)
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)
34 mbPrettyPrint = b;
37 void HtmlWriter::start(const OString& aElement)
39 if (mbElementOpen)
41 mrStream.WriteChar('>');
42 if (mbPrettyPrint)
43 mrStream.WriteChar('\n');
45 maElementStack.push_back(aElement);
47 if (mbPrettyPrint)
49 for(size_t i = 0; i < maElementStack.size() - 1; i++)
51 mrStream.WriteOString(" ");
55 mrStream.WriteChar('<');
56 mrStream.WriteOString(Concat2View(maNamespace + aElement));
57 mbElementOpen = true;
60 void HtmlWriter::single(const OString &aContent)
62 start(aContent);
63 end();
66 void HtmlWriter::endAttribute()
68 if (mbElementOpen)
70 mrStream.WriteOString("/>");
71 if (mbPrettyPrint)
72 mrStream.WriteOString("\n");
73 mbElementOpen = false;
77 void HtmlWriter::flushStack()
79 while (!maElementStack.empty())
81 end();
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() << "'");
89 end();
90 return bExpected;
93 void HtmlWriter::end()
95 if (mbElementOpen && !mbCharactersWritten)
97 mrStream.WriteOString("/>");
98 if (mbPrettyPrint)
99 mrStream.WriteOString("\n");
101 else
103 if (mbPrettyPrint)
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(">");
113 if (mbPrettyPrint)
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: */