Commit 3fb1b28b authored by Tebjan Halm's avatar Tebjan Halm
Browse files

Merge pull request #50 from messani/master

Parsing documents from inkscape
parents 31a24ea2 e95bbca0
......@@ -215,16 +215,12 @@ namespace Svg
element = svgDocument;
}
if (element == null)
{
continue;
}
// Add to the parents children
if (elementStack.Count > 0)
{
parent = elementStack.Peek();
parent.Children.Add(element);
if (parent != null && element != null)
parent.Children.Add(element);
}
// Push element into stack
......@@ -236,11 +232,17 @@ namespace Svg
goto case XmlNodeType.EndElement;
}
if (element == null)
{
continue;
}
break;
case XmlNodeType.EndElement:
// Skip if no element was created and is not the closing tag for the last
// known element
if (element == null && reader.LocalName != elementStack.Peek().ElementName)
SvgElement topElement = elementStack.Peek();
if (element == null && (topElement != null && reader.LocalName != topElement.ElementName))
{
continue;
}
......@@ -249,7 +251,8 @@ namespace Svg
if (value.Length > 0)
{
element.Content = value.ToString();
if (element != null)
element.Content = value.ToString();
// Reset content value for new element
value = new StringBuilder();
}
......
......@@ -14,6 +14,7 @@ namespace Svg
internal class SvgElementFactory
{
private static List<ElementInfo> availableElements;
private const string svgNS = "http://www.w3.org/2000/svg";
/// <summary>
/// Gets a list of available types that can be used when creating an <see cref="SvgElement"/>.
......@@ -77,25 +78,29 @@ namespace Svg
{
SvgElement createdElement = null;
string elementName = reader.LocalName;
string elementNS = reader.NamespaceURI;
//Trace.TraceInformation("Begin CreateElement: {0}", elementName);
if (elementName == "svg")
if (elementNS == svgNS)
{
createdElement = (fragmentIsDocument) ? new T() : new SvgFragment();
}
else
{
ElementInfo validType = AvailableElements.SingleOrDefault(e => e.ElementName == elementName);
if (validType != null)
if (elementName == "svg")
{
createdElement = (SvgElement)Activator.CreateInstance(validType.ElementType);
createdElement = (fragmentIsDocument) ? new T() : new SvgFragment();
}
else
{
ElementInfo validType = AvailableElements.SingleOrDefault(e => e.ElementName == elementName);
if (validType != null)
{
createdElement = (SvgElement)Activator.CreateInstance(validType.ElementType);
}
}
}
if (createdElement != null)
{
SetAttributes(createdElement, reader, document);
if (createdElement != null)
{
SetAttributes(createdElement, reader, document);
}
}
//Trace.TraceInformation("End CreateElement");
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment