msxml3: Added ISAXContentHandler_characters event.
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 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 @@
reader->sax.endDocument = libxmlEndDocument;
reader->sax.startElementNs = libxmlStartElementNS;
reader->sax.endElementNs = libxmlEndElementNS;
+ reader->sax.characters = libxmlCharacters;
*ppObj = &reader->lpVtbl;