protected XmlNode GetDataOwnerInfo(HtmlItem[] items){ XmlNode result = Html.CreateDocumentFragment(); if(items == null || items.Length == 0) return result; var elemList = new List<HtmlItem>(); var elemGroupList = new List<HtmlItem>(); var attrList = new List<HtmlItem>(); foreach(HtmlItem i in items){ if(i is HtmlElement){ elemList.Add(i); } else if(i is HtmlElementGroup){ elemGroupList.Add(i); } else if(i is HtmlAttribute){ attrList.Add(i); } } if(elemList.Count > 0){ XmlElement p = Html.P(); p.InnerText = "このデータを持つ要素 …… "; p.AppendChild(GetHtmlItemList(elemList.ToArray(), ", ")); result.AppendChild(p); } if(elemGroupList.Count > 0){ XmlElement p = Html.P(); p.InnerText = "このデータを持つグループ …… "; p.AppendChild(GetHtmlItemList(elemGroupList.ToArray(), ", ")); result.AppendChild(p); } if(attrList.Count > 0){ XmlElement p = Html.P(); p.InnerText = "このデータを持つ属性 …… "; p.AppendChild(GetHtmlItemList(attrList.ToArray(), ", ")); result.AppendChild(p); } return result; }
// プロテクトメソッド // HtmlItem の解説を取得します。 protected XmlNode GetDescription(HtmlItem item){ XmlNode result = Html.CreateDocumentFragment(); if(item == null) return result; if(item.Description == null) return result; if(item.Description.InnerText.Length == 0) return result; result.AppendChild(Html.H(3, null, item.Name + "の解説")); result.AppendChild(ParseNode(item.Description.ChildNodes, 4)); return result; }
protected XmlNode GetHtmlItemList(HtmlItem[] items, string sepchar){ XmlNode result = Html.CreateDocumentFragment(); if(items == null) return result; for(int i = 0; i < items.Length; i++){ if(i > 0 && sepchar != null) result.AppendChild(Html.Text(sepchar)); HtmlItem hi = items[i]; if(hi is HtmlMisc){ result.AppendChild(Html.Text(hi.Name)); } else { result.AppendChild(GetHtmlItemLink(hi, true)); } } return result; }
// 親を追加されても何もしない public override void AddParent(HtmlItem item){}
// メソッド /// <summary> /// 親要素を追加します。 /// </summary> public virtual void AddParent(HtmlItem item){ myParents.Add(item); }
protected XmlNode GetHtmlItemList(HtmlItem[] items){ return GetHtmlItemList(items, null); }
// HtmlItem の配列をリンクにします。 protected XmlNode GetHtmlItemList(HtmlItem item){ return GetHtmlItemList(new HtmlItem[]{item}, null); }
protected XmlNode GetHtmlItemLink(HtmlItem item, bool useSpecName){ AbsPath path = BasePath.Combine(item.LinkId, item.Id.PathEncode()); XmlElement a = Html.A(path); a.InnerText = useSpecName ? item.SpecName : item.Name; return a; }
// HtmlItem へのリンクを取得します。 // true をつけると、Name ではなく SpecName を使います。 protected XmlNode GetHtmlItemLink(HtmlItem item){ return GetHtmlItemLink(item, false); }
protected XmlNode GetAttributeOwnerInfo(HtmlItem[] items){ XmlNode result = Html.CreateDocumentFragment(); if(items == null || items.Length == 0) return result; var elemList = new List<HtmlItem>(); var groupList = new List<HtmlItem>(); foreach(HtmlItem i in items){ if(i is HtmlElement){ elemList.Add(i); } else if(i is HtmlAttributeGroup){ groupList.Add(i); } } if(groupList.Count > 0){ XmlElement p = Html.P(); p.InnerText = "この属性が属するグループ …… "; p.AppendChild(GetHtmlItemList(groupList.ToArray(), ", ")); result.AppendChild(p); } if(elemList.Count > 0){ XmlElement p = Html.P(); p.InnerText = "この属性を持つ要素 …… "; if(groupList.Count > 0) p.PrependChild(Html.Text("他に")); p.AppendChild(GetHtmlItemList(elemList.ToArray(), ", ")); result.AppendChild(p); } return result; }