private ScriptToken GetFinalPartOfExpression(int currentPos, out ScriptStruct memberOfStruct, bool functionsOnly) { string charactersAfterDot; bool staticAccess; bool isThis; ScriptStruct foundType = ParsePreviousExpression(currentPos, out charactersAfterDot, out staticAccess, out isThis); memberOfStruct = foundType; ScriptToken functionTyped = null; if (charactersAfterDot.IndexOf('(') > 0) { charactersAfterDot = charactersAfterDot.Substring(0, charactersAfterDot.IndexOf('(')); } if (foundType != null) { foreach (ScriptStruct thisStruct in GetAllStructsWithMatchingName(foundType.Name)) { functionTyped = thisStruct.FindMemberFunction(charactersAfterDot); if ((!functionsOnly) && (functionTyped == null)) { functionTyped = thisStruct.FindMemberVariable(charactersAfterDot); } if (functionTyped != null) { break; } } } else { functionTyped = FindGlobalFunction(charactersAfterDot); if (functionTyped == null) { functionTyped = FindLocalVariableWithName(currentPos, charactersAfterDot); } } return functionTyped; }
private string ConstructFunctionCalltipText(ScriptFunction func, ScriptStruct owningStruct, int selectedParameter, out int selectionStart, out int selectionEnd) { string callTip = func.Type + " "; if (owningStruct != null) { callTip += owningStruct.Name + "."; } callTip += func.FunctionName + "("; selectionStart = 0; selectionEnd = 0; string[] paramList = func.ParamList.Split(','); for (int i = 0; i < paramList.Length; i++) { string thisParam = paramList[i].Trim(); if (thisParam.IndexOf('=') > 0) { thisParam = "optional " + thisParam.Substring(0, thisParam.IndexOf('=')); } if (i == selectedParameter) { selectionStart = callTip.Length; selectionEnd = callTip.Length + thisParam.Length; if (ShowEnumForParameterIfAppropriate(thisParam)) { // showing enum list rather than calltip return null; } } callTip += thisParam; if (i < paramList.Length - 1) { callTip += ", "; } } callTip += ")"; return callTip; }
private string ConstructVariableCalltipText(ScriptVariable variable, ScriptStruct owningStruct) { string callTip = variable.Type; if (variable.IsArray) { callTip += "[ ]"; } callTip += " "; if (owningStruct != null) { callTip += owningStruct.Name + "."; } callTip += variable.VariableName; return callTip; }
private void ConstructAndShowCalltip(int currentPos, int selectedParameter, ScriptStruct owningStruct, ScriptToken func) { int selectionStart = 0, selectionEnd = 0; string callTip; if (func is ScriptFunction) { callTip = ConstructFunctionCalltipText((ScriptFunction)func, owningStruct, selectedParameter, out selectionStart, out selectionEnd); } else { callTip = ConstructVariableCalltipText((ScriptVariable)func, owningStruct); } if (callTip != null) { if (!string.IsNullOrEmpty(func.Description)) { callTip += "\n" + func.Description; } this.scintillaControl1.CallTipShow(currentPos, callTip); this.scintillaControl1.CallTipSetHlt(selectionStart, selectionEnd); } }