示例#1
0
        public TokenStream Read(string markdown, string path)
        {
            _Context = MarkdownReaderMode.None;
            _Stream  = new MarkdownStream(markdown);

            YamlHeader();

            if (_YamlHeaderOnly)
            {
                return(_Output);
            }

            while (!_Stream.EOF)
            {
                var processed = UnderlineHeader() ||
                                HashHeader() ||
                                FencedBlock() ||
                                Link() ||
                                LineBreak();

                if (!processed)
                {
                    Text();
                }
            }

            return(_Output);
        }
示例#2
0
        private void Text()
        {
            _Stream.MarkExtentStart();

            // Set the default style
            var textStyle = MarkdownTokens.None;

            var startOfLine = _Stream.IsStartOfLine;

            // Get the text
            var text = (_PreserveFormatting) ? _Stream.CaptureUntil(LineEndingCharacters, ignoreEscaping: true) : UnwrapStyleMarkers(_Stream, out textStyle);

            // Set the line ending
            var ending = GetEnding(_Stream.SkipLineEnding(max: 2));

            if (string.IsNullOrWhiteSpace(text) && !_PreserveFormatting)
            {
                return;
            }

            if (_Context != MarkdownReaderMode.List && startOfLine && IsList(text))
            {
                _Context = MarkdownReaderMode.List;

                if (_Output.Current != null && _Output.Current.Flag.IsEnding() && !_Output.Current.Flag.ShouldPreserve())
                {
                    _Output.Current.Flag |= MarkdownTokens.Preserve;
                }
            }

            // Override line ending if the line was a list item so that the line ending is preserved
            if (_Context == MarkdownReaderMode.List && ending.IsEnding())
            {
                ending |= MarkdownTokens.Preserve;
            }

            // Add the text to the output stream
            _Output.Text(text, flag: textStyle | ending);

            if (_Context == MarkdownReaderMode.List && ending.IsEnding())
            {
                _Context = MarkdownReaderMode.None;
            }
        }