Exemplo n.º 1
0
        /// <summary>
        /// ラベル名リストを取得する
        /// </summary>
        /// <returns>ラベル名リスト</returns>
        private static string[] getLabelList(KagTagKindInfo compInfo)
        {
            string fileName = "";

            if (compInfo.AttrTable.ContainsKey(TAG_ATTR_FILENAME) &&
                compInfo.AttrTable[TAG_ATTR_FILENAME] != "")
            {
                //ファイル名がすでに指定され散るときはそのファイルを探す
                fileName = compInfo.AttrTable[TAG_ATTR_FILENAME];
            }
            else
            {
                //セットされていないときは現在のファイルのラベルを表示する
                fileName = Path.GetFileName(PluginCore.PluginBase.MainForm.CurrentDocument.FileName);   //現在開いているファイル名
            }

            List <string> list = new List <string>();

            foreach (KagLabelItem item in PluginMain.ParserSrv.GetLabelListAll())
            {
                if (Path.GetFileName(item.FilePath) == fileName)                        //指定したファイルのみ登録する
                {
                    list.Add(item.LabelName);
                }
            }

            return(list.ToArray());
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 属性名リストを取得する
        /// </summary>
        /// <param name="info">現在位置の入力情報</param>
        /// <param name="macroList">マクロ情報リスト</param>
        /// <returns>マクロ名リスト</returns>
        List <ICompletionListItem> getAttrNameList(KagTagKindInfo info, KagMacro[] macroList)
        {
            KagMacro macro = KagUtility.GetKagMacro(info.TagName, macroList);

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

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

            table = getAttrNameListFromMacro(macro, macroList, table);

            //すでに書いているものは削除する
            foreach (string deleteAttrName in info.AttrTable.Keys)
            {
                table.Remove(deleteAttrName);
            }

            //出力用にリストを変換
            List <ICompletionListItem> list = new List <ICompletionListItem>(table.Count);

            foreach (ICompletionListItem data in table.Values)
            {
                list.Add(data);
            }
            return(list);
        }
Exemplo n.º 4
0
        /// <summary>
        /// マクロ名リストを取得する
        /// </summary>
        /// <param name="info">現在位置の入力情報</param>
        /// <param name="macroList">マクロ情報リスト</param>
        /// <returns>マクロ名リスト</returns>
        List <ICompletionListItem> getMacroNameList(KagTagKindInfo info, KagMacro[] macroList, string prefix, string postfix)
        {
            List <ICompletionListItem> list = new List <ICompletionListItem>();

            foreach (KagMacro macro in macroList)
            {
                list.Add(new KagCompletionListItem(macro.Name, prefix + macro.Name + postfix, macro.Comment, getIconBitmapFromTagKind(getTagMacroKind(macro))));
            }

            return(list);
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 属性値リストを取得する
        /// </summary>
        /// <param name="macro">取得するマクロオブジェクト</param>
        /// <param name="macroList">マクロ情報リスト</param>
        /// <returns>属性値リスト</returns>
        private List <ICompletionListItem> 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(m_compAttrValue.GetCompletionDataList(attr, info));
        }
Exemplo n.º 7
0
        /// <summary>
        /// 入力補完時に置換する選択文字列をセットする
        /// </summary>
        /// <param name="textArea"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        private string getCompReplaceText(ScintillaControl sci, KagTagKindInfo info)
        {
            string select = GetWordBeforeCaret(sci);

            if (select == null)
            {
                return(null);
            }
            else if (select == "\"" && info.Kind == KagTagKindInfo.KagKind.AttrValue)
            {
                if (info.AttrValue != "")
                {
                    select = "\"" + info.AttrValue + "\"";
                }
            }
            else if (select == "=" && info.Kind == KagTagKindInfo.KagKind.AttrValue)
            {
                if (info.AttrValue == "")
                {
                    select = null;                      //選択しない
                }
            }
            else if (select == "=\"" && info.Kind == KagTagKindInfo.KagKind.AttrValue)
            {
                if (info.AttrValue == "")
                {
                    select = "\"";
                }
            }
            else if ((select == "[" || select == "@") && info.Kind == KagTagKindInfo.KagKind.KagTagName)
            {
                select = null;                  //選択しない
            }
            else if ((select.EndsWith(" ") == true) && info.Kind == KagTagKindInfo.KagKind.AttrName)
            {
                select = null;                  //選択しない
            }

            return(select);
        }
Exemplo n.º 8
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);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 属性値タイプ文字列から属性値リストを取得する
        /// </summary>
        /// <param name="valueType">属性値タイプ</param>
        /// <param name="option">KAG入力補完オプション</param>
        /// <returns>属性値リスト</returns>
        private string[] getAttrValueList(string valueType, KagTagKindInfo compInfo)
        {
            string[] list = null;
            switch (valueType)
            {
            case TYPE_FILE_SCENARIO:
                list = getFileNameList(PluginMain.EnvSettings.ScenarioFileExt, TYPE_FILE_SCENARIO);
                break;

            case TYPE_FILE_IMAGE:
                list = getFileNameList(PluginMain.EnvSettings.ImageFileExt, TYPE_FILE_IMAGE);
                break;

            case TYPE_FILE_SE:
                list = getFileNameList(PluginMain.EnvSettings.SeFileExt, TYPE_FILE_SE);
                break;

            case TYPE_FILE_CURSOR:
                list = getFileNameList(PluginMain.EnvSettings.CursorFileExt, TYPE_FILE_CURSOR);
                break;

            case TYPE_FILE_BGM:
                list = getFileNameList(PluginMain.EnvSettings.BgmFileExt, TYPE_FILE_BGM);
                break;

            case TYPE_FILE_ACTION:
                list = getFileNameList(PluginMain.EnvSettings.ActionFileExt, TYPE_FILE_ACTION);
                break;

            case TYPE_FILE_PLUGIN:
                list = getFileNameListPlugin(PluginMain.EnvSettings.PluginFileExt, TYPE_FILE_PLUGIN);
                break;

            case TYPE_FILE_FONT:
                list = getFileNameList(PluginMain.EnvSettings.FontFileExt, TYPE_FILE_FONT);
                break;

            case TYPE_FILE_VIDEO:
                list = getFileNameList(PluginMain.EnvSettings.VideoFileExt, TYPE_FILE_VIDEO);
                break;

            case TYPE_NUM_ZERO_OVER:
                list = splitAttrValue(PluginMain.EnvSettings.ZeroOverNumberList);
                break;

            case TYPE_NUM_ONE_OVER:
                list = splitAttrValue(PluginMain.EnvSettings.OneOverNumberList);
                break;

            case TYPE_NUM_PERCENT:
                list = splitAttrValue(PluginMain.EnvSettings.PercentNumberList);
                break;

            case TYPE_NUM_BYTE:
                list = splitAttrValue(PluginMain.EnvSettings.ByteNumberList);
                break;

            case TYPE_NUM_MSTIME:
                list = splitAttrValue(PluginMain.EnvSettings.MsTimeNumberList);
                break;

            case TYPE_NUM_REAL:
                list = splitAttrValue(PluginMain.EnvSettings.RealNumberList);
                break;

            case TYPE_NUM_PAN:
                list = splitAttrValue(PluginMain.EnvSettings.PmHundredNumberList);
                break;

            case TYPE_NUM_RGB:
                list = splitAttrValue(PluginMain.EnvSettings.RgbNumberList);
                break;

            case TYPE_NUM_ARGB:
                list = splitAttrValue(PluginMain.EnvSettings.ArgbNumberList);
                break;

            case TYPE_NUM_PMBYTE:
                list = splitAttrValue(PluginMain.EnvSettings.PmbyteNumberList);
                break;

            case TYPE_NUM_HUE:
                list = splitAttrValue(PluginMain.EnvSettings.HueNumberList);
                break;

            case TYPE_STRING_TJS:
                list = splitAttrValue(PluginMain.EnvSettings.TjsStringList);
                break;

            case TYPE_STRING_FONT:
                list = splitAttrValue(PluginMain.EnvSettings.FontStringList);
                break;

            case TYPE_STRING_OTHER:
                list = splitAttrValue(PluginMain.EnvSettings.OtherStringList);
                break;

            case TYPE_MAX_VIDEO_OBJECT:
                list = getNumberList(0, PluginMain.EnvSettings.VideoBufferMaxNumber - 1);
                break;

            case TYPE_MAX_SE_BUFFER:
                list = getNumberList(0, PluginMain.EnvSettings.SeBufferMaxNumber - 1);
                break;

            case TYPE_MAX_LAYER:
                list = getNumberList(0, PluginMain.EnvSettings.LayerMaxNumber - 1);
                break;

            case TYPE_MAX_MESSAGE_LAYER:
                list = getNumberListForMeslay(0, PluginMain.EnvSettings.MessageLayerMaxNumber - 1);
                break;

            case TYPE_CONST_LAYER_PAGE:
                list = splitAttrValue(PluginMain.EnvSettings.LayerPageList);
                break;

            case TYPE_CONST_LAYER_POS:
                list = splitAttrValue(PluginMain.EnvSettings.LayerPosList);
                break;

            case TYPE_CONST_BOOL:
                list = splitAttrValue(PluginMain.EnvSettings.BoolValueList);
                break;

            case TYPE_CONST_CURSOR:
                list = splitAttrValue(PluginMain.EnvSettings.CursorDefList);
                break;

            case TYPE_CONST_BASE_LAYER:
                list = splitAttrValue(PluginMain.EnvSettings.BaseLayerList);
                break;

            case TYPE_OTHER_TRANSMETH:
                list = getTransMthodList();
                break;

            case TYPE_STATE_LABEL:
                list = getLabelList(compInfo);
                break;

            case TYPE_STATE_ASD_LABEL:
                //未実装
                break;

            case TYPE_CONST_COLORCOMP_MODE:
                list = splitAttrValue(PluginMain.EnvSettings.ColorcompModeList);
                break;

            case TYPE_STATE_MACRO:
                list = getMacroNameList();
                break;

            default:
                list = new string[] { valueType };                              //見つからないときはそのままと判断する
                break;
            }

            return(list);
        }
Exemplo n.º 10
0
        /// <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);
        }