/// <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()); }
/// <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); }
/// <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()); }
/// <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()); }
/// <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); }
/// <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()); }
/// <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)); }
/// <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); }
/// <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()); }
/// <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); }
/// <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); }
/// <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); }