xref: /AOO41X/main/sax/source/tools/fshelper.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir #include <sax/fshelper.hxx>
2*cdf0e10cSrcweir #include "fastserializer.hxx"
3*cdf0e10cSrcweir #include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
4*cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
5*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
6*cdf0e10cSrcweir 
7*cdf0e10cSrcweir using namespace ::com::sun::star;
8*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
9*cdf0e10cSrcweir 
10*cdf0e10cSrcweir namespace sax_fastparser {
11*cdf0e10cSrcweir 
12*cdf0e10cSrcweir FastSerializerHelper::FastSerializerHelper(const Reference< io::XOutputStream >& xOutputStream ) :
13*cdf0e10cSrcweir 	mpSerializer(new FastSaxSerializer())
14*cdf0e10cSrcweir {
15*cdf0e10cSrcweir     Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext(), UNO_SET_THROW );
16*cdf0e10cSrcweir     Reference< lang::XMultiComponentFactory > xFactory( xContext->getServiceManager(), UNO_SET_THROW );
17*cdf0e10cSrcweir     mxTokenHandler.set( xFactory->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.sax.FastTokenHandler") ), xContext ), UNO_QUERY_THROW );
18*cdf0e10cSrcweir 
19*cdf0e10cSrcweir     mpSerializer->setFastTokenHandler( mxTokenHandler );
20*cdf0e10cSrcweir     mpSerializer->setOutputStream( xOutputStream );
21*cdf0e10cSrcweir 	mpSerializer->startDocument();
22*cdf0e10cSrcweir }
23*cdf0e10cSrcweir 
24*cdf0e10cSrcweir FastSerializerHelper::~FastSerializerHelper()
25*cdf0e10cSrcweir {
26*cdf0e10cSrcweir 	mpSerializer->endDocument();
27*cdf0e10cSrcweir 	delete mpSerializer;
28*cdf0e10cSrcweir }
29*cdf0e10cSrcweir 
30*cdf0e10cSrcweir void FastSerializerHelper::startElement(const char* elementName, ...)
31*cdf0e10cSrcweir {
32*cdf0e10cSrcweir 	FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler );
33*cdf0e10cSrcweir 	va_list args;
34*cdf0e10cSrcweir 	va_start(args, elementName);
35*cdf0e10cSrcweir 	while (true)
36*cdf0e10cSrcweir 	{
37*cdf0e10cSrcweir 		const char* pName = va_arg(args, const char*);
38*cdf0e10cSrcweir 		if (!pName)
39*cdf0e10cSrcweir 			break;
40*cdf0e10cSrcweir 		const char* pValue = va_arg(args, const char*);
41*cdf0e10cSrcweir 		if (pValue)
42*cdf0e10cSrcweir 			pAttrList->addUnknown(pName, pValue);
43*cdf0e10cSrcweir 	}
44*cdf0e10cSrcweir 	va_end(args);
45*cdf0e10cSrcweir 	const com::sun::star::uno::Reference<com::sun::star::xml::sax::XFastAttributeList> xAttrList(pAttrList);
46*cdf0e10cSrcweir 	mpSerializer->startUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList);
47*cdf0e10cSrcweir }
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir void FastSerializerHelper::singleElement(const char* elementName, ...)
50*cdf0e10cSrcweir {
51*cdf0e10cSrcweir 	FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler );
52*cdf0e10cSrcweir 	va_list args;
53*cdf0e10cSrcweir 	va_start(args, elementName);
54*cdf0e10cSrcweir 	while (true)
55*cdf0e10cSrcweir 	{
56*cdf0e10cSrcweir 		const char* pName = va_arg(args, const char*);
57*cdf0e10cSrcweir 		if (!pName)
58*cdf0e10cSrcweir 			break;
59*cdf0e10cSrcweir 		const char* pValue = va_arg(args, const char*);
60*cdf0e10cSrcweir 		if (pValue)
61*cdf0e10cSrcweir 			pAttrList->addUnknown(pName, pValue);
62*cdf0e10cSrcweir 	}
63*cdf0e10cSrcweir 	va_end(args);
64*cdf0e10cSrcweir 	const com::sun::star::uno::Reference<com::sun::star::xml::sax::XFastAttributeList> xAttrList(pAttrList);
65*cdf0e10cSrcweir 	mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList);
66*cdf0e10cSrcweir }
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir void FastSerializerHelper::endElement(const char* elementName)
69*cdf0e10cSrcweir {
70*cdf0e10cSrcweir 	mpSerializer->endUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName));
71*cdf0e10cSrcweir }
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir void FastSerializerHelper::startElementV(sal_Int32 elementTokenId, va_list args)
74*cdf0e10cSrcweir {
75*cdf0e10cSrcweir 	FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler );
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir 	while (true)
78*cdf0e10cSrcweir 	{
79*cdf0e10cSrcweir 		sal_Int32 nName = va_arg(args, sal_Int32);
80*cdf0e10cSrcweir 		if (nName == FSEND)
81*cdf0e10cSrcweir 			break;
82*cdf0e10cSrcweir 		const char* pValue = va_arg(args, const char*);
83*cdf0e10cSrcweir 		if (pValue)
84*cdf0e10cSrcweir 			pAttrList->add(nName, pValue);
85*cdf0e10cSrcweir 	}
86*cdf0e10cSrcweir 
87*cdf0e10cSrcweir 	const com::sun::star::uno::Reference<com::sun::star::xml::sax::XFastAttributeList> xAttrList(pAttrList);
88*cdf0e10cSrcweir 	mpSerializer->startFastElement(elementTokenId, xAttrList);
89*cdf0e10cSrcweir }
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir void FastSerializerHelper::singleElementV(sal_Int32 elementTokenId, va_list args)
92*cdf0e10cSrcweir {
93*cdf0e10cSrcweir 	FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler );
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir 	while (true)
96*cdf0e10cSrcweir 	{
97*cdf0e10cSrcweir 		sal_Int32 nName = va_arg(args, sal_Int32);
98*cdf0e10cSrcweir 		if (nName == FSEND)
99*cdf0e10cSrcweir 			break;
100*cdf0e10cSrcweir 		const char* pValue = va_arg(args, const char*);
101*cdf0e10cSrcweir 		if 	(pValue)
102*cdf0e10cSrcweir 			pAttrList->add(nName, pValue);
103*cdf0e10cSrcweir 	}
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir 	const com::sun::star::uno::Reference<com::sun::star::xml::sax::XFastAttributeList> xAttrList(pAttrList);
106*cdf0e10cSrcweir 	mpSerializer->singleFastElement(elementTokenId, xAttrList);
107*cdf0e10cSrcweir }
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir void FastSerializerHelper::endElement(sal_Int32 elementTokenId)
110*cdf0e10cSrcweir {
111*cdf0e10cSrcweir 	mpSerializer->endFastElement(elementTokenId);
112*cdf0e10cSrcweir }
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir void FastSerializerHelper::startElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
115*cdf0e10cSrcweir {
116*cdf0e10cSrcweir 	mpSerializer->startFastElement(elementTokenId, xAttrList);
117*cdf0e10cSrcweir }
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir void FastSerializerHelper::singleElement(const char* elementName, XFastAttributeListRef xAttrList)
121*cdf0e10cSrcweir {
122*cdf0e10cSrcweir 	mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList);
123*cdf0e10cSrcweir }
124*cdf0e10cSrcweir 
125*cdf0e10cSrcweir void FastSerializerHelper::singleElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList)
126*cdf0e10cSrcweir {
127*cdf0e10cSrcweir 	mpSerializer->singleFastElement(elementTokenId, xAttrList);
128*cdf0e10cSrcweir }
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::write(const char* value)
131*cdf0e10cSrcweir {
132*cdf0e10cSrcweir 	return write(rtl::OUString::createFromAscii(value));
133*cdf0e10cSrcweir }
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::write(const rtl::OUString& value)
136*cdf0e10cSrcweir {
137*cdf0e10cSrcweir 	mpSerializer->characters(value);
138*cdf0e10cSrcweir 	return this;
139*cdf0e10cSrcweir }
140*cdf0e10cSrcweir 
141*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::write(sal_Int32 value)
142*cdf0e10cSrcweir {
143*cdf0e10cSrcweir 	return write(::rtl::OUString::valueOf(value));
144*cdf0e10cSrcweir }
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::write(sal_Int64 value)
147*cdf0e10cSrcweir {
148*cdf0e10cSrcweir 	return write(::rtl::OUString::valueOf(value));
149*cdf0e10cSrcweir }
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::write(float value)
152*cdf0e10cSrcweir {
153*cdf0e10cSrcweir 	return write(::rtl::OUString::valueOf(value));
154*cdf0e10cSrcweir }
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::write(double value)
157*cdf0e10cSrcweir {
158*cdf0e10cSrcweir 	return write(::rtl::OUString::valueOf(value));
159*cdf0e10cSrcweir }
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::writeEscaped(const char* value)
162*cdf0e10cSrcweir {
163*cdf0e10cSrcweir 	return writeEscaped(::rtl::OUString::createFromAscii(value));
164*cdf0e10cSrcweir }
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::writeEscaped(const ::rtl::OUString& value)
167*cdf0e10cSrcweir {
168*cdf0e10cSrcweir 	return write(FastSaxSerializer::escapeXml(value));
169*cdf0e10cSrcweir }
170*cdf0e10cSrcweir 
171*cdf0e10cSrcweir FastSerializerHelper* FastSerializerHelper::writeId(sal_Int32 tokenId)
172*cdf0e10cSrcweir {
173*cdf0e10cSrcweir 	mpSerializer->writeId(tokenId);
174*cdf0e10cSrcweir 	return this;
175*cdf0e10cSrcweir }
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > FastSerializerHelper::getOutputStream()
178*cdf0e10cSrcweir {
179*cdf0e10cSrcweir 	return mpSerializer->getOutputStream();
180*cdf0e10cSrcweir }
181*cdf0e10cSrcweir 
182*cdf0e10cSrcweir void FastSerializerHelper::mark()
183*cdf0e10cSrcweir {
184*cdf0e10cSrcweir     mpSerializer->mark();
185*cdf0e10cSrcweir }
186*cdf0e10cSrcweir 
187*cdf0e10cSrcweir void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType )
188*cdf0e10cSrcweir {
189*cdf0e10cSrcweir     mpSerializer->mergeTopMarks( eMergeType );
190*cdf0e10cSrcweir }
191*cdf0e10cSrcweir 
192*cdf0e10cSrcweir FastAttributeList * FastSerializerHelper::createAttrList()
193*cdf0e10cSrcweir {
194*cdf0e10cSrcweir 	return new FastAttributeList( mxTokenHandler );
195*cdf0e10cSrcweir }
196*cdf0e10cSrcweir 
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir }
199