예제 #1
0
        protected CreoleElementProcessor(CreoleParserContext context, TokenRange <CreoleTokenCode> tokens)
        {
            Context = context;
            _tokens = tokens;

            _token         = tokens.GetEnumerator();
            _tokenHasValue = _token.MoveNext();
        }
 private CreoleRichTextElementProcessor(CreoleParserContext context, TokenRange <CreoleTokenCode> tokens, ICreoleRichTextElementDataIterator elementIterator)
 {
     _tokens  = tokens;
     Context  = context;
     _element = elementIterator;
     if (_element != null && _element.MoveNext())
     {
         _token      = _tokens.SubRange(_startIndex, (_element.Current.StartIndex - _startIndex)).GetEnumerator();
         _startIndex = _element.Current.EndIndex;
     }
     else
     {
         _element?.Dispose();
         _element    = null;
         _token      = _tokens.GetEnumerator();
         _startIndex = _tokens.Count;
     }
 }
예제 #3
0
        private string _GetCodeBlockTextFrom(TokenRange <CreoleTokenCode> tokens)
        {
            var builder = new StringBuilder();

            using (var token = tokens.GetEnumerator())
                if (token.MoveNext())
                {
                    var startIndex = (token.Current.Text.IndexOf('\n') + 1);
                    builder.Append(token.Current.Text, startIndex, token.Current.Text.Length - startIndex);

                    if (token.MoveNext())
                    {
                        var previousToken = token.Current;
                        while (token.MoveNext())
                        {
                            builder.Append(previousToken.Text);
                            previousToken = token.Current;
                        }

                        startIndex = previousToken.Text.LastIndexOf('\n');
                        if (startIndex >= 0)
                        {
                            if (startIndex > 0 && previousToken.Text[startIndex - 1] == '\r')
                            {
                                startIndex--;
                            }
                            builder.Append(previousToken.Text, 0, startIndex);
                        }
                        else
                        {
                            builder.Append(previousToken.Text);
                        }
                    }
                }

            return(builder.ToString());
        }