public static IEnumerable <CstNode> GetUppermostNodesByNames(CstNode cst, ISet <string> nodeNames) { return(cst.DescendantsAndSelf() .Where(node => nodeNames.Contains(node.Name)) .Where(node => node.AncestorsWithSingleChild() .All(ancestor => !nodeNames.Contains(ancestor.Name)))); }
public IEnumerable<CstNode> ExtractElements(CstNode ast) { foreach (var nameAndRules in FilterDictionary) { var elements = ast.DescendantsAndSelf(nameAndRules.Key); var rules = nameAndRules.Value; var results = elements.Where(e => rules.All(rule => rule.IsAcceptable(e))); foreach (var result in results) { yield return result; } } }
public IEnumerable <CstNode> ExtractElements(CstNode ast) { foreach (var nameAndRules in FilterDictionary) { var elements = ast.DescendantsAndSelf(nameAndRules.Key); var rules = nameAndRules.Value; var results = elements.Where(e => rules.All(rule => rule.IsAcceptable(e))); foreach (var result in results) { yield return(result); } } }
/// <summary> /// Find the most inner element which includes this range from the specified CstNode instance. /// </summary> /// <param name="root"></param> /// <returns></returns> public CstNode FindInnermostNode(CstNode root) { CstNode lastElement = null; foreach (var elem in root.DescendantsAndSelf()) { var pos = Locate(elem); if (pos.Contains(this)) { lastElement = elem; } else if (EndLocation <= pos.StartLocation) { break; } } return(lastElement); }
protected IEnumerable <CstNode> GetAllElements(CstNode cst, ISet <string> elementNames) { return(cst.DescendantsAndSelf() .Where(e => elementNames.Contains(e.Name))); }
protected IEnumerable<CstNode> GetAllElements(CstNode cst, ISet<string> elementNames) { return cst.DescendantsAndSelf() .Where(e => elementNames.Contains(e.Name)); }
public static IEnumerable<CstNode> GetUppermostNodesByNames(CstNode cst, ISet<string> nodeNames) { return cst.DescendantsAndSelf() .Where(node => nodeNames.Contains(node.Name)) .Where(node => node.AncestorsWithSingleChild() .All(ancestor => !nodeNames.Contains(ancestor.Name))); }