Exemple #1
0
        private Unit HandleEndElement(XmlTextReader reader, IObserver <SaxEvent> observer, string[] path)
        {
            var content      = _contentHolder.GetContent();
            var startElement = _contentHolder.StartSaxEvent;

            _contentHolder = _contentHolder.Parent;

            var strUri          = reader.NamespaceURI;
            var strName         = reader.Name;
            var endElementEvent = new EndElementEvent(strUri, strName, false, startElement.Attributes, content, path);

            _contentHolder.Append(endElementEvent);

            observer.OnNext(endElementEvent);

            return(Unit.Default);
        }
Exemple #2
0
        private void HandleCloseTag(EndElementEvent end)
        {
            var elementName    = end.Name;
            var content        = end.Descendants;
            var startCandidate = _stack.Peek() as StartElementEvent;

            if (startCandidate != null)
            {
                if (!string.Equals(startCandidate.Name, elementName))
                {
                    _observer.OnError(new ApplicationException($"unexpected closing tag. expected: {startCandidate.Name} actual: {elementName}"));
                }
                else
                {
                    _stack.Pop();
                    //TODO: check if end and start are interchangable here
                    _observer.OnNext(ProjectStructureItem.Build(startCandidate, content));
                    return;
                }
            }
            _observer.OnError(new ApplicationException($"unexpected end element: {elementName}"));
        }
Exemple #3
0
        private void HandleCloseTag(EndElementEvent end)
        {
            var elementName = end.Name;
            var start       = _stack.Peek() as StartElementEvent;

            if (start != null)
            {
                if (!string.Equals(start.Name, elementName))
                {
                    _observer.OnError(new ApplicationException($"unexpected closing tag. expected: {start.Name} actual: {elementName}"));
                }
                else
                {
                    _stack.Pop();
                    //TODO: check if end and start are interchangable here
                    _modelBuilder.ComposeElement(start, end.Descendants)
                    .ForEachItem(_observer.OnNext);
                    return;
                }
            }
            _observer.OnError(new ApplicationException($"unexpected end element: {elementName}"));
        }
Exemple #4
0
        private Unit HandleEmptyElement(XmlTextReader reader, IObserver <SaxEvent> observer, string[] path)
        {
            var attributes = new Dictionary <string, string>();
            var strUri     = reader.NamespaceURI;
            var strName    = reader.Name;

            if (reader.HasAttributes)
            {
                for (var i = 0; i < reader.AttributeCount; i++)
                {
                    reader.MoveToAttribute(i);
                    attributes.Add(reader.Name, reader.Value);
                }
            }

            var readOnlyAttributes = new ReadOnlyDictionary <string, string>(attributes);
            var endElementEvent    = new EndElementEvent(strUri, strName, true, readOnlyAttributes, new List <SaxEvent>(), path);

            _contentHolder.Append(endElementEvent);
            observer.OnNext(endElementEvent);

            return(Unit.Default);
        }
Exemple #5
0
 private void HandleClosedTag(EndElementEvent end)
 {
     _observer.OnNext(ProjectStructureItem.Build(end));
 }
Exemple #6
0
 public IEnumerable <ProjectStructureItem> ComposeElement(EndElementEvent endElement)
 {
     return(ProjectStructureItem.Build(endElement));
 }
Exemple #7
0
 private void HandleClosedTag(EndElementEvent end)
 {
     _modelBuilder.ComposeElement(end)
     .ForEachItem(_observer.OnNext);
 }
Exemple #8
0
 public static ProjectStructureItem Build(EndElementEvent saxEvent)
 {
     return(Build(saxEvent, null));
 }
 public static IEnumerable <ProjectStructureItem> Build(EndElementEvent saxEvent)
 {
     return(Build(saxEvent, null));
 }