* xmlXPtrInsideRange: * @ctxt: the XPointer Parser context * @loc: the location for which the inside range must be computed * * A inside range is a range described in the range-inside() description * * Returns a new location or NULL in case of error */
| 2077 | * Returns a new location or NULL in case of error |
| 2078 | */ |
| 2079 | static xmlXPathObjectPtr |
| 2080 | xmlXPtrInsideRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) { |
| 2081 | if (loc == NULL) |
| 2082 | return(NULL); |
| 2083 | if ((ctxt == NULL) || (ctxt->context == NULL) || |
| 2084 | (ctxt->context->doc == NULL)) |
| 2085 | return(NULL); |
| 2086 | switch (loc->type) { |
| 2087 | case XPATH_POINT: { |
| 2088 | xmlNodePtr node = (xmlNodePtr) loc->user; |
| 2089 | switch (node->type) { |
| 2090 | case XML_PI_NODE: |
| 2091 | case XML_COMMENT_NODE: |
| 2092 | case XML_TEXT_NODE: |
| 2093 | case XML_CDATA_SECTION_NODE: { |
| 2094 | if (node->content == NULL) { |
| 2095 | return(xmlXPtrNewRange(node, 0, node, 0)); |
| 2096 | } else { |
| 2097 | return(xmlXPtrNewRange(node, 0, node, |
| 2098 | xmlStrlen(node->content))); |
| 2099 | } |
| 2100 | } |
| 2101 | case XML_ATTRIBUTE_NODE: |
| 2102 | case XML_ELEMENT_NODE: |
| 2103 | case XML_ENTITY_REF_NODE: |
| 2104 | case XML_DOCUMENT_NODE: |
| 2105 | case XML_NOTATION_NODE: |
| 2106 | case XML_HTML_DOCUMENT_NODE: { |
| 2107 | return(xmlXPtrNewRange(node, 0, node, |
| 2108 | xmlXPtrGetArity(node))); |
| 2109 | } |
| 2110 | default: |
| 2111 | break; |
| 2112 | } |
| 2113 | return(NULL); |
| 2114 | } |
| 2115 | case XPATH_RANGE: { |
| 2116 | xmlNodePtr node = (xmlNodePtr) loc->user; |
| 2117 | if (loc->user2 != NULL) { |
| 2118 | return(xmlXPtrNewRange(node, loc->index, |
| 2119 | loc->user2, loc->index2)); |
| 2120 | } else { |
| 2121 | switch (node->type) { |
| 2122 | case XML_PI_NODE: |
| 2123 | case XML_COMMENT_NODE: |
| 2124 | case XML_TEXT_NODE: |
| 2125 | case XML_CDATA_SECTION_NODE: { |
| 2126 | if (node->content == NULL) { |
| 2127 | return(xmlXPtrNewRange(node, 0, node, 0)); |
| 2128 | } else { |
| 2129 | return(xmlXPtrNewRange(node, 0, node, |
| 2130 | xmlStrlen(node->content))); |
| 2131 | } |
| 2132 | } |
| 2133 | case XML_ATTRIBUTE_NODE: |
| 2134 | case XML_ELEMENT_NODE: |
| 2135 | case XML_ENTITY_REF_NODE: |
| 2136 | case XML_DOCUMENT_NODE: |
no test coverage detected