git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48994
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
\membersection{wxXmlNode::wxXmlNode}\label{wxxmlnodewxxmlnode}
\membersection{wxXmlNode::wxXmlNode}\label{wxxmlnodewxxmlnode}
-\func{}{wxXmlNode}{\param{wxXmlNode* }{parent}, \param{wxXmlNodeType }{type}, \param{const wxString\& }{name}, \param{const wxString\& }{content = wxEmptyString}, \param{wxXmlAttribute* }{attrs = \NULL}, \param{wxXmlNode* }{next = \NULL}}
+\func{}{wxXmlNode}{\param{wxXmlNode* }{parent}, \param{wxXmlNodeType }{type}, \param{const wxString\& }{name}, \param{const wxString\& }{content = wxEmptyString}, \param{wxXmlAttribute* }{attrs = \NULL}, \param{wxXmlNode* }{next = \NULL}, \param{int }{lineNo = -1}}
and its eventual siblings are attached to the node.}
\docparam{next}{If not \NULL, this node and its eventual siblings are attached to
the node.}
and its eventual siblings are attached to the node.}
\docparam{next}{If not \NULL, this node and its eventual siblings are attached to
the node.}
+\docparam{lineNo}{Number of line this node was present at in input file or -1.}
Creates this XML node and eventually insert it into an existing XML tree.
Creates this XML node and eventually insert it into an existing XML tree.
On the other hand, it DOES copy children and attributes.
On the other hand, it DOES copy children and attributes.
-\func{}{wxXmlNode}{\param{wxXmlNodeType }{type}, \param{const wxString\& }{name}, \param{const wxString\& }{content = wxEmptyString}}
+\func{}{wxXmlNode}{\param{wxXmlNodeType }{type}, \param{const wxString\& }{name}, \param{const wxString\& }{content = wxEmptyString}, \param{int }{lineNo = -1}}
A simplified version of the first constructor form, assuming a \NULL parent.
A simplified version of the first constructor form, assuming a \NULL parent.
or the \NULL node (which is the parent of non-linked nodes or the parent of a
\helpref{wxXmlDocument}{wxxmldocument}'s root node).
or the \NULL node (which is the parent of non-linked nodes or the parent of a
\helpref{wxXmlDocument}{wxxmldocument}'s root node).
+\membersection{wxXmlNode::GetLineNumber}\label{wxxmlnodegetlinenumber}
+
+\constfunc{int}{GetLineNumber}{\void}
+
+Returns line number of the node in the input XML file or -1 if it is unknown.
+
\membersection{wxXmlNode::GetNodeContent}\label{wxxmlnodegetnodecontent}
\membersection{wxXmlNode::GetNodeContent}\label{wxxmlnodegetnodecontent}
- : m_attrs(NULL), m_parent(NULL), m_children(NULL), m_next(NULL) {}
+ : m_attrs(NULL), m_parent(NULL), m_children(NULL), m_next(NULL),
+ m_lineNo(-1)
+ {
+ }
+
wxXmlNode(wxXmlNode *parent, wxXmlNodeType type,
const wxString& name, const wxString& content = wxEmptyString,
wxXmlNode(wxXmlNode *parent, wxXmlNodeType type,
const wxString& name, const wxString& content = wxEmptyString,
- wxXmlAttribute *attrs = NULL, wxXmlNode *next = NULL);
+ wxXmlAttribute *attrs = NULL, wxXmlNode *next = NULL,
+ int lineNo = -1);
+
virtual ~wxXmlNode();
// copy ctor & operator=. Note that this does NOT copy syblings
virtual ~wxXmlNode();
// copy ctor & operator=. Note that this does NOT copy syblings
// user-friendly creation:
wxXmlNode(wxXmlNodeType type, const wxString& name,
// user-friendly creation:
wxXmlNode(wxXmlNodeType type, const wxString& name,
- const wxString& content = wxEmptyString);
+ const wxString& content = wxEmptyString,
+ int lineNo = -1);
virtual void AddChild(wxXmlNode *child);
virtual bool InsertChild(wxXmlNode *child, wxXmlNode *before_node);
virtual bool RemoveChild(wxXmlNode *child);
virtual void AddChild(wxXmlNode *child);
virtual bool InsertChild(wxXmlNode *child, wxXmlNode *before_node);
virtual bool RemoveChild(wxXmlNode *child);
const wxString& defaultVal) const;
bool HasAttribute(const wxString& attrName) const;
const wxString& defaultVal) const;
bool HasAttribute(const wxString& attrName) const;
+ int GetLineNumber() const { return m_lineNo; }
+
void SetType(wxXmlNodeType type) { m_type = type; }
void SetName(const wxString& name) { m_name = name; }
void SetContent(const wxString& con) { m_content = con; }
void SetType(wxXmlNodeType type) { m_type = type; }
void SetName(const wxString& name) { m_name = name; }
void SetContent(const wxString& con) { m_content = con; }
wxString m_content;
wxXmlAttribute *m_attrs;
wxXmlNode *m_parent, *m_children, *m_next;
wxString m_content;
wxXmlAttribute *m_attrs;
wxXmlNode *m_parent, *m_children, *m_next;
+ int m_lineNo; // line number in original file, or -1
void DoCopy(const wxXmlNode& node);
};
void DoCopy(const wxXmlNode& node);
};
wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
const wxString& name, const wxString& content,
wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
const wxString& name, const wxString& content,
- wxXmlAttribute *attrs, wxXmlNode *next)
+ wxXmlAttribute *attrs, wxXmlNode *next, int lineNo)
: m_type(type), m_name(name), m_content(content),
m_attrs(attrs), m_parent(parent),
: m_type(type), m_name(name), m_content(content),
m_attrs(attrs), m_parent(parent),
- m_children(NULL), m_next(next)
+ m_children(NULL), m_next(next),
+ m_lineNo(lineNo)
}
wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
}
wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
- const wxString& content)
+ const wxString& content,
+ int lineNo)
: m_type(type), m_name(name), m_content(content),
m_attrs(NULL), m_parent(NULL),
: m_type(type), m_name(name), m_content(content),
m_attrs(NULL), m_parent(NULL),
- m_children(NULL), m_next(NULL)
+ m_children(NULL), m_next(NULL),
+ m_lineNo(lineNo)
{}
wxXmlNode::wxXmlNode(const wxXmlNode& node)
{}
wxXmlNode::wxXmlNode(const wxXmlNode& node)
m_type = node.m_type;
m_name = node.m_name;
m_content = node.m_content;
m_type = node.m_type;
m_name = node.m_name;
m_content = node.m_content;
+ m_lineNo = node.m_lineNo;
m_children = NULL;
wxXmlNode *n = node.m_children;
m_children = NULL;
wxXmlNode *n = node.m_children;
struct wxXmlParsingContext
{
struct wxXmlParsingContext
{
wxMBConv *conv;
wxXmlNode *root;
wxXmlNode *node;
wxMBConv *conv;
wxXmlNode *root;
wxXmlNode *node;
static void StartElementHnd(void *userData, const char *name, const char **atts)
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
static void StartElementHnd(void *userData, const char *name, const char **atts)
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
- wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, CharToString(ctx->conv, name));
+ wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE,
+ CharToString(ctx->conv, name),
+ wxEmptyString,
+ XML_GetCurrentLineNumber(ctx->parser));
while (*a)
{
node->AddAttribute(CharToString(ctx->conv, a[0]), CharToString(ctx->conv, a[1]));
while (*a)
{
node->AddAttribute(CharToString(ctx->conv, a[0]), CharToString(ctx->conv, a[1]));
- ctx->lastAsText = new wxXmlNode(wxXML_TEXT_NODE, wxT("text"), str);
+ ctx->lastAsText =
+ new wxXmlNode(wxXML_TEXT_NODE, wxT("text"), str,
+ XML_GetCurrentLineNumber(ctx->parser));
ctx->node->AddChild(ctx->lastAsText);
}
}
ctx->node->AddChild(ctx->lastAsText);
}
}
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
{
wxXmlParsingContext *ctx = (wxXmlParsingContext*)userData;
- ctx->lastAsText = new wxXmlNode(wxXML_CDATA_SECTION_NODE, wxT("cdata"),wxT(""));
+ ctx->lastAsText =
+ new wxXmlNode(wxXML_CDATA_SECTION_NODE, wxT("cdata"), wxT(""),
+ XML_GetCurrentLineNumber(ctx->parser));
ctx->node->AddChild(ctx->lastAsText);
}
ctx->node->AddChild(ctx->lastAsText);
}
// VS: ctx->node == NULL happens if there is a comment before
// the root element (e.g. wxDesigner's output). We ignore such
// comments, no big deal...
// VS: ctx->node == NULL happens if there is a comment before
// the root element (e.g. wxDesigner's output). We ignore such
// comments, no big deal...
- ctx->node->AddChild(new wxXmlNode(wxXML_COMMENT_NODE,
- wxT("comment"), CharToString(ctx->conv, data)));
+ ctx->node->AddChild(
+ new wxXmlNode(wxXML_COMMENT_NODE,
+ wxT("comment"), CharToString(ctx->conv, data),
+ XML_GetCurrentLineNumber(ctx->parser)));
}
ctx->lastAsText = NULL;
}
}
ctx->lastAsText = NULL;
}
ctx.conv = new wxCSConv(encoding);
#endif
ctx.removeWhiteOnlyNodes = (flags & wxXMLDOC_KEEP_WHITESPACE_NODES) == 0;
ctx.conv = new wxCSConv(encoding);
#endif
ctx.removeWhiteOnlyNodes = (flags & wxXMLDOC_KEEP_WHITESPACE_NODES) == 0;
XML_SetUserData(parser, (void*)&ctx);
XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);
XML_SetUserData(parser, (void*)&ctx);
XML_SetElementHandler(parser, StartElementHnd, EndElementHnd);