Coverage Report

Created: 2026-09-28 10:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/svtools/source/svhtml/HtmlWriter.cxx
Line
Count
Source
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
#include <tools/stream.hxx>
13
#include <sal/log.hxx>
14
#include <svtools/htmlout.hxx>
15
16
HtmlWriter::HtmlWriter(SvStream& rStream, std::string_view rNamespace) :
17
0
    mrStream(rStream),
18
0
    mbPrettyPrint(true),
19
0
    maNamespace(rNamespace)
20
0
{
21
0
}
22
23
HtmlWriter::~HtmlWriter()
24
0
{
25
0
    assert(maElementStack.empty());
26
0
}
27
28
void HtmlWriter::prettyPrint(bool b)
29
0
{
30
0
    mbPrettyPrint = b;
31
0
}
32
33
void HtmlWriter::start(const OString& aElement)
34
0
{
35
0
    if (mbOpeningTagOpen)
36
0
    {
37
0
        mrStream.WriteChar('>');
38
0
        if (mbPrettyPrint)
39
0
            mrStream.WriteChar('\n');
40
0
    }
41
0
    maElementStack.push_back(aElement);
42
43
0
    if (mbPrettyPrint)
44
0
    {
45
0
        for(size_t i = 0; i < maElementStack.size() - 1; i++)
46
0
        {
47
0
            mrStream.WriteOString("  ");
48
0
        }
49
0
    }
50
51
0
    mrStream.WriteChar('<');
52
0
    mrStream.WriteOString(Concat2View(maNamespace + aElement));
53
0
    mbOpeningTagOpen = true;
54
0
}
55
56
void HtmlWriter::single(const OString &aContent)
57
0
{
58
0
    start(aContent);
59
0
    end();
60
0
}
61
62
void HtmlWriter::flushStack()
63
0
{
64
0
    while (!maElementStack.empty())
65
0
    {
66
0
        end();
67
0
    }
68
0
}
69
70
bool HtmlWriter::end(const OString& aElement)
71
0
{
72
0
    bool bExpected = maElementStack.back() == aElement;
73
0
    SAL_WARN_IF(!bExpected, "svtools", "HtmlWriter: end element mismatch - '" << aElement << "' expected '" << maElementStack.back() << "'");
74
0
    end();
75
0
    return bExpected;
76
0
}
77
78
void HtmlWriter::end()
79
0
{
80
0
    if (mbOpeningTagOpen)
81
0
    {
82
0
        mrStream.WriteOString("/>");
83
0
        if (mbPrettyPrint)
84
0
            mrStream.WriteOString("\n");
85
0
        mbOpeningTagOpen = false;
86
0
    }
87
0
    else
88
0
    {
89
0
        if (mbPrettyPrint)
90
0
        {
91
0
            for(size_t i = 0; i < maElementStack.size() - 1; i++)
92
0
            {
93
0
                mrStream.WriteOString("  ");
94
0
            }
95
0
        }
96
0
        mrStream.WriteOString("</");
97
0
        mrStream.WriteOString(Concat2View(maNamespace + maElementStack.back()));
98
0
        mrStream.WriteOString(">");
99
0
        if (mbPrettyPrint)
100
0
            mrStream.WriteOString("\n");
101
0
    }
102
0
    maElementStack.pop_back();
103
0
}
104
105
void HtmlWriter::attribute(std::string_view aAttribute, std::string_view aValue)
106
0
{
107
0
    attribute(aAttribute, OStringToOUString(aValue, RTL_TEXTENCODING_UTF8));
108
0
}
109
110
void HtmlWriter::attribute(std::string_view aAttribute, const sal_Int32 aValue)
111
0
{
112
0
    attribute(aAttribute, OString::number(aValue));
113
0
}
114
115
void HtmlWriter::attribute(std::string_view aAttribute, const OUString& aValue)
116
0
{
117
0
    assert(mbOpeningTagOpen);
118
0
    if (mbOpeningTagOpen && !aAttribute.empty() && !aValue.isEmpty())
119
0
    {
120
0
        mrStream.WriteChar(' ');
121
0
        mrStream.WriteOString(aAttribute);
122
0
        mrStream.WriteOString("=\"");
123
0
        HTMLOutFuncs::Out_String(mrStream, aValue);
124
0
        mrStream.WriteChar('"');
125
0
    }
126
0
}
127
128
void HtmlWriter::attribute(std::string_view aAttribute)
129
0
{
130
0
    assert(mbOpeningTagOpen);
131
0
    if (mbOpeningTagOpen && !aAttribute.empty())
132
0
    {
133
0
        mrStream.WriteChar(' ');
134
0
        mrStream.WriteOString(aAttribute);
135
0
    }
136
0
}
137
138
void HtmlWriter::characters(std::string_view rChars)
139
0
{
140
0
    if (mbOpeningTagOpen)
141
0
    {
142
0
        mrStream.WriteOString(">");
143
0
        mbOpeningTagOpen = false;
144
0
    }
145
0
    mrStream.WriteOString(rChars);
146
0
}
147
148
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */