diff --git a/ASCOfficeOdfFile/src/xml/sax_xmllite.cpp b/ASCOfficeOdfFile/src/xml/sax_xmllite.cpp index 7934a9a58d..90cdf98db8 100644 --- a/ASCOfficeOdfFile/src/xml/sax_xmllite.cpp +++ b/ASCOfficeOdfFile/src/xml/sax_xmllite.cpp @@ -34,7 +34,6 @@ #include "../../../Common/DocxFormat/Source/Base/Nullable.h" #include "../../../DesktopEditor/xml/include/xmlutils.h" -#include "../../../DesktopEditor/xml/src/xmllight_private.h" #include "../../include/cpdoccore/xml/sax.h" @@ -73,7 +72,7 @@ public: virtual NodeType next(int Depth); private: - smart_ptr< XmlUtils::CXmlLiteReader_Private > xml_; + smart_ptr< XmlUtils::CXmlLiteReader > xml_; }; @@ -100,6 +99,7 @@ namespace case XmlUtils::XmlNodeType_DocumentType: return typeDocumentType; case XmlUtils::XmlNodeType_Whitespace: + case XmlUtils::XmlNodeType_SIGNIFICANT_WHITESPACE: return typeWhitespace; case XmlUtils::XmlNodeType_EndElement: return typeEndElement; @@ -113,7 +113,7 @@ namespace saxXmlLiteReader::saxXmlLiteReader(const wchar_t * FileName) { - xml_ = new XmlUtils::CXmlLiteReader_Private(); + xml_ = new XmlUtils::CXmlLiteReader(); xml_->FromFile(FileName); @@ -157,20 +157,14 @@ std::wstring saxXmlLiteReader::namespacePrefix() { if (xml_.IsInit() == false) return _T(""); - xmlChar* pName = xmlTextReaderPrefix(xml_->getNativeReader()); - if (NULL == pName) - return L""; - - std::wstring sTemp = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)pName, (LONG)strlen((const char*)pName)); - free(pName); - return sTemp; + return xml_->GetNamespacePrefix(); } NodeType saxXmlLiteReader::nodeType() { if (xml_.IsInit() == false) return typeNone; - XmlUtils::XmlNodeType nTempType = (XmlUtils::XmlNodeType)xmlTextReaderNodeType(xml_->getNativeReader()); + XmlUtils::XmlNodeType nTempType = xml_->GetNodeType(); return NodeTypeConvert(nTempType); } @@ -214,14 +208,14 @@ bool saxXmlLiteReader::attrDefault() { if (xml_.IsInit() == false) return false; - return (FALSE != xmlTextReaderIsDefault(xml_->getNativeReader())); + return xml_->IsDefaultAttribute(); } NodeType saxXmlLiteReader::next(int Depth) { if (xml_->ReadNextSiblingNode2(Depth)) { - XmlUtils::XmlNodeType nTempType = (XmlUtils::XmlNodeType)xmlTextReaderNodeType(xml_->getNativeReader()); + XmlUtils::XmlNodeType nTempType = xml_->GetNodeType(); return NodeTypeConvert(nTempType); } else diff --git a/DesktopEditor/xml/src/xmllight_private.h b/DesktopEditor/xml/src/xmllight_private.h index cea876e555..eaf553b32e 100644 --- a/DesktopEditor/xml/src/xmllight_private.h +++ b/DesktopEditor/xml/src/xmllight_private.h @@ -32,8 +32,11 @@ #ifndef _BUILD_XMLLIGHT_PRIVATE_CROSSPLATFORM_H_ #define _BUILD_XMLLIGHT_PRIVATE_CROSSPLATFORM_H_ +#include "../../../DesktopEditor/common/File.h" + #include "../libxml2/libxml.h" #include "../libxml2/include/libxml/xmlreader.h" +#include "../include/xmlutils.h" namespace XmlUtils { @@ -208,7 +211,8 @@ namespace XmlUtils if ((XmlNodeType_Element == eNodeType && nCurDepth == nDepth + 1) || ((XmlNodeType_Text == eNodeType || - XmlNodeType_Whitespace == eNodeType) && nCurDepth == nDepth + 1)) + XmlNodeType_Whitespace == eNodeType || + XmlNodeType_SIGNIFICANT_WHITESPACE == eNodeType ) && nCurDepth == nDepth + 1)) return true; else if (XmlNodeType_EndElement == eNodeType && nCurDepth == nDepth) return false; @@ -427,6 +431,25 @@ namespace XmlUtils return 1 == xmlTextReaderIsEmptyElement(reader) ? true : false; } + std::wstring GetNamespacePrefix() + { + xmlChar* pName = xmlTextReaderPrefix(reader); + if (NULL == pName) + return L""; + + std::wstring sTemp = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)pName, (LONG)strlen((const char*)pName)); + free(pName); + return sTemp; + } + XmlNodeType GetNodeType() + { + return (XmlUtils::XmlNodeType)xmlTextReaderNodeType(reader); + } + bool IsDefaultAttribute() + { + return (0 != xmlTextReaderIsDefault(reader)) ? true : false; + } + private: inline std::wstring GetXml(bool bInner) {