Exemplo n.º 1
0
		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;
			}
		}
Exemplo n.º 2
0
        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;
        }