FormattedText GetFunctionIntelliSense(FunctionInfo functionInfo, int currentArgIndex) { var nameLine = new TextLine { new TextRun { Text = functionInfo.Name, LinkAddress = FixHelpTopic(functionInfo.HelpTopic) } }; nameLine.Add(new TextRun { Text = "(" }); if (functionInfo.ArgumentList.Count > 0) { var argNames = functionInfo.ArgumentList.Take(currentArgIndex).Select(arg => arg.Name).ToArray(); if (argNames.Length >= 1) { nameLine.Add(new TextRun { Text = string.Join(_argumentSeparator, argNames) }); } if (functionInfo.ArgumentList.Count > currentArgIndex) { if (argNames.Length >= 1) { nameLine.Add(new TextRun { Text = _argumentSeparator }); } nameLine.Add(new TextRun { Text = functionInfo.ArgumentList[currentArgIndex].Name, Style = System.Drawing.FontStyle.Bold }); argNames = functionInfo.ArgumentList.Skip(currentArgIndex + 1).Select(arg => arg.Name).ToArray(); if (argNames.Length >= 1) { nameLine.Add(new TextRun { Text = _argumentSeparator + string.Join(_argumentSeparator, argNames) }); } } } nameLine.Add(new TextRun { Text = ")" }); var descriptionLines = GetFunctionDescriptionOrNull(functionInfo); var formattedText = new FormattedText { nameLine, descriptionLines }; if (functionInfo.ArgumentList.Count > currentArgIndex) { var description = GetArgumentDescriptionOrNull(functionInfo.ArgumentList[currentArgIndex]); if (description != null) { formattedText.Add(description); } } return(formattedText); }
FormattedText GetFunctionIntelliSense(FunctionInfo functionInfo, int currentArgIndex) { // In case of the special params pattern (x, y, arg1, ...) we base the argument display on an expanded argument list, matching Excel's behaviour, // and the magic expansion in the function wizard. var argumentList = GetExpandedArgumentList(functionInfo, currentArgIndex); var nameLine = new TextLine { new TextRun { Text = functionInfo.Name, LinkAddress = FixHelpTopic(functionInfo.HelpTopic) } }; nameLine.Add(new TextRun { Text = "(" }); if (argumentList.Count > 0) { var argNames = argumentList.Take(currentArgIndex).Select(arg => arg.Name).ToArray(); if (argNames.Length >= 1) { nameLine.Add(new TextRun { Text = string.Join(_argumentSeparator, argNames) }); } if (argumentList.Count > currentArgIndex) { if (argNames.Length >= 1) { nameLine.Add(new TextRun { Text = _argumentSeparator }); } nameLine.Add(new TextRun { Text = argumentList[currentArgIndex].Name, Style = System.Drawing.FontStyle.Bold }); argNames = argumentList.Skip(currentArgIndex + 1).Select(arg => arg.Name).ToArray(); if (argNames.Length >= 1) { nameLine.Add(new TextRun { Text = _argumentSeparator + string.Join(_argumentSeparator, argNames) }); } } } nameLine.Add(new TextRun { Text = ")" }); var descriptionLines = GetFunctionDescriptionOrNull(functionInfo); var formattedText = new FormattedText { nameLine, descriptionLines }; if (argumentList.Count > currentArgIndex) { var description = GetArgumentDescription(argumentList[currentArgIndex]); formattedText.Add(description); } return(formattedText); }