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