2
+++ sc/source/filter/ecma/parsebase.cxx
6
+#include <com/sun/star/xml/sax/XParser.hpp>
7
+#include <com/sun/star/xml/sax/InputSource.hpp>
8
+#include <com/sun/star/xml/sax/SAXParseException.hpp>
9
+#include <com/sun/star/embed/ElementModes.hpp>
10
+#include <com/sun/star/embed/XStorage.hpp>
11
+#include <parsebase.hxx>
12
+#include <unotools/streamwrap.hxx>
14
+using namespace com::sun::star;
16
+class ScPathRefHolder
18
+ std::list< uno::Reference<embed::XStorage> > m_aUgly;
19
+ uno::Reference<io::XStream> m_xRef;
21
+ ScPathRefHolder(uno::Reference<embed::XStorage> xStorage,
22
+ rtl::OUString aPath, long nOpenMode)
26
+ uno::Reference<io::XStream> xStream;
27
+ if (aPath[0] == sal_Unicode('/'))
31
+ m_aUgly.push_back (xStorage);
32
+ aTok = aPath.getToken (0, sal_Unicode('/'), nIdx);
33
+// fprintf (stderr, "Tok '%s' (%d)\n",
34
+// rtl::OUStringToOString (aTok, RTL_TEXTENCODING_UTF8).getStr(),
37
+ xStorage = xStorage->openStorageElement (aTok, nOpenMode);
39
+ m_xRef = xStorage->openStreamElement (aTok, nOpenMode);
43
+ uno::Reference<io::XStream> get()
49
+ScECMAParseBase::~ScECMAParseBase()
56
+ScECMAParseBase::doParse(const uno::Reference<lang::XMultiServiceFactory> &xServiceFactory,
57
+ const uno::Reference<embed::XStorage> &xStorage,
58
+ const rtl::OUString &rStreamPath)
61
+ uno::Reference<xml::sax::XParser> xParser (
62
+ xServiceFactory->createInstance(
63
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.sax.Parser" )) ),
68
+ xParser->setDocumentHandler (this);
70
+ xml::sax::InputSource aParserInput;
72
+ m_pPath = new ScPathRefHolder(xStorage, rStreamPath,
73
+ embed::ElementModes::READ);
75
+ uno::Reference<io::XStream> xDocStream = m_pPath->get();
76
+ if (!xDocStream.is())
77
+ fprintf (stderr, "Foo\n");
79
+ aParserInput.aInputStream = xDocStream->getInputStream();
81
+ aParserInput.sSystemId = rtl::OUString(); // hmm ?
85
+ fprintf (stderr, "Do Parse\n");
86
+ xParser->parseStream( aParserInput );
88
+ catch( xml::sax::SAXParseException& r )
90
+ fprintf (stderr, "SAX parse exception '%s'\n",
91
+ rtl::OUStringToOString (r.Message, RTL_TEXTENCODING_UTF8).getStr());
94
+ catch( packages::WrongPasswordException& )
97
+ catch( packages::zip::ZipIOException& )
100
+ catch( uno::Exception& )
108
+ScECMAParseBase::startElement(const ::rtl::OUString& aName,
109
+ const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs)
110
+ throw( css::xml::sax::SAXException, css::uno::RuntimeException )
112
+ fprintf (stderr, "startElement '%s'\n", rtl::OUStringToOString(aName, RTL_TEXTENCODING_UTF8).getStr());