public override Span Build(int position, StringRange content, out int lastPosition) { var atPosition = content.IndexOf('@', position); lastPosition = content.IndexOf(' ', atPosition)- 1; return new UserName(content, atPosition, lastPosition); }
public override Block Build(int start, StringRange content, out int end) { int startOfLine = start; var items = new List<Item>(); Item lastItem = null; bool foundItem = false; do { int startOfItem = content.IndexOf(' ', startOfLine) + 1; int endOfItem = FindEndOfItem(content, startOfItem); IEnumerable<Span> spans = _inlineParser.Parse(new StringRange(content, startOfItem, endOfItem)); lastItem = new Item( content, startOfItem, endOfItem, spans); items.Add(lastItem); startOfLine = content.StartOfNextLine(endOfItem); if (startOfLine == -1) break; foundItem = _expression.IsMatch(content.Document, startOfLine); } while (foundItem); // special case when content ends end = content.EndOfLine(lastItem.End); return new List(content, start, end, true, items); }
public override bool CanBuild(int position, StringRange content) { var atPosition = content.IndexOf('@', position); if (atPosition == -1) return false; return true; }
public void IndexOfAfterEnd() { /* given */ const string text = "0123456789"; var stringRange = new StringRange(text, 2, 7); /* when */ /* then */ stringRange.IndexOf('8').ShouldBeEquivalentTo(-1); }
public Block Build(int start, StringRange content, out int end) { int startOfLine = start; var items = new List<LinkDefinition>(); do { var key = new StringRange( content, content.IndexOf('[', startOfLine) + 1, content.IndexOf(']', startOfLine) - 1); var urlStart = content.IndexOf(':', key.End) + 1; if (content[urlStart] == ' ') urlStart++; var url = new StringRange( content, urlStart, content.EndOfLine(startOfLine)); var item = new LinkDefinition( content, startOfLine, content.EndOfLine(startOfLine), key, url); items.Add(item); startOfLine = content.StartOfNextLine(startOfLine); if (startOfLine == -1) break; } while (_expression.IsMatch(content.Document, content.IndexOf('[', startOfLine))); // special case when content ends end = startOfLine != -1 ? content.EndOfLine(startOfLine, false) : content.End; return new LinkDefinitionList(content, start, end, items); }
public Block Build(int start, StringRange content, out int end) { // sample link to gist: https://gist.github.com/pekkah/8304465 int userNameStart = content.IndexOf(".com/") + 5; int gistIdStart = content.IndexOf('/', userNameStart) + 1; end = content.EndOfLine(gistIdStart, false); return new GistBlock( content, start, content.EndOfLine(start), new StringRange( content, userNameStart, gistIdStart - 2), new StringRange( content, gistIdStart, content.EndOfLine(gistIdStart))); }
public override Span Build(int position, StringRange content, out int lastPosition) { // update the end position lastPosition = content.IndexOf(')', position); var link = new StringRange(content, position, lastPosition); // title between [ and ] var title = new StringRange( content, link.IndexOf('[') + 1, link.IndexOf(']') - 1); // url between ( and ) var url = new StringRange( content, link.IndexOf('(') + 1, link.IndexOf(')') - 1); return new LinkSpan(content, position, lastPosition, title, url); }
public void IndexOf() { /* given */ const string text = "0123456789"; var stringRange = new StringRange(text, 2, 7); /* when */ var indexOfFour = stringRange.IndexOf('4'); /* then */ indexOfFour.ShouldBeEquivalentTo(4); }
public override Span Build(int position, StringRange content, out int lastPosition) { // title between [ and ] var title = new StringRange( content, content.IndexOf('[', position) + 1, content.IndexOf(']', position) - 1); // key between [ and ] after title var keyStart = content.IndexOf('[', title.End + 1) + 1; var keyEnd = content.IndexOf(']', keyStart) - 1; var key = new StringRange( content, keyStart, keyEnd); // update last position lastPosition = key.End + 1; return new ReferenceLinkSpan(content, position, lastPosition, title, key); }
public Block Build(int start, StringRange content, out int end) { // try reading syntax StringRange syntax = null; var endOfStartTag = content.IndexOf("```", start) + 3; var endOfStartTagLine = content.EndOfLine(endOfStartTag); if (endOfStartTagLine > endOfStartTag) { syntax = new StringRange(content.Document, endOfStartTag, endOfStartTagLine); } // start from the actual first line of the content var contentStart = content.StartOfNextLine(start); // find the end ``` by skipping the first ``` var contentEnd = content.IndexOf("```", contentStart) - 1; // skip line ending end = content.EndOfLine(contentEnd + 1); // use the content between ``` and ``` return new Codeblock(content, contentStart, contentEnd, syntax); }
public override Span Build(int position, StringRange content, out int lastPosition) { lastPosition = content.IndexOf('`', position + 1); return new CodeblockSpan(content, position + 1, lastPosition - 1); }