// Parse an autolink or HTML tag. // Assumes the subject has a '<' character at the current position. static Inline handle_pointy_brace(Subject subj) { int matchlen; string contents; // advance past first < subj.Position++; // first try to match a URL autolink matchlen = Scanner.scan_autolink_uri(subj.Buffer, subj.Position, subj.Length); if (matchlen > 0) { contents = subj.Buffer.Substring(subj.Position, matchlen - 1); var resultContents = ParseStringEntities(contents); var result = Inline.CreateLink(resultContents, contents, string.Empty); result.SourcePosition = subj.Position - 1; resultContents.SourcePosition = subj.Position; subj.Position += matchlen; result.SourceLastPosition = subj.Position; resultContents.SourceLastPosition = subj.Position - 1; return(result); } // next try to match an email autolink matchlen = Scanner.scan_autolink_email(subj.Buffer, subj.Position, subj.Length); if (matchlen > 0) { contents = subj.Buffer.Substring(subj.Position, matchlen - 1); var resultContents = ParseStringEntities(contents); var result = Inline.CreateLink(resultContents, "mailto:" + contents, string.Empty); result.SourcePosition = subj.Position - 1; resultContents.SourcePosition = subj.Position; subj.Position += matchlen; result.SourceLastPosition = subj.Position; resultContents.SourceLastPosition = subj.Position - 1; return(result); } // finally, try to match an html tag matchlen = Scanner.scan_html_tag(subj.Buffer, subj.Position, subj.Length); if (matchlen > 0) { var result = new Inline(InlineTag.RawHtml, subj.Buffer, subj.Position - 1, matchlen + 1); result.SourcePosition = subj.Position - 1; subj.Position += matchlen; result.SourceLastPosition = subj.Position; return(result); } else { // if nothing matches, just return the opening <: return(new Inline("<", subj.Position - 1, subj.Position)); } }