summaryrefslogtreecommitdiff
path: root/sax/source/tools/fastserializer.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sax/source/tools/fastserializer.cxx')
-rw-r--r--sax/source/tools/fastserializer.cxx38
1 files changed, 36 insertions, 2 deletions
diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx
index 87c317c86dc5..6d46cdaa54d3 100644
--- a/sax/source/tools/fastserializer.cxx
+++ b/sax/source/tools/fastserializer.cxx
@@ -158,7 +158,10 @@ namespace sax_fastparser {
writeBytes(sOpeningBracket, N_CHARS(sOpeningBracket));
writeId(Element);
- writeFastAttributeList(pAttrList);
+ if (pAttrList)
+ writeFastAttributeList(pAttrList);
+ else
+ writeTokenValueList();
writeBytes(sClosingBracket, N_CHARS(sClosingBracket));
}
@@ -187,7 +190,10 @@ namespace sax_fastparser {
writeBytes(sOpeningBracket, N_CHARS(sOpeningBracket));
writeId(Element);
- writeFastAttributeList(pAttrList);
+ if (pAttrList)
+ writeFastAttributeList(pAttrList);
+ else
+ writeTokenValueList();
writeBytes(sSlashAndClosingBracket, N_CHARS(sSlashAndClosingBracket));
}
@@ -207,6 +213,34 @@ namespace sax_fastparser {
mxFastTokenHandler = xFastTokenHandler;
}
+ void FastSaxSerializer::writeTokenValueList()
+ {
+#ifdef DBG_UTIL
+ ::std::set<OString> DebugAttributes;
+#endif
+ for (size_t j = 0; j < maTokenValues.size(); j++)
+ {
+ writeBytes(sSpace, N_CHARS(sSpace));
+
+ sal_Int32 nToken = maTokenValues[j].nToken;
+ writeId(nToken);
+
+#ifdef DBG_UTIL
+ // Well-formedness constraint: Unique Att Spec
+ OString const nameId(getId(nToken));
+ assert(DebugAttributes.find(nameId) == DebugAttributes.end());
+ DebugAttributes.insert(nameId);
+#endif
+
+ writeBytes(sEqualSignAndQuote, N_CHARS(sEqualSignAndQuote));
+
+ write(maTokenValues[j].pValue, 0, true);
+
+ writeBytes(sQuote, N_CHARS(sQuote));
+ }
+ maTokenValues.clear();
+ }
+
void FastSaxSerializer::writeFastAttributeList( FastAttributeList* pAttrList )
{
#ifdef DBG_UTIL