From 40388631f8536462ace8708c15f1eb858bf7b14b Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 17 Jul 2008 00:41:40 +0200 Subject: [PATCH] msxml3: Added ISAXContentHandler_characters event. --- dlls/msxml3/saxreader.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 854584feed3..41c419c2972 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -202,6 +202,50 @@ static void libxmlEndElementNS( } } +static void libxmlCharacters( + void *ctx, + const xmlChar *ch, + int len) +{ + BSTR Chars; + saxlocator *This = ctx; + const xmlChar *cur; + int pos; + HRESULT hr; + + This->lastColumn = 1; + This->lastLine = xmlSAX2GetLineNumber(This->pParserCtxt); + + cur = This->pParserCtxt->input->cur; + if(*cur != '<') + { + for(pos=0; poslastLine--; + cur--; + } + else + { + for(pos=0; poslastLine--; + cur = cur-len-1; + } + for(; *cur!='\n' && cur!=This->pParserCtxt->input->base; cur--) + This->lastColumn++; + + if(This->saxreader->contentHandler) + { + Chars = bstr_from_xmlChar(ch); + hr = ISAXContentHandler_characters(This->saxreader->contentHandler, Chars, len); + SysFreeString(Chars); + + if(FAILED(hr)) + { + xmlStopParser(This->pParserCtxt); + This->ret = hr; + } + } +} + /*** ISAXLocator interface ***/ /*** IUnknown methods ***/ static HRESULT WINAPI isaxlocator_QueryInterface(ISAXLocator* iface, REFIID riid, void **ppvObject) @@ -1004,6 +1048,7 @@ HRESULT SAXXMLReader_create(IUnknown *pUnkOuter, LPVOID *ppObj) reader->sax.endDocument = libxmlEndDocument; reader->sax.startElementNs = libxmlStartElementNS; reader->sax.endElementNs = libxmlEndElementNS; + reader->sax.characters = libxmlCharacters; *ppObj = &reader->lpVtbl;