msxml3: Added ISAXContentHandler_characters event.

This commit is contained in:
Piotr Caban 2008-07-17 00:41:40 +02:00 committed by Alexandre Julliard
parent 669326344f
commit 40388631f8
1 changed files with 45 additions and 0 deletions

View File

@ -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;