/// <summary> /// Create a complete deep copy of the given tree of <c>SvgElement</c> objects. /// A new set of elements is created, and if the attributes are cloneable they are deep-copied too. /// Since strings and all SvgType classes are cloneable, the new tree is independant of the old. /// </summary> /// <param name="el"></param> /// <returns></returns> public static SvgElement CloneElement(SvgElement el) { var clone = (SvgElement)el.GetType().GetConstructor(new Type[0]).Invoke(new object[0]); foreach (string key in el.Attributes.Keys) { clone[key] = el[key].CloneIfPossible(); } foreach (SvgElement ch in el.Children) { clone.AddChild(CloneElement(ch)); } return(clone); }
/// <summary> /// Used by LoadFromXML /// </summary> private static void BuildElementNameDictionary() { _elementNameDictionary = new Hashtable(); Assembly asm = Assembly.GetExecutingAssembly(); Type[] ta = asm.GetExportedTypes(); foreach (Type t in ta) { if (t.IsSubclassOf(typeof(SvgElement))) { SvgElement e = (SvgElement)t.GetConstructor(new System.Type[0]).Invoke(new object[0]); _elementNameDictionary[e.Name] = e.GetType(); } } }
private static void BuildElementNameDictionary() { SvgFactory._elementNameDictionary = new Hashtable(); Assembly executingAssembly = Assembly.GetExecutingAssembly(); Type[] exportedTypes = executingAssembly.GetExportedTypes(); Type[] array = exportedTypes; for (int i = 0; i < array.Length; i++) { Type type = array[i]; if (type.IsSubclassOf(typeof(SvgElement))) { SvgElement svgElement = (SvgElement)type.GetConstructor(new Type[0]).Invoke(new object[0]); if (svgElement.Name != "?") { SvgFactory._elementNameDictionary[svgElement.Name] = svgElement.GetType(); } } } }
/// <summary> /// Create a complete deep copy of the given tree of <c>SvgElement</c> objects. /// A new set of elements is created, and if the attributes are cloneable they are deep-copied too. /// Since strings and all SvgType classes are cloneable, the new tree is independant of the old. /// </summary> /// <param name="el"></param> /// <returns></returns> public static SvgElement CloneElement(SvgElement el) { SvgElement clone = (SvgElement)el.GetType().GetConstructor(new System.Type[0]).Invoke(new object[0]); foreach(string key in el.Attributes.Keys) { object o = el[key]; if (typeof(ICloneable).IsInstanceOfType(o)) clone[key] = ((ICloneable)o).Clone(); else clone[key] = o; } foreach(SvgElement ch in el.Children) { clone.AddChild(CloneElement(ch)); } return clone; }
public static SvgElement CloneElement(SvgElement el) { SvgElement svgElement = (SvgElement)el.GetType().GetConstructor(new Type[0]).Invoke(new object[0]); foreach (string attname in el.Attributes.Keys) { object obj = el[attname]; if (typeof(ICloneable).IsInstanceOfType(obj)) { svgElement[attname] = ((ICloneable)obj).Clone(); } else { svgElement[attname] = obj; } } foreach (SvgElement el2 in el.Children) { svgElement.AddChild(SvgFactory.CloneElement(el2)); } return(svgElement); }
/// <summary> /// Create a complete deep copy of the given tree of <c>SvgElement</c> objects. /// A new set of elements is created, and if the attributes are cloneable they are deep-copied too. /// Since strings and all SvgType classes are cloneable, the new tree is independant of the old. /// </summary> /// <param name="el"></param> /// <returns></returns> public static SvgElement CloneElement(SvgElement el) { SvgElement clone = (SvgElement)el.GetType().GetConstructor(new System.Type[0]).Invoke(new object[0]); foreach (string key in el.Attributes.Keys) { object o = el[key]; if (typeof(ICloneable).IsInstanceOfType(o)) { clone[key] = ((ICloneable)o).Clone(); } else { clone[key] = o; } } foreach (SvgElement ch in el.Children) { clone.AddChild(CloneElement(ch)); } return(clone); }