private bool hasClass(string className, int depth) { if (depth >= 256) { return(false); } string val; if ((depth == 0) && (defaultClassName == className)) { return(true); } if (!dict.TryGetValue("class", out val)) { return(false); } foreach (string cname in StringUtil.SplitCommand(val)) { if (cname == className) { return(true); } CascadedAttribute xclass = getClass(cname); if ((xclass != null) && xclass.hasClass(className, depth + 1)) { return(true); } } return(false); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="elem">属性を読み取るXML要素</param> /// <param name="parent_">親の属性管理機構</param> /// <param name="childClassKey_">子のクラス属性を探すときの付加キーワード</param> public CascadedAttribute(XmlElement elem, CascadedAttribute parent_ = null, string childClassKey_ = "") { parent = parent_; defaultClassName = elem.Name; childClassKey = childClassKey_; load(elem); }
/// <summary> /// 指定クラス名の属性定義を返す /// </summary> /// <remarks> /// <para> /// 指定名のクラスが無いときはthisを返します。 /// </para> /// </remarks> public CascadedAttribute GetClass(string classname) { if (parent == null) { return(this); } CascadedAttribute attr = parent.getClass(classname); return((attr == null)?this:attr); }
private void loadClass(XmlElement elem) { // クラス定義を取り込む foreach (XmlNode node in elem.ChildNodes) { if ((node.NodeType == XmlNodeType.Element) && ((node.Name == "class") || (node.Name == "default"))) { CascadedAttribute classAttr = CreateChild((XmlElement)node); string className = (node.Name == "default")?"default":classAttr.Name; if (!String.IsNullOrEmpty(className)) { classDict[className] = classAttr; } } } }