public ParseNodeSearchable(ParseNodeSearchable parent, XmlNode node) { children = new List <ParseNode>(); this.parent = parent; _isLeaf = node.Name == "leaf"; _searchTypes = new List <SearchType>(); _viewLayerTypes = new List <ViewLayerType>(); _searchValues = new List <string>(); if (node.Attributes.Count != 0) { for (var i = 0; i < node.Attributes.Count; i++) { var attribute = node.Attributes[i]; var viewLayerType = attribute.Name.Substring(0, 3); var searchType = attribute.Name.Substring(3); _searchValues.Add(attribute.InnerText); if (searchType.Equals("equals")) { _searchTypes.Add(SearchType.EQUALS); } else { if (searchType.Equals("contains")) { _searchTypes.Add(SearchType.CONTAINS); } else { if (searchType.Equals("matches")) { _searchTypes.Add(SearchType.MATCHES); } else { if (searchType.Equals("starts")) { _searchTypes.Add(SearchType.STARTS); } else { if (searchType.Equals("ends")) { _searchTypes.Add(SearchType.ENDS); } else { if (searchType.Equals("equalsignorecase")) { _searchTypes.Add(SearchType.EQUALS_IGNORE_CASE); } else { if (searchType.Equals("isnull")) { _searchTypes.Add(SearchType.IS_NULL); } } } } } } } if (viewLayerType.Equals("mor") || viewLayerType.Equals("inf")) { _viewLayerTypes.Add(ViewLayerType.INFLECTIONAL_GROUP); } else { if (viewLayerType.Equals("tur")) { _viewLayerTypes.Add(ViewLayerType.TURKISH_WORD); } else { if (viewLayerType.Equals("per")) { _viewLayerTypes.Add(ViewLayerType.PERSIAN_WORD); } else { if (viewLayerType.Equals("eng")) { _viewLayerTypes.Add(ViewLayerType.ENGLISH_WORD); } else { if (viewLayerType.Equals("ner")) { _viewLayerTypes.Add(ViewLayerType.NER); } else { if (viewLayerType.Equals("sem") || viewLayerType.Equals("tse")) { _viewLayerTypes.Add(ViewLayerType.SEMANTICS); } else { if (viewLayerType.Equals("met")) { _viewLayerTypes.Add(ViewLayerType.META_MORPHEME); } else { if (viewLayerType.Equals("pro")) { _viewLayerTypes.Add(ViewLayerType.PROPBANK); } else { if (viewLayerType.Equals("dep")) { _viewLayerTypes.Add(ViewLayerType.DEPENDENCY); } else { if (viewLayerType.Equals("sha") || viewLayerType.Equals("chu")) { _viewLayerTypes.Add(ViewLayerType.SHALLOW_PARSE); } else { if (viewLayerType.Equals("ese")) { _viewLayerTypes.Add(ViewLayerType.ENGLISH_SEMANTICS); } else { if (viewLayerType.Equals("epr")) { _viewLayerTypes.Add(ViewLayerType.ENGLISH_PROPBANK); } } } } } } } } } } } } } } foreach (XmlNode child in node.ChildNodes) { if (child.Name.Equals("node") || child.Name.Equals("leaf")) { children.Add(new ParseNodeSearchable(this, child)); } } }
public bool Satisfy(ParseNodeSearchable node) { int i; if (node.IsLeaf() && children.Count > 0) { return(false); } for (i = 0; i < node.Size(); i++) { var viewLayer = node.GetViewLayerType(i); var currentData = node.GetValue(i); if (GetLayerData(viewLayer) == null && node.GetType(i) != SearchType.EQUALS && node.GetType(i) != SearchType.IS_NULL) { return(false); } switch (node.GetType(i)) { case SearchType.CONTAINS: if (!GetLayerData(viewLayer).Contains(currentData)) { return(false); } break; case SearchType.EQUALS: if (GetLayerData(viewLayer) == null) { if (node.GetValue(i) != "") { return(false); } } else { if (!GetLayerData(viewLayer).Equals(currentData)) { return(false); } } break; case SearchType.EQUALS_IGNORE_CASE: if (!GetLayerData(viewLayer).Equals(currentData, StringComparison.OrdinalIgnoreCase)) { return(false); } break; case SearchType.MATCHES: if (!new Regex(currentData).IsMatch(GetLayerData(viewLayer))) { return(false); } break; case SearchType.STARTS: if (!GetLayerData(viewLayer).StartsWith(currentData)) { return(false); } break; case SearchType.ENDS: if (!GetLayerData(viewLayer).EndsWith(currentData)) { return(false); } break; case SearchType.IS_NULL: if (GetLayerData(viewLayer) != null) { return(false); } break; } } if (node.NumberOfChildren() > children.Count) { return(false); } for (i = 0; i < children.Count; i++) { if (i < node.NumberOfChildren() && !((ParseNodeDrawable)GetChild(i)).Satisfy((ParseNodeSearchable)node.GetChild(i))) { return(false); } } return(true); }
public ParseTreeSearchable(XmlNode rootNode) { root = new ParseNodeSearchable(null, rootNode); }