Kaydet (Commit) a8ca72cb authored tarafından Miklos Vajna's avatar Miklos Vajna

svtools: allow writing characters with HtmlWriter

The sw HTML image export already uses HtmlWriter, so need to extend this
to support XHTML alternate text, writing the character data directly is
not an option.

Change-Id: Iac3f2b9a3828175a5f1d0fb14ab505f8de389e52
Reviewed-on: https://gerrit.libreoffice.org/50965Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
üst ad628045
...@@ -27,6 +27,7 @@ private: ...@@ -27,6 +27,7 @@ private:
bool mbElementOpen; bool mbElementOpen;
bool mbContentWritten; bool mbContentWritten;
bool mbCharactersWritten;
bool mbPrettyPrint; bool mbPrettyPrint;
/// XML namespace, in case of XHTML. /// XML namespace, in case of XHTML.
OString maNamespace; OString maNamespace;
...@@ -52,6 +53,9 @@ public: ...@@ -52,6 +53,9 @@ public:
void single(const OString& aContent); void single(const OString& aContent);
void endAttribute(); void endAttribute();
/// Writes character data.
void characters(const OString& rChars);
}; };
#endif #endif
......
...@@ -41,6 +41,7 @@ public: ...@@ -41,6 +41,7 @@ public:
void testNested(); void testNested();
void testNamespace(); void testNamespace();
void testAttributeValues(); void testAttributeValues();
void testCharacters();
CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testSingleElement); CPPUNIT_TEST(testSingleElement);
...@@ -50,6 +51,7 @@ public: ...@@ -50,6 +51,7 @@ public:
CPPUNIT_TEST(testNested); CPPUNIT_TEST(testNested);
CPPUNIT_TEST(testNamespace); CPPUNIT_TEST(testNamespace);
CPPUNIT_TEST(testAttributeValues); CPPUNIT_TEST(testAttributeValues);
CPPUNIT_TEST(testCharacters);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
}; };
...@@ -190,6 +192,21 @@ void Test::testAttributeValues() ...@@ -190,6 +192,21 @@ void Test::testAttributeValues()
CPPUNIT_ASSERT_EQUAL(OString("<abc one=\"one\" two=\"two\" three=\"12\"/>"), aString); CPPUNIT_ASSERT_EQUAL(OString("<abc one=\"one\" two=\"two\" three=\"12\"/>"), aString);
} }
void Test::testCharacters()
{
SvMemoryStream aStream;
HtmlWriter aHtml(aStream);
aHtml.prettyPrint(false);
aHtml.start("abc");
aHtml.characters("hello");
aHtml.end();
OString aString = extractFromStream(aStream);
CPPUNIT_ASSERT_EQUAL(OString("<abc>hello</abc>"), aString);
}
CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -15,6 +15,7 @@ HtmlWriter::HtmlWriter(SvStream& rStream, const OString& rNamespace) : ...@@ -15,6 +15,7 @@ HtmlWriter::HtmlWriter(SvStream& rStream, const OString& rNamespace) :
mrStream(rStream), mrStream(rStream),
mbElementOpen(false), mbElementOpen(false),
mbContentWritten(false), mbContentWritten(false),
mbCharactersWritten(false),
mbPrettyPrint(true) mbPrettyPrint(true)
{ {
if (!rNamespace.isEmpty()) if (!rNamespace.isEmpty())
...@@ -83,7 +84,7 @@ void HtmlWriter::flushStack() ...@@ -83,7 +84,7 @@ void HtmlWriter::flushStack()
void HtmlWriter::end() void HtmlWriter::end()
{ {
if (mbElementOpen) if (mbElementOpen && !mbCharactersWritten)
{ {
mrStream.WriteCharPtr("/>"); mrStream.WriteCharPtr("/>");
if (mbPrettyPrint) if (mbPrettyPrint)
...@@ -107,6 +108,7 @@ void HtmlWriter::end() ...@@ -107,6 +108,7 @@ void HtmlWriter::end()
maElementStack.pop_back(); maElementStack.pop_back();
mbElementOpen = false; mbElementOpen = false;
mbContentWritten = false; mbContentWritten = false;
mbCharactersWritten = false;
} }
void HtmlWriter::attribute(const OString &aAttribute, const OString& aValue) void HtmlWriter::attribute(const OString &aAttribute, const OString& aValue)
...@@ -146,5 +148,12 @@ void HtmlWriter::attribute(const OString& aAttribute) ...@@ -146,5 +148,12 @@ void HtmlWriter::attribute(const OString& aAttribute)
} }
} }
void HtmlWriter::characters(const OString& rChars)
{
if (!mbCharactersWritten)
mrStream.WriteCharPtr(">");
mrStream.WriteOString(rChars);
mbCharactersWritten = true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment