/// <summary> /// ツールチップで表示するテキストを取得する /// </summary> /// <param name="document"></param> /// <param name="lineNumber"></param> /// <param name="colNumber"></param> /// <returns></returns> public static string GetText(ScintillaNet.ScintillaControl sci, int position) { if (sci == null) { return(""); //ドキュメントがないとき } string tip = ""; string lineText = KagUtility.GetKagLineText(sci, position); string word = sci.GetWordFromPosition(position); KagTagKindInfo info = KagUtility.GetTagKind(lineText); if (info == null) { return(""); //取得できなかった } switch (info.Kind) { case KagTagKindInfo.KagKind.KagTagName: tip = getTagComment(word); break; case KagTagKindInfo.KagKind.AttrName: tip = getTagAttrComment(word, info); break; default: break; //不明とか属性値は何もしない } return(tip); }
/// <summary> /// KAG入力補完リストに表示するアイテムリストを返す /// </summary> /// <param name="fileName">ファイル名</param> /// <param name="textArea">アクティブなテキストエディタ</param> /// <param name="charTyped">入力された文字列</param> /// <returns>入力補完アイテムリスト</returns> public List <ICompletionListItem> GenerateCompletionData(ScintillaControl sci, char charTyped) { KagMacro[] macroList = PluginMain.ParserSrv.GetKagMacroList(); if (macroList.Length == 0) { return(null); //一つもないときはリストを表示しない } string lineText = KagUtility.GetKagLineText(sci, sci.CurrentPos); if (KagUtility.ExistLineHead(lineText, ';')) { return(null); //コメント行のとき } if (KagUtility.ExistLineHead(lineText, '*')) { return(null); //ラベル行のとき } m_preSelection = null; List <ICompletionListItem> list = null; KagTagKindInfo info = KagUtility.GetTagKind(lineText); if (charTyped == '[') //タグ名? { if (KagUtility.ExistLineHead(lineText, '@')) { return(null); //@タグがある } if (info.StrMode) { return(null); //文字列表示中 } //タグ入力 list = getMacroNameList(info, macroList, "", ""); } else if (charTyped == '@') //タグ名? { if (!KagUtility.ExistLineHead(lineText, '@')) { return(null); //@タグがない } if (lineText.Trim(new char[] { ' ', '\0', '\t' }) != "@") { return(null); //@タグではない } if (info.StrMode) { return(null); } //タグ入力 list = getMacroNameList(info, macroList, "", ""); } else if (charTyped == ' ') //属性名? { if ((info.Kind == KagTagKindInfo.KagKind.Unknown) || (info.StrMode == true)) { return(null); //属性名ではないので何もしない } //属性名 list = getAttrNameList(info, macroList); } else if (charTyped == '=') //属性値? { if (info.Kind != KagTagKindInfo.KagKind.AttrValue) { return(null); //属性値ではないので何もしない } //属性値 list = getAttrValueList(info, macroList); } else if (charTyped == '\0') //その他(Ctrl+Space) { switch (info.Kind) { case KagTagKindInfo.KagKind.KagTagName: if (info.StrMode) { return(null); } //タグ入力 list = getMacroNameList(info, macroList, "", ""); break; case KagTagKindInfo.KagKind.Unknown: if (info.StrMode) { return(null); } //タグ入力 list = getMacroNameList(info, macroList, "[", "]"); break; case KagTagKindInfo.KagKind.AttrName: if (info.StrMode) { return(null); } //属性入力 list = getAttrNameList(info, macroList); break; case KagTagKindInfo.KagKind.AttrValue: //属性値入力 list = getAttrValueList(info, macroList); break; default: return(null); } //Debug.WriteLine("info=" + info.ToString()); m_preSelection = getCompReplaceText(sci, info); } else { return(null); //何も表示しない } if (list == null || list.Count == 0) { return(null); //一つもないとき } return(list); }