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