/// <summary> /// 属性名リストを取得する /// </summary> /// <param name="info">現在位置の入力情報</param> /// <param name="macroList">マクロ情報リスト</param> /// <returns>マクロ名リスト</returns> ICompletionData[] getAttrNameList(KagTagKindInfo info, KagMacro[] macroList) { KagMacro macro = KagUtility.GetKagMacro(info.TagName, macroList); if (macro == null) { return(null); //マクロが見つからない } //属性を取得 resetReverseCount(); Dictionary <string, ICompletionData> table = new Dictionary <string, ICompletionData>(); table = getAttrNameListFromMacro(macro, macroList, table); //すでに書いているものは削除する foreach (string deleteAttrName in info.AttrTable.Keys) { table.Remove(deleteAttrName); } //出力用にリストを変換 ICompletionData[] list = new ICompletionData[table.Count]; int i = 0; foreach (ICompletionData data in table.Values) { list[i++] = data; } return(list); }
/// <summary> /// 現在のカーソル位置からKAGタグ・マクロ/TJSクラス・関数の定義場所へ遷移する /// </summary> public void JumpDefineFuncFromCaret() { switch (FileType.GetKrkrType(this.FileName)) { //KAGファイルの時はタグ・マクロ定義元へジャンプする case FileType.KrkrType.Kag: //カーソル位置のKAGタグ情報を取得する int colNum = GetKagTagEndFormCaret(); KagTagKindInfo info = KagUtility.GetTagKind(Document, this.ActiveTextArea.Caret.Line, colNum); if (info == null) { util.Msgbox.Error("タグ・マクロのある位置にカーソルが無いため定義へ移動できません"); return; } //KAGタグ情報からマクロ情報を取得する KagMacro macro = KagUtility.GetKagMacro(info.TagName); if (macro == null) { //タグ情報が取得できなかった util.Msgbox.Error("タグ・マクロの情報が取得できませんでした"); return; } GlobalStatus.EditorManager.LoadFile(macro.FilePath, macro.LineNumber); break; //TJSファイルの時は関数・クラス定義元へジャンプする case FileType.KrkrType.Tjs: //未実装 break; } }
/// <summary> /// KAGタグヘルプを表示する /// </summary> /// <param name="editor">エディタ</param> private void showKagTagHelp(TextEditorEx editor) { //カーソル位置のKAGタグ情報を取得する Debug.WriteLine("showKagTagHelp START"); int colNum = editor.GetKagTagEndFormCaret(); KagTagKindInfo info = KagUtility.GetTagKind(editor.Document, editor.ActiveTextArea.Caret.Line, colNum); if (info == null) { util.Msgbox.Error("タグ・マクロのある位置にカーソルが無いため検索できません"); return; } if (info.TagName == "") { return; //タグがない } //KAGタグ情報からマクロ情報を取得する KagMacro macro = KagUtility.GetKagMacro(info.TagName); if (macro == null) { //タグ情報が取得できなかった util.Msgbox.Error("タグ・マクロの情報が取得できませんでした"); return; } //URLを生成する string url = ""; if (macro.DefType == KagMacro.DefineType.Kag) //KAGのタグの時 { url = String.Format("{0}#{1}", new Uri(ConstEnvOption.Kag3TagRefPath), HttpUtility.UrlEncode(info.TagName)); } else { return; //そのほかのタグは対応するヘルプがない } switch (GlobalStatus.EnvOption.HelpHelpWindow) { case EnvOption.HelpWindowState.DockingWindow: //ドッキングウィンドウで表示 GlobalStatus.FormManager.HelpReferenceForm.Show(GlobalStatus.FormManager.MainForm.MainDockPanel); GlobalStatus.FormManager.HelpReferenceForm.Navigate(url); break; case EnvOption.HelpWindowState.DialogWindow: //ダイアログウィンドウで表示 GlobalStatus.FormManager.HelpRefDialogShow(); GlobalStatus.FormManager.HelpRefDialog.Navigate(url); break; } }
/// <summary> /// 指定したマクロ名の説明を取得する /// </summary> /// <param name="info"></param> /// <param name="macroName"></param> /// <returns></returns> private static string getTagComment(string macroName) { KagMacro macro = KagUtility.GetKagMacro(macroName); if (macro == null) { return(""); } return(macro.Comment); }
/// <summary> /// 属性値リストを取得する /// </summary> /// <param name="macro">取得するマクロオブジェクト</param> /// <param name="macroList">マクロ情報リスト</param> /// <returns>属性値リスト</returns> private ICompletionData[] getAttrValueList(KagTagKindInfo info, KagMacro[] macroList) { KagMacro macro = KagUtility.GetKagMacro(info.TagName, macroList); if (macro == null) { return(null); //マクロが見つからない } resetReverseCount(); KagMacroAttr attr = getMacroAttr(info.AttrName, macro, macroList); if (attr == null) { return(null); //属性が見つからない } return(KagCompletionAttrValue.GetCompletionDataList(attr, info)); }
/// <summary> /// マクロ属性オブジェクトを取得する /// (再帰する) /// </summary> /// <param name="attrName">取得したい属性名</param> /// <param name="macro">属性の所属するマクロオブジェクト</param> /// <param name="macroList">マクロ情報リスト</param> /// <returns>属性オブジェクト</returns> private KagMacroAttr getMacroAttr(string attrName, KagMacro macro, KagMacro[] macroList) { if (overcheckReverseCount()) { //再帰回数がオーバーしているときは何もせずに終了する return(null); } //属性リストから検索する foreach (KagMacroAttr attr in macro.AttrTable.Values) { if (attrName == attr.Name) { return(attr); //属性を見つけた } } //省略属性リストから検索する KagMacro asterMacro = null; foreach (string tagName in macro.AsteriskTagList) { asterMacro = KagUtility.GetKagMacro(tagName, macroList); if (asterMacro == null) { continue; //このマクロは見つからない } KagMacroAttr attr = getMacroAttr(attrName, asterMacro, macroList); if (attr != null) { return(attr); //属性を見つけた } } return(null); //見つからなかった }
/// <summary> /// マクロオブジェクトから属性名リストを取得する /// *再帰する /// </summary> /// <param name="macro">取得するマクロオブジェクト</param> /// <param name="macroList">マクロ情報リスト</param> /// <param name="table">取得した属性名を格納するテーブル</param> /// <returns>取得した属性名テーブル(tableをそのまま返す)</returns> private Dictionary <string, ICompletionData> getAttrNameListFromMacro(KagMacro macro , KagMacro[] macroList, Dictionary <string, ICompletionData> table) { if (overcheckReverseCount()) { //再帰回数がオーバーしているときは何もせずに終了する return(table); } //通常のマクロ属性を追加 foreach (KagMacroAttr attr in macro.AttrTable.Values) { if (table.ContainsKey(attr.Name) == false) { //存在しないときだけ追加する table.Add(attr.Name, new KagCompletionData(attr.Name, attr.Comment, KagCompletionData.Kind.AttrName)); } } //全省略マクロ属性を追加 KagMacro asterMacro = null; foreach (string macroName in macro.AsteriskTagList) { asterMacro = KagUtility.GetKagMacro(macroName, macroList); if (asterMacro == null) { continue; //このマクロは飛ばす } //自分自身を呼び出し table = getAttrNameListFromMacro(asterMacro, macroList, table); } return(table); }