|
@@ -1,8 +1,8 @@
|
|
/**
|
|
/**
|
|
- * pugixml parser - version 1.9
|
|
|
|
|
|
+ * pugixml parser - version 1.11
|
|
* --------------------------------------------------------
|
|
* --------------------------------------------------------
|
|
- * Copyright (C) 2006-2018, by Arseny Kapoulkine ([email protected])
|
|
|
|
- * Report bugs and download new versions at http://pugixml.org/
|
|
|
|
|
|
+ * Copyright (C) 2006-2020, by Arseny Kapoulkine ([email protected])
|
|
|
|
+ * Report bugs and download new versions at https://pugixml.org/
|
|
*
|
|
*
|
|
* This library is distributed under the MIT License. See notice at the end
|
|
* This library is distributed under the MIT License. See notice at the end
|
|
* of this file.
|
|
* of this file.
|
|
@@ -12,8 +12,9 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
#ifndef PUGIXML_VERSION
|
|
#ifndef PUGIXML_VERSION
|
|
-// Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons
|
|
|
|
-# define PUGIXML_VERSION 190
|
|
|
|
|
|
+// Define version macro; evaluates to major * 1000 + minor * 10 + patch so that it's safe to use in less-than comparisons
|
|
|
|
+// Note: pugixml used major * 100 + minor * 10 + patch format up until 1.9 (which had version identifier 190); starting from pugixml 1.10, the minor version number is two digits
|
|
|
|
+# define PUGIXML_VERSION 1110
|
|
#endif
|
|
#endif
|
|
|
|
|
|
// Include user configuration file (this can define various configuration macros)
|
|
// Include user configuration file (this can define various configuration macros)
|
|
@@ -110,6 +111,15 @@
|
|
# endif
|
|
# endif
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+// If C++ is 2011 or higher, use 'nullptr'
|
|
|
|
+#ifndef PUGIXML_NULL
|
|
|
|
+# if __cplusplus >= 201103
|
|
|
|
+# define PUGIXML_NULL nullptr
|
|
|
|
+# else
|
|
|
|
+# define PUGIXML_NULL 0
|
|
|
|
+# endif
|
|
|
|
+#endif
|
|
|
|
+
|
|
// Character interface macros
|
|
// Character interface macros
|
|
#ifdef PUGIXML_WCHAR_MODE
|
|
#ifdef PUGIXML_WCHAR_MODE
|
|
# define PUGIXML_TEXT(t) L ## t
|
|
# define PUGIXML_TEXT(t) L ## t
|
|
@@ -252,10 +262,19 @@ namespace pugi
|
|
// Don't output empty element tags, instead writing an explicit start and end tag even if there are no children. This flag is off by default.
|
|
// Don't output empty element tags, instead writing an explicit start and end tag even if there are no children. This flag is off by default.
|
|
const unsigned int format_no_empty_element_tags = 0x80;
|
|
const unsigned int format_no_empty_element_tags = 0x80;
|
|
|
|
|
|
|
|
+ // Skip characters belonging to range [0; 32) instead of "&#xNN;" encoding. This flag is off by default.
|
|
|
|
+ const unsigned int format_skip_control_chars = 0x100;
|
|
|
|
+
|
|
|
|
+ // Use single quotes ' instead of double quotes " for enclosing attribute values. This flag is off by default.
|
|
|
|
+ const unsigned int format_attribute_single_quote = 0x200;
|
|
|
|
+
|
|
// The default set of formatting flags.
|
|
// The default set of formatting flags.
|
|
// Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none.
|
|
// Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none.
|
|
const unsigned int format_default = format_indent;
|
|
const unsigned int format_default = format_indent;
|
|
|
|
|
|
|
|
+ const int default_double_precision = 17;
|
|
|
|
+ const int default_float_precision = 9;
|
|
|
|
+
|
|
// Forward declarations
|
|
// Forward declarations
|
|
struct xml_attribute_struct;
|
|
struct xml_attribute_struct;
|
|
struct xml_node_struct;
|
|
struct xml_node_struct;
|
|
@@ -403,7 +422,9 @@ namespace pugi
|
|
bool set_value(long rhs);
|
|
bool set_value(long rhs);
|
|
bool set_value(unsigned long rhs);
|
|
bool set_value(unsigned long rhs);
|
|
bool set_value(double rhs);
|
|
bool set_value(double rhs);
|
|
|
|
+ bool set_value(double rhs, int precision);
|
|
bool set_value(float rhs);
|
|
bool set_value(float rhs);
|
|
|
|
+ bool set_value(float rhs, int precision);
|
|
bool set_value(bool rhs);
|
|
bool set_value(bool rhs);
|
|
|
|
|
|
#ifdef PUGIXML_HAS_LONG_LONG
|
|
#ifdef PUGIXML_HAS_LONG_LONG
|
|
@@ -569,10 +590,16 @@ namespace pugi
|
|
bool remove_attribute(const xml_attribute& a);
|
|
bool remove_attribute(const xml_attribute& a);
|
|
bool remove_attribute(const char_t* name);
|
|
bool remove_attribute(const char_t* name);
|
|
|
|
|
|
|
|
+ // Remove all attributes
|
|
|
|
+ bool remove_attributes();
|
|
|
|
+
|
|
// Remove specified child
|
|
// Remove specified child
|
|
bool remove_child(const xml_node& n);
|
|
bool remove_child(const xml_node& n);
|
|
bool remove_child(const char_t* name);
|
|
bool remove_child(const char_t* name);
|
|
|
|
|
|
|
|
+ // Remove all children
|
|
|
|
+ bool remove_children();
|
|
|
|
+
|
|
// Parses buffer as an XML document fragment and appends all nodes as children of the current node.
|
|
// Parses buffer as an XML document fragment and appends all nodes as children of the current node.
|
|
// Copies/converts the buffer, so it may be deleted or changed after the function returns.
|
|
// Copies/converts the buffer, so it may be deleted or changed after the function returns.
|
|
// Note: append_buffer allocates memory that has the lifetime of the owning document; removing the appended nodes does not immediately reclaim that memory.
|
|
// Note: append_buffer allocates memory that has the lifetime of the owning document; removing the appended nodes does not immediately reclaim that memory.
|
|
@@ -643,15 +670,15 @@ namespace pugi
|
|
|
|
|
|
#ifndef PUGIXML_NO_XPATH
|
|
#ifndef PUGIXML_NO_XPATH
|
|
// Select single node by evaluating XPath query. Returns first node from the resulting node set.
|
|
// Select single node by evaluating XPath query. Returns first node from the resulting node set.
|
|
- xpath_node select_node(const char_t* query, xpath_variable_set* variables = 0) const;
|
|
|
|
|
|
+ xpath_node select_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const;
|
|
xpath_node select_node(const xpath_query& query) const;
|
|
xpath_node select_node(const xpath_query& query) const;
|
|
|
|
|
|
// Select node set by evaluating XPath query
|
|
// Select node set by evaluating XPath query
|
|
- xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = 0) const;
|
|
|
|
|
|
+ xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const;
|
|
xpath_node_set select_nodes(const xpath_query& query) const;
|
|
xpath_node_set select_nodes(const xpath_query& query) const;
|
|
|
|
|
|
// (deprecated: use select_node instead) Select single node by evaluating XPath query.
|
|
// (deprecated: use select_node instead) Select single node by evaluating XPath query.
|
|
- PUGIXML_DEPRECATED xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = 0) const;
|
|
|
|
|
|
+ PUGIXML_DEPRECATED xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const;
|
|
PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query& query) const;
|
|
PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query& query) const;
|
|
|
|
|
|
#endif
|
|
#endif
|
|
@@ -754,7 +781,9 @@ namespace pugi
|
|
bool set(long rhs);
|
|
bool set(long rhs);
|
|
bool set(unsigned long rhs);
|
|
bool set(unsigned long rhs);
|
|
bool set(double rhs);
|
|
bool set(double rhs);
|
|
|
|
+ bool set(double rhs, int precision);
|
|
bool set(float rhs);
|
|
bool set(float rhs);
|
|
|
|
+ bool set(float rhs, int precision);
|
|
bool set(bool rhs);
|
|
bool set(bool rhs);
|
|
|
|
|
|
#ifdef PUGIXML_HAS_LONG_LONG
|
|
#ifdef PUGIXML_HAS_LONG_LONG
|
|
@@ -1192,7 +1221,7 @@ namespace pugi
|
|
public:
|
|
public:
|
|
// Construct a compiled object from XPath expression.
|
|
// Construct a compiled object from XPath expression.
|
|
// If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors.
|
|
// If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors.
|
|
- explicit xpath_query(const char_t* query, xpath_variable_set* variables = 0);
|
|
|
|
|
|
+ explicit xpath_query(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL);
|
|
|
|
|
|
// Constructor
|
|
// Constructor
|
|
xpath_query();
|
|
xpath_query();
|
|
@@ -1251,11 +1280,12 @@ namespace pugi
|
|
};
|
|
};
|
|
|
|
|
|
#ifndef PUGIXML_NO_EXCEPTIONS
|
|
#ifndef PUGIXML_NO_EXCEPTIONS
|
|
-
|
|
|
|
-#ifdef _MSC_VER
|
|
|
|
-# pragma warning(push)
|
|
|
|
-# pragma warning( disable: 4275 )
|
|
|
|
-#endif
|
|
|
|
|
|
+ #if defined(_MSC_VER)
|
|
|
|
+ // C4275 can be ignored in Visual C++ if you are deriving
|
|
|
|
+ // from a type in the Standard C++ Library
|
|
|
|
+ #pragma warning(push)
|
|
|
|
+ #pragma warning(disable: 4275)
|
|
|
|
+ #endif
|
|
// XPath exception class
|
|
// XPath exception class
|
|
class PUGIXML_CLASS xpath_exception: public std::exception
|
|
class PUGIXML_CLASS xpath_exception: public std::exception
|
|
{
|
|
{
|
|
@@ -1272,10 +1302,11 @@ namespace pugi
|
|
// Get parse result
|
|
// Get parse result
|
|
const xpath_parse_result& result() const;
|
|
const xpath_parse_result& result() const;
|
|
};
|
|
};
|
|
|
|
+ #if defined(_MSC_VER)
|
|
|
|
+ #pragma warning(pop)
|
|
|
|
+ #endif
|
|
#endif
|
|
#endif
|
|
-#ifdef _MSC_VER
|
|
|
|
-# pragma warning(pop)
|
|
|
|
-#endif
|
|
|
|
|
|
+
|
|
// XPath node class (either xml_node or xml_attribute)
|
|
// XPath node class (either xml_node or xml_attribute)
|
|
class PUGIXML_CLASS xpath_node
|
|
class PUGIXML_CLASS xpath_node
|
|
{
|
|
{
|
|
@@ -1379,7 +1410,7 @@ namespace pugi
|
|
private:
|
|
private:
|
|
type_t _type;
|
|
type_t _type;
|
|
|
|
|
|
- xpath_node _storage;
|
|
|
|
|
|
+ xpath_node _storage[1];
|
|
|
|
|
|
xpath_node* _begin;
|
|
xpath_node* _begin;
|
|
xpath_node* _end;
|
|
xpath_node* _end;
|
|
@@ -1443,7 +1474,7 @@ namespace std
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Copyright (c) 2006-2018 Arseny Kapoulkine
|
|
|
|
|
|
+ * Copyright (c) 2006-2020 Arseny Kapoulkine
|
|
*
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person
|
|
* Permission is hereby granted, free of charge, to any person
|
|
* obtaining a copy of this software and associated documentation
|
|
* obtaining a copy of this software and associated documentation
|