コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public override bool CanBuild(int position, StringRange content)
        {
            var atPosition = content.IndexOf('@', position);

            if (atPosition == -1)
                return false;

            return true;
        }
コード例 #4
0
        public void IndexOfAfterEnd()
        {
            /* given */
            const string text = "0123456789";
            var stringRange = new StringRange(text, 2, 7);

            /* when */
            /* then */
            stringRange.IndexOf('8').ShouldBeEquivalentTo(-1);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: GistBuilder.cs プロジェクト: pekkah/Tanka.Markdown
        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)));
        }
コード例 #7
0
        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);    
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
 public override Span Build(int position, StringRange content, out int lastPosition)
 {
     lastPosition = content.IndexOf('`', position + 1);
     return new CodeblockSpan(content, position + 1, lastPosition - 1);
 }