private bool TryFindOpeningBrace(TextLocation closeBraceLoc, out TextLocation openBraceLoc) { var app = ProbeNppPlugin.Instance; var source = app.GetText(app.Start, app.CurrentLocation); var sourceLength = source.Length; var found = false; var openLoc = closeBraceLoc; var parser = new TokenParser.Parser(source); while (parser.ReadNestable()) { if (parser.TokenType == TokenParser.TokenType.Nested && parser.TokenText.EndsWith("}") && parser.Position.Offset == sourceLength) { openLoc = parser.TokenStartPostion.ToNppSharpTextLocation(); found = true; } } if (found) { openBraceLoc = openLoc; return true; } else { openBraceLoc = closeBraceLoc; return false; } }
private bool GetFunctionSignatureHighlightRange(string sig, int argToHighlight, out int startIndex, out int length) { // Get the last set of closed brackets var parser = new TokenParser.Parser(sig); int argsStart = -1; int argsStartUnclosed = -1; int argsEnd = -1; while (parser.ReadNestable()) { if (parser.TokenType == TokenParser.TokenType.Nested && parser.TokenText.StartsWith("(")) { argsStart = parser.TokenStartPostion.Offset + 1; argsEnd = parser.Position.Offset - 1; } else if (parser.TokenType == TokenParser.TokenType.Operator && parser.TokenText == "(") { argsStartUnclosed = parser.TokenStartPostion.Offset; } } if (argsStart == -1) { argsStart = argsStartUnclosed; argsEnd = sig.Length; } if (argsStart == -1) { startIndex = length = 0; return false; } // Parse the argument text to get the parameters var args = parser.GetText(argsStart, argsEnd - argsStart); parser.SetSource(args); int argCount = 0; int argStart = 0; while (parser.ReadNestable()) { if (parser.TokenType == TokenParser.TokenType.Operator && parser.TokenText == ",") { if (argCount == argToHighlight) { startIndex = argStart + argsStart; length = parser.TokenStartPostion.Offset - argStart; return true; } else { argCount++; argStart = parser.Position.Offset; } } } startIndex = argStart + argsStart; length = parser.Position.Offset - argStart; return true; }