/// <summary> /// Processes the <gx:angles>, <gx:coord> and <when> /// elements. /// </summary> /// <param name="orphan">The <see cref="Element"/> to add.</param> protected internal override void AddOrphan(Element orphan) { UnknownElement unknown = orphan as UnknownElement; if (unknown != null) { XmlComponent data = unknown.UnknownData; if (AnglesComponent.Equals(data)) { this.AddChild(new AnglesElement(unknown.InnerText)); return; } if (CoordComponent.Equals(data)) { this.AddChild(new CoordElement(unknown.InnerText)); return; } if (WhenComponent.Equals(data)) { this.AddChild(new WhenElement(unknown.InnerText)); return; } } base.AddOrphan(orphan); }
public override void VisitUnknownElement(UnknownElement element) { string xmlName = element.Xml.Name.ToString() .ToLowerInvariant(); if (xmlName.Equals("b") || xmlName.Equals("i") || xmlName.Equals("a") || xmlName.Equals("sup") || xmlName.Equals("i")) { var sb = new StringBuilder(); sb.Append("<" + xmlName); foreach (var attr in element.Xml.Attributes()) { sb.Append(" " + attr.Name.ToString() + "="); sb.Append("\"" + HtmlEscape(attr.Value) + "\""); } sb.Append(">"); this.Write(sb.ToString()); base.VisitUnknownElement(element); this.Write("</" + xmlName + ">"); } else { base.VisitUnknownElement(element); } }
/// <summary>Adds the gx:value to <see cref="Values"/>.</summary> /// <param name="orphan">The <see cref="Element"/> to add.</param> protected internal override void AddOrphan(Element orphan) { UnknownElement unknown = orphan as UnknownElement; if (unknown != null) { if (ValueComponent.Equals(unknown.UnknownData)) { this.AddValue(unknown.InnerText); return; } } base.AddOrphan(orphan); }
// Reads an element from the PQDIF file. private Element ReadElement(BinaryReader recordBodyReader) { Element element; Guid tagOfElement = new Guid(recordBodyReader.ReadBytes(16)); ElementType typeOfElement = (ElementType)recordBodyReader.ReadByte(); PhysicalType typeOfValue = (PhysicalType)recordBodyReader.ReadByte(); bool isEmbedded = recordBodyReader.ReadByte() != 0; // Read reserved byte recordBodyReader.ReadByte(); long link; long returnLink; returnLink = recordBodyReader.BaseStream.Position + 8L; if (!isEmbedded || typeOfElement != ElementType.Scalar) { link = recordBodyReader.ReadInt32(); recordBodyReader.BaseStream.Seek(link, SeekOrigin.Begin); } switch (typeOfElement) { case ElementType.Collection: element = ReadCollection(recordBodyReader); break; case ElementType.Scalar: element = ReadScalar(recordBodyReader, typeOfValue); break; case ElementType.Vector: element = ReadVector(recordBodyReader, typeOfValue); break; default: element = new UnknownElement(typeOfElement); element.TypeOfValue = typeOfValue; break; } element.TagOfElement = tagOfElement; recordBodyReader.BaseStream.Seek(returnLink, SeekOrigin.Begin); return(element); }
/// <summary> /// Processes the <gx:angles>, <gx:coord> and <when> /// elements. /// </summary> /// <param name="orphan">The <see cref="Element"/> to add.</param> protected internal override void AddOrphan(Element orphan) { UnknownElement unknown = orphan as UnknownElement; if (unknown != null) { Element child = ConvertUnknown(unknown); if (child != null) { this.AddChild(child); return; } } base.AddOrphan(orphan); }
/// <summary> /// Deserializes the specified <see cref="PlainTextReader"/> to the specified type. /// </summary> /// <param name="reader"><see cref="PlainTextReader"/> thatcontains the <see cref="object"/> to be deserialized.</param> /// <param name="type"><see cref="Type"/> of the deserialized <see cref="object"/>.</param> /// <returns>Returns an instance of the specified <see cref="Type"/> loaded from the <see cref="PlainTextReader"/>.</returns> /// <exception cref="ArgumentNullException"/> /// <exception cref="FormatException">Occurs when a property did not have the correct format.</exception> public object Deserialize(PlainTextReader reader, Type type) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (reader == null) { throw new ArgumentNullException(nameof(reader)); } object instance = Activator.CreateInstance(type); try { ReadValueObject readItem; while ((readItem = reader.ReadNextValue()) != null) { if (string.IsNullOrWhiteSpace(readItem.Name)) { throw new FormatException(Resources.SerializationExceptionStrings.PropertyNameEmpty); } if (string.IsNullOrWhiteSpace(readItem.Value)) { throw new FormatException( string.Format(Resources.SerializationExceptionStrings.PropertyValueEmpty, readItem.Name)); } PropertyInfo property = GetProperty(readItem.Name, type); if (property != null) { property.SetValue(instance, Decoder.DecodeUnknown(readItem.Value, property.PropertyType)); continue; } FieldInfo field = GetField(readItem.Name, type); if (field != null) { field.SetValue(instance, Decoder.DecodeUnknown(readItem.Value, field.FieldType)); continue; } UnknownElement?.Invoke(readItem); } } catch (FormatException ex) { throw new FormatException(string.Format(Resources.SerializationExceptionStrings.InvalidSettingFormat, reader.Position) + Environment.NewLine + ex.Message, ex); } return(instance); }
private static Element ConvertUnknown(UnknownElement unknown) { XmlComponent data = unknown.UnknownData; if (AnglesComponent.Equals(data)) { return(new AnglesElement(unknown.InnerText)); } else if (CoordComponent.Equals(data)) { return(new CoordElement(unknown.InnerText)); } else if (WhenComponent.Equals(data)) { DateTime value; if (DateTime.TryParse(unknown.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out value)) { return(new WhenElement(value)); } } return(null); }
private static Element ConvertUnknown(UnknownElement unknown) { XmlComponent data = unknown.UnknownData; if (AnglesComponent.Equals(data)) { return new AnglesElement(unknown.InnerText); } else if (CoordComponent.Equals(data)) { return new CoordElement(unknown.InnerText); } else if (WhenComponent.Equals(data)) { DateTime value; if (DateTime.TryParse(unknown.InnerText, CultureInfo.InvariantCulture, DateTimeStyles.None, out value)) { return new WhenElement(value); } } return null; }
private Element GetElement() { if (_reader.Depth > MaxNestingDepth) { throw new InvalidOperationException("Maximum nesting depth has been reached."); } if (_reader.NodeType != XmlNodeType.Element) { return(null); } // Need to check this here before we move to the attributes, // as reader.NodeType will never be EndElement for empty elements // and when we move to an attribute, IsEmptyElement doesn't work bool isEmpty = _reader.IsEmptyElement; Element parent = KmlFactory.CreateElement(this.GetXmlComponent()); if (parent == null) { parent = new UnknownElement(new XmlComponent(_reader)); } else if (parent is IHtmlContent) { this.ProcessAttributes(parent); // No need to process all the children string text = string.Empty; if (!isEmpty) // Is there something to parse? { text = XmlExtractor.FlattenXml(_reader); } ((IHtmlContent)parent).Text = text; return(parent); } this.ProcessAttributes(parent); // Empties can have attributes though if (!isEmpty) // Is there any text/children to process? { while (_reader.Read()) { if (_reader.NodeType == XmlNodeType.EndElement) { break; } switch (_reader.NodeType) { case XmlNodeType.Element: this.AddChild(parent); break; case XmlNodeType.CDATA: // Treat like normal text case XmlNodeType.Text: parent.AddInnerText(_reader.Value); break; } } } return(parent); }
public static Element?Read(XmlReader reader, IElementFactory elementFactory) { var elements = new List <Element>(); var stack = new Stack <Element>(); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.None: break; case XmlNodeType.Element: { string localName = reader.LocalName; Element element; if (string.IsNullOrEmpty(reader.NamespaceURI) || elementFactory.Namespaces.Contains(reader.NamespaceURI)) { var parent = stack.Count > 0 ? stack.Peek() : null; element = elementFactory.Create(localName, parent); element.Parent = parent; if (reader.MoveToFirstAttribute()) { do { if (string.IsNullOrEmpty(reader.NamespaceURI) || elementFactory.Namespaces.Contains(reader.NamespaceURI)) { string attributeName = reader.LocalName; element.Attributes.Add(attributeName, reader.Value); } }while (reader.MoveToNextAttribute()); reader.MoveToElement(); } var children = parent != null ? parent.Children : elements; children.Add(element); } else { element = new UnknownElement() { Tag = localName, Parent = null }; } if (!reader.IsEmptyElement) { stack.Push(element); } } break; case XmlNodeType.Attribute: break; case XmlNodeType.Text: { var element = stack.Peek(); var content = new ContentElement() { Content = reader.Value }; element.Children.Add(content); } break; case XmlNodeType.CDATA: { var element = stack.Peek(); var content = new ContentElement() { Content = reader.Value }; element.Children.Add(content); } break; case XmlNodeType.EntityReference: { reader.ResolveEntity(); var element = stack.Peek(); var content = new ContentElement() { Content = reader.Value }; element.Children.Add(content); } break; case XmlNodeType.Entity: break; case XmlNodeType.ProcessingInstruction: break; case XmlNodeType.Comment: break; case XmlNodeType.Document: break; case XmlNodeType.DocumentType: break; case XmlNodeType.DocumentFragment: break; case XmlNodeType.Notation: break; case XmlNodeType.Whitespace: break; case XmlNodeType.SignificantWhitespace: break; case XmlNodeType.EndElement: { var element = stack.Pop(); foreach (var child in element.Children) { if (child is ContentElement content) { element.Content += content.Content; } } } break; case XmlNodeType.EndEntity: break; case XmlNodeType.XmlDeclaration: break; default: break; } } if (elements.Count == 1) { return(elements[0]); } return(null); }
// Reads an element from the PQDIF file. private Element ReadElement(BinaryReader recordBodyReader) { Element element; Guid tagOfElement = Guid.Empty; ElementType typeOfElement = 0; PhysicalType typeOfValue = 0; bool isEmbedded; // Calculate the location of the next element // after this one in case we encounter any errors long nextLink = recordBodyReader.BaseStream.Position + 28L; try { tagOfElement = new Guid(recordBodyReader.ReadBytes(16)); typeOfElement = (ElementType)recordBodyReader.ReadByte(); typeOfValue = (PhysicalType)recordBodyReader.ReadByte(); isEmbedded = recordBodyReader.ReadByte() != 0; // Read reserved byte recordBodyReader.ReadByte(); long link; long returnLink; returnLink = recordBodyReader.BaseStream.Position + 8L; if (!isEmbedded || typeOfElement != ElementType.Scalar) { link = recordBodyReader.ReadInt32(); if (link < 0 || link >= recordBodyReader.BaseStream.Length) { throw new InvalidOperationException("Element link is outside the bounds of the file"); } recordBodyReader.BaseStream.Seek(link, SeekOrigin.Begin); } switch (typeOfElement) { case ElementType.Collection: element = ReadCollection(recordBodyReader); break; case ElementType.Scalar: element = ReadScalar(recordBodyReader, typeOfValue); break; case ElementType.Vector: element = ReadVector(recordBodyReader, typeOfValue); break; default: element = new UnknownElement(typeOfElement); element.TypeOfValue = typeOfValue; break; } element.TagOfElement = tagOfElement; recordBodyReader.BaseStream.Seek(returnLink, SeekOrigin.Begin); return(element); } catch (Exception ex) { m_exceptionList.Add(ex); // Jump to the location of the next element after this one if (nextLink < recordBodyReader.BaseStream.Length) { recordBodyReader.BaseStream.Seek(nextLink, SeekOrigin.Begin); } else { recordBodyReader.BaseStream.Seek(0L, SeekOrigin.End); } return(new ErrorElement(typeOfElement, ex) { TagOfElement = tagOfElement, TypeOfValue = typeOfValue }); } }
public extern static AngularDetailsElement Angular(this UnknownElement el);
private Element CreateNode(XmlNodeResult nd, Element parent) { string ens; if (nd.Prefix != null) { RemObjects.InternetPack.XMPP.Elements.Attribute at = nd.Attribute.FirstOrDefault(a => a.Prefix == "xmlns" && a.Name == nd.Prefix); if (at == null) { Element el = parent; ens = string.Empty; while (el != null) { RemObjects.InternetPack.XMPP.Elements.Attribute els = el.Attributes.Where(a => a.Prefix == "xmlns" && a.Name == nd.Prefix).FirstOrDefault(); if (els != null) { ens = els.Value; break; } el = el.Parent; } } else { ens = at.Value; } } else { RemObjects.InternetPack.XMPP.Elements.Attribute at = nd.Attribute.FirstOrDefault(a => a.Prefix == null && a.Name == "xmlns"); if (at == null) { ens = string.Empty; } else { ens = at.Value; } } Element res = null; switch (ens) { case Namespaces.ClientStreamNamespace: case Namespaces.ServerStreamNamespace: case "": if (ens == null && parent != null && parent.Type == ElementType.IQ && nd.Name == "error") { res = new IQError(); } else { switch (nd.Name) { case "iq": res = new IQ(); break; case "presence": res = new Presence(); break; case "message": res = new Message(); break; } } break; case Namespaces.StreamNamespace: switch (nd.Name) { case "stream": RemObjects.InternetPack.XMPP.Elements.Attribute att = nd.Attribute.FirstOrDefault(a => a.Prefix == null && a.Name == "xmlns"); if (att == null || att.Value == Namespaces.ClientStreamNamespace) { res = new ClientStream(); } else { res = new ServerStream(); } break; case "features": res = new StreamFeatures(); break; case "error": res = new StreamError(); break; } break; case Namespaces.StartTLSNamespace: switch (nd.Name) { case "starttls": res = new StartTLS(); break; case "failure": res = new StartTLSFailure(); break; case "proceed": res = new StartTLSProceed(); break; } break; case Namespaces.SaslNamespace: switch (nd.Name) { case "mechanisms": res = new Mechanisms(); break; case "auth": res = new SaslAuth(); break; case "challenge": res = new SaslChallenge(); break; case "response": res = new SaslResponse(); break; case "abort": res = new SaslAbort(); break; case "success": res = new SaslSuccess(); break; case "failure": res = new SaslFailure(); break; } break; } if (res == null) { res = new UnknownElement(); } else { res.Attributes.Clear(); // default ones shouldn't be here during the reading process } if (parent != null) { res.Parent = parent; if (parent != fServerRoot) { parent.Elements.Add(res); } } res.Prefix = nd.Prefix; res.Name = nd.Name; foreach (var el in nd.Attribute) { res.Attributes.Add(el); } return(res); }
/// <summary> /// See <see cref="Visitor.VisitUnknownElement"/>. /// </summary> public override void VisitUnknownElement(UnknownElement element) { if (delegates.VisitUnknownElement != null) delegates.VisitUnknownElement(element); base.VisitUnknownElement(element); }
/// <summary> /// Reads all supported documentation elements. /// </summary> private static IEnumerable<Element> ReadContent(XElement xml) { foreach (var node in xml.Nodes()) { var element = default(Element); switch (node.NodeType) { case System.Xml.XmlNodeType.Element: var elementNode = (XElement)node; switch (elementNode.Name.LocalName) { case "summary": element = new Summary(ReadContent(elementNode)); break; case "remarks": element = new Remarks(ReadContent(elementNode)); break; case "example": element = new Example(ReadContent(elementNode)); break; case "para": element = new Para(ReadContent(elementNode)); break; case "param": element = new Param(FindAttribute(elementNode, "name"), ReadContent(elementNode)); break; case "paramref": element = new ParamRef(FindAttribute(elementNode, "name")); break; case "typeparam": element = new TypeParam(FindAttribute(elementNode, "name"), ReadContent(elementNode)); break; case "typeparamref": element = new TypeParamRef(FindAttribute(elementNode, "name")); break; case "code": element = new Code(TrimCode(elementNode.Value)); break; case "c": element = new C(elementNode.Value); break; case "see": element = new See(FindAttribute(elementNode, "cref"), FindAttribute(elementNode, "langword"), elementNode.Value, ReadContent(elementNode)); break; case "seealso": element = new SeeAlso(FindAttribute(elementNode, "cref"), elementNode.Value, ReadContent(elementNode)); break; case "list": element = new List(FindAttribute(elementNode, "type"), ReadContent(elementNode)); break; case "listheader": element = new ListHeader(ReadContent(elementNode)); break; case "term": element = new Term(ReadContent(elementNode)); break; case "description": element = new Description(ReadContent(elementNode)); break; case "item": element = new Item(ReadContent(elementNode)); break; case "exception": element = new Exception(FindAttribute(elementNode, "cref"), ReadContent(elementNode)); break; case "value": element = new Value(ReadContent(elementNode)); break; case "returns": element = new Returns(ReadContent(elementNode)); break; default: element = new UnknownElement(elementNode, ReadContent(elementNode)); break; } break; case System.Xml.XmlNodeType.Text: element = new Text(TrimText(((XText)node).Value)); break; default: break; } if (element != null) { element.SetLineInfo(xml as IXmlLineInfo); yield return element; } } }
// Reads an element from the PQDIF file. private Element ReadElement(BinaryReader recordBodyReader) { Element element; Guid tagOfElement = Guid.Empty; ElementType typeOfElement = 0; PhysicalType typeOfValue = 0; bool isEmbedded; // Calculate the location of the next element // after this one in case we encounter any errors long nextLink = recordBodyReader.BaseStream.Position + 28L; try { tagOfElement = new Guid(recordBodyReader.ReadBytes(16)); typeOfElement = (ElementType)recordBodyReader.ReadByte(); typeOfValue = (PhysicalType)recordBodyReader.ReadByte(); isEmbedded = recordBodyReader.ReadByte() != 0; // Read reserved byte recordBodyReader.ReadByte(); long link; long returnLink; returnLink = recordBodyReader.BaseStream.Position + 8L; if (!isEmbedded || typeOfElement != ElementType.Scalar) { link = recordBodyReader.ReadInt32(); if (link < 0 || link >= recordBodyReader.BaseStream.Length) throw new InvalidOperationException("Element link is outside the bounds of the file"); recordBodyReader.BaseStream.Seek(link, SeekOrigin.Begin); } switch (typeOfElement) { case ElementType.Collection: element = ReadCollection(recordBodyReader); break; case ElementType.Scalar: element = ReadScalar(recordBodyReader, typeOfValue); break; case ElementType.Vector: element = ReadVector(recordBodyReader, typeOfValue); break; default: element = new UnknownElement(typeOfElement); element.TypeOfValue = typeOfValue; break; } element.TagOfElement = tagOfElement; recordBodyReader.BaseStream.Seek(returnLink, SeekOrigin.Begin); return element; } catch (Exception ex) { m_exceptionList.Add(ex); // Jump to the location of the next element after this one if (nextLink < recordBodyReader.BaseStream.Length) recordBodyReader.BaseStream.Seek(nextLink, SeekOrigin.Begin); else recordBodyReader.BaseStream.Seek(0L, SeekOrigin.End); return new ErrorElement(typeOfElement, ex) { TagOfElement = tagOfElement, TypeOfValue = typeOfValue }; } }
/// <summary> /// Visits an unknown documentation element. /// </summary> public virtual void VisitUnknownElement(UnknownElement element) { VisitContainer(element); }