Пример #1
0
        /// <summary>
        /// ワールド拡張の服装リストを取得する
        /// </summary>
        /// <param name="compInfo"></param>
        /// <returns></returns>
        private static string[] getKagexCharDressList(KagTagKindInfo compInfo)
        {
            string name = getKagexCharNameFromAttrTable(compInfo);

            if (name == "")
            {
                return(null);                   //キャラクター名が指定されていない
            }
            kkde.parse.kagex.KagexCompletionUnit cu = GlobalStatus.ParserSrv.GetKagexEnvinitInfo();
            if (cu == null)
            {
                return(null);                   //ワールド拡張が読み込めていない
            }
            string pose = getKagexCharPoseFromAttrTable(compInfo, cu);

            if (pose == "")
            {
                return(null);                   //キャラクター名が指定されていない
            }

            List <string> list = cu.GetCharDressList(name, pose);

            if (list == null)
            {
                return(null);
            }

            return(list.ToArray());
        }
Пример #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>
        /// ラベル名リストを取得する
        /// </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(GlobalStatus.EditorManager.ActiveEditor.FileName);                  //現在開いているファイル名
            }

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

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

            return(list.ToArray());
        }
Пример #4
0
        /// <summary>
        /// マクロ名リストを取得する
        /// </summary>
        /// <param name="info">現在位置の入力情報</param>
        /// <param name="macroList">マクロ情報リスト</param>
        /// <returns>マクロ名リスト</returns>
        ICompletionData[] getMacroNameList(KagTagKindInfo info, KagMacro[] macroList)
        {
            List <ICompletionData> list = new List <ICompletionData>();

            foreach (KagMacro macro in macroList)
            {
                list.Add(new KagCompletionData(macro.Name, macro.Comment, getTagMacroKind(macro)));
            }

            return(list.ToArray());
        }
Пример #5
0
        /// <summary>
        /// すでにかかれている属性リストからキャラクターの姿勢を取得する
        /// </summary>
        /// <param name="compInfo"></param>
        /// <param name="cu"></param>
        /// <returns></returns>
        private static string getKagexCharPoseFromAttrTable(KagTagKindInfo compInfo, kkde.parse.kagex.KagexCompletionUnit cu)
        {
            string pose;

            if (compInfo.AttrTable.ContainsKey("pose"))
            {
                pose = compInfo.AttrTable["pose"];
            }
            else
            {
                pose = "";
            }

            return(pose);
        }
Пример #6
0
        /// <summary>
        /// KAGEXワールド拡張のキャラクタ名リストを取得する
        /// </summary>
        /// <param name="compInfo"></param>
        /// <returns></returns>
        private static string[] getKagexCharNameList(KagTagKindInfo compInfo)
        {
            kkde.parse.kagex.KagexCompletionUnit cu = GlobalStatus.ParserSrv.GetKagexEnvinitInfo();
            if (cu == null)
            {
                return(null);
            }

            List <string> list = cu.GetCharNameList();

            if (list == null)
            {
                return(null);
            }

            return(list.ToArray());
        }
Пример #7
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));
        }
Пример #8
0
        /// <summary>
        /// すでにかかれている属性リストからキャラクター名を取得する
        /// </summary>
        /// <param name="compInfo">すでにかかれ散る属性リスト</param>
        /// <returns>キャラクター名 見つからなかったときはから文字を返す</returns>
        private static string getKagexCharNameFromAttrTable(KagTagKindInfo compInfo)
        {
            string name;

            if (compInfo.AttrTable.ContainsKey("initname"))
            {
                name = compInfo.AttrTable["initname"];
            }
            else if (compInfo.AttrTable.ContainsKey("name"))
            {
                name = compInfo.AttrTable["name"];
            }
            else
            {
                name = "";
            }

            return(name);
        }
Пример #9
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());
        }
Пример #10
0
        /// <summary>
        /// 入力補完時に置換する選択文字列をセットする
        /// </summary>
        /// <param name="textArea"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        private string getCompReplaceText(TextArea textArea, KagTagKindInfo info)
        {
            string select = base.GetWordBeforeCaret(textArea);

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

            return(select);
        }
Пример #11
0
        /// <summary>
        /// KAG入力補完リストに表示するアイテムリストを返す
        /// </summary>
        /// <param name="fileName">ファイル名</param>
        /// <param name="textArea">アクティブなテキストエディタ</param>
        /// <param name="charTyped">入力された文字列</param>
        /// <returns>入力補完アイテムリスト</returns>
        public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
        {
            KagMacro[] macroList = GlobalStatus.ParserSrv.GetKagMacroList();
            if (macroList.Length == 0)
            {
                return(null);                   //一つもないときはリストを表示しない
            }

            int         lineNum  = textArea.Caret.Line;
            int         colNum   = textArea.Caret.Column;
            LineSegment lineSeg  = textArea.Document.GetLineSegment(lineNum);
            string      lineText = textArea.Document.GetText(lineSeg.Offset, colNum);

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

            m_preSelection = null;
            ICompletionData[] 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.IsLineHead(lineText, colNum) == false)
                {
                    return(null);                       //行頭ではない
                }
                if (info.StrMode)
                {
                    return(null);
                }

                //タグ入力
                list = getMacroNameList(info, macroList);
            }
            else if (charTyped == ' ')                  //属性名?
            {
                if ((info.Kind == KagCompletionData.Kind.Unknown) ||
                    (info.StrMode == true))
                {
                    return(null);                       //属性名ではないので何もしない
                }

                //属性名
                list = getAttrNameList(info, macroList);
            }
            else if (charTyped == '=')                  //属性値?
            {
                if (info.Kind != KagCompletionData.Kind.AttrName)
                {
                    return(null);                       //属性値ではないので何もしない
                }

                //属性値
                list = getAttrValueList(info, macroList);
            }
            else if (charTyped == '\0')                 //その他(Ctrl+Space)
            {
                switch (info.Kind)
                {
                case KagCompletionData.Kind.KagTagName:
                case KagCompletionData.Kind.Unknown:
                    if (info.StrMode)
                    {
                        return(null);
                    }
                    //タグ入力
                    list = getMacroNameList(info, macroList);
                    break;

                case KagCompletionData.Kind.AttrName:
                    if (info.StrMode)
                    {
                        return(null);
                    }
                    //属性入力
                    list = getAttrNameList(info, macroList);
                    break;

                case KagCompletionData.Kind.AttrValue:
                    //属性値入力
                    list = getAttrValueList(info, macroList);
                    break;

                default:
                    return(null);
                }

                //Debug.WriteLine("info=" + info.ToString());
                m_preSelection = getCompReplaceText(textArea, info);
            }
            else
            {
                return(null);                   //何も表示しない
            }

            if (list == null || list.Length == 0)
            {
                return(null);                   //一つもないとき
            }
            return(list);
        }
Пример #12
0
        /// <summary>
        /// 属性値タイプ文字列から属性値リストを取得する
        /// </summary>
        /// <param name="valueType">属性値タイプ</param>
        /// <param name="option">KAG入力補完オプション</param>
        /// <returns>属性値リスト</returns>
        private static string[] getAttrValueList(string valueType, KagCompletionOption option, KagTagKindInfo compInfo)
        {
            string[] list = null;
            switch (valueType)
            {
            case TYPE_FILE_SCENARIO:
                list = getFileNameList(option.ScenarioFileExt, TYPE_FILE_SCENARIO);
                break;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            case TYPE_CONST_BASE_LAYER:
                list = splitAttrValue(option.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(option.ColorcompModeList);
                break;

            case TYPE_CONST_KAGEX_ACTION:
                list = splitAttrValue(option.KagexAction);
                break;

            case TYPE_CONST_KAGEX_LTBMODE:
                list = splitAttrValue(option.KagexLtbType);
                break;

            case TYPE_STATE_MACRO:
                list = getMacroNameList();
                break;

            case TYPE_WORLDEX_CHAR_NAME:
                list = getKagexCharNameList(compInfo);
                break;

            case TYPE_WORLDEX_CHAR_POSE:
                list = getKagexCharPoseList(compInfo);
                break;

            case TYPE_WORLDEX_CHAR_DRESS:
                list = getKagexCharDressList(compInfo);
                break;

            case TYPE_WORLDEX_CHAR_FACE:
                list = getKagexCharFaceList(compInfo);
                break;

            case TYPE_WORLDEX_TRANS:
                list = getKagexTransList();
                break;

            case TYPE_WORLDEX_ACTION:
                list = getKagexActionList();
                break;

            case TYPE_WORLDEX_LEVEL:
                list = getKagexLevelList();
                break;

            case TYPE_WORLDEX_POS:
                list = getKagexPosList();
                break;

            case TYPE_WORLDEX_STAGE:
                list = getKagexStageList();
                break;

            case TYPE_WORLDEX_TIME:
                list = getKagexTimeList();
                break;

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

            return(list);
        }