Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: third_party/libxml/xpointer.c

Issue 2951008: Update libxml to 2.7.7. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« third_party/libxml/patches/icu ('K') | « third_party/libxml/xpath.c ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * xpointer.c : Code to handle XML Pointer 2 * xpointer.c : Code to handle XML Pointer
3 * 3 *
4 * Base implementation was made accordingly to 4 * Base implementation was made accordingly to
5 * W3C Candidate Recommendation 7 June 2000 5 * W3C Candidate Recommendation 7 June 2000
6 * http://www.w3.org/TR/2000/CR-xptr-20000607 6 * http://www.w3.org/TR/2000/CR-xptr-20000607
7 * 7 *
8 * Added support for the element() scheme described in: 8 * Added support for the element() scheme described in:
9 * W3C Proposed Recommendation 13 November 2002 9 * W3C Proposed Recommendation 13 November 2002
10 * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ 10 * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
(...skipping 1134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 * Parse and evaluate a Full XPtr i.e. possibly a cascade of XPath based 1145 * Parse and evaluate a Full XPtr i.e. possibly a cascade of XPath based
1146 * expressions or other schemes. 1146 * expressions or other schemes.
1147 */ 1147 */
1148 static void 1148 static void
1149 xmlXPtrEvalFullXPtr(xmlXPathParserContextPtr ctxt, xmlChar *name) { 1149 xmlXPtrEvalFullXPtr(xmlXPathParserContextPtr ctxt, xmlChar *name) {
1150 if (name == NULL) 1150 if (name == NULL)
1151 name = xmlXPathParseName(ctxt); 1151 name = xmlXPathParseName(ctxt);
1152 if (name == NULL) 1152 if (name == NULL)
1153 XP_ERROR(XPATH_EXPR_ERROR); 1153 XP_ERROR(XPATH_EXPR_ERROR);
1154 while (name != NULL) { 1154 while (name != NULL) {
1155 ctxt->error = XPATH_EXPRESSION_OK;
1155 xmlXPtrEvalXPtrPart(ctxt, name); 1156 xmlXPtrEvalXPtrPart(ctxt, name);
1156 1157
1157 /* in case of syntax error, break here */ 1158 /* in case of syntax error, break here */
1158 » if (ctxt->error != XPATH_EXPRESSION_OK) 1159 » if ((ctxt->error != XPATH_EXPRESSION_OK) &&
1160 (ctxt->error != XML_XPTR_UNKNOWN_SCHEME))
1159 return; 1161 return;
1160 1162
1161 /* 1163 /*
1162 * If the returned value is a non-empty nodeset 1164 * If the returned value is a non-empty nodeset
1163 * or location set, return here. 1165 * or location set, return here.
1164 */ 1166 */
1165 if (ctxt->value != NULL) { 1167 if (ctxt->value != NULL) {
1166 xmlXPathObjectPtr obj = ctxt->value; 1168 xmlXPathObjectPtr obj = ctxt->value;
1167 1169
1168 switch (obj->type) { 1170 switch (obj->type) {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 XP_ERROR(XPATH_EXPR_ERROR); 1294 XP_ERROR(XPATH_EXPR_ERROR);
1293 } 1295 }
1294 1296
1295 1297
1296 /************************************************************************ 1298 /************************************************************************
1297 * * 1299 * *
1298 * General routines * 1300 * General routines *
1299 * * 1301 * *
1300 ************************************************************************/ 1302 ************************************************************************/
1301 1303
1304 static
1302 void xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs); 1305 void xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
1306 static
1303 void xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs); 1307 void xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
1308 static
1304 void xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs); 1309 void xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
1310 static
1305 void xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs); 1311 void xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs);
1312 static
1306 void xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs); 1313 void xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs);
1314 static
1307 void xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs); 1315 void xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs);
1316 static
1308 void xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs); 1317 void xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
1309 1318
1310 /** 1319 /**
1311 * xmlXPtrNewContext: 1320 * xmlXPtrNewContext:
1312 * @doc: the XML document 1321 * @doc: the XML document
1313 * @here: the node that directly contains the XPointer being evaluated or NULL 1322 * @here: the node that directly contains the XPointer being evaluated or NULL
1314 * @origin: the element from which a user or program initiated traversal of 1323 * @origin: the element from which a user or program initiated traversal of
1315 * the link, or NULL. 1324 * the link, or NULL.
1316 * 1325 *
1317 * Create a new XPointer context 1326 * Create a new XPointer context
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1725 } 1734 }
1726 1735
1727 /** 1736 /**
1728 * xmlXPtrHereFunction: 1737 * xmlXPtrHereFunction:
1729 * @ctxt: the XPointer Parser context 1738 * @ctxt: the XPointer Parser context
1730 * @nargs: the number of args 1739 * @nargs: the number of args
1731 * 1740 *
1732 * Function implementing here() operation 1741 * Function implementing here() operation
1733 * as described in 5.4.3 1742 * as described in 5.4.3
1734 */ 1743 */
1735 void 1744 static void
1736 xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) { 1745 xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) {
1737 CHECK_ARITY(0); 1746 CHECK_ARITY(0);
1738 1747
1739 if (ctxt->context->here == NULL) 1748 if (ctxt->context->here == NULL)
1740 XP_ERROR(XPTR_SYNTAX_ERROR); 1749 XP_ERROR(XPTR_SYNTAX_ERROR);
1741 1750
1742 valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL)); 1751 valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL));
1743 } 1752 }
1744 1753
1745 /** 1754 /**
1746 * xmlXPtrOriginFunction: 1755 * xmlXPtrOriginFunction:
1747 * @ctxt: the XPointer Parser context 1756 * @ctxt: the XPointer Parser context
1748 * @nargs: the number of args 1757 * @nargs: the number of args
1749 * 1758 *
1750 * Function implementing origin() operation 1759 * Function implementing origin() operation
1751 * as described in 5.4.3 1760 * as described in 5.4.3
1752 */ 1761 */
1753 void 1762 static void
1754 xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) { 1763 xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) {
1755 CHECK_ARITY(0); 1764 CHECK_ARITY(0);
1756 1765
1757 if (ctxt->context->origin == NULL) 1766 if (ctxt->context->origin == NULL)
1758 XP_ERROR(XPTR_SYNTAX_ERROR); 1767 XP_ERROR(XPTR_SYNTAX_ERROR);
1759 1768
1760 valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL)); 1769 valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL));
1761 } 1770 }
1762 1771
1763 /** 1772 /**
(...skipping 12 matching lines...) Expand all
1776 * 1785 *
1777 * - If x is of type point, the start point is x. 1786 * - If x is of type point, the start point is x.
1778 * - If x is of type range, the start point is the start point of x. 1787 * - If x is of type range, the start point is the start point of x.
1779 * - If x is of type root, element, text, comment, or processing instruction, 1788 * - If x is of type root, element, text, comment, or processing instruction,
1780 * - the container node of the start point is x and the index is 0. 1789 * - the container node of the start point is x and the index is 0.
1781 * - If x is of type attribute or namespace, the function must signal a 1790 * - If x is of type attribute or namespace, the function must signal a
1782 * syntax error. 1791 * syntax error.
1783 * ---------------- 1792 * ----------------
1784 * 1793 *
1785 */ 1794 */
1786 void 1795 static void
1787 xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) { 1796 xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
1788 xmlXPathObjectPtr tmp, obj, point; 1797 xmlXPathObjectPtr tmp, obj, point;
1789 xmlLocationSetPtr newset = NULL; 1798 xmlLocationSetPtr newset = NULL;
1790 xmlLocationSetPtr oldset = NULL; 1799 xmlLocationSetPtr oldset = NULL;
1791 1800
1792 CHECK_ARITY(1); 1801 CHECK_ARITY(1);
1793 if ((ctxt->value == NULL) || 1802 if ((ctxt->value == NULL) ||
1794 ((ctxt->value->type != XPATH_LOCATIONSET) && 1803 ((ctxt->value->type != XPATH_LOCATIONSET) &&
1795 (ctxt->value->type != XPATH_NODESET))) 1804 (ctxt->value->type != XPATH_NODESET)))
1796 XP_ERROR(XPATH_INVALID_TYPE) 1805 XP_ERROR(XPATH_INVALID_TYPE)
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1870 * - If x is of type range, the resulting point is the end point of x. 1879 * - If x is of type range, the resulting point is the end point of x.
1871 * - If x is of type root or element, the container node of the resulting 1880 * - If x is of type root or element, the container node of the resulting
1872 * point is x and the index is the number of location children of x. 1881 * point is x and the index is the number of location children of x.
1873 * - If x is of type text, comment, or processing instruction, the container 1882 * - If x is of type text, comment, or processing instruction, the container
1874 * node of the resulting point is x and the index is the length of the 1883 * node of the resulting point is x and the index is the length of the
1875 * string-value of x. 1884 * string-value of x.
1876 * - If x is of type attribute or namespace, the function must signal a 1885 * - If x is of type attribute or namespace, the function must signal a
1877 * syntax error. 1886 * syntax error.
1878 * ---------------------------- 1887 * ----------------------------
1879 */ 1888 */
1880 void 1889 static void
1881 xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs) { 1890 xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
1882 xmlXPathObjectPtr tmp, obj, point; 1891 xmlXPathObjectPtr tmp, obj, point;
1883 xmlLocationSetPtr newset = NULL; 1892 xmlLocationSetPtr newset = NULL;
1884 xmlLocationSetPtr oldset = NULL; 1893 xmlLocationSetPtr oldset = NULL;
1885 1894
1886 CHECK_ARITY(1); 1895 CHECK_ARITY(1);
1887 if ((ctxt->value == NULL) || 1896 if ((ctxt->value == NULL) ||
1888 ((ctxt->value->type != XPATH_LOCATIONSET) && 1897 ((ctxt->value->type != XPATH_LOCATIONSET) &&
1889 (ctxt->value->type != XPATH_NODESET))) 1898 (ctxt->value->type != XPATH_NODESET)))
1890 XP_ERROR(XPATH_INVALID_TYPE) 1899 XP_ERROR(XPATH_INVALID_TYPE)
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 * @nargs: the number of args 2024 * @nargs: the number of args
2016 * 2025 *
2017 * Function implementing the range() function 5.4.3 2026 * Function implementing the range() function 5.4.3
2018 * location-set range(location-set ) 2027 * location-set range(location-set )
2019 * 2028 *
2020 * The range function returns ranges covering the locations in 2029 * The range function returns ranges covering the locations in
2021 * the argument location-set. For each location x in the argument 2030 * the argument location-set. For each location x in the argument
2022 * location-set, a range location representing the covering range of 2031 * location-set, a range location representing the covering range of
2023 * x is added to the result location-set. 2032 * x is added to the result location-set.
2024 */ 2033 */
2025 void 2034 static void
2026 xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) { 2035 xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
2027 int i; 2036 int i;
2028 xmlXPathObjectPtr set; 2037 xmlXPathObjectPtr set;
2029 xmlLocationSetPtr oldset; 2038 xmlLocationSetPtr oldset;
2030 xmlLocationSetPtr newset; 2039 xmlLocationSetPtr newset;
2031 2040
2032 CHECK_ARITY(1); 2041 CHECK_ARITY(1);
2033 if ((ctxt->value == NULL) || 2042 if ((ctxt->value == NULL) ||
2034 ((ctxt->value->type != XPATH_LOCATIONSET) && 2043 ((ctxt->value->type != XPATH_LOCATIONSET) &&
2035 (ctxt->value->type != XPATH_NODESET))) 2044 (ctxt->value->type != XPATH_NODESET)))
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2161 * the argument location-set, a range location is added to the result 2170 * the argument location-set, a range location is added to the result
2162 * location-set. If x is a range location, then x is added to the 2171 * location-set. If x is a range location, then x is added to the
2163 * result location-set. If x is not a range location, then x is used 2172 * result location-set. If x is not a range location, then x is used
2164 * as the container location of the start and end points of the range 2173 * as the container location of the start and end points of the range
2165 * location to be added; the index of the start point of the range is 2174 * location to be added; the index of the start point of the range is
2166 * zero; if the end point is a character point then its index is the 2175 * zero; if the end point is a character point then its index is the
2167 * length of the string-value of x, and otherwise is the number of 2176 * length of the string-value of x, and otherwise is the number of
2168 * location children of x. 2177 * location children of x.
2169 * 2178 *
2170 */ 2179 */
2171 void 2180 static void
2172 xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) { 2181 xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) {
2173 int i; 2182 int i;
2174 xmlXPathObjectPtr set; 2183 xmlXPathObjectPtr set;
2175 xmlLocationSetPtr oldset; 2184 xmlLocationSetPtr oldset;
2176 xmlLocationSetPtr newset; 2185 xmlLocationSetPtr newset;
2177 2186
2178 CHECK_ARITY(1); 2187 CHECK_ARITY(1);
2179 if ((ctxt->value == NULL) || 2188 if ((ctxt->value == NULL) ||
2180 ((ctxt->value->type != XPATH_LOCATIONSET) && 2189 ((ctxt->value->type != XPATH_LOCATIONSET) &&
2181 (ctxt->value->type != XPATH_NODESET))) 2190 (ctxt->value->type != XPATH_NODESET)))
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
2615 xmlNodePtr cur; 2624 xmlNodePtr cur;
2616 int pos, len = 0; 2625 int pos, len = 0;
2617 2626
2618 if ((node == NULL) || (indx == NULL)) 2627 if ((node == NULL) || (indx == NULL))
2619 return(-1); 2628 return(-1);
2620 cur = *node; 2629 cur = *node;
2621 pos = *indx; 2630 pos = *indx;
2622 2631
2623 if (cur == NULL) 2632 if (cur == NULL)
2624 return(-1); 2633 return(-1);
2625 2634
2626 if ((cur->type == XML_ELEMENT_NODE) || 2635 if ((cur->type == XML_ELEMENT_NODE) ||
2627 (cur->type == XML_DOCUMENT_NODE) || 2636 (cur->type == XML_DOCUMENT_NODE) ||
2628 (cur->type == XML_HTML_DOCUMENT_NODE)) { 2637 (cur->type == XML_HTML_DOCUMENT_NODE)) {
2629 if (pos > 0) { 2638 if (pos > 0) {
2630 cur = xmlXPtrGetNthChild(cur, pos); 2639 cur = xmlXPtrGetNthChild(cur, pos);
2631 pos = 0;
2632 } 2640 }
2633 } 2641 }
2634 while (cur != NULL) { 2642 while (cur != NULL) {
2635 if (cur->last != NULL) 2643 if (cur->last != NULL)
2636 cur = cur->last; 2644 cur = cur->last;
2637 else if ((cur->type != XML_ELEMENT_NODE) && 2645 else if ((cur->type != XML_ELEMENT_NODE) &&
2638 (cur->content != NULL)) { 2646 (cur->content != NULL)) {
2639 len = xmlStrlen(cur->content); 2647 len = xmlStrlen(cur->content);
2640 break; 2648 break;
2641 } else { 2649 } else {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2750 * 2758 *
2751 * If the string in the second argument is not found in the string-value 2759 * If the string in the second argument is not found in the string-value
2752 * of the location, or if a value in the third or fourth argument indicates 2760 * of the location, or if a value in the third or fourth argument indicates
2753 * a string that is beyond the beginning or end of the document, the 2761 * a string that is beyond the beginning or end of the document, the
2754 * expression fails. 2762 * expression fails.
2755 * 2763 *
2756 * The points of the range-locations in the returned location-set will 2764 * The points of the range-locations in the returned location-set will
2757 * all be character points. 2765 * all be character points.
2758 * ------------------------------ 2766 * ------------------------------
2759 */ 2767 */
2760 void 2768 static void
2761 xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) { 2769 xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
2762 int i, startindex, endindex = 0, fendindex; 2770 int i, startindex, endindex = 0, fendindex;
2763 xmlNodePtr start, end = 0, fend; 2771 xmlNodePtr start, end = 0, fend;
2764 xmlXPathObjectPtr set; 2772 xmlXPathObjectPtr set;
2765 xmlLocationSetPtr oldset; 2773 xmlLocationSetPtr oldset;
2766 xmlLocationSetPtr newset; 2774 xmlLocationSetPtr newset;
2767 xmlXPathObjectPtr string; 2775 xmlXPathObjectPtr string;
2768 xmlXPathObjectPtr position = NULL; 2776 xmlXPathObjectPtr position = NULL;
2769 xmlXPathObjectPtr number = NULL; 2777 xmlXPathObjectPtr number = NULL;
2770 int found, pos = 0, num = 0; 2778 int found, pos = 0, num = 0;
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
2994 } 3002 }
2995 3003
2996 NEXT; 3004 NEXT;
2997 SKIP_BLANKS; 3005 SKIP_BLANKS;
2998 } 3006 }
2999 3007
3000 #define bottom_xpointer 3008 #define bottom_xpointer
3001 #include "elfgcchack.h" 3009 #include "elfgcchack.h"
3002 #endif 3010 #endif
3003 3011
OLDNEW
« third_party/libxml/patches/icu ('K') | « third_party/libxml/xpath.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698