/// <summary> /// Attempts to parse a bold text span. /// </summary> /// <param name="markdown"> The markdown text. </param> /// <param name="start"> The location to start parsing. </param> /// <param name="maxEnd"> The location to stop parsing. </param> /// <returns> A parsed bold text span, or <c>null</c> if this is not a bold text span. </returns> internal static Common.InlineParseResult Parse(string markdown, int start, int maxEnd) { if (start >= maxEnd - 1) { return(null); } // Check the start sequence. string startSequence = markdown.Substring(start, 2); if (startSequence != "**" && startSequence != "__") { return(null); } // Find the end of the span. The end sequence (either '**' or '__') must be the same // as the start sequence. var innerStart = start + 2; int innerEnd = Common.IndexOf(markdown, startSequence, innerStart, maxEnd); if (innerEnd == -1) { return(null); } // The span must contain at least one character. if (innerStart == innerEnd) { return(null); } // The first character inside the span must NOT be a space. if (Common.IsWhiteSpace(markdown[innerStart])) { return(null); } // The last character inside the span must NOT be a space. if (Common.IsWhiteSpace(markdown[innerEnd - 1])) { return(null); } // We found something! var result = new BoldTextInline(); result.Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd); return(new Common.InlineParseResult(result, start, innerEnd + 2)); }
/// <summary> /// Renders a bold run element. /// </summary> /// <param name="inlineCollection"> The list to add to. </param> /// <param name="element"> The parsed inline element to render. </param> /// <param name="parent"> The container element. </param> /// <param name="context"> Persistent state. </param> private void RenderBoldRun(InlineCollection inlineCollection, BoldTextInline element, TextElement parent, RenderContext context) { // Create the text run Span boldSpan = new Span(); boldSpan.FontWeight = FontWeights.Bold; // Render the children into the bold inline. RenderInlineChildren(boldSpan.Inlines, element.Inlines, boldSpan, context); // Add it to the current inlines inlineCollection.Add(boldSpan); }
/// <summary> /// Attempts to parse a bold text span. /// </summary> /// <param name="markdown"> The markdown text. </param> /// <param name="start"> The location to start parsing. </param> /// <param name="maxEnd"> The location to stop parsing. </param> /// <returns> A parsed bold text span, or <c>null</c> if this is not a bold text span. </returns> internal static Common.InlineParseResult Parse(string markdown, int start, int maxEnd) { if (start >= maxEnd - 1) return null; // Check the start sequence. string startSequence = markdown.Substring(start, 2); if (startSequence != "**" && startSequence != "__") return null; // Find the end of the span. The end sequence (either '**' or '__') must be the same // as the start sequence. var innerStart = start + 2; int innerEnd = Common.IndexOf(markdown, startSequence, innerStart, maxEnd); if (innerEnd == -1) return null; // The span must contain at least one character. if (innerStart == innerEnd) return null; // The first character inside the span must NOT be a space. if (Common.IsWhiteSpace(markdown[innerStart])) return null; // The last character inside the span must NOT be a space. if (Common.IsWhiteSpace(markdown[innerEnd - 1])) return null; // We found something! var result = new BoldTextInline(); result.Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd); return new Common.InlineParseResult(result, start, innerEnd + 2); }