Exemple #1
0
        /// <summary>
        /// 指定した属性の説明を取得する
        /// </summary>
        /// <param name="info"></param>
        /// <param name="attrName"></param>
        /// <returns></returns>
        private static string getTagAttrComment(string attrName, KagTagKindInfo info)
        {
            KagMacro[] macroList = PluginMain.ParserSrv.GetKagMacroList();
            if (macroList.Length == 0)
            {
                return("");                     //一つもないとき
            }

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

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

            return(attr.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));
        }
Exemple #3
0
        /// <summary>
        /// KAG属性値入力補完データリストを取得する
        /// </summary>
        /// <param name="attr">属性情報</param>
        /// <param name="compInfo">入力補完情報</param>
        /// <returns>入力補完データリスト</returns>
        public static KagCompletionData[] GetCompletionDataList(KagMacroAttr attr, KagTagKindInfo compInfo)
        {
            if (attr == null)
            {
                return(null);                   //何も返せない
            }
            //設定取得
            EditorOption option = GlobalStatus.EditorManager.GetEditorOption(FileType.KrkrType.Kag);

            if (option == null)
            {
                return(null);                   //何も返せない
            }
            string[] valueTypeList = splitAttrValue(attr.ValueType);
            if (valueTypeList == null)
            {
                return(null);
            }

            List <KagCompletionData> dataList = new List <KagCompletionData>();

            foreach (string valueType in valueTypeList)
            {
                //属性値リスト取得
                string[] valueList = getAttrValueList(valueType, option.KagCompOption, compInfo);
                if (valueList == null)
                {
                    continue;
                }

                //取得した属性値を追加
                foreach (string value in valueList)
                {
                    dataList.Add(new KagCompletionData(value, attr.Comment, KagCompletionData.Kind.AttrValue));
                }
            }

            return(dataList.ToArray());
        }
Exemple #4
0
        /// <summary>
        /// KAG属性値入力補完データリストを取得する
        /// </summary>
        /// <param name="attr">属性情報</param>
        /// <param name="compInfo">入力補完情報</param>
        /// <returns>入力補完データリスト</returns>
        public List <ICompletionListItem> GetCompletionDataList(KagMacroAttr attr, KagTagKindInfo compInfo)
        {
            if (attr == null)
            {
                return(null);                   //何も返せない
            }

            //設定取得
            string[] valueTypeList = splitAttrValue(attr.ValueType);
            if (valueTypeList == null)
            {
                return(null);
            }

            List <ICompletionListItem> dataList = new List <ICompletionListItem>();

            foreach (string valueType in valueTypeList)
            {
                //属性値リスト取得
                string[] valueList = getAttrValueList(valueType, compInfo);
                if (valueList == null)
                {
                    continue;
                }

                //取得した属性値を追加
                foreach (string value in valueList)
                {
                    string value2 = value;
                    if (PluginMain.EnvSettings.UseAttrValueDqRegion || value.IndexOf(' ') != -1)    //設定ONもしくは空白有の時
                    {
                        value2 = "\"" + value + "\"";
                    }
                    dataList.Add(new KagCompletionListItem(value, value2, attr.Comment, m_iconBitmap));
                }
            }

            return(dataList);
        }
        /// <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);               //見つからなかった
        }