Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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;
            }
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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));
        }
Пример #6
0
        /// <summary>
        /// KAGマクロの情報から入力補完用マクロの種類を返す
        /// </summary>
        /// <param name="macro"></param>
        /// <returns></returns>
        KagCompletionData.Kind getTagMacroKind(KagMacro macro)
        {
            KagCompletionData.Kind kind = KagCompletionData.Kind.KagTagName;                    //デフォルトをセット
            switch (macro.DefType)
            {
            case KagMacro.DefineType.Kag:
                kind = KagCompletionData.Kind.KagTagName;
                break;

            case KagMacro.DefineType.Kagex:
                kind = KagCompletionData.Kind.KagexTagName;
                break;

            case KagMacro.DefineType.User:
                kind = KagCompletionData.Kind.UserTagName;
                break;
            }

            return(kind);
        }
Пример #7
0
        /// <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);               //見つからなかった
        }
Пример #8
0
        /// <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);
        }