private static bool ReplaceStringBuilders(ListBlock list)
{
bool usedBlockParser = false;
foreach (var listItem in list.Items)
{
// Use the inline parser if there is one paragraph, use the block parser otherwise.
var useBlockParser = listItem.Blocks.Count(block => block.Type == MarkdownBlockType.ListItemBuilder) > 1;
// Recursively replace any child lists.
foreach (var block in listItem.Blocks)
if (block is ListBlock && ReplaceStringBuilders((ListBlock)block))
useBlockParser = true;
// Parse the text content of the list items.
var newBlockList = new List<MarkdownBlock>();
foreach (var block in listItem.Blocks)
{
if (block is ListItemBuilder)
{
var blockText = ((ListItemBuilder)block).Builder.ToString();
if (useBlockParser)
{
// Parse the list item as a series of blocks.
int actualEnd;
newBlockList.AddRange(MarkdownDocument.Parse(blockText, 0, blockText.Length, quoteDepth: 0, actualEnd: out actualEnd));
usedBlockParser = true;
}
else
{
// Don't allow blocks.
var paragraph = new ParagraphBlock();
paragraph.Inlines = Common.ParseInlineChildren(blockText, 0, blockText.Length);
newBlockList.Add(paragraph);
}
}
else
newBlockList.Add(block);
}
listItem.Blocks = newBlockList;
}
return usedBlockParser;
}