/// <summary> /// Attempts to parse a italic 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 italic text span, or <c>null</c> if this is not a italic text span. </returns> internal static Common.InlineParseResult Parse(string markdown, int start, int maxEnd) { // Check the first char. char startChar = markdown[start]; if (start == maxEnd || (startChar != '*' && startChar != '_')) { return(null); } // Find the end of the span. The end character (either '*' or '_') must be the same as // the start character. var innerStart = start + 1; int innerEnd = Common.IndexOf(markdown, startChar, start + 1, 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 ItalicTextInline(); result.Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd); return(new Common.InlineParseResult(result, start, innerEnd + 1)); }
/// <summary> /// Renders a text 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 RenderItalicRun(InlineCollection inlineCollection, ItalicTextInline element, TextElement parent, RenderContext context) { // Create the text run Span italicSpan = new Span(); italicSpan.FontStyle = FontStyle.Italic; // Render the children into the italic inline. RenderInlineChildren(italicSpan.Inlines, element.Inlines, italicSpan, context); // Add it to the current inlines inlineCollection.Add(italicSpan); }
/// <summary> /// Attempts to parse a italic 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 italic text span, or <c>null</c> if this is not a italic text span. </returns> internal static Common.InlineParseResult Parse(string markdown, int start, int maxEnd) { // Check the first char. char startChar = markdown[start]; if (start == maxEnd || (startChar != '*' && startChar != '_')) return null; // Find the end of the span. The end character (either '*' or '_') must be the same as // the start character. var innerStart = start + 1; int innerEnd = Common.IndexOf(markdown, startChar, start + 1, 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 ItalicTextInline(); result.Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd); return new Common.InlineParseResult(result, start, innerEnd + 1); }