| Index: src/xml/SkXMLWriter.cpp
|
| diff --git a/src/xml/SkXMLWriter.cpp b/src/xml/SkXMLWriter.cpp
|
| index ec351b728b84b5cc69a05627f3ef07e09d8318fa..56e08893883c67c8a508d583a90691ce9eeb9875 100644
|
| --- a/src/xml/SkXMLWriter.cpp
|
| +++ b/src/xml/SkXMLWriter.cpp
|
| @@ -51,6 +51,17 @@ void SkXMLWriter::addScalarAttribute(const char name[], SkScalar value)
|
| this->addAttribute(name, tmp.c_str());
|
| }
|
|
|
| +void SkXMLWriter::addText(const char text[])
|
| +{
|
| + if (fElems.isEmpty()) {
|
| + return;
|
| + }
|
| +
|
| + this->onAddText(text);
|
| +
|
| + fElems.top()->fHasText = true;
|
| +}
|
| +
|
| void SkXMLWriter::doEnd(Elem* elem)
|
| {
|
| delete elem;
|
| @@ -63,9 +74,7 @@ bool SkXMLWriter::doStart(const char name[], size_t length)
|
| if (firstChild)
|
| fElems[level-1]->fHasChildren = true;
|
| Elem** elem = fElems.push();
|
| - *elem = new Elem;
|
| - (*elem)->fName.set(name, length);
|
| - (*elem)->fHasChildren = 0;
|
| + *elem = new Elem(name, length);
|
| return firstChild;
|
| }
|
|
|
| @@ -212,7 +221,7 @@ SkXMLStreamWriter::~SkXMLStreamWriter()
|
|
|
| void SkXMLStreamWriter::onAddAttributeLen(const char name[], const char value[], size_t length)
|
| {
|
| - SkASSERT(!fElems.top()->fHasChildren);
|
| + SkASSERT(!fElems.top()->fHasChildren && !fElems.top()->fHasText);
|
| fStream.writeText(" ");
|
| fStream.writeText(name);
|
| fStream.writeText("=\"");
|
| @@ -220,18 +229,32 @@ void SkXMLStreamWriter::onAddAttributeLen(const char name[], const char value[],
|
| fStream.writeText("\"");
|
| }
|
|
|
| +void SkXMLStreamWriter::onAddText(const char text[])
|
| +{
|
| + Elem* elem = fElems.top();
|
| +
|
| + if (!elem->fHasChildren && !elem->fHasText) {
|
| + fStream.writeText(">");
|
| + fStream.newline();
|
| + }
|
| +
|
| + tab(fStream, fElems.count() + 1);
|
| + fStream.writeText(text);
|
| + fStream.newline();
|
| +}
|
| +
|
| void SkXMLStreamWriter::onEndElement()
|
| {
|
| Elem* elem = getEnd();
|
| - if (elem->fHasChildren)
|
| + if (elem->fHasChildren || elem->fHasText)
|
| {
|
| tab(fStream, fElems.count());
|
| fStream.writeText("</");
|
| fStream.writeText(elem->fName.c_str());
|
| fStream.writeText(">");
|
| - }
|
| - else
|
| + } else {
|
| fStream.writeText("/>");
|
| + }
|
| fStream.newline();
|
| doEnd(elem);
|
| }
|
| @@ -274,11 +297,16 @@ SkXMLParserWriter::~SkXMLParserWriter()
|
|
|
| void SkXMLParserWriter::onAddAttributeLen(const char name[], const char value[], size_t length)
|
| {
|
| - SkASSERT(fElems.count() == 0 || !fElems.top()->fHasChildren);
|
| + SkASSERT(fElems.count() == 0 || (!fElems.top()->fHasChildren && !fElems.top()->fHasText));
|
| SkString str(value, length);
|
| fParser.addAttribute(name, str.c_str());
|
| }
|
|
|
| +void SkXMLParserWriter::onAddText(const char text[])
|
| +{
|
| + fParser.text(text, SkToInt(strlen(text)));
|
| +}
|
| +
|
| void SkXMLParserWriter::onEndElement()
|
| {
|
| Elem* elem = this->getEnd();
|
|
|