/// <summary> /// KAGファイル出力用タグを生成する /// </summary> /// <param name="tag"></param> /// <returns></returns> private string getWriteKagTag(KagTag tag) { string text = ""; //マクロコメント生成 text += String.Format(";;[{0}] {1}\n", tag.Group, tag.ShortInfo); text += String.Format(";;{0}\n", tag.Remarks); foreach (KagTagAttr attr in tag.AttrTable.Values) { text += String.Format(";;{0}=", attr.Name); if (attr.Required) { text += String.Format("[{0}] ", "必須"); } text += String.Format("{0}\\n{1}, {2}\n", attr.ShortInfo, attr.Info, attr.Format); } //タグマクロ生成 text += String.Format("[macro name=\"{0}\"]\n", tag.Name); text += String.Format("[kagtag"); foreach (KagTagAttr attr in tag.AttrTable.Values) { text += String.Format(" {0}=%{1}", attr.Name, attr.Name); } text += String.Format("]\n"); text += String.Format("[endmacro]\n"); return(text); }
/// <summary> /// tags.xmlを読み込む /// </summary> /// <param name="filePath"></param> /// <returns></returns> public bool LoadFileFromXml(string filePath) { m_filePath = filePath; if (File.Exists(m_filePath) == false) { Debug.WriteLine("指定されたファイルが存在しません"); return(false); } //XMLファイルを読み込み XmlDocument doc = new XmlDocument(); doc.Load(m_filePath); XmlNodeList nodeList = doc.GetElementsByTagName("tag"); if (nodeList == null) { Debug.WriteLine("指定されたXMLファイルが不正です"); return(false); } bool kagex = false; if (Path.GetFileName(filePath) == "kagextags.xml" || Path.GetFileName(filePath) == "worldextags.xml") { kagex = true; } //ノード読み込み foreach (XmlElement tagNode in nodeList) { //タグノード読み込み KagTag tag = readTagNode(tagNode, kagex); if (tag == null || tag.Name == "" || m_tags.ContainsKey(tag.Name)) { //取得できなかった時、またはすでに登録済みの場合は登録しない continue; } m_tags.Add(tag.Name, tag); } foreach (string text in m_attrNameList) { Debug.WriteLine(text); } return(true); }
/// <summary> /// タグノードを読み込む /// </summary> /// <param name="tagElement">タグエレメント</param> private KagTag readTagNode(XmlElement tagElement, bool kagex) { KagTag tag = new KagTag(kagex); foreach (XmlElement node in tagElement.ChildNodes) { switch (node.Name) { case "tagname": tag.Name = node.InnerText; break; case "group": tag.Group = node.InnerText; break; case "tagshortinfo": tag.ShortInfo = node.InnerText; break; case "tagremarks": tag.SetRemarks(node.InnerText); break; case "attr": KagTagAttr attr = readTagAttrNode(node); if (attr == null || attr.Name == "" || tag.AttrTable.ContainsKey(attr.Name)) { //取得できなかった時、またはすでに登録済みの場合は登録しない break; } tag.AttrTable.Add(attr.Name, attr); m_attrNameList.Add(tag.Name + "\t" + attr.Name + "\t" + attr.Format); break; } } //属性値フォーマットを改めてセットする foreach (string attrName in tag.AttrTable.Keys) { string format = getAttrValueFormatFromTable(tag.Name, attrName); if (format != "") { //フォーマットテーブルにのっているときはそれを使用する tag.AttrTable[attrName].Format = format; } } return(tag); }
/// <summary> /// 属性値フォーマットをテーブルから取得する /// </summary> /// <param name="tagName">タグ名</param> /// <param name="attrName">属性名</param> /// <returns>属性値フォーマット 存在しないときはNOT_FOUND_FOMATを返す</returns> private string getAttrValueFormatFromTable(string tagName, string attrName) { foreach (AttrValueFormatTable format in this.ATTR_VALUE_FOMAT_TABLE) { if (tagName == format.TagName && attrName == format.AttrName) { return(format.ValueFormat); } } //cond属性をチェックする if (KagTag.HaveCondAttr(tagName) == true && attrName == ATTR_VALUE_FOMAT_COND.AttrName) { return(ATTR_VALUE_FOMAT_COND.ValueFormat); } return(""); }