xref: /trunk/main/sax/source/tools/fshelper.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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