using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Xml;
using System.Threading;
using System.Globalization;
namespace Svg
{
///
/// Svg helpers
///
public static class SvgExtentions
{
public static void SetRectangle(this SvgRectangle r, RectangleF bounds)
{
r.X = bounds.X;
r.Y = bounds.Y;
r.Width = bounds.Width;
r.Height = bounds.Height;
}
public static RectangleF GetRectangle(this SvgRectangle r)
{
return new RectangleF(r.X, r.Y, r.Width, r.Height);
}
public static string GetXML(this SvgDocument doc)
{
var ret = "";
using (var ms = new MemoryStream())
{
doc.Write(ms);
ms.Position = 0;
var sr = new StreamReader(ms);
ret = sr.ReadToEnd();
sr.Close();
}
return ret;
}
public static string GetXML(this SvgElement elem)
{
var result = "";
var currentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
using (StringWriter str = new StringWriter())
{
using (XmlTextWriter xml = new XmlTextWriter(str))
{
elem.Write(xml);
result = str.ToString();
}
}
Thread.CurrentThread.CurrentCulture = currentCulture;
return result;
}
public static bool HasNonEmptyCustomAttribute(this SvgElement element, string name)
{
return element.CustomAttributes.ContainsKey(name) && !string.IsNullOrEmpty(element.CustomAttributes[name]);
}
public static void ApplyRecursive(this SvgElement elem, Action action)
{
action(elem);
if(!(elem is SvgDocument)) //don't apply action to subtree of documents
{
foreach (var element in elem.Children)
{
element.ApplyRecursive(action);
}
}
}
public static void ApplyRecursiveDepthFirst(this SvgElement elem, Action action)
{
if(!(elem is SvgDocument)) //don't apply action to subtree of documents
{
foreach (var element in elem.Children)
{
element.ApplyRecursiveDepthFirst(action);
}
}
action(elem);
}
}
}