Exemplo n.º 1
0
        public DocSpan Map(SourceSpan span)
        {
            int        generatedStartLine = span.Start.Line;
            int        index          = _spans.BinarySearch(span, _comparer);
            SourceSpan containingSpan = (SourceSpan)_spans[index];
            DocSpan    docSpan        = _mappings[containingSpan];

            int rawStartIndex = docSpan.Span.Start.Index + span.Start.Index - containingSpan.Start.Index;
            int lineOffSet    = generatedStartLine - containingSpan.Start.Line;
            int rawStartLine  = docSpan.Span.Start.Line + lineOffSet;
            int rawStartColumn;

            if (lineOffSet == 0)
            {
                rawStartColumn = docSpan.Span.Start.Column + span.Start.Column;
            }
            else
            {
                rawStartColumn = span.Start.Column;
            }
            int lines       = span.End.Line - generatedStartLine;
            int rawEndIndex = rawStartIndex + span.End.Index + span.Start.Index;
            int rawEndLine  = rawStartLine + lines;
            int rawEndColumn;

            if (lines == 0)
            {
                rawEndColumn = rawStartColumn + span.End.Column - span.Start.Column;
            }
            else
            {
                rawEndColumn = span.End.Column;
            }
            return(new DocSpan(docSpan.Uri,
                               new SourceSpan(
                                   new SourceLocation(rawStartIndex, rawStartLine, rawStartColumn),
                                   new SourceLocation(rawEndIndex, rawEndLine, rawEndColumn)
                                   )
                               ));
        }
Exemplo n.º 2
0
 public void AddMapping(SourceSpan generatedSpan, DocSpan span)
 {
     _spans.Add(generatedSpan);
     _mappings[generatedSpan] = span;
 }