mirror of
https://github.com/jezhiggins/arabica
synced 2025-01-17 18:12:04 +01:00
SAXcharacters needs to close cdata sections
This commit is contained in:
parent
824e8abc95
commit
8f8db494ba
2 changed files with 19 additions and 1 deletions
|
@ -48,6 +48,7 @@ class libxml2_base
|
|||
virtual void SAXendDocument() = 0;
|
||||
virtual void SAXlocator(xmlSAXLocatorPtr locator) = 0;
|
||||
virtual void SAXcharacters(const xmlChar* ch, int len) = 0;
|
||||
virtual void SAXcdata(const xmlChar* ch, int len) = 0;
|
||||
virtual void SAXignorableWhitespace(const xmlChar* ch, int len) = 0;
|
||||
virtual void SAXwarning(const std::string& warning) = 0;
|
||||
virtual void SAXerror(const std::string& error) = 0;
|
||||
|
@ -194,6 +195,7 @@ class libxml2_wrapper :
|
|||
virtual void SAXendDocument();
|
||||
virtual void SAXlocator(xmlSAXLocatorPtr locator) { locator_ = locator; }
|
||||
virtual void SAXcharacters(const xmlChar* ch, int len);
|
||||
virtual void SAXcdata(const xmlChar* ch, int len);
|
||||
virtual void SAXignorableWhitespace(const xmlChar* ch, int len);
|
||||
virtual void SAXwarning(const std::string& warning);
|
||||
virtual void SAXerror(const std::string& error);
|
||||
|
@ -505,10 +507,20 @@ void libxml2_wrapper<string_type, T0, T1>::SAXendDocument()
|
|||
template<class string_type, class T0, class T1>
|
||||
void libxml2_wrapper<string_type, T0, T1>::SAXcharacters(const xmlChar* ch, int len)
|
||||
{
|
||||
if(isInCData_)
|
||||
SAXendCdataSection();
|
||||
|
||||
if(contentHandler_)
|
||||
contentHandler_->characters(string_adaptor::construct_from_utf8(reinterpret_cast<const char*>(ch), len));
|
||||
} // SAXcharacters
|
||||
|
||||
template<class string_type, class T0, class T1>
|
||||
void libxml2_wrapper<string_type, T0, T1>::SAXcdata(const xmlChar* ch, int len)
|
||||
{
|
||||
if(contentHandler_)
|
||||
contentHandler_->characters(string_adaptor::construct_from_utf8(reinterpret_cast<const char*>(ch), len));
|
||||
} // SAXcdata
|
||||
|
||||
template<class string_type, class T0, class T1>
|
||||
void libxml2_wrapper<string_type, T0, T1>::SAXignorableWhitespace(const xmlChar* ch, int len)
|
||||
{
|
||||
|
@ -561,6 +573,9 @@ void libxml2_wrapper<string_type, T0, T1>::SAXcomment(const xmlChar* comment)
|
|||
template<class string_type, class T0, class T1>
|
||||
void libxml2_wrapper<string_type, T0, T1>::SAXstartCdataSection()
|
||||
{
|
||||
if (isInCData_)
|
||||
return;
|
||||
|
||||
isInCData_ = true;
|
||||
if(lexicalHandler_)
|
||||
lexicalHandler_->startCDATA();
|
||||
|
@ -569,6 +584,9 @@ void libxml2_wrapper<string_type, T0, T1>::SAXstartCdataSection()
|
|||
template<class string_type, class T0, class T1>
|
||||
void libxml2_wrapper<string_type, T0, T1>::SAXendCdataSection()
|
||||
{
|
||||
if (!isInCData_)
|
||||
return;
|
||||
|
||||
if(lexicalHandler_)
|
||||
lexicalHandler_->endCDATA();
|
||||
isInCData_ = false;
|
||||
|
|
|
@ -62,7 +62,7 @@ void lwit_cdata(void* user_data, const xmlChar* ch, int len)
|
|||
{
|
||||
libxml2_base* p = reinterpret_cast<libxml2_base*>(user_data);
|
||||
p->SAXstartCdataSection();
|
||||
p->SAXcharacters(ch, len);
|
||||
p->SAXcdata(ch, len);
|
||||
// everyone else will call endCData if we are in cdata
|
||||
// p->SAXendCdataSection();
|
||||
} // lwit_cdata
|
||||
|
|
Loading…
Reference in a new issue