in src/PSRule/Parser/RuleLexer.cs [165:210]
private static string ReadText(TokenStream stream, bool includeNonYamlFencedBlocks)
{
var sb = new StringBuilder();
while (stream.IsTokenType(MarkdownTokenType.Text, MarkdownTokenType.Link, MarkdownTokenType.FencedBlock, MarkdownTokenType.LineBreak))
{
if (stream.IsTokenType(MarkdownTokenType.Text))
{
AppendEnding(sb, stream.Peak(-1));
sb.Append(stream.Current.Text);
}
else if (stream.IsTokenType(MarkdownTokenType.Link))
{
AppendEnding(sb, stream.Peak(-1));
sb.Append(stream.Current.Meta);
if (!string.IsNullOrEmpty(stream.Current.Text))
sb.AppendFormat(Thread.CurrentThread.CurrentCulture, " ({0})", stream.Current.Text);
}
else if (stream.IsTokenType(MarkdownTokenType.LinkReference))
{
AppendEnding(sb, stream.Peak(-1));
sb.Append(stream.Current.Meta);
}
else if (stream.IsTokenType(MarkdownTokenType.FencedBlock))
{
// Only process fenced blocks if specified, and never process yaml blocks
if (!includeNonYamlFencedBlocks || string.Equals(stream.Current.Meta, "yaml", StringComparison.OrdinalIgnoreCase))
{
if (stream.PeakTokenType(-1) == MarkdownTokenType.LineBreak)
AppendEnding(sb, stream.Peak(-1));
break;
}
AppendEnding(sb, stream.Peak(-1), preserveEnding: true);
sb.Append(stream.Current.Text);
}
else if (stream.IsTokenType(MarkdownTokenType.LineBreak))
AppendEnding(sb, stream.Peak(-1));
stream.Next();
}
if (stream.EOF && stream.Peak(-1).Flag.HasFlag(MarkdownTokens.Preserve) && stream.Peak(-1).Flag.HasFlag(MarkdownTokens.LineEnding))
AppendEnding(sb, stream.Peak(-1));
return sb.ToString();
}