/// <summary> /// 属性名リストを取得する /// </summary> /// <param name="info">現在位置の入力情報</param> /// <param name="macroList">マクロ情報リスト</param> /// <returns>マクロ名リスト</returns> public static KagMacroAttr GetKagMacroAttr(string attrName, KagTagKindInfo info, KagMacro[] macroList) { //マクロを取得 KagMacro macro = KagUtility.GetKagMacro(info.TagName, macroList); if (macro == null) { return(null); //マクロが見つからない } //属性を取得 Dictionary <string, KagMacroAttr> table = new Dictionary <string, KagMacroAttr>(); table = getAttrNameListFromMacro(macro, macroList, table, 0); //属性を検索する KagMacroAttr attr = null; if (table.ContainsKey(attrName)) { attr = table[attrName]; } return(attr); }
/// <summary> /// マクロ属性を追加する /// </summary> /// <param name="attr">追加する属性</param> public void AddAttr(KagMacroAttr attr) { if (attr == null || attr.Name == null || attr.Name == "") { System.Diagnostics.Debug.WriteLine("AddAttr param err!"); return; } if (m_attrTable.ContainsKey(attr.Name) == false) { m_attrTable.Add(attr.Name, attr); //ぞんざいしないときだけ追加する } }
/// <summary> /// マクロ属性リストを解析し、マクロオブジェクトに格納する /// </summary> /// <param name="macro">格納先マクロオブジェクト</param> /// <param name="tagName">タグ名</param> /// <param name="attrList">属性リスト</param> private void setMacro(ref KagMacro macro, string tagName, Dictionary <string, string> attrList) { if (tagName == "macro") { //マクロタグの時はname属性値を取得する foreach (string key in attrList.Keys) { if (key == "name") { if (attrList[key] != "") { macro.Name = attrList[key]; //Debug.WriteLine("macro.Name=" + macro.Name); } return; } } } else { //そのほかのタグ名の時は属性を取得する foreach (string key in attrList.Keys) { if (key == "*") { //省略属性を持つタグ名を追加 macro.AddAsteriskTagName(tagName); } else { string attrName = getMacroAttrName(attrList[key]); if (attrName != "") { //属性値があるのでセットする KagMacroAttr attr = new KagMacroAttr(); attr.Name = attrName; //Debug.WriteLine("attr.Name=" + attr.Name); string attrDef = getMacroAttrDef(attrList[key]); if (attrDef != "") { attr.DefaultValue = attrDef; //属性値があるのでセットする //Debug.WriteLine("attr.DefaultValue=" + attr.DefaultValue); } //属性を追加 macro.AddAttr(attr); } } } } }
/// <summary> /// 指定した属性の説明を取得する /// </summary> /// <param name="info"></param> /// <param name="attrName"></param> /// <returns></returns> private static string getTagAttrComment(string attrName, KagTagKindInfo info) { KagMacro[] macroList = GlobalStatus.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="line">マクロコメント行文字列</param> private void parseMAcroCommentLine(ref KagMacro macro, string line) { if (line == null || line.StartsWith(";;") == false) { return; //マクロコメントではない } line = line.Remove(0, 2); //";;"を削除する int pos = line.IndexOf('='); if (pos != -1) //見つかったとき { KagMacroAttr attr = macro.GetMacroAttr(line.Substring(0, pos)); if (attr != null) //属性が見つかったとき { if (pos + 1 < line.Length) //=の後ろに文字があるとき { int commaPos = line.IndexOf(',', pos + 1); if (commaPos != -1) { attr.Comment = line.Substring(pos + 1, commaPos - (pos + 1)).Replace("\\n", "\n"); //属性コメントセット if (commaPos + 1 < line.Length) //コンマの後ろに文字があるとき { attr.ValueType = line.Substring(commaPos + 1).Trim(); //属性値タイプセット } //Debug.WriteLine("属性コメント=" + attr.Comment); //Debug.WriteLine("属性値タイプ=" + attr.ValueType); } else { attr.Comment = line.Substring(pos + 1).Trim().Replace("\\n", "\n"); //属性コメントセット //Debug.WriteLine("属性コメント=" + attr.Comment); } return; //属性コメントが取得できたので終了 } } } //属性コメントではないときはそのままタグコメントとして格納する macro.Comment += line.Replace("\\n", "\n") + "\r\n"; //Debug.WriteLine("マクロコメント=" + line); return; }