public GetLineInfoForLine ( int lineNumber ) : LineInfo | ||
lineNumber | int | The line number. |
return | LineInfo |
/// <summary> /// Completely populate all Region property members. Missing data /// is computed based on the values that are already present. /// </summary> /// <param name="region"></param> /// <param name="newLineIndex"></param> public static void Populate(this Region region, NewLineIndex newLineIndex) { if (region == null) { throw new ArgumentNullException(nameof(region)); } if (newLineIndex == null) { throw new ArgumentNullException(nameof(newLineIndex)); } // A call to Populate is an implicit indicator that we are working // with a text region (otherwise the offset and length would be // sufficient data to constitute the region). if (region.StartLine == 0) { OffsetInfo offsetInfo = newLineIndex.GetOffsetInfoForOffset(region.Offset); region.StartLine = offsetInfo.LineNumber; region.StartColumn = offsetInfo.ColumnNumber; offsetInfo = newLineIndex.GetOffsetInfoForOffset(region.Offset + region.Length); region.EndLine = offsetInfo.LineNumber; region.EndColumn = offsetInfo.ColumnNumber; } else { // Make endColumn and endLine explicit, if not expressed if (region.EndLine == 0) { region.EndLine = region.StartLine; } if (region.StartColumn == 0) { region.StartColumn = 1; } if (region.EndColumn == 0) { region.EndColumn = region.StartColumn; } LineInfo lineInfo = newLineIndex.GetLineInfoForLine(region.StartLine); region.Offset = lineInfo.StartOffset + (region.StartColumn - 1); lineInfo = newLineIndex.GetLineInfoForLine(region.EndLine); region.Length = lineInfo.StartOffset + (region.EndColumn - 1) - region.Offset; } }
private void PopulateCharLength(NewLineIndex lineIndex, Region region) { // Populated at this point: StartLine, EndLine, StartColumn, EndColumn, CharOffset Assert(region.StartLine > 0); Assert(region.EndLine > 0); Assert(region.StartColumn > 0); Assert(region.EndColumn > 0); Assert(region.CharOffset > 0 || (region.StartLine == 1 && region.StartColumn == 1)); LineInfo lineInfo = lineIndex.GetLineInfoForLine(region.EndLine); int charLength = lineInfo.StartOffset; charLength -= region.CharOffset; charLength += region.EndColumn - 1; if (region.CharLength == 0) { region.CharLength = charLength; } Assert(region.CharLength == charLength); }
private static void PopulateCharOffset(NewLineIndex lineIndex, Region region, string fileText) { // Populated at this point: StartLine, EndLine, StartColumn, EndColumn Debug.Assert(region.StartLine > 0); Debug.Assert(region.EndLine > 0); Debug.Assert(region.StartColumn > 0); Debug.Assert(region.EndColumn > 0); LineInfo lineInfo = lineIndex.GetLineInfoForLine(region.StartLine); // Now we have the offset of the starting line. Populate region.CharOffset. int offset = lineInfo.StartOffset; offset += region.StartColumn - 1; if (region.CharOffset == 0) { region.CharOffset = offset; } Debug.Assert(region.CharOffset == offset); }
private void PopulateEndColumn(NewLineIndex lineIndex, Region region, string fileText) { // Populated at this point: StartLine, EndLine, StartColumn Assert(region.StartLine > 0); Assert(region.StartColumn > 0); Assert(region.EndLine > 0); if (region.EndColumn == 0) { // No explicit end column. Increment from end line through // the end of the line, excluding new line characters LineInfo lineInfo = lineIndex.GetLineInfoForLine(region.EndLine); int endColumnOffset = lineInfo.StartOffset; while (endColumnOffset < fileText.Length && !NewLineIndex.s_newLineCharSet.Contains(fileText[endColumnOffset])) { endColumnOffset++; } // End columns are 1-indexed region.EndColumn = endColumnOffset - lineInfo.StartOffset + 1; } }
/// <summary> /// Completely populate all Region property members. Missing data /// is computed based on the values that are already present. /// </summary> /// <param name="region"></param> /// <param name="newLineIndex"></param> public static void Populate(this Region region, NewLineIndex newLineIndex) { if (region == null) { throw new ArgumentNullException(nameof(region)); } if (newLineIndex == null) { throw new ArgumentNullException(nameof(newLineIndex)); } // A call to Populate is an implicit indicator that we are working // with a text region (otherwise the offset and length would be // sufficient data to constitute the region). if (region.StartLine == 0) { OffsetInfo offsetInfo = newLineIndex.GetOffsetInfoForOffset(region.Offset); region.StartLine = offsetInfo.LineNumber; region.StartColumn = offsetInfo.ColumnNumber; offsetInfo = newLineIndex.GetOffsetInfoForOffset(region.Offset + region.Length); region.EndLine = offsetInfo.LineNumber; region.EndColumn = offsetInfo.ColumnNumber; } else { // Make endColumn and endLine explicit, if not expressed if (region.EndLine == 0) { region.EndLine = region.StartLine; } if (region.StartColumn == 0) { region.StartColumn = 1; } if (region.EndColumn == 0) { region.EndColumn = region.StartColumn; } LineInfo lineInfo = newLineIndex.GetLineInfoForLine(region.StartLine); region.Offset = lineInfo.StartOffset + (region.StartColumn - 1); lineInfo = newLineIndex.GetLineInfoForLine(region.EndLine); region.Length = lineInfo.StartOffset + (region.EndColumn - 1) - region.Offset; } }