Example #1
0
        /// <summary>
        /// 属性名リストを取得する
        /// </summary>
        /// <param name="info">現在位置の入力情報</param>
        /// <param name="macroList">マクロ情報リスト</param>
        /// <returns>マクロ名リスト</returns>
        public static KagMacroAttr GetKagMacroAttr(string attrName, KagTagKindInfo info, KagMacro[] macroList)
        {
            //マクロを取得
            KagMacro macro = KagUtility.GetKagMacro(info.TagName, macroList);

            if (macro == null)
            {
                return(null);                   //マクロが見つからない
            }

            //属性を取得
            Dictionary <string, KagMacroAttr> table = new Dictionary <string, KagMacroAttr>();

            table = getAttrNameListFromMacro(macro, macroList, table, 0);

            //属性を検索する
            KagMacroAttr attr = null;

            if (table.ContainsKey(attrName))
            {
                attr = table[attrName];
            }

            return(attr);
        }
Example #2
0
        /// <summary>
        /// KAGタグの情報をエディタドキュメント情報から取得し返す
        /// </summary>
        /// <param name="document">エディタのドキュメント情報</param>
        /// <param name="lineNumber">行番号</param>
        /// <param name="colNumber">カーソル位置を表す桁番号</param>
        /// <returns>KAGタグ情報(見つからなかったときはnullを返す)</returns>
        public static KagTagKindInfo GetTagKind(IDocument document, int lineNumber, int colNumber)
        {
            if (document == null)
            {
                return(null);                   //ドキュメントがないとき
            }
            LineSegment lineSeg = document.GetLineSegment(lineNumber);

            if (lineSeg == null)
            {
                return(null);                   //情報が無いとき
            }

            string lineText = document.GetText(lineSeg);

            if (colNumber < lineText.Length)
            {
                lineText = lineText.Substring(0, colNumber);
            }
            if (KagUtility.ExistLineHead(lineText, ';'))
            {
                return(null);                   //コメント行のとき
            }
            if (KagUtility.ExistLineHead(lineText, '*'))
            {
                return(null);                   //ラベル行のとき
            }

            KagTagKindInfo info = KagUtility.GetTagKind(lineText);

            return(info);
        }
Example #3
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;
            }
        }
Example #4
0
        /// <summary>
        /// ツールチップで表示するテキストを取得する
        /// </summary>
        /// <param name="document"></param>
        /// <param name="lineNumber"></param>
        /// <param name="colNumber"></param>
        /// <returns></returns>
        public static string GetText(IDocument document, int lineNumber, int colNumber)
        {
            if (document == null)
            {
                return(null);                   //ドキュメントがないとき
            }

            string         tip  = "";
            string         word = TextUtilities.GetWordAt(document, document.PositionToOffset(new Point(colNumber, lineNumber)));
            KagTagKindInfo info = KagUtility.GetTagKind(document, lineNumber, colNumber);

            if (info == null)
            {
                return("");                     //取得できなかった
            }
            switch (info.Kind)
            {
            case KagCompletionData.Kind.KagTagName:
                tip = getTagComment(word);
                break;

            case KagCompletionData.Kind.AttrName:
                tip = getTagAttrComment(word, info);
                break;

            default:
                break;                          //不明とか属性値は何もしない
            }

            return(tip);
        }
Example #5
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;
            }
        }
Example #6
0
        /// <summary>
        /// 指定した属性の説明を取得する
        /// </summary>
        /// <param name="info"></param>
        /// <param name="attrName"></param>
        /// <returns></returns>
        private static string getTagAttrComment(string attrName, KagTagKindInfo info)
        {
            KagMacro[] macroList = GlobalStatus.ParserSrv.GetKagMacroList();
            if (macroList.Length == 0)
            {
                return("");                     //一つもないとき
            }

            KagMacroAttr attr = KagUtility.GetKagMacroAttr(attrName, info, macroList);

            if (attr == null)
            {
                return("");                     //属性が取得できなかったとき
            }

            return(attr.Comment);
        }
Example #7
0
        /// <summary>
        /// 現在のカーソル位置にある定義(KAGのときはタグ・マクロ、TJSのときはクラス・関数)をGrep検索する
        /// </summary>
        public void SearchGrepReferenceDefineFromCaret()
        {
            switch (FileType.GetKrkrType(this.FileName))
            {
            //KAGファイルの時はタグ・マクロ定義をGrep検索する
            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;
                }

                string searchText = "";
                searchText = String.Format("\\[{0}|^\\t*@{0}", info.TagName);

                //Grep検索用オプションをセットする
                EditorSearchOption searchOption = new EditorSearchOption();
                searchOption.SearchKeywordTable.Add(searchText);
                searchOption.Regex          = true;
                searchOption.Type           = SearchType.Grep;
                searchOption.GrepOption.Pos = GrepPotision.Project;
                searchOption.GrepOption.FileExtTable.Add("*.ks");
                searchOption.GrepOption.UseSubFolder = true;
                GlobalStatus.FormManager.SearchResultForm.Show(GlobalStatus.FormManager.MainForm.MainDockPanel);
                GlobalStatus.FormManager.SearchResultForm.Grep(searchOption);                           //検索開始
                break;

            //TJSファイルの時は関数・クラス定義をGrep検索する
            case FileType.KrkrType.Tjs:
                //未実装
                break;
            }
        }
Example #8
0
        /// <summary>
        /// KAGタグの情報をエディタドキュメント情報から取得し返す
        /// </summary>
        /// <param name="document">エディタのドキュメント情報</param>
        /// <param name="lineNumber">行番号</param>
        /// <param name="colNumber">カーソル位置を表す桁番号</param>
        /// <returns>KAGタグ情報(見つからなかったときはnullを返す)</returns>
        public static KagTagKindInfo GetTagKind(string lineText, int colNumber)
        {
            if (string.IsNullOrEmpty(lineText))
            {
                return(null);
            }

            if (colNumber < lineText.Length)
            {
                lineText = lineText.Substring(0, colNumber);
            }
            if (KagUtility.ExistLineHead(lineText, ';'))
            {
                return(null);                   //コメント行のとき
            }
            if (KagUtility.ExistLineHead(lineText, '*'))
            {
                return(null);                   //ラベル行のとき
            }

            KagTagKindInfo info = KagUtility.GetTagKind(lineText);

            return(info);
        }
Example #9
0
        /// <summary>
        /// KAGタグの情報をライン行文字列から取得し返す
        /// </summary>
        /// <param name="line">情報を取得するタグ情報</param>
        /// <returns>タグ情報</returns>
        public static KagTagKindInfo GetTagKind(string line)
        {
            KagTagKindInfo info = new KagTagKindInfo();

            bool startFlag      = true;         //先頭の時true
            bool stringModeFlag = false;        //文字列中("")のときtrue

            for (int i = 0; i < line.Length; i++)
            {
                if (line[i] == '[')
                {
                    startFlag = false;
                    if (stringModeFlag == false && info.Kind == KagCompletionData.Kind.Unknown)
                    {
                        info.Kind      = KagCompletionData.Kind.KagTagName;
                        info.TagName   = "";
                        info.AttrName  = "";
                        info.AttrValue = "";
                        info.AttrTable.Clear();
                    }
                }
                else if (line[i] == '@')
                {
                    if (startFlag)
                    {
                        startFlag      = false;
                        info.Kind      = KagCompletionData.Kind.KagTagName;
                        info.TagName   = "";
                        info.AttrName  = "";
                        info.AttrValue = "";
                        info.AttrTable.Clear();
                    }
                }
                else if (line[i] == ']')
                {
                    startFlag = false;
                    if (stringModeFlag == false)
                    {
                        info.Kind      = KagCompletionData.Kind.Unknown;
                        info.TagName   = "";
                        info.AttrValue = "";
                        info.AttrValue = "";
                    }
                }
                else if (line[i] == ' ')
                {
                    startFlag = false;
                    switch (info.Kind)
                    {
                    case KagCompletionData.Kind.KagTagName:
                    case KagCompletionData.Kind.AttrName:
                    case KagCompletionData.Kind.AttrValue:
                        if (stringModeFlag == false)
                        {
                            info.Kind = KagCompletionData.Kind.AttrName;
                            info.AddAttrTable(info.AttrName, info.AttrValue);
                            info.AttrName  = "";
                            info.AttrValue = "";
                        }
                        break;

                    default:
                        break;
                    }
                }
                else if (line[i] == '=')
                {
                    startFlag = false;
                    switch (info.Kind)
                    {
                    case KagCompletionData.Kind.AttrName:
                        info.Kind = KagCompletionData.Kind.AttrValue;
                        info.AddAttrTable(info.AttrName, info.AttrValue);
                        info.AttrValue = "";
                        break;

                    default:
                        break;
                    }
                }
                else if (line[i] == '"')
                {
                    startFlag = false;
                    if (i != 0 && line[i - 1] == '\\')                          //"がエスケープされているとき
                    {
                        continue;
                    }

                    stringModeFlag = !stringModeFlag;                           //フラグを反転させる
                }
                else if (line[i] == '\t')
                {
                    //何もしない
                }
                else
                {
                    startFlag = false;
                    switch (info.Kind)
                    {
                    case KagCompletionData.Kind.KagTagName:
                        info.TagName += line[i];
                        break;

                    case KagCompletionData.Kind.AttrName:
                        info.AttrName += line[i];
                        break;

                    case KagCompletionData.Kind.AttrValue:
                        info.AttrValue += line[i];
                        break;
                    }
                }
            }

            if (info.Kind == KagCompletionData.Kind.AttrName ||
                info.Kind == KagCompletionData.Kind.AttrValue)
            {
                info.AddAttrTable(info.AttrName, info.AttrValue);
            }
            info.StrMode = stringModeFlag;
            return(info);
        }
Example #10
0
        /// <summary>
        /// 現在のカーソル位置からシナリオファイル・ラベルの指定が存在するときはジャンプする
        /// </summary>
        public void JumpKagScenarioLabelFromCaret()
        {
            switch (FileType.GetKrkrType(this.FileName))
            {
            case FileType.KrkrType.Kag:                         //KAGファイルのとき
                //カーソル位置のKAGタグ情報を取得する
                int            colNum = GetKagTagEndFormCaret();
                KagTagKindInfo info   = KagUtility.GetTagKind(Document, this.ActiveTextArea.Caret.Line, colNum);
                if (info == null)
                {
                    util.Msgbox.Error("タグ・マクロのある位置にカーソルが無いため移動できません");
                    return;
                }

                //ジャンプ先情報をKLAGタグ情報から取得する
                string storage;
                string target;
                info.AttrTable.TryGetValue("storage", out storage);
                info.AttrTable.TryGetValue("target", out target);
                if (storage == null && target == null)
                {
                    Debug.WriteLine("ジャンプ指定(storage or target)がない");
                    util.Msgbox.Error("ジャンプ指定属性が無いため移動できません");
                    return;
                }

                //ファイルのフルパスを取得
                if (storage == null)
                {
                    storage = this.FileName;
                }
                else
                {
                    if (GlobalStatus.Project == null || Directory.Exists(GlobalStatus.Project.DataFullPath) == false)
                    {
                        return;                                 //検索パスが不明
                    }
                    string[] files = Directory.GetFiles(GlobalStatus.Project.DataFullPath, storage, SearchOption.AllDirectories);
                    if (files == null || files.Length == 0)
                    {
                        util.Msgbox.Error(storage + "が見つからないため移動できません");
                        return;                                 //ファイルが見つからない
                    }

                    storage = files[0];                                 //見つかったファイルパスをセットする
                }

                //ラベルをセットしファイルを開く
                if (target == null)
                {
                    GlobalStatus.EditorManager.LoadFile(storage);                               //ファイルを開くだけ
                }
                else
                {
                    //ラベルを検索するようにファイルを開く
                    EditorSearchOption searchOption = new EditorSearchOption();
                    searchOption.HeadStart = true;
                    searchOption.Direction = SearchDirection.Down;
                    searchOption.Regex     = true;
                    searchOption.SearchKeywordTable.Add("^\\t*\\" + target);
                    GlobalStatus.EditorManager.LoadFile(storage, searchOption);
                }

                Debug.WriteLine(String.Format("JumpScenarioLabelFromCaret: storage={0}, target={1}", storage, target));
                break;
            }
        }