private SvgElement CreateElement <T>(XmlReader reader, bool fragmentIsDocument, SvgDocument document) where T : SvgDocument, new() { SvgElement createdElement = null; string elementName = reader.LocalName; string elementNS = reader.NamespaceURI; //Trace.TraceInformation("Begin CreateElement: {0}", elementName); if (elementNS == SvgNamespace.UriString || string.IsNullOrEmpty(elementNS)) { if (elementName == "svg") { createdElement = (fragmentIsDocument) ? new T() : new SvgFragment(); } else { #if !USE_SOURCE_GENERATORS ElementInfo validType; if (availableElementsWithoutSvg.TryGetValue(elementName, out validType)) { createdElement = (SvgElement)Activator.CreateInstance(validType.ElementType); } #else if (availableElementsWithoutSvg.TryGetValue(elementName, out var validType)) { createdElement = validType.CreateInstance(); } #endif else { createdElement = new SvgUnknownElement(elementName); } } if (createdElement != null) { SetAttributes(createdElement, reader, document); } } else { // All non svg element (html, ...) createdElement = new NonSvgElement(elementName, elementNS); SetAttributes(createdElement, reader, document); } //Trace.TraceInformation("End CreateElement"); return(createdElement); }
private SvgElement CreateElement <T>(XmlReader reader, bool fragmentIsDocument, SvgDocument document) where T : SvgDocument, new() { SvgElement createdElement = null; string elementName = reader.LocalName; string elementNS = reader.NamespaceURI; //Trace.TraceInformation("Begin CreateElement: {0}", elementName); if (elementNS == SvgAttributeAttribute.SvgNamespace || string.IsNullOrEmpty(elementNS)) { if (elementName == "svg") { createdElement = (fragmentIsDocument) ? new T() : new SvgFragment(); } else { ElementInfo validType; if (AvailableElements.Where(e => !e.ElementName.Equals("svg", StringComparison.OrdinalIgnoreCase)) .ToDictionary(e => e.ElementName, e => e).TryGetValue(elementName, out validType)) { createdElement = (SvgElement)Activator.CreateInstance(validType.ElementType); } else { createdElement = new SvgUnknownElement(elementName); } } if (createdElement != null) { SetAttributes(createdElement, reader, document); } } else { // All non svg element (html, ...) createdElement = new NonSvgElement(elementName); SetAttributes(createdElement, reader, document); } //Trace.TraceInformation("End CreateElement"); return(createdElement); }
private static SvgElement CreateElement <T>(XmlReader reader, bool fragmentIsDocument, SvgDocument document) where T : SvgDocument, new() { SvgElement createdElement = null; string elementName = reader.LocalName; string elementNS = reader.NamespaceURI; //Trace.TraceInformation("Begin CreateElement: {0}", elementName); if (elementNS == svgNS) { if (elementName == "svg") { createdElement = (fragmentIsDocument) ? new T() : new SvgFragment(); } else { ElementInfo validType = AvailableElements.SingleOrDefault(e => e.ElementName == elementName); if (validType != null) { createdElement = (SvgElement)Activator.CreateInstance(validType.ElementType); } else { createdElement = new SvgUnknownElement(elementName); } } if (createdElement != null) { SetAttributes(createdElement, reader, document); } } else { // All non svg element (html, ...) createdElement = new NonSvgElement(elementName); SetAttributes(createdElement, reader, document); } //Trace.TraceInformation("End CreateElement"); return(createdElement); }