* xmlTextReaderReadTree: * @reader: the xmlTextReaderPtr used * * Moves the position of the current instance to the next node in * the stream, exposing its properties. * * Returns 1 if the node was read successfully, 0 if there is no more * nodes to read, or -1 in case of error */
| 1944 | * nodes to read, or -1 in case of error |
| 1945 | */ |
| 1946 | static int |
| 1947 | xmlTextReaderReadTree(xmlTextReaderPtr reader) { |
| 1948 | if (reader->state == XML_TEXTREADER_END) |
| 1949 | return(0); |
| 1950 | |
| 1951 | next_node: |
| 1952 | if (reader->node == NULL) { |
| 1953 | if (reader->doc->children == NULL) { |
| 1954 | reader->state = XML_TEXTREADER_END; |
| 1955 | return(0); |
| 1956 | } |
| 1957 | |
| 1958 | reader->node = reader->doc->children; |
| 1959 | reader->state = XML_TEXTREADER_START; |
| 1960 | goto found_node; |
| 1961 | } |
| 1962 | |
| 1963 | if ((reader->state != XML_TEXTREADER_BACKTRACK) && |
| 1964 | (reader->node->type != XML_DTD_NODE) && |
| 1965 | (reader->node->type != XML_XINCLUDE_START) && |
| 1966 | (reader->node->type != XML_ENTITY_REF_NODE)) { |
| 1967 | if (reader->node->children != NULL) { |
| 1968 | reader->node = reader->node->children; |
| 1969 | reader->depth++; |
| 1970 | reader->state = XML_TEXTREADER_START; |
| 1971 | goto found_node; |
| 1972 | } |
| 1973 | |
| 1974 | if (reader->node->type == XML_ATTRIBUTE_NODE) { |
| 1975 | reader->state = XML_TEXTREADER_BACKTRACK; |
| 1976 | goto found_node; |
| 1977 | } |
| 1978 | } |
| 1979 | |
| 1980 | if (reader->node->next != NULL) { |
| 1981 | reader->node = reader->node->next; |
| 1982 | reader->state = XML_TEXTREADER_START; |
| 1983 | goto found_node; |
| 1984 | } |
| 1985 | |
| 1986 | if (reader->node->parent != NULL) { |
| 1987 | if ((reader->node->parent->type == XML_DOCUMENT_NODE) || |
| 1988 | (reader->node->parent->type == XML_HTML_DOCUMENT_NODE)) { |
| 1989 | reader->state = XML_TEXTREADER_END; |
| 1990 | return(0); |
| 1991 | } |
| 1992 | |
| 1993 | reader->node = reader->node->parent; |
| 1994 | reader->depth--; |
| 1995 | reader->state = XML_TEXTREADER_BACKTRACK; |
| 1996 | goto found_node; |
| 1997 | } |
| 1998 | |
| 1999 | reader->state = XML_TEXTREADER_END; |
| 2000 | |
| 2001 | found_node: |
| 2002 | if ((reader->node->type == XML_XINCLUDE_START) || |
| 2003 | (reader->node->type == XML_XINCLUDE_END)) |