public override bool Match(InlineProcessor processor, ref StringSlice slice) { if (!ExtensionsHelper.MatchStart(ref slice, StartString, false)) { return(false); } var href = StringBuilderCache.Local(); var c = slice.CurrentChar; var saved = slice; var startChar = '\0'; int line; int column; if (c == '\'' || c == '"') { startChar = c; c = slice.NextChar(); } while (c != startChar && c != '>') { href.Append(c); c = slice.NextChar(); } if (startChar != '\0') { if (c != startChar) { return(false); } c = slice.NextChar(); } if (c != '>') { return(false); } slice.NextChar(); var xrefInline = new XrefInline { Href = href.ToString().Trim(), Span = new SourceSpan(processor.GetSourcePosition(saved.Start, out line, out column), processor.GetSourcePosition(slice.Start - 1)), Line = line, Column = column }; var htmlAttributes = xrefInline.GetAttributes(); htmlAttributes.AddPropertyIfNotExist("data-throw-if-not-resolved", "True"); processor.Inline = xrefInline; return(true); }
public override bool Match(InlineProcessor processor, ref StringSlice slice) { var c = slice.PeekCharExtra(-1); if (c == '\\') { return(false); } var saved = slice; var startChar = '\0'; int line; int column; c = slice.NextChar(); if (c == '\'' || c == '"') { startChar = c; c = slice.NextChar(); } else { return(false); } if (!c.IsAlpha()) { return(false); } var href = StringBuilderCache.Local(); while (c != startChar && c != '\0' && c != '\n') { href.Append(c); c = slice.NextChar(); } if (c != startChar) { return(false); } slice.NextChar(); var xrefInline = new XrefInline { Href = href.ToString().Trim(), Span = new SourceSpan(processor.GetSourcePosition(saved.Start, out line, out column), processor.GetSourcePosition(slice.Start - 1)), Line = line, Column = column }; var htmlAttributes = xrefInline.GetAttributes(); var sourceContent = href.Insert(0, startChar).Insert(0, '@').Append(startChar); htmlAttributes.AddPropertyIfNotExist("data-throw-if-not-resolved", "False"); htmlAttributes.AddPropertyIfNotExist("data-raw-source", sourceContent.ToString()); processor.Inline = xrefInline; return(true); }