private IEnumerable <CreoleRichTextElementNodeData> _GetHyperlinkContentElementNodesData(TokenRange <CreoleTokenCode> tokens, IEnumerable <CreoleRichTextElementType> excludedElementTypes) { var baseElementsData = new List <CreoleRichTextElementData>(); using (var baseElementProcessor = _GetHyperlinkBaseElementProcessor(_context, tokens)) while (baseElementProcessor.MoveNext()) { baseElementsData.Add(baseElementProcessor.Current); } IElementDataIterator elementDataIterator; var styleElementsIterator = _GetStyleElementIterator(_context, tokens, baseElementsData, excludedElementTypes); if (styleElementsIterator != null) { elementDataIterator = new MergeElementDataIterator(styleElementsIterator, new ElementDataCollectionIteratorAdapter(baseElementsData)); } else { elementDataIterator = new ElementDataCollectionIteratorAdapter(baseElementsData); } var elementsData = new List <CreoleRichTextElementData>(); using (elementDataIterator) while (elementDataIterator.MoveNext()) { elementsData.Add(elementDataIterator.Current); } return(_GetRootNodesFrom(tokens, elementsData)); }
internal IEnumerable <Element> Process(TokenRange <CreoleTokenCode> tokens) { var baseElementsData = new List <CreoleRichTextElementData>(); using (var baseElementProcessor = _GetBaseElementProcessor(_context, tokens)) while (baseElementProcessor.MoveNext()) { baseElementsData.Add(baseElementProcessor.Current); } var elementsData = new List <CreoleRichTextElementData>(); using (var elementDataIterator = new MergeElementDataIterator(_GetStyleElementIterator(_context, tokens, baseElementsData), new ElementDataCollectionIteratorAdapter(baseElementsData))) while (elementDataIterator.MoveNext()) { elementsData.Add(elementDataIterator.Current); } return(_GetCreoleElements(tokens, elementsData)); }
private IElementDataIterator _GetStyleElementIterator(CreoleParserContext context, TokenRange <CreoleTokenCode> tokens, IEnumerable <CreoleRichTextElementData> baseElementsData, IEnumerable <CreoleRichTextElementType> excludedElementTypes) { var processors = new List <IElementDataIterator>(); if (excludedElementTypes == null) { foreach (var styleElementFactory in _styleElementFactories) { var elementType = styleElementFactory.Key; processors.Add(new ElementProcessorFilterIterator(styleElementFactory.Value(_context, tokens, baseElementsData), elementType)); } } else { foreach (var styleElementFactory in _styleElementFactories) { var elementType = styleElementFactory.Key; if (!_Contains(excludedElementTypes, elementType)) { processors.Add(new ElementProcessorFilterIterator(styleElementFactory.Value(_context, tokens, baseElementsData), elementType)); } } } IElementDataIterator styleElementIterator = null; using (var processor = processors.GetEnumerator()) if (processor.MoveNext()) { styleElementIterator = processor.Current; while (processor.MoveNext()) { styleElementIterator = new MergeElementDataIterator(styleElementIterator, processor.Current); } } return(styleElementIterator); }