예제 #1
0
        private void UpdateTagPair(ElementTagPair elementTagPair, ISegment originalTarget, ISegment originalSource,
                                   Stack <IAbstractMarkupDataContainer> containers)
        {
            if (elementTagPair.Type == Element.TagType.OpeningTag)
            {
                var tagPair = GetElement(elementTagPair.TagId, originalTarget, originalSource, elementTagPair);
                if (tagPair == null)
                {
                    tagPair = _segmentBuilder.CreateTagPair(elementTagPair.TagId, elementTagPair.TagContent);
                }

                if (tagPair is IAbstractMarkupDataContainer tagPairContainer)
                {
                    tagPairContainer.Clear();

                    var container = containers.Peek();
                    container.Add(tagPair);
                    containers.Push(tagPairContainer);
                }
            }
            else if (elementTagPair.Type == Element.TagType.ClosingTag)
            {
                containers.Pop();
            }
        }
예제 #2
0
        private ElementTagPair ReadClosingElementTagPair(XmlReader xmlReader)
        {
            var elementTagPair = new ElementTagPair
            {
                Type = Element.TagType.ClosingTag
            };

            var index = 0;

            while (xmlReader.Read())
            {
                switch (xmlReader.NodeType)
                {
                case XmlNodeType.Element:
                    if (index == 0 && string.Compare(xmlReader.Name, "ept", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        index++;
                        while (xmlReader.MoveToNextAttribute())
                        {
                            if (string.Compare(xmlReader.Name, "id", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                elementTagPair.TagId = xmlReader.Value;
                            }
                            if (string.Compare(xmlReader.Name, "equiv-text", StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                elementTagPair.DisplayText = xmlReader.Value;
                            }
                        }
                    }
                    break;

                case XmlNodeType.Whitespace:
                    elementTagPair.TagContent += xmlReader.Value;
                    break;

                case XmlNodeType.Text:
                    elementTagPair.TagContent += xmlReader.Value;
                    break;

                case XmlNodeType.CDATA:
                    elementTagPair.TagContent += xmlReader.Value;
                    break;

                case XmlNodeType.EntityReference:
                    elementTagPair.TagContent += xmlReader.Name;
                    break;
                }
            }

            return(elementTagPair);
        }
예제 #3
0
        public void VisitTagPair(ITagPair tagPair)
        {
            if (!_ignoreTags)
            {
                var element = new ElementTagPair
                {
                    Type        = Element.TagType.TagOpen,
                    TagId       = tagPair.TagProperties.TagId.Id,
                    TagContent  = tagPair.TagProperties.TagContent,
                    DisplayText = tagPair.TagProperties.DisplayText
                };

                if (!TagPairIds.Contains(element.TagId))
                {
                    TagPairIds.Add(element.TagId);
                }

                Elements.Add(element);

                Text += tagPair.StartTagProperties.TagContent;
                _tagPairStack.Push(tagPair);
            }

            VisitChilderen(tagPair);

            if (!_ignoreTags)
            {
                var currentTag = _tagPairStack.Pop();

                var element = new ElementTagPair
                {
                    Type       = Element.TagType.TagClose,
                    TagId      = currentTag.TagProperties.TagId.Id,
                    TagContent = currentTag.EndTagProperties.TagContent
                };

                Elements.Add(element);

                Text += currentTag.EndTagProperties.TagContent;
            }
        }