本文整理汇总了C#中IVsTextLines.GetLineCount方法的典型用法代码示例。如果您正苦于以下问题:C# IVsTextLines.GetLineCount方法的具体用法?C# IVsTextLines.GetLineCount怎么用?C# IVsTextLines.GetLineCount使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IVsTextLines
的用法示例。
在下文中一共展示了IVsTextLines.GetLineCount方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SearchForCodeBlocks
// »щет в исходном файле все блоки, обрамленные прагмой #line N / #line default
private void SearchForCodeBlocks(IVsTextLines buffer)
{
ErrorHandler.ThrowOnFailure(buffer.LockBufferEx((uint)BufferLockFlags.BLF_READ));
try
{
int totalLines;
ErrorHandler.ThrowOnFailure(buffer.GetLineCount(out totalLines));
var state = ParseState.WaitForBlockStart;
var blockSpan = new TextSpanAndCookie();
for (int line = 0; line < totalLines; ++line)
{
int lineLen;
ErrorHandler.ThrowOnFailure(buffer.GetLengthOfLine(line, out lineLen));
string lineText;
ErrorHandler.ThrowOnFailure(buffer.GetLineText(line, 0, line, lineLen, out lineText));
if (state == ParseState.WaitForBlockStart)
{
var match = _linePragmaRegex.Match(lineText);
if (match.Success)
{
blockSpan.ulHTMLCookie = uint.Parse(match.Groups[1].Value, NumberStyles.Integer, CultureInfo.InvariantCulture);
blockSpan.CodeSpan = new TextSpan();
blockSpan.CodeSpan.iStartLine = line + 1;
blockSpan.CodeSpan.iStartIndex = 0;
state = ParseState.WaitForBlockEnd;
}
}
else
{
if (lineText.Trim().StartsWith("#line default", StringComparison.InvariantCultureIgnoreCase))
{
blockSpan.CodeSpan.iEndLine = line - 1;
buffer.GetLengthOfLine(blockSpan.CodeSpan.iEndLine, out blockSpan.CodeSpan.iEndIndex);
blocks.Add(blockSpan);
blockSpan = new TextSpanAndCookie();
state = ParseState.WaitForBlockStart;
}
}
}
}
finally
{
// Make sure that the buffer is always unlocked when we exit this function.
buffer.UnlockBufferEx((uint)BufferLockFlags.BLF_READ);
}
}
示例2: addMarkersToDocument
private static void addMarkersToDocument(IVsTextLines textLines)
{
int lineCount;
textLines.GetLineCount(out lineCount);
for (int i = 0; i < lineCount; ++i)
{
string text;
int len;
textLines.GetLengthOfLine(i, out len);
textLines.GetLineText(i, 0, i, len, out text);
string cmt = "//";
string issueKey = "PL-1357";
if (text == null || !text.Contains(cmt) || !text.Contains(issueKey)) continue;
int cmtIdx = text.IndexOf(cmt);
int idx = text.IndexOf(issueKey);
if (idx < cmtIdx) continue;
addMarker(textLines, i, idx, idx + issueKey.Length);
}
}
示例3: ReformatCode
public static List<EditSpan> ReformatCode(IVsTextLines pBuffer, TextSpan span, int tabSize)
{
string filePath = FilePathUtilities.GetFilePath(pBuffer);
// Return dynamic scanner based on file extension
List<EditSpan> changeList = new List<EditSpan>();
int nbLines;
pBuffer.GetLineCount(out nbLines);
string codeToFormat;
int lastLine;
int lastLineIndex;
pBuffer.GetLastLineIndex(out lastLine, out lastLineIndex);
pBuffer.GetLineText(0, 0, lastLine, lastLineIndex, out codeToFormat);
NShaderScanner shaderScanner = NShaderScannerFactory.GetShaderScanner(filePath);
Scanner lexer = shaderScanner.Lexer;
lexer.SetSource(codeToFormat, 0);
int spanStart;
int spanEnd;
pBuffer.GetPositionOfLineIndex(span.iStartLine, span.iStartIndex, out spanStart);
pBuffer.GetPositionOfLineIndex(span.iEndLine, span.iEndIndex, out spanEnd);
int state = 0;
int start, end;
ShaderToken token = (ShaderToken) lexer.GetNext(ref state, out start, out end);
List<int> brackets = new List<int>();
List<int> delimiters = new List<int>();
// !EOL and !EOF
int level = 0;
int startCopy = 0;
int levelParenthesis = 0;
while (token != ShaderToken.EOF)
{
switch (token)
{
case ShaderToken.LEFT_PARENTHESIS:
levelParenthesis++;
break;
case ShaderToken.RIGHT_PARENTHESIS:
levelParenthesis--;
if ( levelParenthesis < 0 )
{
levelParenthesis = 0;
}
break;
case ShaderToken.LEFT_BRACKET:
level++;
if (codeToFormat[start] == '{' && start >= spanStart && end <= spanEnd)
{
Match match = matchBraceStart.Match(codeToFormat, start);
StringBuilder codeFormatted = new StringBuilder();
codeFormatted.Append("{\r\n");
int levelToIndentNext = level;
if (match.Groups.Count == 2)
{
string matchStr = match.Groups[1].Value;
levelToIndentNext--;
}
for (int i = 0; i < levelToIndentNext; i++)
{
for (int j = 0; j < tabSize; j++)
{
codeFormatted.Append(' ');
}
}
if (match.Groups.Count == 2)
{
codeFormatted.Append("}\r\n");
}
TextSpan editTextSpan = new TextSpan();
pBuffer.GetLineIndexOfPosition(start,
out editTextSpan.iStartLine,
out editTextSpan.iStartIndex);
pBuffer.GetLineIndexOfPosition(startCopy + match.Index + match.Length,
out editTextSpan.iEndLine,
out editTextSpan.iEndIndex);
changeList.Add(new EditSpan(editTextSpan, codeFormatted.ToString()));
}
break;
case ShaderToken.RIGHT_BRACKET:
level--;
if (level < 0)
{
level = 0;
}
brackets.Add(start);
break;
case ShaderToken.DELIMITER:
if (codeToFormat[start] == ';' && start >= spanStart && end <= spanEnd && levelParenthesis == 0)
{
Match match = matchEndOfStatement.Match(codeToFormat, start);
//.........这里部分代码省略.........
示例4: Normalize
/// <devdoc>Pins the text span to valid line bounds returned from IVsTextLines.</devdoc>
internal static void Normalize(ref TextSpan span, IVsTextLines textLines)
{
MakePositive(ref span);
if (textLines == null) return;
//adjust max. lines
int lineCount;
if (NativeMethods.Failed(textLines.GetLineCount(out lineCount)))
return;
span.iEndLine = Math.Min(span.iEndLine, lineCount - 1);
//make sure the start is still before the end
if (!IsPositive(span))
{
span.iStartLine = span.iEndLine;
span.iStartIndex = span.iEndIndex;
}
//adjust for line length
int lineLength;
if (NativeMethods.Failed(textLines.GetLengthOfLine(span.iStartLine, out lineLength)))
return;
span.iStartIndex = Math.Min(span.iStartIndex, lineLength);
if (NativeMethods.Failed(textLines.GetLengthOfLine(span.iEndLine, out lineLength)))
return;
span.iEndIndex = Math.Min(span.iEndIndex, lineLength);
}
示例5: CollapseToDefinitions
public int CollapseToDefinitions(IVsTextLines textLines, IVsOutliningSession session){
if (textLines == null || session == null) return (int)HResult.E_INVALIDARG;
int lastLine;
int lastIdx;
string text;
textLines.GetLineCount(out lastLine );
textLines.GetLengthOfLine(--lastLine, out lastIdx);
textLines.GetLineText(0, 0, lastLine, lastIdx, out text);
NewOutlineRegion[] outlineRegions = this.GetCollapsibleRegions(text, VsShell.GetFilePath(textLines));
if (outlineRegions != null && outlineRegions.Length > 0)
session.AddOutlineRegions((uint)ADD_OUTLINE_REGION_FLAGS.AOR_PRESERVE_EXISTING, outlineRegions.Length, outlineRegions);
return 0;
}
示例6: GetBufferSpan
/// <summary>
/// Get entire TextLines buffer as a TextSpan
/// </summary>
/// <param name="pBuffer"></param>
/// <returns></returns>
private static TextSpan GetBufferSpan(IVsTextLines textBuffer)
{
ArgumentValidation.CheckForNullReference(textBuffer, "textBuffer");
var lineCount = 0;
var charCount = 0;
// Get line count for the whole buffer.
var result = textBuffer.GetLineCount(out lineCount);
if (result == VSConstants.S_OK
&& lineCount > 0)
{
// Get char count for last line.
result = textBuffer.GetLengthOfLine(lineCount - 1, out charCount);
if (result != VSConstants.S_OK)
{
charCount = 0;
}
}
else
{
lineCount = 0;
}
// Create a TextSpan from begin to end of the text buffer.
var span = new TextSpan();
span.iStartLine = 0;
span.iStartIndex = 0;
span.iEndLine = lineCount - 1 > 0 ? lineCount - 1 : 0;
span.iEndIndex = charCount > 0 ? charCount : 0;
return span;
}
示例7: GetTextFromVsTextLines
internal static string GetTextFromVsTextLines(IVsTextLines vsTextLines) {
int lines;
int lastLineLength;
VSErrorHandler.ThrowOnFailure(vsTextLines.GetLineCount(out lines));
VSErrorHandler.ThrowOnFailure(vsTextLines.GetLengthOfLine(lines - 1, out lastLineLength));
string text;
VSErrorHandler.ThrowOnFailure(vsTextLines.GetLineText(0, 0, lines - 1, lastLineLength, out text));
return text;
}
示例8: GetEntireBufferContent
private List<String> GetEntireBufferContent(IVsTextLines lines)
{
var list = new List<String>();
int lineCount = 0;
lines.GetLineCount(out lineCount);
for (int i = 0; i < lineCount; i++)
{
list.Add(GetLineContent(lines, i));
}
return list;
}
示例9: SearchForCodeBlocks
private void SearchForCodeBlocks(IVsTextLines buffer)
{
// We don't want any change in the buffer while we are parsing,
// so we have to lock it.
ErrorHandler.ThrowOnFailure(buffer.LockBufferEx((uint)BufferLockFlags.BLF_READ));
try {
// Find the total number of lines in the buffer.
int totalLines;
ErrorHandler.ThrowOnFailure(buffer.GetLineCount(out totalLines));
// Set the initial values for the variables used during the parsing.
SimpleParserState state = SimpleParserState.WaitForExternalSource;
TextSpanAndCookie blockSpan = new TextSpanAndCookie();
// Parse all the lines in the buffer
for (int line = 0; line < totalLines; ++line) {
// Get the text of the current line.
int lineLen;
ErrorHandler.ThrowOnFailure(buffer.GetLengthOfLine(line, out lineLen));
if (0 == lineLen) {
// The line is empty, no point in parsing it.
continue;
}
string lineText;
ErrorHandler.ThrowOnFailure(buffer.GetLineText(line, 0, line, lineLen, out lineText));
// Create the tokenizer.
CompilerContext context = new CompilerContext("", new QuietCompilerSink());
using (SystemState systemState = new SystemState()) {
tokenizer = new Tokenizer(lineText.ToCharArray(), true, systemState, context);
Token token = null;
string commentText;
// Read all the token looking for the code blocks inside a Snippet Statements
// nested in an External Source statement. Note that the standard IronPython
// parser does not return such statements and this is the reason for this
// parser.
while (!tokenizer.IsEndOfFile) {
token = tokenizer.Next();
// This parser is strange in that it is only interested in comments:
// an external code statement is in the form
// #ExternalSource("PathOfTheOriginalFile", originalLineNumber)
// ... (some code) ...
// #End ExternalSource
// and a snippet statement is
// # Snippet Statement
// ... (some code) ...
// #End Snippet Statement
// So if we want to find the text region inside a snippet nested
// inside an external source, we are only interested in the comment tokens.
if (TokenKind.Comment != token.Kind) {
continue;
}
// The comments are line comments, so the comment's text is everything that
// is after the beginning of the comment.
commentText = CleanCommentStart(lineText.Substring(tokenizer.StartLocation.Column));
if (string.IsNullOrEmpty(commentText)) {
continue;
}
switch (state) {
case SimpleParserState.WaitForExternalSource:
// This function returns a non zero value only if the comment text
// is a valid external source statment.
blockSpan.ulHTMLCookie = ParseExternalSource(commentText);
if (0 != blockSpan.ulHTMLCookie) {
// The CodeDOM provider is adding 1 to the line number, but in this
// case the number is actualy the HTML editor's cookie, so we have to
// restore the original value.
blockSpan.ulHTMLCookie -= 1;
state = SimpleParserState.WaitForSnippet;
}
break;
case SimpleParserState.WaitForSnippet:
// Check if this comment is the beginning of a snippet block.
if (IsBeginSnippet(commentText)) {
// This is the beginning of a snippet block, so
// the actual code will start at the beginning of the
// next line.
blockSpan.CodeSpan.iStartLine = line + 1;
// Set the default for the start index.
blockSpan.CodeSpan.iStartIndex = 0;
// Now we have to find the end of the snippet section
// to complete the span of the code.
state = SimpleParserState.WaitForEndSnippet;
} else if (IsEndExternalSource(commentText)) {
// This was and external block not related to the HTML editor.
// Reset the text span and wait for the next external source.
blockSpan = new TextSpanAndCookie();
state = SimpleParserState.WaitForExternalSource;
}
break;
case SimpleParserState.WaitForEndSnippet:
if (IsEndSnippet(commentText)) {
//.........这里部分代码省略.........
示例10: TextSpanNormalize
public static void TextSpanNormalize(ref TextSpan span, IVsTextLines textLines ) {
TextSpanMakePositive(ref span );
if (textLines == null) return;
//adjust max. lines
int lineCount;
try {
textLines.GetLineCount(out lineCount );
} catch (Exception) {
return;
}
span.iEndLine = Math.Min( span.iEndLine, lineCount-1 );
//make sure the start is still before the end
if (!TextSpanPositive( span)) {
span.iStartLine = span.iEndLine;
span.iStartIndex = span.iEndIndex;
}
//adjust for line length
int lineLength;
try {
textLines.GetLengthOfLine( span.iStartLine, out lineLength );
} catch (Exception) {
return;
}
span.iStartIndex = Math.Min( span.iStartIndex, lineLength );
try {
textLines.GetLengthOfLine( span.iEndLine, out lineLength );
} catch (Exception) {
return;
}
span.iEndIndex = Math.Min( span.iEndIndex, lineLength );
}