/// <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> /// <param name="list"></param> /// <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 (blockText.TrimStart().StartsWith("```")) { useBlockParser = true; } 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); }
/// <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> /// <param name="list"></param> /// <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; }
/// <summary> /// Renders a paragraph element. /// </summary> /// <param name="element"></param> /// <param name="blockUIElementCollection"></param> /// <param name="context"></param> private void RenderParagraph(ParagraphBlock element, UIElementCollection blockUIElementCollection, RenderContext context) { var paragraph = new Paragraph(); paragraph.Margin = ParagraphMargin; context.TrimLeadingWhitespace = true; RenderInlineChildren(paragraph.Inlines, element.Inlines, paragraph, context); var textBlock = CreateOrReuseRichTextBlock(blockUIElementCollection, context); textBlock.Blocks.Add(paragraph); }
/// <summary> /// Renders a paragraph element. /// </summary> /// <param name="element"></param> /// <param name="currentBlocks"></param> private void RenderPargraph(ParagraphBlock element, BlockCollection currentBlocks) { // Make a new paragraph Paragraph paragraph = new Paragraph(); // Add some padding to differentiate the blocks paragraph.Margin = new Thickness(0, 12, 0, 0); // Add it to the blocks currentBlocks.Add(paragraph); // Render the children into the para inline. bool trimTextStart = true; RenderInlineChildren(element, paragraph.Inlines, ref trimTextStart); }