/// <summary>
/// Parse the specified bulletNodeElement.
/// Read all the data from the xml node into this dude.
/// </summary>
/// <param name="bulletNodeElement">Bullet node element.</param>
public bool Parse(XmlNode bulletNodeElement, BulletMLNode parentNode)
{
Debug.Assert(null != bulletNodeElement);
//grab the parent node
Parent = parentNode;
//get the node type
Name = BulletMLNode.StringToName(bulletNodeElement.Name);
//Parse all our attributes
XmlNamedNodeMap mapAttributes = bulletNodeElement.Attributes;
for (int i = 0; i < mapAttributes.Count; i++)
{
string strName = mapAttributes.Item(i).Name;
string strValue = mapAttributes.Item(i).Value;
if ("type" == strName)
{
//skip the type attribute in top level nodes
if (ENodeName.bulletml == Name)
{
continue;
}
//get the bullet node type
NodeType = BulletMLNode.StringToType(strValue);
}
else if ("label" == strName)
{
//label is just a text value
Label = strValue;
}
}
//parse all the child nodes
if (bulletNodeElement.HasChildNodes)
{
for (XmlNode childNode = bulletNodeElement.FirstChild;
null != childNode;
childNode = childNode.NextSibling)
{
//if the child node is a text node, parse it into this dude
if (XmlNodeType.Text == childNode.NodeType)
{
//Get the text of the child xml node, but store it in THIS bullet node
NodeEquation.Parse(childNode.Value);
continue;
}
//create a new node
BulletMLNode childBulletNode = new BulletMLNode();
//read in the node
if (!childBulletNode.Parse(childNode, this))
{
return(false);
}
//store the node
ChildNodes.Add(childBulletNode);
}
}
return(true);
}