public static Iterable childrenElementsOf()

in freemarker-docgen-core/src/main/java/org/freemarker/docgen/core/XMLUtil.java [201:247]


    public static Iterable<Element> childrenElementsOf(final Node parent) {
        return new Iterable<Element>() {
            
            public Iterator<Element> iterator() {
                return new ElementIterator();
            }
            
            class ElementIterator implements Iterator<Element> {
                private Node continueFrom;
                private Element curNode;
                
                ElementIterator() {
                    continueFrom = parent.getFirstChild();
                    fetch();
                }
            
                public boolean hasNext() {
                    return curNode != null;
                }
            
                public Element next() {
                    Element res = curNode;
                    fetch();
                    return res;
                }
            
                public void remove() {
                    throw new UnsupportedOperationException("remove");
                }
                
                private void fetch() {
                        while (!(continueFrom == null
                                || continueFrom instanceof Element)) {
                            continueFrom = continueFrom.getNextSibling();
                        }
                        if (continueFrom != null) {
                            curNode = (Element) continueFrom;
                            continueFrom = curNode.getNextSibling();
                        } else {
                            curNode = null;
                        }
                }
                
            }
            
        };
    }