summaryrefslogtreecommitdiff
path: root/include/m_xml.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/m_xml.h')
-rw-r--r--include/m_xml.h389
1 files changed, 194 insertions, 195 deletions
diff --git a/include/m_xml.h b/include/m_xml.h
index 491c4a016c..d09b289cf3 100644
--- a/include/m_xml.h
+++ b/include/m_xml.h
@@ -1,195 +1,194 @@
-/*
-
-Miranda NG: the free IM client for Microsoft* Windows*
-
-Copyright (C) 2012-21 Miranda NG team (https://miranda-ng.org)
-Copyright (c) 2000-08 Miranda ICQ/IM project,
-all portions of this codebase are copyrighted to the people
-listed in contributors.txt.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef M_XML_H__
-#define M_XML_H__
-
-#include <tchar.h>
-#include <m_core.h>
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// new API to replace the old one
-
-#ifdef MIR_CORE_EXPORTS
-#define TINYXML2_EXPORT 1
-#else
-#define TINYXML2_IMPORT 1
-#endif
-
-#include "../src/mir_core/src/tinyxml2.h"
-
-typedef tinyxml2::XMLNode TiXmlNode;
-typedef tinyxml2::XMLText TiXmlText;
-typedef tinyxml2::XMLElement TiXmlElement;
-typedef tinyxml2::XMLDocument TiXmlDocument;
-
-typedef tinyxml2::XMLHandle TiXmlHandle;
-typedef tinyxml2::XMLConstHandle TiXmlConst;
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// safe wrappers
-
-EXTERN_C MIR_CORE_DLL(int) XmlGetChildCount(const TiXmlElement*);
-
-EXTERN_C MIR_CORE_DLL(TiXmlElement*) XmlAddChild(TiXmlElement*, const char *pszName);
-EXTERN_C MIR_CORE_DLL(TiXmlElement*) XmlAddChildA(TiXmlElement*, const char *pszName, const char *ptszValue);
-EXTERN_C MIR_CORE_DLL(TiXmlElement*) XmlAddChildI(TiXmlElement*, const char *pszName, int iValue);
-
-EXTERN_C MIR_CORE_DLL(int) XmlGetChildInt(const TiXmlElement *hXml, const char *key);
-EXTERN_C MIR_CORE_DLL(const char*) XmlGetChildText(const TiXmlElement *hXml, const char *key);
-EXTERN_C MIR_CORE_DLL(const TiXmlElement*) XmlGetChildByTag(const TiXmlElement *hXml, const char *key, const char *attrName, const char *attrValue);
-EXTERN_C MIR_CORE_DLL(const TiXmlElement*) XmlFirstChild(const TiXmlElement *hXml, const char *key = nullptr);
-
-EXTERN_C MIR_CORE_DLL(void) XmlAddAttr(TiXmlElement*, const char *pszName, const char *ptszValue);
-EXTERN_C MIR_CORE_DLL(const char*) XmlGetAttr(const TiXmlElement*, const char *pszName);
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// simple element iterator
-//
-// allows traversing subnodes in a cycle like
-// for (auto *pNode : TiXmlEnum(pRoot)) {
-
-class TiXmlIterator
-{
- const TiXmlElement *m_pCurr;
-
-public:
- TiXmlIterator(const TiXmlElement *pNode) :
- m_pCurr(pNode)
- {
- }
-
- TiXmlIterator& operator=(const TiXmlElement *pNode)
- {
- m_pCurr = pNode;
- return *this;
- }
-
- // Prefix ++ overload
- TiXmlIterator& operator++()
- {
- if (m_pCurr)
- m_pCurr = m_pCurr->NextSiblingElement();
- return *this;
- }
-
- const TiXmlElement* operator*()
- {
- return m_pCurr;
- }
-
- bool operator!=(const TiXmlIterator &iterator)
- {
- return m_pCurr != iterator.m_pCurr;
- }
-};
-
-class TiXmlEnum
-{
- const TiXmlElement *m_pFirst;
-
-public:
- TiXmlEnum(const TiXmlNode *pNode)
- {
- m_pFirst = (pNode) ? pNode->FirstChildElement() : nullptr;
- }
-
- TiXmlIterator begin()
- {
- return TiXmlIterator(m_pFirst);
- }
-
- TiXmlIterator end()
- {
- return TiXmlIterator(nullptr);
- }
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// filtered element iterator
-//
-// allows traversing subnodes of the specified name in a cycle like
-// for (auto *pNode : TiXmlFilter(pRoot, "element")) {
-
-class TiXmlFilterIterator
-{
- const TiXmlElement *m_pCurr;
- const char *m_pszFilter;
-
-public:
- TiXmlFilterIterator(const TiXmlElement *pNode, const char *pszNodeName) :
- m_pszFilter(pszNodeName),
- m_pCurr(pNode)
- {
- }
-
- TiXmlFilterIterator& operator=(const TiXmlElement *pNode)
- {
- m_pCurr = pNode;
- return *this;
- }
-
- // Prefix ++ overload
- TiXmlFilterIterator& operator++()
- {
- if (m_pCurr)
- m_pCurr = m_pCurr->NextSiblingElement(m_pszFilter);
- return *this;
- }
-
- const TiXmlElement* operator*()
- {
- return m_pCurr;
- }
-
- bool operator!=(const TiXmlFilterIterator &iterator)
- {
- return m_pCurr != iterator.m_pCurr;
- }
-};
-
-class TiXmlFilter
-{
- const TiXmlElement *m_pFirst;
- const char *m_pszFilter;
-
-public:
- TiXmlFilter(const TiXmlNode *pNode, const char *pszNodeName) :
- m_pszFilter(pszNodeName)
- {
- m_pFirst = (pNode) ? pNode->FirstChildElement(pszNodeName) : nullptr;
- }
-
- TiXmlFilterIterator begin()
- {
- return TiXmlFilterIterator(m_pFirst, m_pszFilter);
- }
-
- TiXmlFilterIterator end()
- {
- return TiXmlFilterIterator(nullptr, nullptr);
- }
-};
-
-#endif // M_XML_H__
+/*
+
+Miranda NG: the free IM client for Microsoft* Windows*
+
+Copyright (C) 2012-21 Miranda NG team (https://miranda-ng.org)
+Copyright (c) 2000-08 Miranda ICQ/IM project,
+all portions of this codebase are copyrighted to the people
+listed in contributors.txt.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_XML_H__
+#define M_XML_H__
+
+#include <m_core.h>
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// new API to replace the old one
+
+#ifdef MIR_CORE_EXPORTS
+#define TINYXML2_EXPORT 1
+#else
+#define TINYXML2_IMPORT 1
+#endif
+
+#include "../src/mir_core/src/tinyxml2.h"
+
+typedef tinyxml2::XMLNode TiXmlNode;
+typedef tinyxml2::XMLText TiXmlText;
+typedef tinyxml2::XMLElement TiXmlElement;
+typedef tinyxml2::XMLDocument TiXmlDocument;
+
+typedef tinyxml2::XMLHandle TiXmlHandle;
+typedef tinyxml2::XMLConstHandle TiXmlConst;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// safe wrappers
+
+EXTERN_C MIR_CORE_DLL(int) XmlGetChildCount(const TiXmlElement*);
+
+EXTERN_C MIR_CORE_DLL(TiXmlElement*) XmlAddChild(TiXmlElement*, const char *pszName);
+EXTERN_C MIR_CORE_DLL(TiXmlElement*) XmlAddChildA(TiXmlElement*, const char *pszName, const char *ptszValue);
+EXTERN_C MIR_CORE_DLL(TiXmlElement*) XmlAddChildI(TiXmlElement*, const char *pszName, int iValue);
+
+EXTERN_C MIR_CORE_DLL(int) XmlGetChildInt(const TiXmlElement *hXml, const char *key);
+EXTERN_C MIR_CORE_DLL(const char*) XmlGetChildText(const TiXmlElement *hXml, const char *key);
+EXTERN_C MIR_CORE_DLL(const TiXmlElement*) XmlGetChildByTag(const TiXmlElement *hXml, const char *key, const char *attrName, const char *attrValue);
+EXTERN_C MIR_CORE_DLL(const TiXmlElement*) XmlFirstChild(const TiXmlElement *hXml, const char *key = nullptr);
+
+EXTERN_C MIR_CORE_DLL(void) XmlAddAttr(TiXmlElement*, const char *pszName, const char *ptszValue);
+EXTERN_C MIR_CORE_DLL(const char*) XmlGetAttr(const TiXmlElement*, const char *pszName);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// simple element iterator
+//
+// allows traversing subnodes in a cycle like
+// for (auto *pNode : TiXmlEnum(pRoot)) {
+
+class TiXmlIterator
+{
+ const TiXmlElement *m_pCurr;
+
+public:
+ TiXmlIterator(const TiXmlElement *pNode) :
+ m_pCurr(pNode)
+ {
+ }
+
+ TiXmlIterator& operator=(const TiXmlElement *pNode)
+ {
+ m_pCurr = pNode;
+ return *this;
+ }
+
+ // Prefix ++ overload
+ TiXmlIterator& operator++()
+ {
+ if (m_pCurr)
+ m_pCurr = m_pCurr->NextSiblingElement();
+ return *this;
+ }
+
+ const TiXmlElement* operator*()
+ {
+ return m_pCurr;
+ }
+
+ bool operator!=(const TiXmlIterator &iterator)
+ {
+ return m_pCurr != iterator.m_pCurr;
+ }
+};
+
+class TiXmlEnum
+{
+ const TiXmlElement *m_pFirst;
+
+public:
+ TiXmlEnum(const TiXmlNode *pNode)
+ {
+ m_pFirst = (pNode) ? pNode->FirstChildElement() : nullptr;
+ }
+
+ TiXmlIterator begin()
+ {
+ return TiXmlIterator(m_pFirst);
+ }
+
+ TiXmlIterator end()
+ {
+ return TiXmlIterator(nullptr);
+ }
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// filtered element iterator
+//
+// allows traversing subnodes of the specified name in a cycle like
+// for (auto *pNode : TiXmlFilter(pRoot, "element")) {
+
+class TiXmlFilterIterator
+{
+ const TiXmlElement *m_pCurr;
+ const char *m_pszFilter;
+
+public:
+ TiXmlFilterIterator(const TiXmlElement *pNode, const char *pszNodeName) :
+ m_pszFilter(pszNodeName),
+ m_pCurr(pNode)
+ {
+ }
+
+ TiXmlFilterIterator& operator=(const TiXmlElement *pNode)
+ {
+ m_pCurr = pNode;
+ return *this;
+ }
+
+ // Prefix ++ overload
+ TiXmlFilterIterator& operator++()
+ {
+ if (m_pCurr)
+ m_pCurr = m_pCurr->NextSiblingElement(m_pszFilter);
+ return *this;
+ }
+
+ const TiXmlElement* operator*()
+ {
+ return m_pCurr;
+ }
+
+ bool operator!=(const TiXmlFilterIterator &iterator)
+ {
+ return m_pCurr != iterator.m_pCurr;
+ }
+};
+
+class TiXmlFilter
+{
+ const TiXmlElement *m_pFirst;
+ const char *m_pszFilter;
+
+public:
+ TiXmlFilter(const TiXmlNode *pNode, const char *pszNodeName) :
+ m_pszFilter(pszNodeName)
+ {
+ m_pFirst = (pNode) ? pNode->FirstChildElement(pszNodeName) : nullptr;
+ }
+
+ TiXmlFilterIterator begin()
+ {
+ return TiXmlFilterIterator(m_pFirst, m_pszFilter);
+ }
+
+ TiXmlFilterIterator end()
+ {
+ return TiXmlFilterIterator(nullptr, nullptr);
+ }
+};
+
+#endif // M_XML_H__