internal static List <Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem> > ReadListOfFormatString(XmlReader reader,
                                                                                                              string property)
        {
            AssertElement(reader, property);
            var formatString = new List <Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem> >();

            reader.ReadStartElement();             //Argument
            while (reader.NodeType != XmlNodeType.EndElement || !reader.Name.Equals(property))
            {
                AssertElement(reader, "Argument");
                var formatStr = new Tokenizer.HeaderTokenMatch();
                formatStr.ArgumentName = reader.GetAttribute("Name");
                reader.ReadStartElement();                 //Content

                var child     = DocumentExtenstions.CreateDocumentValueItemInstance(reader.Name);
                var childTree = reader.ReadSubtree();
                childTree.Read();
                child.ReadXml(childTree);
                reader.Skip();
                reader.ReadEndElement();                 //Argument
                formatString.Add(new Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem>(formatStr, child));
            }

            return(formatString);
        }
        /// <inheritdoc />
        protected override void DeSerializeXml(XmlReader reader)
        {
            base.DeSerializeXml(reader);
            if (reader.NodeType == XmlNodeType.EndElement && reader.Name.Equals(nameof(Value)))
            {
                reader.ReadEndElement();                //end of value
            }
            if (reader.NodeType == XmlNodeType.EndElement && reader.Name.Equals(GetType().Name))
            {
                FormatString = new Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem> [0];
                return;
            }

            AssertElement(reader, nameof(TargetFormatterName));
            if (!reader.IsEmptyElement)
            {
                reader.ReadStartElement();              //start of TargetFormatterName
                TargetFormatterName = reader.ReadString();
                reader.ReadEndElement();                //end of TargetFormatterName
            }
            else
            {
                TargetFormatterName = null;
                reader.ReadStartElement();                //end of TargetFormatterName
            }

            if (reader.NodeType == XmlNodeType.EndElement && reader.Name.Equals(GetType().Name))
            {
                FormatString = new Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem> [0];
                return;
            }

            AssertElement(reader, nameof(FormatString));
            var formatString = new List <Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem> >();

            reader.ReadStartElement();             //Argument
            while (reader.NodeType != XmlNodeType.EndElement || !reader.Name.Equals(nameof(FormatString)))
            {
                AssertElement(reader, "Argument");
                var formatStr = new Tokenizer.HeaderTokenMatch();
                formatStr.ArgumentName = reader.GetAttribute("Name");
                reader.ReadStartElement();                 //Content

                var child     = DocumentExtenstions.CreateDocumentValueItemInstance(reader.Name);
                var childTree = reader.ReadSubtree();
                childTree.Read();
                child.ReadXml(childTree);
                reader.Skip();
                reader.ReadEndElement();                //Argument
                formatString.Add(new Tuple <Tokenizer.HeaderTokenMatch, IValueDocumentItem>(formatStr, child));
            }

            FormatString = formatString.ToArray();
        }
예제 #3
0
        /// <inheritdoc />
        protected override void DeSerializeXml(XmlReader reader)
        {
            base.DeSerializeXml(reader);
            AssertElement(reader, nameof(Value));
            reader.ReadEndElement();
            AssertElement(reader, nameof(Partial));
            reader.ReadStartElement();
            var child     = DocumentExtenstions.CreateDocumentItemInstance(reader.Name);
            var childTree = reader.ReadSubtree();

            childTree.Read();
            child.DeSerializeXmlCore(childTree);
            reader.Skip();
            Partial = child;
        }
예제 #4
0
        /// <inheritdoc />
        void IDocumentItem.DeSerializeXmlCore(XmlReader reader)
        {
            AssertElement(reader, GetSerializedMarkerName(GetType()));

            var charLoc = reader.GetAttribute(nameof(ExpressionStart));

            if (charLoc != null)
            {
                ExpressionStart = CharacterLocation.FromFormatString(charLoc);
            }

            if (!reader.IsEmptyElement)
            {
                var readSubtree = reader.ReadSubtree();
                readSubtree.Read();
                DeSerializeXml(readSubtree);

                if (reader.Name == "Children" || reader.ReadToFollowing(nameof(Children)))
                {
                    reader.ReadStartElement();                     //nameof(Children)
                    while (!reader.Name.Equals(nameof(Children)) && reader.NodeType != XmlNodeType.EndElement)
                    {
                        var child = DocumentExtenstions.CreateDocumentItemInstance(reader.Name);

                        var childTree = reader.ReadSubtree();
                        childTree.Read();
                        child.DeSerializeXmlCore(childTree);
                        reader.Skip();
                        Children.Add(child);
                    }

                    reader.ReadEndElement();                     //nameof(Children)
                }

                if (reader.NodeType == XmlNodeType.EndElement && reader.Name.Equals(GetSerializedMarkerName(GetType())))
                {
                    //there are no children and we have reached the end of the document
                    reader.ReadEndElement();                     //GetType().Name
                }
            }
        }