/// <summary> /// Parses paragraph text. /// </summary> /// <param name="markdown"> The markdown text. </param> /// <returns> A parsed paragraph. </returns> internal static ParagraphBlock Parse(string markdown) { var result = new ParagraphBlock(); result.Inlines = Common.ParseInlineChildren(markdown, 0, markdown.Length); return(result); }
/// <summary> /// Parsing helper. /// </summary> /// <returns> <c>true</c> if any of the list items were parsed using the block parser. </returns> 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); }