Implemment getters for all of mxml_node_t and mxml_index_t fields (STR #118)
Make mxml_node_s and mxml_index_s private (but still in the public header for 2.x).pull/193/head
parent
1a660a57d4
commit
a9012172c1
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,471 @@ |
|||||||
|
/*
|
||||||
|
* "$Id$" |
||||||
|
* |
||||||
|
* Node get functions for Mini-XML, a small XML-like file parsing library. |
||||||
|
* |
||||||
|
* Copyright 2011 by Michael R Sweet. |
||||||
|
* |
||||||
|
* These coded instructions, statements, and computer programs are the |
||||||
|
* property of Michael R Sweet and are protected by Federal copyright |
||||||
|
* law. Distribution and use rights are outlined in the file "COPYING" |
||||||
|
* which should have been included with this file. If this file is |
||||||
|
* missing or damaged, see the license at: |
||||||
|
* |
||||||
|
* http://www.minixml.org/
|
||||||
|
* |
||||||
|
* Contents: |
||||||
|
* |
||||||
|
* mxmlGetCDATA() - Get the value for a CDATA node. |
||||||
|
* mxmlGetCustom() - Get the value for a custom node. |
||||||
|
* mxmlGetElement() - Get the name for an element node. |
||||||
|
* mxmlGetFirstChild() - Get the first child of an element node. |
||||||
|
* mxmlGetInteger() - Get the integer value from the specified node or its |
||||||
|
* first child. |
||||||
|
* mxmlGetLastChild() - Get the last child of an element node. |
||||||
|
* mxmlGetNext() - Get the next node for the current parent. |
||||||
|
* mxmlGetOpaque() - Get an opaque string value for a node or its first |
||||||
|
* child. |
||||||
|
* mxmlGetParent() - Get the parent node. |
||||||
|
* mxmlGetPrevious() - Get the previous node for the current parent. |
||||||
|
* mxmlGetReal() - Get the real value for a node or its first child. |
||||||
|
* mxmlGetText() - Get the text value for a node or its first child. |
||||||
|
* mxmlGetType() - Get the node type. |
||||||
|
* mxmlGetUserData() - Get the user data pointer for a node. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Include necessary headers... |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "config.h" |
||||||
|
#include "mxml.h" |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetCDATA()' - Get the value for a CDATA node. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node is not a CDATA element. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
char * /* O - CDATA value or NULL */ |
||||||
|
mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node || node->type != MXML_ELEMENT || |
||||||
|
strncmp(node->value.element.name, "![CDATA[", 8)) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the text following the CDATA declaration... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->value.element.name + 8); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetCustom()' - Get the value for a custom node. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node (or its first child) is not a custom |
||||||
|
* value node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
void * /* O - Custom value or NULL */ |
||||||
|
mxmlGetCustom(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the integer value... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (node->type == MXML_CUSTOM) |
||||||
|
return (node->value.custom.data); |
||||||
|
else if (node->type == MXML_ELEMENT && |
||||||
|
node->child && |
||||||
|
node->child->type == MXML_CUSTOM) |
||||||
|
return (node->child->value.custom.data); |
||||||
|
else |
||||||
|
return (NULL); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetElement()' - Get the name for an element node. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node is not an element node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
char * /* O - Element name or NULL */ |
||||||
|
mxmlGetElement(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node || node->type != MXML_ELEMENT) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the element name... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->value.element.name); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetFirstChild()' - Get the first child of an element node. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node is not an element node or if the node |
||||||
|
* has no children. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
mxml_node_t * /* O - First child or NULL */ |
||||||
|
mxmlGetFirstChild(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node || node->type != MXML_ELEMENT) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the first child node... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->child); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetInteger()' - Get the integer value from the specified node or its |
||||||
|
* first child. |
||||||
|
* |
||||||
|
* 0 is returned if the node (or its first child) is not an integer value node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
int /* O - Integer value or 0 */ |
||||||
|
mxmlGetInteger(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (0); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the integer value... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (node->type == MXML_INTEGER) |
||||||
|
return (node->value.integer); |
||||||
|
else if (node->type == MXML_ELEMENT && |
||||||
|
node->child && |
||||||
|
node->child->type == MXML_INTEGER) |
||||||
|
return (node->child->value.integer); |
||||||
|
else |
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetLastChild()' - Get the last child of an element node. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node is not an element node or if the node |
||||||
|
* has no children. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
mxml_node_t * /* O - Last child or NULL */ |
||||||
|
mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node || node->type != MXML_ELEMENT) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the node type... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->last_child); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetNext()' - Get the next node for the current parent. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if this is the last child for the current parent. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
mxml_node_t * |
||||||
|
mxmlGetNext(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the node type... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->next); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetOpaque()' - Get an opaque string value for a node or its first child. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node (or its first child) is not an opaque |
||||||
|
* value node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
char * /* O - Opaque string or NULL */ |
||||||
|
mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the integer value... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (node->type == MXML_OPAQUE) |
||||||
|
return (node->value.opaque); |
||||||
|
else if (node->type == MXML_ELEMENT && |
||||||
|
node->child && |
||||||
|
node->child->type == MXML_OPAQUE) |
||||||
|
return (node->child->value.opaque); |
||||||
|
else |
||||||
|
return (NULL); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetParent()' - Get the parent node. |
||||||
|
* |
||||||
|
* @code NULL@ is returned for a root node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
mxml_node_t * /* O - Parent node or NULL */ |
||||||
|
mxmlGetParent(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the node type... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->parent); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetPrevious()' - Get the previous node for the current parent. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if this is the first child for the current parent. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
mxml_node_t * /* O - Previous node or NULL */ |
||||||
|
mxmlGetPrevious(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the node type... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->prev); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetReal()' - Get the real value for a node or its first child. |
||||||
|
* |
||||||
|
* 0.0 is returned if the node (or its first child) is not a real value node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
double /* O - Real value or 0.0 */ |
||||||
|
mxmlGetReal(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (0.0); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the integer value... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (node->type == MXML_REAL) |
||||||
|
return (node->value.real); |
||||||
|
else if (node->type == MXML_ELEMENT && |
||||||
|
node->child && |
||||||
|
node->child->type == MXML_REAL) |
||||||
|
return (node->child->value.real); |
||||||
|
else |
||||||
|
return (0.0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetText()' - Get the text value for a node or its first child. |
||||||
|
* |
||||||
|
* @code NULL@ is returned if the node (or its first child) is not a text node. |
||||||
|
* The "whitespace" argument can be NULL. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
char * /* O - Text string or NULL */ |
||||||
|
mxmlGetText(mxml_node_t *node, /* I - Node to get */ |
||||||
|
int *whitespace) /* O - 1 if string is preceded by whitespace, 0 otherwise */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
{ |
||||||
|
if (whitespace) |
||||||
|
*whitespace = 0; |
||||||
|
|
||||||
|
return (NULL); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the integer value... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (node->type == MXML_TEXT) |
||||||
|
{ |
||||||
|
if (whitespace) |
||||||
|
*whitespace = node->value.text.whitespace; |
||||||
|
|
||||||
|
return (node->value.text.string); |
||||||
|
} |
||||||
|
else if (node->type == MXML_ELEMENT && |
||||||
|
node->child && |
||||||
|
node->child->type == MXML_TEXT) |
||||||
|
{ |
||||||
|
if (whitespace) |
||||||
|
*whitespace = node->child->value.text.whitespace; |
||||||
|
|
||||||
|
return (node->child->value.text.string); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if (whitespace) |
||||||
|
*whitespace = 0; |
||||||
|
|
||||||
|
return (NULL); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetType()' - Get the node type. |
||||||
|
* |
||||||
|
* @code MXML_IGNORE@ is returned if "node" is @code NULL@. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
mxml_type_t /* O - Type of node */ |
||||||
|
mxmlGetType(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (MXML_IGNORE); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the node type... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->type); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'mxmlGetUserData()' - Get the user data pointer for a node. |
||||||
|
* |
||||||
|
* @since Mini-XML 2.7@ |
||||||
|
*/ |
||||||
|
|
||||||
|
void * /* O - User data pointer */ |
||||||
|
mxmlGetUserData(mxml_node_t *node) /* I - Node to get */ |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Range check input... |
||||||
|
*/ |
||||||
|
|
||||||
|
if (!node) |
||||||
|
return (NULL); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the user data pointer... |
||||||
|
*/ |
||||||
|
|
||||||
|
return (node->user_data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* End of "$Id$". |
||||||
|
*/ |
Loading…
Reference in new issue