public FtMeta CreateCopy() { FtMeta meta = MetaFactory.CreateMeta(); meta.Assign(this); return(meta); }
public static FtMeta Create() { return(MetaFactory.CreateMeta()); }
internal protected virtual FtMeta Read(XmlReader reader) { if (!reader.ReadToFollowing(MetaElementTypeFormatter.ToElementName(MetaElementType.FieldedText))) { return(null); } else { bool emptyElement = reader.IsEmptyElement; FieldedTextReadElement rootElement = ReadElement.CreateFieldedTextXmlReadElement(); ReadAttributes(reader, rootElement); if (!emptyElement) { ReadElement activeElement = rootElement; Stack parentStack = new Stack(); int foreignElementDepth = 0; while (activeElement != null) { if (!reader.Read()) { throw new FtMetaSerializationException(Properties.Resources.XmlMetaSerializationReader_Read_IncompleteXmlStream); } switch (reader.NodeType) { case XmlNodeType.Element: emptyElement = reader.IsEmptyElement; if (foreignElementDepth > 0) { if (!emptyElement) { foreignElementDepth++; } } else { MetaElementType elementType; if (!MetaElementTypeFormatter.TryParseElementName(reader.Name, out elementType)) { if (!emptyElement) { foreignElementDepth++; } } else { ReadElement newActiveElement; if (activeElement.TryCreate(elementType, out newActiveElement)) { parentStack.Push(activeElement); activeElement = newActiveElement; ReadAttributes(reader, activeElement); if (emptyElement) { if (parentStack.Count > 0) { activeElement = parentStack.Pop(); } else { activeElement = null; } } } } } break; case XmlNodeType.EndElement: if (foreignElementDepth > 0) { foreignElementDepth--; } else { if (parentStack.Count > 0) { activeElement = parentStack.Pop(); } else { activeElement = null; } } break; } } } string errorDescription; FtMeta result = MetaFactory.CreateMeta(); if (!rootElement.ResolveTo(result, out errorDescription)) { throw new FtMetaSerializationException(errorDescription); } return(result); } }