Module: wine Branch: master Commit: 40388631f8536462ace8708c15f1eb858bf7b14b URL: http://source.winehq.org/git/wine.git/?a=commit;h=40388631f8536462ace8708c15...
Author: Piotr Caban piotr.caban@gmail.com Date: Thu Jul 17 00:41:40 2008 +0200
msxml3: Added ISAXContentHandler_characters event.
---
dlls/msxml3/saxreader.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index 854584f..41c419c 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; pos<len; pos++) + if(*(cur+pos) == '\n') This->lastLine--; + cur--; + } + else + { + for(pos=0; pos<len; pos++) + if(*(cur-pos-1) == '\n') This->lastLine--; + 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;