Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch wip Excluding Merge-Ins
This is equivalent to a diff from 4abf418fab to b3b0b78e14
2024-10-09
| ||
22:54 | First round of build tests on a couple of platforms and OS. check-in: d4df8c0072 user: rolf tags: trunk | |
22:47 | Simplest (*)printf d modifier limbo I could find. Closed-Leaf check-in: b3b0b78e14 user: rolf tags: wip | |
00:40 | More casts. check-in: cb3dba8a81 user: rolf tags: wip | |
2024-10-03
| ||
14:33 | wip check-in: 5c33cee20e user: rolf tags: wip | |
2024-10-02
| ||
00:12 | Merge trunk. check-in: e1154f061d user: rolf tags: prepare-release | |
2024-10-01
| ||
23:16 | Adapted test to the changed error message. check-in: 4abf418fab user: rolf tags: trunk | |
22:58 | Attempt to clean up the fall out of the recent type changes. check-in: 908f9bb47d user: rolf tags: trunk | |
Changes to configure.
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
....
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
|
# include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='LTLIBOBJS PKG_STUB_LIB_PATH PKG_BUILD_STUB_LIB_PATH PKG_STUB_LIB_SPEC PKG_BUILD_STUB_LIB_SPEC TDOMSHELL TCLSH_PROG VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB PKG_STUB_LIB_FILE MAKE_STUB_LIB ................................................................................ TDOMSHELL=tcldomsh #-------------------------------------------------------------------- # These are for ${PACKAGE_NAME}Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="${libdir}/${PACKAGE_NAME}${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval PKG_STUB_LIB_FLAG="-l${PACKAGE_NAME}stub${PACKAGE_VERSION}" else eval PKG_STUB_LIB_FLAG="-l${PACKAGE_NAME}stub`echo ${PACKAGE_VERSION} | tr -d .`" fi PKG_BUILD_STUB_LIB_SPEC="-L`pwd` ${PKG_STUB_LIB_FLAG}" PKG_STUB_LIB_SPEC="-L${pkglibdir} ${PKG_STUB_LIB_FLAG}" PKG_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" PKG_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" |
>
>
>
|
|
|
|
>
>
|
|
>
|
>
|
>
>
>
>
>
>
|
<
>
|
|
>
>
>
>
>
>
|
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
....
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
|
# include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='LTLIBOBJS PATCHLEVEL MINOR_VERSION MAJOR_VERSION tdom_STUB_LIB_PATH tdom_BUILD_STUB_LIB_PATH tdom_STUB_LIB_SPEC tdom_BUILD_STUB_LIB_SPEC tdom_LIB_SPEC tdom_BUILD_LIB_SPEC TDOMSHELL TCLSH_PROG VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB PKG_STUB_LIB_FILE MAKE_STUB_LIB ................................................................................ TDOMSHELL=tcldomsh #-------------------------------------------------------------------- # These are for tdomConfig.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="${libdir}/tdom${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval tdom_LIB_FLAG="-ltdom${PACKAGE_VERSION}" eval tdom_STUB_LIB_FLAG="-ltdomstub${PACKAGE_VERSION}" else eval tdom_LIB_FLAG="-ltdom`echo ${PACKAGE_VERSION} | tr -d .`" eval tdom_STUB_LIB_FLAG="-ltdomstub`echo ${PACKAGE_VERSION} | tr -d .`" fi if test "${TCL_MAJOR_VERSION}" -gt 8 -a x"${with_tcl8}" = x; then eval tdom_STUB_LIB_FLAG="-ltdomstub" fi tdom_BUILD_LIB_SPEC="-L`$CYGPATH $(pwd)` ${tdom_LIB_FLAG}" tdom_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${tdom_LIB_FLAG}" tdom_BUILD_STUB_LIB_SPEC="-L`$CYGPATH $(pwd)` ${tdom_STUB_LIB_FLAG}" tdom_STUB_LIB_SPEC="-L`$CYGPATH ${pkglibdir}` ${tdom_STUB_LIB_FLAG}" tdom_BUILD_STUB_LIB_PATH="`$CYGPATH $(pwd)`/${PKG_STUB_LIB_FILE}" tdom_STUB_LIB_PATH="`$CYGPATH ${pkglibdir}`/${PKG_STUB_LIB_FILE}" |
Changes to configure.ac.
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
TDOM_ENABLE_TDOMALLOC
TDOM_ENABLE_LESS_NS
TDOM_ENABLE_SCHEMA
TDOMSHELL=tcldomsh
AC_SUBST(TDOMSHELL)
TDOM_EXPORT_CONFIG
#--------------------------------------------------------------------
# Finally, substitute all of the various values into the Makefile.
# You may alternatively have a special pkgIndex.tcl.in or other files
# which require substituting the AC variables in. Include these here.
#--------------------------------------------------------------------
AC_CONFIG_FILES([Makefile pkgIndex.tcl tdomConfig.sh])
AC_OUTPUT
|
| |
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
TDOM_ENABLE_TDOMALLOC TDOM_ENABLE_LESS_NS TDOM_ENABLE_SCHEMA TDOMSHELL=tcldomsh AC_SUBST(TDOMSHELL) TEA_EXPORT_CONFIG([tdom]) #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting the AC variables in. Include these here. #-------------------------------------------------------------------- AC_CONFIG_FILES([Makefile pkgIndex.tcl tdomConfig.sh]) AC_OUTPUT |
Changes to generic/dom.c.
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 ... 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 ... 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 ... 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 ... 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 .... 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 .... 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 .... 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 .... 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 .... 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 .... 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 .... 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 .... 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 .... 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 .... 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 .... 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 .... 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 .... 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 .... 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 .... 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 .... 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 .... 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 .... 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 |
break; } p += clen; } if (!*changed) { return; } Tcl_DStringAppend (clearedstr, str, p-str); if (repllen) { Tcl_DStringAppend (clearedstr, replacement, repllen); } if (clen) { p += clen; } else { /* If it isn't a UTF-8 encoded character what is it? And how ................................................................................ * many of whatever it is? */ p++; } s = p; while (*p) { clen = UTF8_CHAR_LEN(*p); if (!clen || !UTF8_XMLCHAR((unsigned const char*)p,clen)) { Tcl_DStringAppend (clearedstr, s, p-s); if (repllen) { Tcl_DStringAppend (clearedstr, replacement, repllen); } if (clen) { p += clen; } else { p++; } s = p; } else { p += clen; } } Tcl_DStringAppend (clearedstr, s, p-s); } /*--------------------------------------------------------------------------- | domIsBMPChar | \--------------------------------------------------------------------------*/ int ................................................................................ const char *str ) { const char *p; domLength len, i = 0; p = str; len = strlen (str); while (i < len) { if (*p == '-') { if (i == len - 1) return 0; p++; i++; if (*p == '-') return 0; } p++; i++; ................................................................................ const char *str ) { const char *p; domLength len, i = 0; p = str; len = strlen (str); while (i < len - 2) { if ( *p == ']' && p[1] == ']' && p[2] == '>') return 0; p++; i++; } return domIsChar (str); ................................................................................ const char *str ) { const char *p; domLength len, i = 0; p = str; len = strlen (str); while (i < len - 1) { if (*p == '?' && p[1] == '>') return 0; p++; i++; } return domIsChar (str); } ................................................................................ memset(attrnode, 0, sizeof(domAttrNode)); attrnode->nodeType = ATTRIBUTE_NODE; attrnode->nodeFlags = IS_NS_NODE; attrnode->namespace = ns->index; attrnode->nodeName = (char *)&(h->key); attrnode->parentNode = node; len = strlen(atPtr[1]); attrnode->valueLength = len; attrnode->nodeValue = (char*)MALLOC(len+1); strcpy(attrnode->nodeValue, atPtr[1]); if (node->firstAttr) { lastAttr->nextSibling = attrnode; } else { node->firstAttr = attrnode; } ................................................................................ attrnode->nodeType = ATTRIBUTE_NODE; if (atPtr == idAttPtr) { attrnode->nodeFlags |= IS_ID_ATTRIBUTE; } attrnode->nodeName = (char *)&(h->key); attrnode->parentNode = node; len = strlen(atPtr[1]); attrnode->valueLength = len; attrnode->nodeValue = (char*)MALLOC(len+1); strcpy(attrnode->nodeValue, (char *)atPtr[1]); if (node->firstAttr) { lastAttr->nextSibling = attrnode; } else { node->firstAttr = attrnode; ................................................................................ domReadInfo *info = userData; Tcl_DStringAppend (info->cdata, s, len); if (info->storeLineColumn) { /* This works because the result of XML_GetCurrentLineNumber() * is always at least 1 */ if (!info->textStartLine) { info->textStartLine = XML_GetCurrentLineNumber (info->parser); info->textStartColumn = XML_GetCurrentColumnNumber (info->parser); info->textStartByteIndex = XML_GetCurrentByteIndex (info->parser); } } return; } ................................................................................ { domReadInfo *info = userData; DispatchPCDATA (info); info->cdataSection = 1; if (info->storeLineColumn) { if (!info->textStartLine) { info->textStartLine = XML_GetCurrentLineNumber (info->parser); info->textStartColumn = XML_GetCurrentColumnNumber (info->parser); info->textStartByteIndex = XML_GetCurrentByteIndex (info->parser); } } } /*--------------------------------------------------------------------------- | endCDATA | ................................................................................ + sizeof(domLineColumn)); } else { node = (domTextNode*) domAlloc(sizeof(domTextNode)); } memset(node, 0, sizeof(domTextNode)); node->nodeType = COMMENT_NODE; node->nodeNumber = NODE_NO(info->document); node->valueLength = len; node->nodeValue = (char*)MALLOC(len); memmove(node->nodeValue, s, len); node->ownerDocument = info->document; node->parentNode = parentNode; if (parentNode == NULL) { if (info->document->rootNode->lastChild) { ................................................................................ (char*) node, &hnew); Tcl_SetHashValue (h, tdomstrdup (XML_GetBase (info->parser))); node->nodeFlags |= HAS_BASEURI; } len = strlen(target); node->targetLength = len; node->targetValue = (char*)MALLOC(len); memmove(node->targetValue, target, len); len = strlen(data); node->dataLength = len; node->dataValue = (char*)MALLOC(len); memmove(node->dataValue, data, len); node->ownerDocument = info->document; node->parentNode = parentNode; if (parentNode == NULL) { if (info->document->rootNode->lastChild) { ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_NewStringObj(info->document->extResolver, -1); Tcl_IncrRefCount(cmdPtr); if (base) { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewStringObj(base, strlen(base))); } else { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewObj()); } /* For a document with doctype declaration, the systemId is always != NULL. But if the document doesn't have a doctype declaration and the user uses -useForeignDTD 1, the externalEntityRefHandler will be called with a systemId (and publicId and openEntityNames) == NULL. */ if (systemId) { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewStringObj(systemId, strlen(systemId))); } else { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewObj()); } if (publicId) { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewStringObj(publicId, strlen(publicId))); } else { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewObj()); } result = Tcl_EvalObjEx (info->interp, cmdPtr, ................................................................................ tcldom_reportErrorLocation ( info->interp, 20, 40, XML_GetCurrentLineNumber(extparser), XML_GetCurrentColumnNumber(extparser), xmlstringstart, systemId, XML_GetCurrentByteIndex(extparser), XML_ErrorString(XML_GetErrorCode(extparser)) ); } else { sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); Tcl_AppendResult(info->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(info->interp, s, NULL); } keepresult = 1; result = 0; break; case XML_STATUS_SUSPENDED: ................................................................................ do { len = Tcl_Read (chan, buf, sizeof(buf)); done = len < sizeof(buf); status = XML_Parse (extparser, buf, (int)len, done); switch (status) { case XML_STATUS_ERROR: interpResult = Tcl_GetStringResult(info->interp); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); if (interpResult[0] == '\0') { Tcl_ResetResult (info->interp); Tcl_AppendResult(info->interp, "error \"", XML_ErrorString(XML_GetErrorCode(extparser)), "\" in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(info->interp, s, NULL); } else { Tcl_AppendResult(info->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(info->interp, s, NULL); } result = 0; keepresult = 1; done = 1; break; ................................................................................ /*--------------------------------------------------------------------------- | domGetLineColumn | \--------------------------------------------------------------------------*/ int domGetLineColumn ( domNode *node, Tcl_WideInt *line, Tcl_WideInt *column, Tcl_WideInt *byteIndex ) { char *v; domLineColumn *lc; *line = -1; *column = -1; ................................................................................ "xmlns:xml", &hnew); ns = domNewNamespace (parent->ownerDocument, "xml", XML_NAMESPACE); attr->nodeType = ATTRIBUTE_NODE; attr->nodeFlags = IS_NS_NODE; attr->namespace = ns->index; attr->nodeName = (char *)&(h->key); attr->parentNode = parent; attr->valueLength = strlen (XML_NAMESPACE); attr->nodeValue = tdomstrdup (XML_NAMESPACE); return attr; } /* *---------------------------------------------------------------------- ................................................................................ h = Tcl_CreateHashEntry (node->ownerDocument->ids, attributeValue, &hnew); /* XXX what to do, if hnew = 0 ??? */ Tcl_SetHashValue (h, node); } } FREE (attr->nodeValue); attr->valueLength = strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); } else { /*----------------------------------------------- | add a complete new attribute node \----------------------------------------------*/ attr = (domAttrNode*) domAlloc(sizeof(domAttrNode)); ................................................................................ h = Tcl_CreateHashEntry(&HASHTAB(node->ownerDocument,tdom_attrNames), attributeName, &hnew); attr->nodeType = ATTRIBUTE_NODE; attr->nodeFlags = 0; attr->namespace = 0; attr->nodeName = (char *)&(h->key); attr->parentNode = node; attr->valueLength = strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); if (node->firstAttr) { lastAttr = node->firstAttr; /* move to the end of the attribute list */ while (lastAttr->nextSibling) lastAttr = lastAttr->nextSibling; ................................................................................ Tcl_DeleteHashEntry (h); h = Tcl_CreateHashEntry (node->ownerDocument->ids, attributeValue, &hnew); Tcl_SetHashValue (h, node); } } FREE (attr->nodeValue); attr->valueLength = strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); } else { /*-------------------------------------------------------- | add a complete new attribute node \-------------------------------------------------------*/ attr = (domAttrNode*) domAlloc(sizeof(domAttrNode)); ................................................................................ attr->namespace = ns->index; if (isNSAttr) { attr->nodeFlags = IS_NS_NODE; } } attr->nodeName = (char *)&(h->key); attr->parentNode = node; attr->valueLength = strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); if (isNSAttr) { if (node->firstAttr && (node->firstAttr->nodeFlags & IS_NS_NODE)) { lastAttr = node->firstAttr; while (lastAttr->nextSibling ................................................................................ h = Tcl_CreateHashEntry(&HASHTAB(node->ownerDocument,tdom_attrNames), Tcl_DStringValue(&dStr), &hnew); attr->nodeType = ATTRIBUTE_NODE; attr->nodeFlags = IS_NS_NODE; attr->namespace = ns->index; attr->nodeName = (char *)&(h->key); attr->parentNode = node; attr->valueLength = strlen(nsToAdd->uri); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, nsToAdd->uri); lastNSAttr = NULL; if (node->firstAttr && (node->firstAttr->nodeFlags & IS_NS_NODE)) { lastNSAttr = node->firstAttr; while (lastNSAttr->nextSibling ................................................................................ int storeLineColumn; domLength textStartLine; domLength textStartColumn; domLength textStartByteIndex; int ignorexmlns; int feedbackAfter; Tcl_Obj *feedbackCmd; int nextFeedbackPosition; Tcl_Interp *interp; int activeNSsize; int activeNSpos; domActiveNS *activeNS; int baseURIstackSize; int baseURIstackPos; domActiveBaseURI *baseURIstack; ................................................................................ ) { tdomCmdReadInfo *info = (tdomCmdReadInfo *) userData; DispatchPCDATA ((domReadInfo*) info); info->cdataSection = 1; if (info->storeLineColumn) { info->textStartLine = XML_GetCurrentLineNumber (info->parser); info->textStartColumn = XML_GetCurrentColumnNumber (info->parser); info->textStartByteIndex = XML_GetCurrentByteIndex (info->parser); } } int TclTdomObjCmd ( ClientData UNUSED(dummy), Tcl_Interp *interp, |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 ... 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 ... 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 ... 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 ... 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 .... 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 .... 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 .... 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 .... 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 .... 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 .... 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 .... 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 .... 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 .... 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 .... 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 .... 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 .... 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 .... 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 .... 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 .... 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 .... 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 .... 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 .... 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 |
break; } p += clen; } if (!*changed) { return; } Tcl_DStringAppend (clearedstr, str, (domLength)(p-str)); if (repllen) { Tcl_DStringAppend (clearedstr, replacement, repllen); } if (clen) { p += clen; } else { /* If it isn't a UTF-8 encoded character what is it? And how ................................................................................ * many of whatever it is? */ p++; } s = p; while (*p) { clen = UTF8_CHAR_LEN(*p); if (!clen || !UTF8_XMLCHAR((unsigned const char*)p,clen)) { Tcl_DStringAppend (clearedstr, s, (domLength)(p-s)); if (repllen) { Tcl_DStringAppend (clearedstr, replacement, repllen); } if (clen) { p += clen; } else { p++; } s = p; } else { p += clen; } } Tcl_DStringAppend (clearedstr, s, (domLength)(p-s)); } /*--------------------------------------------------------------------------- | domIsBMPChar | \--------------------------------------------------------------------------*/ int ................................................................................ const char *str ) { const char *p; domLength len, i = 0; p = str; len = (domLength)strlen (str); while (i < len) { if (*p == '-') { if (i == len - 1) return 0; p++; i++; if (*p == '-') return 0; } p++; i++; ................................................................................ const char *str ) { const char *p; domLength len, i = 0; p = str; len = (domLength)strlen (str); while (i < len - 2) { if ( *p == ']' && p[1] == ']' && p[2] == '>') return 0; p++; i++; } return domIsChar (str); ................................................................................ const char *str ) { const char *p; domLength len, i = 0; p = str; len = (domLength)strlen (str); while (i < len - 1) { if (*p == '?' && p[1] == '>') return 0; p++; i++; } return domIsChar (str); } ................................................................................ memset(attrnode, 0, sizeof(domAttrNode)); attrnode->nodeType = ATTRIBUTE_NODE; attrnode->nodeFlags = IS_NS_NODE; attrnode->namespace = ns->index; attrnode->nodeName = (char *)&(h->key); attrnode->parentNode = node; len = strlen(atPtr[1]); attrnode->valueLength = (domLength)len; attrnode->nodeValue = (char*)MALLOC(len+1); strcpy(attrnode->nodeValue, atPtr[1]); if (node->firstAttr) { lastAttr->nextSibling = attrnode; } else { node->firstAttr = attrnode; } ................................................................................ attrnode->nodeType = ATTRIBUTE_NODE; if (atPtr == idAttPtr) { attrnode->nodeFlags |= IS_ID_ATTRIBUTE; } attrnode->nodeName = (char *)&(h->key); attrnode->parentNode = node; len = strlen(atPtr[1]); attrnode->valueLength = (domLength)len; attrnode->nodeValue = (char*)MALLOC(len+1); strcpy(attrnode->nodeValue, (char *)atPtr[1]); if (node->firstAttr) { lastAttr->nextSibling = attrnode; } else { node->firstAttr = attrnode; ................................................................................ domReadInfo *info = userData; Tcl_DStringAppend (info->cdata, s, len); if (info->storeLineColumn) { /* This works because the result of XML_GetCurrentLineNumber() * is always at least 1 */ if (!info->textStartLine) { info->textStartLine = (domLength)XML_GetCurrentLineNumber (info->parser); info->textStartColumn = (domLength)XML_GetCurrentColumnNumber (info->parser); info->textStartByteIndex = (domLength)XML_GetCurrentByteIndex (info->parser); } } return; } ................................................................................ { domReadInfo *info = userData; DispatchPCDATA (info); info->cdataSection = 1; if (info->storeLineColumn) { if (!info->textStartLine) { info->textStartLine = (domLength)XML_GetCurrentLineNumber (info->parser); info->textStartColumn = (domLength)XML_GetCurrentColumnNumber (info->parser); info->textStartByteIndex = (domLength)XML_GetCurrentByteIndex (info->parser); } } } /*--------------------------------------------------------------------------- | endCDATA | ................................................................................ + sizeof(domLineColumn)); } else { node = (domTextNode*) domAlloc(sizeof(domTextNode)); } memset(node, 0, sizeof(domTextNode)); node->nodeType = COMMENT_NODE; node->nodeNumber = NODE_NO(info->document); node->valueLength = (domLength)len; node->nodeValue = (char*)MALLOC(len); memmove(node->nodeValue, s, len); node->ownerDocument = info->document; node->parentNode = parentNode; if (parentNode == NULL) { if (info->document->rootNode->lastChild) { ................................................................................ (char*) node, &hnew); Tcl_SetHashValue (h, tdomstrdup (XML_GetBase (info->parser))); node->nodeFlags |= HAS_BASEURI; } len = strlen(target); node->targetLength = (domLength)len; node->targetValue = (char*)MALLOC(len); memmove(node->targetValue, target, len); len = strlen(data); node->dataLength = (domLength)len; node->dataValue = (char*)MALLOC(len); memmove(node->dataValue, data, len); node->ownerDocument = info->document; node->parentNode = parentNode; if (parentNode == NULL) { if (info->document->rootNode->lastChild) { ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_NewStringObj(info->document->extResolver, -1); Tcl_IncrRefCount(cmdPtr); if (base) { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewStringObj(base, (domLength)strlen(base))); } else { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewObj()); } /* For a document with doctype declaration, the systemId is always != NULL. But if the document doesn't have a doctype declaration and the user uses -useForeignDTD 1, the externalEntityRefHandler will be called with a systemId (and publicId and openEntityNames) == NULL. */ if (systemId) { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewStringObj(systemId, (domLength)strlen(systemId))); } else { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewObj()); } if (publicId) { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewStringObj(publicId, (domLength)strlen(publicId))); } else { Tcl_ListObjAppendElement(info->interp, cmdPtr, Tcl_NewObj()); } result = Tcl_EvalObjEx (info->interp, cmdPtr, ................................................................................ tcldom_reportErrorLocation ( info->interp, 20, 40, XML_GetCurrentLineNumber(extparser), XML_GetCurrentColumnNumber(extparser), xmlstringstart, systemId, XML_GetCurrentByteIndex(extparser), XML_ErrorString(XML_GetErrorCode(extparser)) ); } else { sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); Tcl_AppendResult(info->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(info->interp, s, NULL); } keepresult = 1; result = 0; break; case XML_STATUS_SUSPENDED: ................................................................................ do { len = Tcl_Read (chan, buf, sizeof(buf)); done = len < sizeof(buf); status = XML_Parse (extparser, buf, (int)len, done); switch (status) { case XML_STATUS_ERROR: interpResult = Tcl_GetStringResult(info->interp); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); if (interpResult[0] == '\0') { Tcl_ResetResult (info->interp); Tcl_AppendResult(info->interp, "error \"", XML_ErrorString(XML_GetErrorCode(extparser)), "\" in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(info->interp, s, NULL); } else { Tcl_AppendResult(info->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(info->interp, s, NULL); } result = 0; keepresult = 1; done = 1; break; ................................................................................ /*--------------------------------------------------------------------------- | domGetLineColumn | \--------------------------------------------------------------------------*/ int domGetLineColumn ( domNode *node, XML_Size *line, XML_Size *column, XML_Index *byteIndex ) { char *v; domLineColumn *lc; *line = -1; *column = -1; ................................................................................ "xmlns:xml", &hnew); ns = domNewNamespace (parent->ownerDocument, "xml", XML_NAMESPACE); attr->nodeType = ATTRIBUTE_NODE; attr->nodeFlags = IS_NS_NODE; attr->namespace = ns->index; attr->nodeName = (char *)&(h->key); attr->parentNode = parent; attr->valueLength = (domLength)strlen (XML_NAMESPACE); attr->nodeValue = tdomstrdup (XML_NAMESPACE); return attr; } /* *---------------------------------------------------------------------- ................................................................................ h = Tcl_CreateHashEntry (node->ownerDocument->ids, attributeValue, &hnew); /* XXX what to do, if hnew = 0 ??? */ Tcl_SetHashValue (h, node); } } FREE (attr->nodeValue); attr->valueLength = (domLength)strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); } else { /*----------------------------------------------- | add a complete new attribute node \----------------------------------------------*/ attr = (domAttrNode*) domAlloc(sizeof(domAttrNode)); ................................................................................ h = Tcl_CreateHashEntry(&HASHTAB(node->ownerDocument,tdom_attrNames), attributeName, &hnew); attr->nodeType = ATTRIBUTE_NODE; attr->nodeFlags = 0; attr->namespace = 0; attr->nodeName = (char *)&(h->key); attr->parentNode = node; attr->valueLength = (domLength)strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); if (node->firstAttr) { lastAttr = node->firstAttr; /* move to the end of the attribute list */ while (lastAttr->nextSibling) lastAttr = lastAttr->nextSibling; ................................................................................ Tcl_DeleteHashEntry (h); h = Tcl_CreateHashEntry (node->ownerDocument->ids, attributeValue, &hnew); Tcl_SetHashValue (h, node); } } FREE (attr->nodeValue); attr->valueLength = (domLength)strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); } else { /*-------------------------------------------------------- | add a complete new attribute node \-------------------------------------------------------*/ attr = (domAttrNode*) domAlloc(sizeof(domAttrNode)); ................................................................................ attr->namespace = ns->index; if (isNSAttr) { attr->nodeFlags = IS_NS_NODE; } } attr->nodeName = (char *)&(h->key); attr->parentNode = node; attr->valueLength = (domLength)strlen(attributeValue); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, attributeValue); if (isNSAttr) { if (node->firstAttr && (node->firstAttr->nodeFlags & IS_NS_NODE)) { lastAttr = node->firstAttr; while (lastAttr->nextSibling ................................................................................ h = Tcl_CreateHashEntry(&HASHTAB(node->ownerDocument,tdom_attrNames), Tcl_DStringValue(&dStr), &hnew); attr->nodeType = ATTRIBUTE_NODE; attr->nodeFlags = IS_NS_NODE; attr->namespace = ns->index; attr->nodeName = (char *)&(h->key); attr->parentNode = node; attr->valueLength = (domLength)strlen(nsToAdd->uri); attr->nodeValue = (char*)MALLOC(attr->valueLength+1); strcpy(attr->nodeValue, nsToAdd->uri); lastNSAttr = NULL; if (node->firstAttr && (node->firstAttr->nodeFlags & IS_NS_NODE)) { lastNSAttr = node->firstAttr; while (lastNSAttr->nextSibling ................................................................................ int storeLineColumn; domLength textStartLine; domLength textStartColumn; domLength textStartByteIndex; int ignorexmlns; int feedbackAfter; Tcl_Obj *feedbackCmd; XML_Index nextFeedbackPosition; Tcl_Interp *interp; int activeNSsize; int activeNSpos; domActiveNS *activeNS; int baseURIstackSize; int baseURIstackPos; domActiveBaseURI *baseURIstack; ................................................................................ ) { tdomCmdReadInfo *info = (tdomCmdReadInfo *) userData; DispatchPCDATA ((domReadInfo*) info); info->cdataSection = 1; if (info->storeLineColumn) { info->textStartLine = (domLength)XML_GetCurrentLineNumber (info->parser); info->textStartColumn = (domLength)XML_GetCurrentColumnNumber (info->parser); info->textStartByteIndex = (domLength)XML_GetCurrentByteIndex (info->parser); } } int TclTdomObjCmd ( ClientData UNUSED(dummy), Tcl_Interp *interp, |
Changes to generic/dom.h.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 106 107 108 109 110 111 112 113 114 115 116 117 118 119 ... 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 ... 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 ... 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 ... 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 |
\--------------------------------------------------------------------------*/ #ifndef __DOM_H__ #define __DOM_H__ #include <tcl.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <expat.h> #include <domalloc.h> #include <limits.h> /* ................................................................................ #else # define domLength int # define Tcl_SetDomLengthObj Tcl_SetIntObj # define domLengthConversion "%d" # define TCL_SIZE_MODIFIER "" # define Tcl_GetSizeIntFromObj Tcl_GetIntFromObj #endif /* Since the len argument of XML_Parse() is of type int, parsing of * strings has to be done in chunks anyway for Tcl 9 with its strings * potentially longer than 2 GByte. Because of internal changes in * exapt a chunk size of INT_MAX led to out of memory errors. * (TDOM_PCS = TDOM_PARSE_CHUNK_SIZE) */ ................................................................................ # define NODE_NO(doc) ++domUniqueNodeNr # define DOC_NO(doc) ++domUniqueDocNr #else # define TDomNotThreaded(x) # define TDomThreaded(x) x # define HASHTAB(doc,tab) (doc)->tab # define NODE_NO(doc) ((doc)->nodeCounter)++ # ifdef _WIN32 # define DOC_NO(doc) (unsigned long long)(doc) # else # define DOC_NO(doc) (unsigned long)(doc) # endif #endif /* TCL_THREADS */ #define DOC_CMD(s,doc) sprintf((s), "domDoc%p", (void *)(doc)) #define NODE_CMD(s,node) sprintf((s), "domNode%p", (void *)(node)) #define XSLT_CMD(s,doc) sprintf((s), "XSLTcmd%p", (void *)(doc)) #define XML_NAMESPACE "http://www.w3.org/XML/1998/namespace" ................................................................................ | \-------------------------------------------------------------------------*/ typedef struct domDocument { domNodeType nodeType : 8; domDocFlags nodeFlags : 8; domNameSpaceIndex dummy : 16; #ifdef _WIN32 unsigned long long documentNumber; #else unsigned long documentNumber; #endif struct domNode *documentElement; struct domNode *fragments; #ifdef TCL_THREADS struct domNode *deletedNodes; #endif struct domNS **namespaces; int nsptr; ................................................................................ /*-------------------------------------------------------------------------- | domLineColumn | \-------------------------------------------------------------------------*/ typedef struct domLineColumn { Tcl_WideInt line; Tcl_WideInt column; Tcl_WideInt byteIndex; } domLineColumn; typedef struct { int errorCode; Tcl_WideInt errorLine; Tcl_WideInt errorColumn; Tcl_WideInt byteIndex; } domParseForestErrorData; /*-------------------------------------------------------------------------- | domNode | \-------------------------------------------------------------------------*/ ................................................................................ const char *prefix, const char *namespaceURI); const char * domLookupPrefixWithMappings (domNode *node, const char *prefix, char **prefixMappings); domNS * domLookupURI (domNode *node, char *uri); domNS * domGetNamespaceByIndex (domDocument *doc, unsigned int nsIndex); domNS * domNewNamespace (domDocument *doc, const char *prefix, const char *namespaceURI); int domGetLineColumn (domNode *node, Tcl_WideInt *line, Tcl_WideInt *column, Tcl_WideInt *byteIndex); int domXPointerChild (domNode * node, int all, int instance, domNodeType type, char *element, char *attrName, char *attrValue, domLength attrLen, domAddCallback addCallback, void * clientData); int domXPointerDescendant (domNode * node, int all, int instance, |
> > > > > > > > > < < < | < < < < | < | | | | | | | | |
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 ... 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 ... 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 ... 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 ... 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 |
\--------------------------------------------------------------------------*/ #ifndef __DOM_H__ #define __DOM_H__ #include <tcl.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <ctype.h> #include <expat.h> #include <domalloc.h> #include <limits.h> /* ................................................................................ #else # define domLength int # define Tcl_SetDomLengthObj Tcl_SetIntObj # define domLengthConversion "%d" # define TCL_SIZE_MODIFIER "" # define Tcl_GetSizeIntFromObj Tcl_GetIntFromObj #endif #ifndef TDOM_LS_MODIFIER # ifdef _WIN32 # define TDOM_LS_MODIFIER "I64" # else # define TDOM_LS_MODIFIER "ll" # endif #endif /* Since the len argument of XML_Parse() is of type int, parsing of * strings has to be done in chunks anyway for Tcl 9 with its strings * potentially longer than 2 GByte. Because of internal changes in * exapt a chunk size of INT_MAX led to out of memory errors. * (TDOM_PCS = TDOM_PARSE_CHUNK_SIZE) */ ................................................................................ # define NODE_NO(doc) ++domUniqueNodeNr # define DOC_NO(doc) ++domUniqueDocNr #else # define TDomNotThreaded(x) # define TDomThreaded(x) x # define HASHTAB(doc,tab) (doc)->tab # define NODE_NO(doc) ((doc)->nodeCounter)++ # define DOC_NO(doc) (uintptr_t)(doc) #endif /* TCL_THREADS */ #define DOC_CMD(s,doc) sprintf((s), "domDoc%p", (void *)(doc)) #define NODE_CMD(s,node) sprintf((s), "domNode%p", (void *)(node)) #define XSLT_CMD(s,doc) sprintf((s), "XSLTcmd%p", (void *)(doc)) #define XML_NAMESPACE "http://www.w3.org/XML/1998/namespace" ................................................................................ | \-------------------------------------------------------------------------*/ typedef struct domDocument { domNodeType nodeType : 8; domDocFlags nodeFlags : 8; domNameSpaceIndex dummy : 16; uintptr_t documentNumber; struct domNode *documentElement; struct domNode *fragments; #ifdef TCL_THREADS struct domNode *deletedNodes; #endif struct domNS **namespaces; int nsptr; ................................................................................ /*-------------------------------------------------------------------------- | domLineColumn | \-------------------------------------------------------------------------*/ typedef struct domLineColumn { XML_Size line; XML_Size column; XML_Index byteIndex; } domLineColumn; typedef struct { int errorCode; XML_Size errorLine; XML_Size errorColumn; XML_Index byteIndex; } domParseForestErrorData; /*-------------------------------------------------------------------------- | domNode | \-------------------------------------------------------------------------*/ ................................................................................ const char *prefix, const char *namespaceURI); const char * domLookupPrefixWithMappings (domNode *node, const char *prefix, char **prefixMappings); domNS * domLookupURI (domNode *node, char *uri); domNS * domGetNamespaceByIndex (domDocument *doc, unsigned int nsIndex); domNS * domNewNamespace (domDocument *doc, const char *prefix, const char *namespaceURI); int domGetLineColumn (domNode *node, XML_Size *line, XML_Size *column, XML_Index *byteIndex); int domXPointerChild (domNode * node, int all, int instance, domNodeType type, char *element, char *attrName, char *attrValue, domLength attrLen, domAddCallback addCallback, void * clientData); int domXPointerDescendant (domNode * node, int all, int instance, |
Changes to generic/domhtml.c.
2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 .... 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 .... 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 .... 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 .... 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 .... 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 .... 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 .... 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 .... 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 .... 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 .... 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 .... 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 .... 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 .... 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 .... 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 .... 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 |
| allocate new TEXT node \-------------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->valueLength = (x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; DBG(fprintf(stderr, "New text node: '%s'\n", tnode->nodeValue);) if (ampersandSeen) { TranslateEntityRefs (tnode); } ................................................................................ \-----------------------------------------------------------*/ x += 2; while ((c=*x)!=0 && c!='>' && c!='<' && !SPACE(c) ) { *x = tolower(c); x++; } if (c==0) { RetError("Missing \">\"",(start-html) ); } if ( (x-start)==2) { RetError("Null markup name",(start-html) ); } *x = '\0'; /* temporarily terminate the string */ /*---------------------------------------------------------------------- | check for tags which could optional be close | like <option>...</option> ................................................................................ parent_node = node->parentNode; pn = (char*)node->nodeName; break; } } sprintf(tmp, "Unterminated element '%s' (within '%s')", start+2, pn); *x = c; /* remove temporarily termination */ RetError(tmp,(x - html)); } break; } /* move up */ node = parent_node; parent_node = NULL; ................................................................................ } if (*x=='>') { x++; } else { if (*x == '<') { /* start of new tag, ends closing tag */ } else { RetError("Missing \">\"",(x - html)-1); } } if (parent_node == NULL) { /* we return to main node and so finished parsing */ return TCL_OK; } continue; ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = COMMENT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = x - start - 4; tnode->nodeValue = (char*)MALLOC(tnode->valueLength+1); memmove(tnode->nodeValue, start+4, tnode->valueLength); *(tnode->nodeValue + tnode->valueLength) = 0; if (parent_node == NULL) { if (doc->rootNode->lastChild) { tnode->previousSibling = doc->rootNode->lastChild; ................................................................................ parent_node->lastChild = (domNode*)tnode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } x += 3; } else { RetError("Unterminated comment",(start-html)); } continue; } else if (TU(x[1])=='D' && TU(x[2])=='O' && TU(x[3])=='C' && TU(x[4])=='T' && TU(x[5])=='Y' && TU(x[6])=='P' && TU(x[7])=='E' ) { /*-------------------------------------------------------- ................................................................................ } else { x++; } } if (*x) { x++; } else { RetError("Unterminated DOCTYPE definition",(start-html)); } continue; } else if (x[1]=='[' && x[2]=='C' && x[3]=='D' && x[4]=='A' && x[5]=='T' && x[6]=='A' && x[7]=='[' ) { /*-------------------------------------------------------- ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = (x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; if (parent_node->firstChild) { parent_node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = parent_node->lastChild; parent_node->lastChild = (domNode*)tnode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } x += 3; } else { RetError("Unterminated CDATA definition",(start-html) ); } continue; } else { RetError("Incorrect <!... tag",(start-html) ); } } else if (*x=='?') { /*-------------------------------------------------------- | read over a processing instructions(PI) / XMLDecl \-------------------------------------------------------*/ x++; ................................................................................ piSep = start; while ( (c=*piSep)!=0 && !SPACE(c) && (c!='?' || piSep[1]!='>')) { piSep++; } *piSep = '\0'; /* temporarily terminate the string */ pinode->targetLength = strlen(start); pinode->targetValue = (char*)MALLOC(pinode->targetLength); memmove(pinode->targetValue, start, pinode->targetLength); *piSep = c; /* remove temporarily termination */ /*------------------------------------------------- | extract PI data \------------------------------------------------*/ while (SPACE(*piSep)) { piSep++; } pinode->dataLength = x - piSep; pinode->dataValue = (char*)MALLOC(pinode->dataLength); memmove(pinode->dataValue, piSep, pinode->dataLength); if (parent_node == NULL) { if (doc->rootNode->lastChild) { pinode->previousSibling = doc->rootNode->lastChild; doc->rootNode->lastChild->nextSibling ................................................................................ parent_node->lastChild = (domNode*)pinode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)pinode; } } x += 2; } else { RetError("Unterminated processing instruction(PI)",(start-html) ); } continue; } /*---------------------------------------------------------------- | new tag/element ................................................................................ *x = c; if (!rc) { goto readText; } } hasContent = 1; if (c==0) { RetError("Missing \">\"",(start-html) ); } if ( (x-start)==1) { RetError("Null markup name",(start-html) ); } DBG(fprintf(stderr, "\nnew tag '%70.70s...' \n", start);) *x = '\0'; /* temporarily terminate the string */ /*----------------------------------------------------------- | check, whether new starting element close another ................................................................................ char *ArgVal = NULL; domLength nArgVal = 0; while ((c=*x)!=0 && c!='=' && c!='>' && !SPACE(c) ) { *x = tolower(c); x++; } nArgName = x - ArgName; while (SPACE(*x)) { x++; } if (*x == '=') { /* attribute with value, like width="1234" */ ................................................................................ x++; ArgVal = x; ampersandSeen = 0; while ((c=*x)!=0 && c!=cDelim) { if (c=='&') ampersandSeen = 1; x++; } nArgVal = x - ArgVal; if (c==0) { RetError("Unterminated string",(ArgVal - html - 1) ); } else { x++; } } else if (c!=0 && c!='>') { ArgVal = x; while ((c=*x)!=0 && c!='>' && !SPACE(c)) { if (c=='&') ampersandSeen = 1; x++; } if (c==0) { RetError("Missing \">\"",(start-html)); } nArgVal = x - ArgVal; } } else { /* attribute without value, like 'nowrap' */ savedChar = *(ArgName + nArgName); *(ArgName + nArgName) = '\0'; /* terminate arg name */ ArgVal = ArgName; nArgVal = nArgName; ................................................................................ !strcmp(node->nodeName,"source")) {hasContent = 0;} break; /*html5*/ } if (*x=='/') { hasContent = 0; x++; if (*x!='>') { RetError("Syntax Error",(x - html - 1) ); } } if (*x=='>') { x++; } DBG(fprintf(stderr, "%d: new node '%s' hasContent=%d \n", getDeep(node), node->nodeName, hasContent);) ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = node; tnode->valueLength = (x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; if (node->firstChild) { node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = node->lastChild; node->lastChild = (domNode*)tnode; ................................................................................ if (parent_node == NULL) { /* we return to main node and so finished parsing */ return TCL_OK; } if (forest && parent_node == parent) { return TCL_OK; } RetError("Unexpected end",(x - html) ); } /* HTML_SimpleParse */ /*---------------------------------------------------------------------------- | HTML_SimpleParseDocument | |
| | | | | | | | | | | | | | | | | | | | | | | | |
2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 .... 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 .... 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 .... 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 .... 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 .... 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 .... 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 .... 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 .... 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 .... 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 .... 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 .... 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 .... 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 .... 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 .... 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 .... 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 |
| allocate new TEXT node \-------------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->valueLength = (domLength)(x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; DBG(fprintf(stderr, "New text node: '%s'\n", tnode->nodeValue);) if (ampersandSeen) { TranslateEntityRefs (tnode); } ................................................................................ \-----------------------------------------------------------*/ x += 2; while ((c=*x)!=0 && c!='>' && c!='<' && !SPACE(c) ) { *x = tolower(c); x++; } if (c==0) { RetError("Missing \">\"",(domLength)(start-html) ); } if ( (x-start)==2) { RetError("Null markup name",(domLength)(start-html) ); } *x = '\0'; /* temporarily terminate the string */ /*---------------------------------------------------------------------- | check for tags which could optional be close | like <option>...</option> ................................................................................ parent_node = node->parentNode; pn = (char*)node->nodeName; break; } } sprintf(tmp, "Unterminated element '%s' (within '%s')", start+2, pn); *x = c; /* remove temporarily termination */ RetError(tmp,(domLength)(x - html)); } break; } /* move up */ node = parent_node; parent_node = NULL; ................................................................................ } if (*x=='>') { x++; } else { if (*x == '<') { /* start of new tag, ends closing tag */ } else { RetError("Missing \">\"",(domLength)(x - html)-1); } } if (parent_node == NULL) { /* we return to main node and so finished parsing */ return TCL_OK; } continue; ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = COMMENT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = (domLength)(x - start - 4); tnode->nodeValue = (char*)MALLOC(tnode->valueLength+1); memmove(tnode->nodeValue, start+4, tnode->valueLength); *(tnode->nodeValue + tnode->valueLength) = 0; if (parent_node == NULL) { if (doc->rootNode->lastChild) { tnode->previousSibling = doc->rootNode->lastChild; ................................................................................ parent_node->lastChild = (domNode*)tnode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } x += 3; } else { RetError("Unterminated comment",(domLength)(start-html)); } continue; } else if (TU(x[1])=='D' && TU(x[2])=='O' && TU(x[3])=='C' && TU(x[4])=='T' && TU(x[5])=='Y' && TU(x[6])=='P' && TU(x[7])=='E' ) { /*-------------------------------------------------------- ................................................................................ } else { x++; } } if (*x) { x++; } else { RetError("Unterminated DOCTYPE definition",(domLength)(start-html)); } continue; } else if (x[1]=='[' && x[2]=='C' && x[3]=='D' && x[4]=='A' && x[5]=='T' && x[6]=='A' && x[7]=='[' ) { /*-------------------------------------------------------- ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = (domLength)(x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; if (parent_node->firstChild) { parent_node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = parent_node->lastChild; parent_node->lastChild = (domNode*)tnode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } x += 3; } else { RetError("Unterminated CDATA definition",(domLength)(start-html) ); } continue; } else { RetError("Incorrect <!... tag",(domLength)(start-html) ); } } else if (*x=='?') { /*-------------------------------------------------------- | read over a processing instructions(PI) / XMLDecl \-------------------------------------------------------*/ x++; ................................................................................ piSep = start; while ( (c=*piSep)!=0 && !SPACE(c) && (c!='?' || piSep[1]!='>')) { piSep++; } *piSep = '\0'; /* temporarily terminate the string */ pinode->targetLength = (domLength)strlen(start); pinode->targetValue = (char*)MALLOC(pinode->targetLength); memmove(pinode->targetValue, start, pinode->targetLength); *piSep = c; /* remove temporarily termination */ /*------------------------------------------------- | extract PI data \------------------------------------------------*/ while (SPACE(*piSep)) { piSep++; } pinode->dataLength = (domLength)(x - piSep); pinode->dataValue = (char*)MALLOC(pinode->dataLength); memmove(pinode->dataValue, piSep, pinode->dataLength); if (parent_node == NULL) { if (doc->rootNode->lastChild) { pinode->previousSibling = doc->rootNode->lastChild; doc->rootNode->lastChild->nextSibling ................................................................................ parent_node->lastChild = (domNode*)pinode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)pinode; } } x += 2; } else { RetError("Unterminated processing instruction(PI)",(domLength)(start-html)); } continue; } /*---------------------------------------------------------------- | new tag/element ................................................................................ *x = c; if (!rc) { goto readText; } } hasContent = 1; if (c==0) { RetError("Missing \">\"",(domLength)(start-html)); } if ( (x-start)==1) { RetError("Null markup name",(domLength)(start-html)); } DBG(fprintf(stderr, "\nnew tag '%70.70s...' \n", start);) *x = '\0'; /* temporarily terminate the string */ /*----------------------------------------------------------- | check, whether new starting element close another ................................................................................ char *ArgVal = NULL; domLength nArgVal = 0; while ((c=*x)!=0 && c!='=' && c!='>' && !SPACE(c) ) { *x = tolower(c); x++; } nArgName = (domLength)(x - ArgName); while (SPACE(*x)) { x++; } if (*x == '=') { /* attribute with value, like width="1234" */ ................................................................................ x++; ArgVal = x; ampersandSeen = 0; while ((c=*x)!=0 && c!=cDelim) { if (c=='&') ampersandSeen = 1; x++; } nArgVal = (domLength)(x - ArgVal); if (c==0) { RetError("Unterminated string",(domLength)(ArgVal - html - 1)); } else { x++; } } else if (c!=0 && c!='>') { ArgVal = x; while ((c=*x)!=0 && c!='>' && !SPACE(c)) { if (c=='&') ampersandSeen = 1; x++; } if (c==0) { RetError("Missing \">\"",(domLength)(start-html)); } nArgVal = (domLength)(x - ArgVal); } } else { /* attribute without value, like 'nowrap' */ savedChar = *(ArgName + nArgName); *(ArgName + nArgName) = '\0'; /* terminate arg name */ ArgVal = ArgName; nArgVal = nArgName; ................................................................................ !strcmp(node->nodeName,"source")) {hasContent = 0;} break; /*html5*/ } if (*x=='/') { hasContent = 0; x++; if (*x!='>') { RetError("Syntax Error",(domLength)(x - html - 1)); } } if (*x=='>') { x++; } DBG(fprintf(stderr, "%d: new node '%s' hasContent=%d \n", getDeep(node), node->nodeName, hasContent);) ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = node; tnode->valueLength = (domLength)(x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; if (node->firstChild) { node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = node->lastChild; node->lastChild = (domNode*)tnode; ................................................................................ if (parent_node == NULL) { /* we return to main node and so finished parsing */ return TCL_OK; } if (forest && parent_node == parent) { return TCL_OK; } RetError("Unexpected end",(domLength)(x - html)); } /* HTML_SimpleParse */ /*---------------------------------------------------------------------------- | HTML_SimpleParseDocument | |
Changes to generic/domjson.c.
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
} else if (c == '"') { /* Parse string */ j = jsonParseString (json, i, jparse); rc(j); if (jparse->len && jparse->buf[0]) { DBG(fprintf(stderr, "New unescaped text node '%s'\n", jparse->buf)); newTextNode = domNewTextNode (parent->ownerDocument, jparse->buf, strlen(jparse->buf), TEXT_NODE); domAppendChild (parent, (domNode *) newTextNode); } else { DBG(save = json[j];json[j] = '\0';fprintf(stderr, "New text node '%s'\n", &json[i+1]);json[j] = save;); newTextNode = domNewTextNode (parent->ownerDocument, &json[i+1], j-i-1, TEXT_NODE); domAppendChild (parent, (domNode *) newTextNode); |
| |
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
} else if (c == '"') {
/* Parse string */
j = jsonParseString (json, i, jparse);
rc(j);
if (jparse->len && jparse->buf[0]) {
DBG(fprintf(stderr, "New unescaped text node '%s'\n", jparse->buf));
newTextNode = domNewTextNode (parent->ownerDocument,
jparse->buf, (domLength)strlen(jparse->buf),
TEXT_NODE);
domAppendChild (parent, (domNode *) newTextNode);
} else {
DBG(save = json[j];json[j] = '\0';fprintf(stderr, "New text node '%s'\n", &json[i+1]);json[j] = save;);
newTextNode = domNewTextNode (parent->ownerDocument,
&json[i+1], j-i-1, TEXT_NODE);
domAppendChild (parent, (domNode *) newTextNode);
|
Changes to generic/domxpath.c.
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 .... 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 .... 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 .... 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 .... 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 |
rs->type = BoolResult; rs->intvalue = (i ? 1 : 0); } void rsSetString ( xpathResultSet *rs, const char *s) { rs->type = StringResult; if (s) { rs->string = tdomstrdup(s); rs->string_len = strlen(s); } else { rs->string = tdomstrdup(""); rs->string_len = 0; } rs->nr_nodes = 0; } ................................................................................ if (IS_NAN (rs->realvalue)) return tdomstrdup ("NaN"); else if (IS_INF (rs->realvalue)) { if (IS_INF (rs->realvalue) == 1) return tdomstrdup ("Infinity"); else return tdomstrdup ("-Infinity"); } sprintf(tmp, "%g", rs->realvalue); /* strip trailing 0 and . */ len = strlen(tmp); for (; (len > 0) && (tmp[len-1] == '0'); len--) tmp[len-1] = '\0'; if ((len > 0) && (tmp[len-1] == '.')) tmp[len-1] = '\0'; return (tdomstrdup(tmp)); case NaNResult: return tdomstrdup ("NaN"); ................................................................................ if (pfrom != NULL) { rsSetString (result, pfrom + strlen (rightStr)); } else { rsSetString (result, ""); } } else { /* starts-with */ i = strlen(rightStr); if(strncmp(leftStr, rightStr, i)==0) { rsSetBool (result, 1); } else { rsSetBool (result, 0); } } xpathRSFree (&leftResult); ................................................................................ return rc; } *docOrder = savedDocOrder; leftStr = xpathFuncString( &leftResult ); pto = (char*)REALLOC(pto, 1+len+strlen(leftStr)); memmove(pto + len, leftStr, strlen(leftStr)); len += strlen(leftStr); *(pto + len) = '\0'; xpathRSFree( &leftResult ); FREE(leftStr); nextStep = nextStep->next; } rsSetString (result, pto); FREE(pto); ................................................................................ sprintf(step, "/%s[%d]", nTest, nodeIndex); } break; default: break; } len = strlen(step); if ( (len + *xpathLen) > *xpathAllocated ) { *xpathAllocated = *xpathAllocated * 2; *xpath = REALLOC(*xpath, *xpathAllocated + 1); } strcpy( *xpath + *xpathLen, step); *xpathLen += len; |
| | | | | |
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 .... 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 .... 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 .... 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 .... 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 |
rs->type = BoolResult; rs->intvalue = (i ? 1 : 0); } void rsSetString ( xpathResultSet *rs, const char *s) { rs->type = StringResult; if (s) { rs->string = tdomstrdup(s); rs->string_len = (domLength)strlen(s); } else { rs->string = tdomstrdup(""); rs->string_len = 0; } rs->nr_nodes = 0; } ................................................................................ if (IS_NAN (rs->realvalue)) return tdomstrdup ("NaN"); else if (IS_INF (rs->realvalue)) { if (IS_INF (rs->realvalue) == 1) return tdomstrdup ("Infinity"); else return tdomstrdup ("-Infinity"); } sprintf(tmp, "%g", rs->realvalue); /* strip trailing 0 and . */ len = (domLength)strlen(tmp); for (; (len > 0) && (tmp[len-1] == '0'); len--) tmp[len-1] = '\0'; if ((len > 0) && (tmp[len-1] == '.')) tmp[len-1] = '\0'; return (tdomstrdup(tmp)); case NaNResult: return tdomstrdup ("NaN"); ................................................................................ if (pfrom != NULL) { rsSetString (result, pfrom + strlen (rightStr)); } else { rsSetString (result, ""); } } else { /* starts-with */ i = (domLength)strlen(rightStr); if(strncmp(leftStr, rightStr, i)==0) { rsSetBool (result, 1); } else { rsSetBool (result, 0); } } xpathRSFree (&leftResult); ................................................................................ return rc; } *docOrder = savedDocOrder; leftStr = xpathFuncString( &leftResult ); pto = (char*)REALLOC(pto, 1+len+strlen(leftStr)); memmove(pto + len, leftStr, strlen(leftStr)); len += (domLength)strlen(leftStr); *(pto + len) = '\0'; xpathRSFree( &leftResult ); FREE(leftStr); nextStep = nextStep->next; } rsSetString (result, pto); FREE(pto); ................................................................................ sprintf(step, "/%s[%d]", nTest, nodeIndex); } break; default: break; } len = (domLength)strlen(step); if ( (len + *xpathLen) > *xpathAllocated ) { *xpathAllocated = *xpathAllocated * 2; *xpath = REALLOC(*xpath, *xpathAllocated + 1); } strcpy( *xpath + *xpathLen, step); *xpathLen += len; |
Changes to generic/domxslt.c.
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 ... 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 .... 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 .... 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 .... 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 .... 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 .... 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 .... 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 .... 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 .... 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 .... 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 .... 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 |
domNode * node, char * str, char ** errMsg) { Tcl_DString dStr; char buffer[1024]; const char *baseURI; Tcl_WideInt line, column, byteIndex; Tcl_DStringInit (&dStr); baseURI = findBaseURI (node); if (baseURI) { Tcl_DStringAppend (&dStr, "In entity ", 10); Tcl_DStringAppend (&dStr, baseURI, -1); } if (node->nodeFlags & HAS_LINE_COLUMN) { domGetLineColumn (node, &line, &column, &byteIndex); sprintf (buffer, " at line %" TCL_LL_MODIFIER "d, column %" TCL_LL_MODIFIER "d:\n", line, column); Tcl_DStringAppend (&dStr, buffer, -1); Tcl_DStringAppend (&dStr, str, -1); } else { if (baseURI) Tcl_DStringAppend (&dStr, ": ", 2); Tcl_DStringAppend (&dStr, str, -1); } if (*errMsg) FREE (*errMsg); ................................................................................ { "IV", "iv", 4, }, { "I" , "i" , 1 } }; switch (f->tokens[*useFormatToken].type) { case latin_number: sprintf (tmp, "%" TCL_SIZE_MODIFIER "d", value); fulllen = len = strlen (tmp); if (f->tokens[*useFormatToken].minlength > fulllen) { fulllen = f->tokens[*useFormatToken].minlength; } if (groupingSeparator) { gslen = strlen (groupingSeparator); Tcl_DStringInit (&tmp1); if (len < f->tokens[*useFormatToken].minlength) { for (i = 0; i < f->tokens[*useFormatToken].minlength - len; i++) { Tcl_DStringAppend (&tmp1, "0", 1); } } Tcl_DStringAppend (&tmp1, tmp, len); ................................................................................ } break; default: sprintf (tmp, "%" TCL_SIZE_MODIFIER "d", value); break; } len = strlen (tmp); Tcl_DStringAppend (str, tmp, len); appendSeperator: if (addSeparater) { if (f->tokens[*useFormatToken].sepStart) { Tcl_DStringAppend (str, f->tokens[*useFormatToken].sepStart, f->tokens[*useFormatToken].sepLen); *useFormatToken += 1; ................................................................................ } } DBG(fprintf(stderr,"normal part nZero=%d i=%d glen=%d\n", nZero, i, gLen);) /* fill in grouping char */ if (gLen > 0) { sprintf(stmp,"%0*d", nZero, i); l = strlen (stmp); for (j = 0; j < l; j++) { t = df->zeroDigit + stmp[j] - 48; Tcl_DStringAppend (&s, (char*)&t, sizeof (Tcl_UniChar)); } DBG( Tcl_DStringInit(&dbStr); fprintf (stderr, "'%s' ---> ..\n", stmp); ................................................................................ Tcl_DStringInit (&dbStr); fprintf(stderr,"n='%s'\n", Tcl_UniCharToUtfDString (n, Tcl_UniCharLen (n), &dbStr)); Tcl_DStringFree (&dbStr); ) } else { sprintf(stmp,"%0*d", nZero, i); l = strlen (stmp); for (j = 0; j < l; j++) { n[j] = df->zeroDigit + (int) stmp[j] - 48; } n[l] = '\0'; DBG( Tcl_DStringInit (&dbStr); fprintf(stderr,"n='%s'\n", ................................................................................ Tcl_UniCharToUtfDString(n, Tcl_UniCharLen (n), &dbStr)); Tcl_DStringFree (&dbStr); ) } DBG(fprintf(stderr, "number=%f fHash=%d fZero=%d \n", number, fHash, fZero);) if ((fHash+fZero) > 0) { l = strlen(ftmp); while (l>0 && fHash>0) { /* strip not need 0's */ if (ftmp[l-1] == '0') { ftmp[l-1]='\0'; l--; fHash--; } else { break; } } ................................................................................ tstr = Tcl_UniCharToUtfDString( (Tcl_UniChar*)Tcl_DStringValue (&s), Tcl_UniCharLen((Tcl_UniChar*)Tcl_DStringValue(&s)), &dStr ); *resultStr = tdomstrdup(tstr); Tcl_DStringFree (&dStr); Tcl_DStringFree (&s); *resultLen = strlen(*resultStr); return 0; xsltFormatNumberError: Tcl_DStringFree (&dStr); Tcl_DStringFree (&s); return -1; } ................................................................................ domCopyTo (rs.nodes[i], xs->lastNode, 1); } } } } else { str = xpathFuncString( &rs ); TRACE1("copyOf: xpathString='%s' \n", str); domAppendNewTextNode(xs->lastNode, str, strlen(str), TEXT_NODE, 0); FREE(str); } xpathRSFree( &rs ); break; case decimalFormat: ................................................................................ FREE(str); FREE(str2); return -1; } xs->lastNode = savedLastNode; n = (domNode*)domNewProcessingInstructionNode( xs->resultDoc, str2, strlen(str2), str, len); domAppendChild(xs->lastNode, n); domDeleteNode (fragmentNode, NULL, NULL); FREE(str2); FREE(str); break; case sort: ................................................................................ TRACE1("valueOf: str='%s' \n", str); rc = evalXPath(xs, context, currentNode, currentPos, str, &rs, errMsg); CHECK_RC; DBG(rsPrint(&rs)); str = xpathFuncString( &rs ); TRACE1("valueOf: xpathString='%s' \n", str); domAppendNewTextNode(xs->lastNode, str, strlen(str), TEXT_NODE, disableEsc); xpathRSFree( &rs ); FREE(str); } else { reportError (actionNode, "xsl:value-of must have a" " \"select\" attribute!", errMsg); return -1; ................................................................................ ) cmdPtr = Tcl_NewStringObj (xsltDoc->extResolver, -1); Tcl_IncrRefCount (cmdPtr); if (baseURI) { Tcl_ListObjAppendElement(interp, cmdPtr, Tcl_NewStringObj (baseURI, strlen(baseURI))); } else { Tcl_ListObjAppendElement(interp, cmdPtr, Tcl_NewStringObj ("", 0)); } Tcl_ListObjAppendElement (interp, cmdPtr, (href ? Tcl_NewStringObj (href, strlen (href)) : Tcl_NewStringObj ("", 0))); Tcl_ListObjAppendElement (interp, cmdPtr, Tcl_NewStringObj ("", 0)); result = Tcl_EvalObjEx (interp, cmdPtr, TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL); Tcl_DecrRefCount (cmdPtr); ................................................................................ Tcl_DStringAppend (&dStr, "Error while processing external entity \"", -1); Tcl_DStringAppend (&dStr, href, -1); Tcl_DStringAppend (&dStr, "\":\n", -1); str = Tcl_GetStringResult (interp); if (str[0] == '\0') { Tcl_DStringAppend (&dStr, "At line ", -1); sprintf (s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber (parser)); Tcl_DStringAppend (&dStr, s, -1); Tcl_DStringAppend (&dStr, " character ", -1); sprintf (s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber (parser)); Tcl_DStringAppend (&dStr, s, -1); Tcl_DStringAppend (&dStr, ": ", 2); Tcl_DStringAppend (&dStr, XML_ErrorString (XML_GetErrorCode(parser)), -1); } else { Tcl_DStringAppend (&dStr, str, -1); |
| > | | | | | | | | | | | | | | | | |
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 ... 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 .... 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 .... 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 .... 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 .... 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 .... 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 .... 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 .... 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 .... 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 .... 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 .... 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 |
domNode * node, char * str, char ** errMsg) { Tcl_DString dStr; char buffer[1024]; const char *baseURI; XML_Size line, column; XML_Index byteIndex; Tcl_DStringInit (&dStr); baseURI = findBaseURI (node); if (baseURI) { Tcl_DStringAppend (&dStr, "In entity ", 10); Tcl_DStringAppend (&dStr, baseURI, -1); } if (node->nodeFlags & HAS_LINE_COLUMN) { domGetLineColumn (node, &line, &column, &byteIndex); sprintf (buffer, " at line %" TDOM_LS_MODIFIER "d, column %" TDOM_LS_MODIFIER "d:\n", line, column); Tcl_DStringAppend (&dStr, buffer, -1); Tcl_DStringAppend (&dStr, str, -1); } else { if (baseURI) Tcl_DStringAppend (&dStr, ": ", 2); Tcl_DStringAppend (&dStr, str, -1); } if (*errMsg) FREE (*errMsg); ................................................................................ { "IV", "iv", 4, }, { "I" , "i" , 1 } }; switch (f->tokens[*useFormatToken].type) { case latin_number: sprintf (tmp, "%" TCL_SIZE_MODIFIER "d", value); fulllen = len = (domLength)strlen (tmp); if (f->tokens[*useFormatToken].minlength > fulllen) { fulllen = f->tokens[*useFormatToken].minlength; } if (groupingSeparator) { gslen = (domLength)strlen (groupingSeparator); Tcl_DStringInit (&tmp1); if (len < f->tokens[*useFormatToken].minlength) { for (i = 0; i < f->tokens[*useFormatToken].minlength - len; i++) { Tcl_DStringAppend (&tmp1, "0", 1); } } Tcl_DStringAppend (&tmp1, tmp, len); ................................................................................ } break; default: sprintf (tmp, "%" TCL_SIZE_MODIFIER "d", value); break; } len = (domLength)strlen (tmp); Tcl_DStringAppend (str, tmp, len); appendSeperator: if (addSeparater) { if (f->tokens[*useFormatToken].sepStart) { Tcl_DStringAppend (str, f->tokens[*useFormatToken].sepStart, f->tokens[*useFormatToken].sepLen); *useFormatToken += 1; ................................................................................ } } DBG(fprintf(stderr,"normal part nZero=%d i=%d glen=%d\n", nZero, i, gLen);) /* fill in grouping char */ if (gLen > 0) { sprintf(stmp,"%0*d", nZero, i); l = (domLength)strlen (stmp); for (j = 0; j < l; j++) { t = df->zeroDigit + stmp[j] - 48; Tcl_DStringAppend (&s, (char*)&t, sizeof (Tcl_UniChar)); } DBG( Tcl_DStringInit(&dbStr); fprintf (stderr, "'%s' ---> ..\n", stmp); ................................................................................ Tcl_DStringInit (&dbStr); fprintf(stderr,"n='%s'\n", Tcl_UniCharToUtfDString (n, Tcl_UniCharLen (n), &dbStr)); Tcl_DStringFree (&dbStr); ) } else { sprintf(stmp,"%0*d", nZero, i); l = (domLength)strlen (stmp); for (j = 0; j < l; j++) { n[j] = df->zeroDigit + (int) stmp[j] - 48; } n[l] = '\0'; DBG( Tcl_DStringInit (&dbStr); fprintf(stderr,"n='%s'\n", ................................................................................ Tcl_UniCharToUtfDString(n, Tcl_UniCharLen (n), &dbStr)); Tcl_DStringFree (&dbStr); ) } DBG(fprintf(stderr, "number=%f fHash=%d fZero=%d \n", number, fHash, fZero);) if ((fHash+fZero) > 0) { l = (domLength)strlen(ftmp); while (l>0 && fHash>0) { /* strip not need 0's */ if (ftmp[l-1] == '0') { ftmp[l-1]='\0'; l--; fHash--; } else { break; } } ................................................................................ tstr = Tcl_UniCharToUtfDString( (Tcl_UniChar*)Tcl_DStringValue (&s), Tcl_UniCharLen((Tcl_UniChar*)Tcl_DStringValue(&s)), &dStr ); *resultStr = tdomstrdup(tstr); Tcl_DStringFree (&dStr); Tcl_DStringFree (&s); *resultLen = (domLength)strlen(*resultStr); return 0; xsltFormatNumberError: Tcl_DStringFree (&dStr); Tcl_DStringFree (&s); return -1; } ................................................................................ domCopyTo (rs.nodes[i], xs->lastNode, 1); } } } } else { str = xpathFuncString( &rs ); TRACE1("copyOf: xpathString='%s' \n", str); domAppendNewTextNode(xs->lastNode, str, (domLength)strlen(str), TEXT_NODE, 0); FREE(str); } xpathRSFree( &rs ); break; case decimalFormat: ................................................................................ FREE(str); FREE(str2); return -1; } xs->lastNode = savedLastNode; n = (domNode*)domNewProcessingInstructionNode( xs->resultDoc, str2, (domLength)strlen(str2), str, len); domAppendChild(xs->lastNode, n); domDeleteNode (fragmentNode, NULL, NULL); FREE(str2); FREE(str); break; case sort: ................................................................................ TRACE1("valueOf: str='%s' \n", str); rc = evalXPath(xs, context, currentNode, currentPos, str, &rs, errMsg); CHECK_RC; DBG(rsPrint(&rs)); str = xpathFuncString( &rs ); TRACE1("valueOf: xpathString='%s' \n", str); domAppendNewTextNode(xs->lastNode, str, (domLength)strlen(str), TEXT_NODE, disableEsc); xpathRSFree( &rs ); FREE(str); } else { reportError (actionNode, "xsl:value-of must have a" " \"select\" attribute!", errMsg); return -1; ................................................................................ ) cmdPtr = Tcl_NewStringObj (xsltDoc->extResolver, -1); Tcl_IncrRefCount (cmdPtr); if (baseURI) { Tcl_ListObjAppendElement(interp, cmdPtr, Tcl_NewStringObj (baseURI, (domLength)strlen(baseURI))); } else { Tcl_ListObjAppendElement(interp, cmdPtr, Tcl_NewStringObj ("", 0)); } Tcl_ListObjAppendElement (interp, cmdPtr, (href ? Tcl_NewStringObj (href, (domLength)strlen (href)) : Tcl_NewStringObj ("", 0))); Tcl_ListObjAppendElement (interp, cmdPtr, Tcl_NewStringObj ("", 0)); result = Tcl_EvalObjEx (interp, cmdPtr, TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL); Tcl_DecrRefCount (cmdPtr); ................................................................................ Tcl_DStringAppend (&dStr, "Error while processing external entity \"", -1); Tcl_DStringAppend (&dStr, href, -1); Tcl_DStringAppend (&dStr, "\":\n", -1); str = Tcl_GetStringResult (interp); if (str[0] == '\0') { Tcl_DStringAppend (&dStr, "At line ", -1); sprintf (s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber (parser)); Tcl_DStringAppend (&dStr, s, -1); Tcl_DStringAppend (&dStr, " character ", -1); sprintf (s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber (parser)); Tcl_DStringAppend (&dStr, s, -1); Tcl_DStringAppend (&dStr, ": ", 2); Tcl_DStringAppend (&dStr, XML_ErrorString (XML_GetErrorCode(parser)), -1); } else { Tcl_DStringAppend (&dStr, str, -1); |
Changes to generic/nodecmd.c.
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
} break; } if (type < 0 && newNode != NULL) { char buf[64]; tcldom_createNodeObj(interp, newNode, buf); Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, strlen(buf))); } if (ret == TCL_OK) doc->nodeFlags |= NEEDS_RENUMBERING; return ret; } /*---------------------------------------------------------------------------- |
| |
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
}
break;
}
if (type < 0 && newNode != NULL) {
char buf[64];
tcldom_createNodeObj(interp, newNode, buf);
Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, (domLength)strlen(buf)));
}
if (ret == TCL_OK) doc->nodeFlags |= NEEDS_RENUMBERING;
return ret;
}
/*----------------------------------------------------------------------------
|
Changes to generic/schema.c.
3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 .... 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 .... 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 .... 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 .... 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 .... 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 .... 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 .... 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 .... 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 |
if (kc->flags & DKC_FLAG_IGNORE_EMPTY_FIELD_SET) { continue; } if (kc->emptyFieldSetValue) { if (first) first = 0; else Tcl_DStringAppend (&dStr, ":", 1); Tcl_DStringAppend (&dStr, kc->emptyFieldSetValue, kc->efsv_len); } else { if (first) first = 0; else Tcl_DStringAppend (&dStr, ":", 1); } continue; } if (frs.nr_nodes != 1) { ................................................................................ repoolStackElement (sdata, se1); if (!probeMayskip) { expectedFlags &= ~EXPECTED_PROBE_MAYSKIP; } if (mayskip) break; } if (probeMayskip) break; Tcl_CreateHashEntry (seenCPs, ic, &hnew); if (hnew) { se1 = getStackElement (sdata, ic); mayskip = getNextExpectedWorker (sdata, se1, interp, seenCPs, rObj, expectedFlags); repoolStackElement (sdata, se1); } ................................................................................ break; case SCHEMA_CTYPE_PATTERN: if (recursivePattern (se, jc)) { break; } /* fall through */ case SCHEMA_CTYPE_INTERLEAVE: Tcl_CreateHashEntry (seenCPs, jc, &hnew); if (hnew) { se1 = getStackElement (sdata, jc); mayskip = getNextExpectedWorker ( sdata, se1, interp, seenCPs, rObj, expectedFlags ); repoolStackElement (sdata, se1); ................................................................................ SchemaData *sdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[] ) { int methodIndex, expectedFlags; Tcl_WideInt line, column, byteIndex; Tcl_HashEntry *h; SchemaCP *cp; SchemaValidationStack *se; void *ns; Tcl_Obj *rObj; static const char *schemaInstanceInfoMethods[] = { ................................................................................ break; } break; case m_line: if (!sdata->parser && !sdata->node) break; if (sdata->parser) { SetLongResult (XML_GetCurrentLineNumber (sdata->parser)); break; } if (domGetLineColumn(sdata->node, &line, &column, &byteIndex) < 0) break; SetLongResult (line); break; case m_column: if (!sdata->parser && !sdata->node) break; if (sdata->parser) { SetLongResult (XML_GetCurrentColumnNumber (sdata->parser)); break; } if (domGetLineColumn(sdata->node, &line, &column, &byteIndex) < 0) break; SetLongResult (column); break; case m_byteIndex: if (!sdata->parser && !sdata->node) break; if (sdata->parser) { SetLongResult (XML_GetCurrentByteIndex (sdata->parser)); break; } if (domGetLineColumn(sdata->node, &line, &column, &byteIndex) < 0) break; SetLongResult (byteIndex); break; case m_domNode: if (!sdata->node) break; /* We distinguish between calls from reportCmd and others * (from scripts called with the tcl cmd). */ if (sdata->vaction) { ................................................................................ XML_Parser parser ) { Tcl_Obj *resultObj; char sl[50], sc[50]; resultObj = Tcl_NewObj (); sprintf(sl, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(parser)); sprintf(sc, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(parser)); if (sdata->validationState == VALIDATION_ERROR) { Tcl_AppendStringsToObj (resultObj, "error \"", Tcl_GetStringResult (interp), "\" at line ", sl, " character ", sc, NULL); } else { Tcl_AppendStringsToObj (resultObj, "error \"", XML_ErrorString(XML_GetErrorCode(parser)), ................................................................................ } cmdPtr = Tcl_NewStringObj(Tcl_GetString(vdata->externalentitycommandObj), -1); Tcl_IncrRefCount(cmdPtr); if (base) { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewStringObj(base, strlen(base))); } else { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewObj()); } /* For a document with doctype declaration, the systemId is always != NULL. But if the document doesn't have a doctype declaration and the user uses -useForeignDTD 1, the externalEntityRefHandler will be called with a systemId (and publicId and openEntityNames) == NULL. */ if (systemId) { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewStringObj(systemId, strlen(systemId))); } else { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewObj()); } if (publicId) { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewStringObj(publicId, strlen(publicId))); } else { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewObj()); } result = Tcl_EvalObjEx (vdata->interp, cmdPtr, ................................................................................ if (interpResult[0] == '\0') { tcldom_reportErrorLocation ( vdata->interp, 20, 40, XML_GetCurrentLineNumber(extparser), XML_GetCurrentColumnNumber(extparser), xmlstringstart, systemId, XML_GetCurrentByteIndex(extparser), XML_ErrorString(XML_GetErrorCode(extparser))); } else { sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); Tcl_AppendResult(vdata->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(vdata->interp, s, NULL); } keepresult = 1; result = 0; break; case XML_STATUS_SUSPENDED: ................................................................................ do { len = Tcl_Read (chan, buf, sizeof(buf)); done = len < sizeof(buf); status = XML_Parse (extparser, buf, (int)len, done); switch (status) { case XML_STATUS_ERROR: interpResult = Tcl_GetStringResult(vdata->interp); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); if (interpResult[0] == '\0') { Tcl_ResetResult (vdata->interp); Tcl_AppendResult( vdata->interp, "error \"", XML_ErrorString(XML_GetErrorCode(extparser)), "\" in entity \"", systemId, "\" at line ", s, " character ", NULL ); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(vdata->interp, s, NULL); } else { Tcl_AppendResult( vdata->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL ); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(vdata->interp, s, NULL); } result = 0; keepresult = 1; done = 1; break; |
| | | | > | | | | | | | | | | | | | | | | |
3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 .... 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 .... 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 .... 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 .... 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 .... 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 .... 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 .... 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 .... 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 |
if (kc->flags & DKC_FLAG_IGNORE_EMPTY_FIELD_SET) { continue; } if (kc->emptyFieldSetValue) { if (first) first = 0; else Tcl_DStringAppend (&dStr, ":", 1); Tcl_DStringAppend (&dStr, kc->emptyFieldSetValue, (domLength)kc->efsv_len); } else { if (first) first = 0; else Tcl_DStringAppend (&dStr, ":", 1); } continue; } if (frs.nr_nodes != 1) { ................................................................................ repoolStackElement (sdata, se1); if (!probeMayskip) { expectedFlags &= ~EXPECTED_PROBE_MAYSKIP; } if (mayskip) break; } if (probeMayskip) break; Tcl_CreateHashEntry (seenCPs, (char *)ic, &hnew); if (hnew) { se1 = getStackElement (sdata, ic); mayskip = getNextExpectedWorker (sdata, se1, interp, seenCPs, rObj, expectedFlags); repoolStackElement (sdata, se1); } ................................................................................ break; case SCHEMA_CTYPE_PATTERN: if (recursivePattern (se, jc)) { break; } /* fall through */ case SCHEMA_CTYPE_INTERLEAVE: Tcl_CreateHashEntry (seenCPs, (char *)jc, &hnew); if (hnew) { se1 = getStackElement (sdata, jc); mayskip = getNextExpectedWorker ( sdata, se1, interp, seenCPs, rObj, expectedFlags ); repoolStackElement (sdata, se1); ................................................................................ SchemaData *sdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[] ) { int methodIndex, expectedFlags; XML_Size line, column; XML_Index byteIndex; Tcl_HashEntry *h; SchemaCP *cp; SchemaValidationStack *se; void *ns; Tcl_Obj *rObj; static const char *schemaInstanceInfoMethods[] = { ................................................................................ break; } break; case m_line: if (!sdata->parser && !sdata->node) break; if (sdata->parser) { SetLongResult ((domLength)XML_GetCurrentLineNumber (sdata->parser)); break; } if (domGetLineColumn(sdata->node, &line, &column, &byteIndex) < 0) break; SetLongResult ((domLength)line); break; case m_column: if (!sdata->parser && !sdata->node) break; if (sdata->parser) { SetLongResult ((domLength)XML_GetCurrentColumnNumber (sdata->parser)); break; } if (domGetLineColumn(sdata->node, &line, &column, &byteIndex) < 0) break; SetLongResult ((domLength)column); break; case m_byteIndex: if (!sdata->parser && !sdata->node) break; if (sdata->parser) { SetLongResult ((domLength)XML_GetCurrentByteIndex (sdata->parser)); break; } if (domGetLineColumn(sdata->node, &line, &column, &byteIndex) < 0) break; SetLongResult ((domLength)byteIndex); break; case m_domNode: if (!sdata->node) break; /* We distinguish between calls from reportCmd and others * (from scripts called with the tcl cmd). */ if (sdata->vaction) { ................................................................................ XML_Parser parser ) { Tcl_Obj *resultObj; char sl[50], sc[50]; resultObj = Tcl_NewObj (); sprintf(sl, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(parser)); sprintf(sc, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(parser)); if (sdata->validationState == VALIDATION_ERROR) { Tcl_AppendStringsToObj (resultObj, "error \"", Tcl_GetStringResult (interp), "\" at line ", sl, " character ", sc, NULL); } else { Tcl_AppendStringsToObj (resultObj, "error \"", XML_ErrorString(XML_GetErrorCode(parser)), ................................................................................ } cmdPtr = Tcl_NewStringObj(Tcl_GetString(vdata->externalentitycommandObj), -1); Tcl_IncrRefCount(cmdPtr); if (base) { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewStringObj(base, (domLength)strlen(base))); } else { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewObj()); } /* For a document with doctype declaration, the systemId is always != NULL. But if the document doesn't have a doctype declaration and the user uses -useForeignDTD 1, the externalEntityRefHandler will be called with a systemId (and publicId and openEntityNames) == NULL. */ if (systemId) { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewStringObj(systemId, (domLength)strlen(systemId))); } else { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewObj()); } if (publicId) { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewStringObj(publicId, (domLength)strlen(publicId))); } else { Tcl_ListObjAppendElement(vdata->interp, cmdPtr, Tcl_NewObj()); } result = Tcl_EvalObjEx (vdata->interp, cmdPtr, ................................................................................ if (interpResult[0] == '\0') { tcldom_reportErrorLocation ( vdata->interp, 20, 40, XML_GetCurrentLineNumber(extparser), XML_GetCurrentColumnNumber(extparser), xmlstringstart, systemId, XML_GetCurrentByteIndex(extparser), XML_ErrorString(XML_GetErrorCode(extparser))); } else { sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); Tcl_AppendResult(vdata->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(vdata->interp, s, NULL); } keepresult = 1; result = 0; break; case XML_STATUS_SUSPENDED: ................................................................................ do { len = Tcl_Read (chan, buf, sizeof(buf)); done = len < sizeof(buf); status = XML_Parse (extparser, buf, (int)len, done); switch (status) { case XML_STATUS_ERROR: interpResult = Tcl_GetStringResult(vdata->interp); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); if (interpResult[0] == '\0') { Tcl_ResetResult (vdata->interp); Tcl_AppendResult( vdata->interp, "error \"", XML_ErrorString(XML_GetErrorCode(extparser)), "\" in entity \"", systemId, "\" at line ", s, " character ", NULL ); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(vdata->interp, s, NULL); } else { Tcl_AppendResult( vdata->interp, ", referenced in entity \"", systemId, "\" at line ", s, " character ", NULL ); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(vdata->interp, s, NULL); } result = 0; keepresult = 1; done = 1; break; |
Changes to generic/tcldom.c.
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 ... 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 .... 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 .... 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 .... 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 .... 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 .... 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 .... 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 .... 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 .... 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 .... 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 |
Tcl_Obj * msgcmd; } XsltMsgCBInfo; static void UpdateStringOfTdomNode(Tcl_Obj *objPtr); static int SetTdomNodeFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); const Tcl_ObjType tdomNodeType = { "tdom-node", NULL, NULL, UpdateStringOfTdomNode, SetTdomNodeFromAny }; ................................................................................ UpdateStringOfTdomNode( Tcl_Obj *objPtr) { char nodeName[80]; domLength len; NODE_CMD(nodeName, objPtr->internalRep.otherValuePtr); len = strlen(nodeName); objPtr->bytes = (ckalloc((unsigned char) len+1)); memcpy(objPtr->bytes, nodeName, len+1); objPtr->length = len; } /*---------------------------------------------------------------------------- | SetTdomNodeFromAny ................................................................................ const char *varValue; const char *termPtr; Tcl_Interp *interp = (Tcl_Interp *) clientData; *offset = 0; varValue = Tcl_ParseVar(interp, strToParse, &termPtr); if (varValue) { *offset = termPtr - strToParse; /* If strToParse start with a single '$' without a following * var name (according to Tcl var name rules), Tcl_ParseVar() * doesn't report a parsing error but returns just a pointer * to a static string "$". */ if (*offset == 1) { *errMsg = tdomstrdup ("Missing var name after '$'."); varValue = NULL; ................................................................................ } } else { AP(*pc); } } } if (b >= bLimit) { writeChars(xmlString, chan, buf, b - buf); b = buf; } pc++; } if (b > buf) { writeChars(xmlString, chan, buf, b - buf); } } /*---------------------------------------------------------------------------- | tcldom_tolower | \---------------------------------------------------------------------------*/ ................................................................................ if (*p == ']') { p++; i++; if (i >= ((domTextNode*)node)->valueLength) break; if (*p == ']') { p++; i++; if (i >= ((domTextNode*)node)->valueLength) break; if (*p == '>') { writeChars(xmlString, chan, start, p-start); writeChars(xmlString, chan, "]]><![CDATA[>", 13); start = p+1; } } } p++; i++; } writeChars(xmlString, chan, start, p-start); writeChars(xmlString, chan, "]]>", 3); } else { if (node->nodeFlags & DISABLE_OUTPUT_ESCAPING) { writeChars(xmlString, chan, ((domTextNode*)node)->nodeValue, ((domTextNode*)node)->valueLength); } else { tcldom_AppendEscaped(xmlString, chan, ................................................................................ for (i = 0; i < clen; i++) { AP(*pc); pc++; } } } if (b >= bLimit) { writeChars(jstring, chan, buf, b - buf); b = buf; } } AP('"'); writeChars(jstring, chan, buf, b - buf); } static void tcldom_childrenAsJSON ( Tcl_Obj *jstring, domNode *node, /* Must be an ELEMENT_NODE */ Tcl_Channel channel, ................................................................................ domAttrNode *attrs; domException exception; char tmp[200], prefix[MAX_PREFIX_LEN], *method, *nodeName, *str, *attr_name, *attr_val, *filter; const char *localName, *uri, *nsStr; int result, methodIndex, i; domLength length; Tcl_WideInt line, column, byteIndex; int nsIndex, bool, hnew, legacy, jsonType; Tcl_Obj *namePtr, *resultPtr; Tcl_Obj *mobjv[MAX_REWRITE_ARGS], *storedErrMsg; Tcl_CmdInfo cmdInfo; Tcl_HashEntry *h; static const char *nodeMethods[] = { ................................................................................ case m_getLine: CheckArgs(2,2,2,""); if (domGetLineColumn(node, &line, &column, &byteIndex) < 0) { SetResult("no line/column information available!"); return TCL_ERROR; } SetLongResult(line); break; case m_getColumn: CheckArgs(2,2,2,""); if (domGetLineColumn (node, &line, &column, &byteIndex) < 0) { SetResult("no line/column information available!"); return TCL_ERROR; } SetLongResult(column); break; case m_getByteIndex: CheckArgs(2,2,2,""); if (domGetLineColumn (node, &line, &column, &byteIndex) < 0) { SetResult("no position information available!"); return TCL_ERROR; } SetLongResult(byteIndex); break; case m_getBaseURI: CheckArgs(2,2,2,""); /* fall through */ case m_baseURI: ................................................................................ /* Helper function to build up the error string message in a central * place. Caller must provide byteIndex; line is expected to be > 0 if * line/column information is given. */ void tcldom_reportErrorLocation ( Tcl_Interp *interp, int before, int after, domLength line, domLength column, char *xmlstring, const char *entity, domLength byteIndex, const char *errStr ) { char s[200], sb[25], sl[25], sc[25]; char *d = NULL, *buf; domLength i, ind; ................................................................................ } Tcl_ResetResult(interp); Tcl_AppendResult (interp, "error \"", errStr, "\"", NULL); if (entity) { Tcl_AppendResult (interp, " in entity \"", entity, "\"", NULL); } if (line) { sprintf(sl, "%" TCL_SIZE_MODIFIER "d", line); sprintf(sc, domLengthConversion, column); Tcl_AppendResult (interp, " at line ", sl, " character ", sc, NULL); } else { sprintf(sb, domLengthConversion, byteIndex); Tcl_AppendResult (interp, " at position ", sb, NULL); } if (xmlstring) { Tcl_AppendResult (interp, "\n\"", NULL); ind = 0; buf[0] = '\0'; for (i = (byteIndex < before ? 0 : byteIndex - before); i <= byteIndex; i++) { buf[ind] = xmlstring[i]; ind++; } buf[ind] = '\0'; Tcl_AppendResult(interp, buf, " <--Error-- ", NULL); ind = 0; buf[0] = '\0'; if (xmlstring[byteIndex]) { for (i = byteIndex + 1; i < byteIndex + after; i++) { if (!xmlstring[i]) { break; } buf[ind] = xmlstring[i]; ind++; } buf[ind] = '\0'; ................................................................................ * feedback callback) we leave the error msg in * the interpreter alone. If there wasn't a Tcl * error, there was a parsing error. Because the * interp has already an error msg, that parsing * error was in an external entity. Therefore, we * just add the place of the referencing entity in * the main document.*/ sprintf(sl, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(parser)); Tcl_AppendResult(interp, ", referenced at line ", sl, NULL); sprintf(sc, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(parser)); Tcl_AppendResult(interp, " character ", sc, NULL); } } XML_ParserFree(parser); return TCL_ERROR; } |
| | | | | | | | | | > | | | | | | | | | | | | | |
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 ... 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 .... 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 .... 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 .... 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 .... 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 .... 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 .... 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 .... 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 .... 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 .... 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 |
Tcl_Obj * msgcmd; } XsltMsgCBInfo; static void UpdateStringOfTdomNode(Tcl_Obj *objPtr); static int SetTdomNodeFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); Tcl_ObjType tdomNodeType = { "tdom-node", NULL, NULL, UpdateStringOfTdomNode, SetTdomNodeFromAny }; ................................................................................ UpdateStringOfTdomNode( Tcl_Obj *objPtr) { char nodeName[80]; domLength len; NODE_CMD(nodeName, objPtr->internalRep.otherValuePtr); len = (domLength)strlen(nodeName); objPtr->bytes = (ckalloc((unsigned char) len+1)); memcpy(objPtr->bytes, nodeName, len+1); objPtr->length = len; } /*---------------------------------------------------------------------------- | SetTdomNodeFromAny ................................................................................ const char *varValue; const char *termPtr; Tcl_Interp *interp = (Tcl_Interp *) clientData; *offset = 0; varValue = Tcl_ParseVar(interp, strToParse, &termPtr); if (varValue) { *offset = (domLength)(termPtr - strToParse); /* If strToParse start with a single '$' without a following * var name (according to Tcl var name rules), Tcl_ParseVar() * doesn't report a parsing error but returns just a pointer * to a static string "$". */ if (*offset == 1) { *errMsg = tdomstrdup ("Missing var name after '$'."); varValue = NULL; ................................................................................ } } else { AP(*pc); } } } if (b >= bLimit) { writeChars(xmlString, chan, buf, (domLength)(b - buf)); b = buf; } pc++; } if (b > buf) { writeChars(xmlString, chan, buf, (domLength)(b - buf)); } } /*---------------------------------------------------------------------------- | tcldom_tolower | \---------------------------------------------------------------------------*/ ................................................................................ if (*p == ']') { p++; i++; if (i >= ((domTextNode*)node)->valueLength) break; if (*p == ']') { p++; i++; if (i >= ((domTextNode*)node)->valueLength) break; if (*p == '>') { writeChars(xmlString, chan, start, (domLength)(p-start)); writeChars(xmlString, chan, "]]><![CDATA[>", 13); start = p+1; } } } p++; i++; } writeChars(xmlString, chan, start, (domLength)(p-start)); writeChars(xmlString, chan, "]]>", 3); } else { if (node->nodeFlags & DISABLE_OUTPUT_ESCAPING) { writeChars(xmlString, chan, ((domTextNode*)node)->nodeValue, ((domTextNode*)node)->valueLength); } else { tcldom_AppendEscaped(xmlString, chan, ................................................................................ for (i = 0; i < clen; i++) { AP(*pc); pc++; } } } if (b >= bLimit) { writeChars(jstring, chan, buf, (domLength)(b - buf)); b = buf; } } AP('"'); writeChars(jstring, chan, buf, (domLength)(b - buf)); } static void tcldom_childrenAsJSON ( Tcl_Obj *jstring, domNode *node, /* Must be an ELEMENT_NODE */ Tcl_Channel channel, ................................................................................ domAttrNode *attrs; domException exception; char tmp[200], prefix[MAX_PREFIX_LEN], *method, *nodeName, *str, *attr_name, *attr_val, *filter; const char *localName, *uri, *nsStr; int result, methodIndex, i; domLength length; XML_Size line, column; XML_Index byteIndex; int nsIndex, bool, hnew, legacy, jsonType; Tcl_Obj *namePtr, *resultPtr; Tcl_Obj *mobjv[MAX_REWRITE_ARGS], *storedErrMsg; Tcl_CmdInfo cmdInfo; Tcl_HashEntry *h; static const char *nodeMethods[] = { ................................................................................ case m_getLine: CheckArgs(2,2,2,""); if (domGetLineColumn(node, &line, &column, &byteIndex) < 0) { SetResult("no line/column information available!"); return TCL_ERROR; } SetLongResult((domLength)line); break; case m_getColumn: CheckArgs(2,2,2,""); if (domGetLineColumn (node, &line, &column, &byteIndex) < 0) { SetResult("no line/column information available!"); return TCL_ERROR; } SetLongResult((domLength)column); break; case m_getByteIndex: CheckArgs(2,2,2,""); if (domGetLineColumn (node, &line, &column, &byteIndex) < 0) { SetResult("no position information available!"); return TCL_ERROR; } SetLongResult((domLength)byteIndex); break; case m_getBaseURI: CheckArgs(2,2,2,""); /* fall through */ case m_baseURI: ................................................................................ /* Helper function to build up the error string message in a central * place. Caller must provide byteIndex; line is expected to be > 0 if * line/column information is given. */ void tcldom_reportErrorLocation ( Tcl_Interp *interp, int before, int after, XML_Size line, XML_Size column, char *xmlstring, const char *entity, XML_Index byteIndex, const char *errStr ) { char s[200], sb[25], sl[25], sc[25]; char *d = NULL, *buf; domLength i, ind; ................................................................................ } Tcl_ResetResult(interp); Tcl_AppendResult (interp, "error \"", errStr, "\"", NULL); if (entity) { Tcl_AppendResult (interp, " in entity \"", entity, "\"", NULL); } if (line) { sprintf(sl, "%" TDOM_LS_MODIFIER "d", line); sprintf(sc, "%" TDOM_LS_MODIFIER "d", column); Tcl_AppendResult (interp, " at line ", sl, " character ", sc, NULL); } else { sprintf(sb, "%" TDOM_LS_MODIFIER "d", byteIndex); Tcl_AppendResult (interp, " at position ", sb, NULL); } if (xmlstring) { Tcl_AppendResult (interp, "\n\"", NULL); ind = 0; buf[0] = '\0'; for (i = (byteIndex < before ? 0 : (domLength)(byteIndex - before)); i <= byteIndex; i++) { buf[ind] = xmlstring[i]; ind++; } buf[ind] = '\0'; Tcl_AppendResult(interp, buf, " <--Error-- ", NULL); ind = 0; buf[0] = '\0'; if (xmlstring[byteIndex]) { for (i = (domLength)(byteIndex + 1); i < (domLength)(byteIndex + after); i++) { if (!xmlstring[i]) { break; } buf[ind] = xmlstring[i]; ind++; } buf[ind] = '\0'; ................................................................................ * feedback callback) we leave the error msg in * the interpreter alone. If there wasn't a Tcl * error, there was a parsing error. Because the * interp has already an error msg, that parsing * error was in an external entity. Therefore, we * just add the place of the referencing entity in * the main document.*/ sprintf(sl, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(parser)); Tcl_AppendResult(interp, ", referenced at line ", sl, NULL); sprintf(sc, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(parser)); Tcl_AppendResult(interp, " character ", sc, NULL); } } XML_ParserFree(parser); return TCL_ERROR; } |
Changes to generic/tcldom.h.
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
int objc, Tcl_Obj *const objv[]); void tcldom_reportErrorLocation ( Tcl_Interp *interp, int before, int after, domLength line, domLength column, char *xmlstring, const char *entity, domLength byteIndex, const char *errStr ); #ifdef __cplusplus } #endif |
| | | |
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
int objc, Tcl_Obj *const objv[]); void tcldom_reportErrorLocation ( Tcl_Interp *interp, int before, int after, XML_Size line, XML_Size column, char *xmlstring, const char *entity, XML_Index byteIndex, const char *errStr ); #ifdef __cplusplus } #endif |
Changes to generic/tclexpat.c.
1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 .... 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 .... 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 .... 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 .... 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 .... 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 .... 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 .... 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 .... 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 .... 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 .... 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 .... 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 |
if (!result) { if (expat->status == ERROR_IN_EXTREFHANDLER) { Tcl_SetObjResult (interp, expat->result); } else { Tcl_ResetResult(interp); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(expat->parser)); Tcl_AppendResult(interp, "error \"", XML_ErrorString(XML_GetErrorCode(expat->parser)), "\" at line ", s, " character ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(expat->parser)); Tcl_AppendResult(interp, s, NULL); } if (bufObj) { Tcl_DecrRefCount (bufObj); } return TCL_ERROR; ................................................................................ * Convert the attribute list into a Tcl key-value paired list. */ if (atList == NULL) { atList = Tcl_NewListObj(0, NULL); Tcl_IncrRefCount (atList); for (atPtr = atts; atPtr[0] && atPtr[1]; atPtr += 2) { Tcl_ListObjAppendElement(expat->interp, atList, Tcl_NewStringObj((char *)atPtr[0], strlen(atPtr[0]))); Tcl_ListObjAppendElement(expat->interp, atList, Tcl_NewStringObj((char *)atPtr[1], strlen(atPtr[1]))); } vector[2] = atList; } if (activeTclHandlerSet->elementstartObjProc != NULL) { vector[0] = activeTclHandlerSet->elementstartcommand; Tcl_IncrRefCount (vector[0]); ................................................................................ } if (!expat->cdata) { expat->cdata = Tcl_NewObj(); Tcl_IncrRefCount (expat->cdata); if (expat->keepTextStart) { if (!expat->cdataStartLine) { expat->cdataStartLine = XML_GetCurrentLineNumber (expat->parser); expat->cdataStartColumn = XML_GetCurrentColumnNumber (expat->parser); expat->cdataStartByteIndex = XML_GetCurrentByteIndex (expat->parser); } } } Tcl_AppendToObj (expat->cdata, s, len); return; } ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->picommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)target, strlen(target))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)data, strlen(data))); result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); TclExpatHandlerResult(expat, activeTclHandlerSet, result); ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->entityDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)entityname, strlen(entityname))); Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewIntObj (is_param)); if (value == NULL) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewListObj (0, NULL)); } else { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewStringObj ((char *) value, length)); } if (base == NULL) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewListObj (0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)base, strlen(base))); } if (systemId == NULL) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewListObj (0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)systemId, strlen(systemId))); } if (publicId == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)publicId, strlen(publicId))); } if (notationName == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)notationName, strlen(notationName))); } result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->notationcommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)notationName, strlen(notationName))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)base, strlen(base))); if (systemId == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)systemId, strlen(systemId))); } if (publicId == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)publicId, strlen(publicId))); } result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); ................................................................................ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->externalentitycommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); if (base) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)base, strlen(base))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("", 0)); } if (systemId) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)systemId, strlen(systemId))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("", 0)); } if (publicId) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)publicId, strlen(publicId))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("", 0)); } result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); ................................................................................ } break; } Tcl_DecrRefCount (resultObj); if (!result) { Tcl_ResetResult (expat->interp); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); Tcl_AppendResult(expat->interp, "Not wellformed error \"", XML_ErrorString(XML_GetErrorCode(extparser)), "\" while parsing external entity: \n\t", systemId, "\nat line ", s, " character ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(expat->interp, s, NULL); XML_ParserFree (extparser); expat->parser = oldparser; TclExpatHandlerResult(expat, activeTclHandlerSet, ERROR_IN_EXTREFHANDLER); return 0; ................................................................................ } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->commentCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)data, strlen(data))); result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); ................................................................................ if (activeTclHandlerSet->elementDeclCommand == NULL) { goto nextTcl; } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->elementDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)name, strlen(name))); content = Tcl_NewListObj (0, NULL); generateModel (expat->interp, content, model); Tcl_ListObjAppendElement(expat->interp, cmdPtr, content); ................................................................................ } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->attlistDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)elname, strlen (elname))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)name, strlen (name))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)type, strlen (type))); if (!dflt) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewStringObj ("", 0)); } else { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewStringObj ((char*)dflt, strlen (dflt))); } Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewIntObj (isrequired)); result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); ................................................................................ } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->startDoctypeDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)doctypeName, strlen(doctypeName))); if (sysid != NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)sysid, strlen(sysid))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("NULL", 4)); } if (pubid != NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)pubid, strlen(sysid))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("NULL", 4)); } Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewIntObj(has_internal_subset)); |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 .... 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 .... 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 .... 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 .... 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 .... 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 .... 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 .... 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 .... 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 .... 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 .... 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 .... 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 |
if (!result) { if (expat->status == ERROR_IN_EXTREFHANDLER) { Tcl_SetObjResult (interp, expat->result); } else { Tcl_ResetResult(interp); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(expat->parser)); Tcl_AppendResult(interp, "error \"", XML_ErrorString(XML_GetErrorCode(expat->parser)), "\" at line ", s, " character ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(expat->parser)); Tcl_AppendResult(interp, s, NULL); } if (bufObj) { Tcl_DecrRefCount (bufObj); } return TCL_ERROR; ................................................................................ * Convert the attribute list into a Tcl key-value paired list. */ if (atList == NULL) { atList = Tcl_NewListObj(0, NULL); Tcl_IncrRefCount (atList); for (atPtr = atts; atPtr[0] && atPtr[1]; atPtr += 2) { Tcl_ListObjAppendElement(expat->interp, atList, Tcl_NewStringObj((char *)atPtr[0], (domLength)strlen(atPtr[0]))); Tcl_ListObjAppendElement(expat->interp, atList, Tcl_NewStringObj((char *)atPtr[1], (domLength)strlen(atPtr[1]))); } vector[2] = atList; } if (activeTclHandlerSet->elementstartObjProc != NULL) { vector[0] = activeTclHandlerSet->elementstartcommand; Tcl_IncrRefCount (vector[0]); ................................................................................ } if (!expat->cdata) { expat->cdata = Tcl_NewObj(); Tcl_IncrRefCount (expat->cdata); if (expat->keepTextStart) { if (!expat->cdataStartLine) { expat->cdataStartLine = (domLength)XML_GetCurrentLineNumber (expat->parser); expat->cdataStartColumn = (domLength)XML_GetCurrentColumnNumber (expat->parser); expat->cdataStartByteIndex = (domLength)XML_GetCurrentByteIndex (expat->parser); } } } Tcl_AppendToObj (expat->cdata, s, len); return; } ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->picommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)target, (domLength)strlen(target))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)data, (domLength)strlen(data))); result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); TclExpatHandlerResult(expat, activeTclHandlerSet, result); ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->entityDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)entityname, (domLength)strlen(entityname))); Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewIntObj (is_param)); if (value == NULL) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewListObj (0, NULL)); } else { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewStringObj ((char *) value, length)); } if (base == NULL) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewListObj (0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)base, (domLength)strlen(base))); } if (systemId == NULL) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewListObj (0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)systemId, (domLength)strlen(systemId))); } if (publicId == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)publicId, (domLength)strlen(publicId))); } if (notationName == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)notationName, (domLength)strlen(notationName))); } result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); ................................................................................ * Take a copy of the callback script so that arguments may be appended. */ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->notationcommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)notationName, (domLength)strlen(notationName))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)base, (domLength)strlen(base))); if (systemId == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)systemId, (domLength)strlen(systemId))); } if (publicId == NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewListObj(0, NULL)); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)publicId, (domLength)strlen(publicId))); } result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); ................................................................................ cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->externalentitycommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); if (base) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)base, (domLength)strlen(base))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("", 0)); } if (systemId) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)systemId, (domLength)strlen(systemId))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("", 0)); } if (publicId) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)publicId, (domLength)strlen(publicId))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("", 0)); } result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); ................................................................................ } break; } Tcl_DecrRefCount (resultObj); if (!result) { Tcl_ResetResult (expat->interp); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(extparser)); Tcl_AppendResult(expat->interp, "Not wellformed error \"", XML_ErrorString(XML_GetErrorCode(extparser)), "\" while parsing external entity: \n\t", systemId, "\nat line ", s, " character ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(extparser)); Tcl_AppendResult(expat->interp, s, NULL); XML_ParserFree (extparser); expat->parser = oldparser; TclExpatHandlerResult(expat, activeTclHandlerSet, ERROR_IN_EXTREFHANDLER); return 0; ................................................................................ } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->commentCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)data, (domLength)strlen(data))); result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); Tcl_DecrRefCount(cmdPtr); Tcl_Release((ClientData) expat->interp); ................................................................................ if (activeTclHandlerSet->elementDeclCommand == NULL) { goto nextTcl; } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->elementDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)name, (domLength)strlen(name))); content = Tcl_NewListObj (0, NULL); generateModel (expat->interp, content, model); Tcl_ListObjAppendElement(expat->interp, cmdPtr, content); ................................................................................ } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->attlistDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)elname, (domLength)strlen (elname))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)name, (domLength)strlen (name))); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)type, (domLength)strlen (type))); if (!dflt) { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewStringObj ("", 0)); } else { Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewStringObj ((char*)dflt, (domLength)strlen (dflt))); } Tcl_ListObjAppendElement (expat->interp, cmdPtr, Tcl_NewIntObj (isrequired)); result = Tcl_EvalObjEx(expat->interp, cmdPtr, TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT); ................................................................................ } cmdPtr = Tcl_DuplicateObj(activeTclHandlerSet->startDoctypeDeclCommand); Tcl_IncrRefCount(cmdPtr); Tcl_Preserve((ClientData) expat->interp); Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)doctypeName, (domLength)strlen(doctypeName))); if (sysid != NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)sysid, (domLength)strlen(sysid))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("NULL", 4)); } if (pubid != NULL) { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj((char *)pubid, (domLength)strlen(sysid))); } else { Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewStringObj("NULL", 4)); } Tcl_ListObjAppendElement(expat->interp, cmdPtr, Tcl_NewIntObj(has_internal_subset)); |
Changes to generic/tclpull.c.
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 |
Tcl_Interp *interp, tDOM_PullParserInfo *pullInfo ) { char s[255]; Tcl_ResetResult (interp); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentLineNumber(pullInfo->parser)); Tcl_AppendResult(interp, "error \"", XML_ErrorString( XML_GetErrorCode(pullInfo->parser)), "\" at line ", s, " column ", NULL); sprintf(s, "%" TCL_LL_MODIFIER "d", XML_GetCurrentColumnNumber(pullInfo->parser)); Tcl_AppendResult(interp, s, NULL); } static void tDOM_CleanupInputSource ( tDOM_PullParserInfo *pullInfo |
| | |
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 |
Tcl_Interp *interp, tDOM_PullParserInfo *pullInfo ) { char s[255]; Tcl_ResetResult (interp); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentLineNumber(pullInfo->parser)); Tcl_AppendResult(interp, "error \"", XML_ErrorString( XML_GetErrorCode(pullInfo->parser)), "\" at line ", s, " column ", NULL); sprintf(s, "%" TDOM_LS_MODIFIER "d", XML_GetCurrentColumnNumber(pullInfo->parser)); Tcl_AppendResult(interp, s, NULL); } static void tDOM_CleanupInputSource ( tDOM_PullParserInfo *pullInfo |
Changes to generic/xmlsimple.c.
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 ... 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 ... 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 ... 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 ... 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 ... 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 ... 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 ... 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 ... 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 ... 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 ... 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 ... 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 ... 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 ... 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 ... 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 .... 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 |
* text nodes */ tnode = (domTextNode*)parent_node->lastChild; tnode->nodeValue = REALLOC(tnode->nodeValue, tnode->valueLength + x - start + 1); memmove(tnode->nodeValue + tnode->valueLength, start, x - start); saved = tnode->valueLength; tnode->valueLength += (x - start); *(tnode->nodeValue + tnode->valueLength) = 0; if (ampersandSeen) { if (!TranslateEntityRefs(tnode->nodeValue + saved, &(tnode->valueLength) )) { RetError("Entity parsing error", (x - xml)); } tnode->valueLength += saved; } } else { /*-------------------------------------------------------- | allocate new TEXT node \-------------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->valueLength = (x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; tnode->parentNode = parent_node; if (parent_node->firstChild) { parent_node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = parent_node->lastChild; ................................................................................ } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } if (ampersandSeen) { if (!TranslateEntityRefs(tnode->nodeValue, &(tnode->valueLength) )) { RetError("Entity parsing error", (x - xml)); } } } } } else if (x[1]=='/') { /*------------------------------------------------------------ | read and check closing tag \-----------------------------------------------------------*/ node = parent_node; if (!parent_node) { RetError("Syntax error",(x - xml)); } parent_node = node->parentNode; pn = (char*)node->nodeName; x += 2; while (*x == *pn) { x++; pn++; } if ( *pn || (*x!='>' && !SPACE(*x) ) ) { RetError("Unterminated element",(x - xml)); } while (SPACE(*x)) { x++; } if (*x=='>') { x++; } else { RetError("Missing \">\"",(x - xml)-1); } #ifdef TDOM_NS depth--; /* pop active namespaces */ while ( (activeNSpos >= 0) && (activeNS[activeNSpos].depth == depth) ) { ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = COMMENT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = x - start - 4; tnode->nodeValue = (char*)MALLOC(tnode->valueLength+1); memmove(tnode->nodeValue, start+4, tnode->valueLength); *(tnode->nodeValue + tnode->valueLength) = 0; if (parent_node == NULL) { if (doc->rootNode->lastChild) { tnode->previousSibling = doc->rootNode->lastChild; ................................................................................ parent_node->lastChild = (domNode*)tnode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } x += 3; } else { RetError("Unterminated comment",(start-xml)); } continue; } else if (x[1]=='D' && x[2]=='O' && x[3]=='C' && x[4]=='T' && x[5]=='Y' && x[6]=='P' && x[7]=='E' ) { /*-------------------------------------------------------- ................................................................................ } else { x++; } } if (*x) { x++; } else { RetError("Unterminated DOCTYPE definition",(start-xml)); } continue; } else if (x[1]=='[' && x[2]=='C' && x[3]=='D' && x[4]=='A' && x[5]=='T' && x[6]=='A' && x[7]=='[' ) { /*-------------------------------------------------------- ................................................................................ /* normalize text node, i.e. there * are no adjacent text nodes */ tnode = (domTextNode*)parent_node->lastChild; tnode->nodeValue = REALLOC(tnode->nodeValue, tnode->valueLength + x - start + 1); memmove(tnode->nodeValue + tnode->valueLength, start, x - start); tnode->valueLength += (x - start); *(tnode->nodeValue + tnode->valueLength) = 0; } } else { if (!(only_whites && ignoreWhiteSpaces) && ((x - start) || keepCDATA)) { /*---------------------------------------------------- | allocate new node for CDATA section data ................................................................................ if (keepCDATA) tnode->nodeType = CDATA_SECTION_NODE; else tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = (x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; if (parent_node->firstChild) { parent_node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = parent_node->lastChild; parent_node->lastChild = (domNode*)tnode; ................................................................................ parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } } } x += 3; } else { RetError("Unterminated CDATA definition",(start-xml) ); } continue; } else { RetError("Incorrect <!... tag",(start-xml) ); } } else if (*x=='?') { /*-------------------------------------------------------- | read over a processing instructions(PI) / XMLDecl \-------------------------------------------------------*/ x++; ................................................................................ piSep = start; while ( (c=*piSep)!=0 && !SPACE(c) && (c!='?' || piSep[1]!='>')) { piSep++; } *piSep = '\0'; /* temporarily terminate the string */ pinode->targetLength = strlen(start); pinode->targetValue = (char*)MALLOC(pinode->targetLength); memmove(pinode->targetValue, start, pinode->targetLength); *piSep = c; /* remove temporarily termination */ /*------------------------------------------------- | extract PI data \------------------------------------------------*/ while (SPACE(*piSep)) { piSep++; } pinode->dataLength = x - piSep; pinode->dataValue = (char*)MALLOC(pinode->dataLength); memmove(pinode->dataValue, piSep, pinode->dataLength); if (parent_node == NULL) { if (doc->rootNode->lastChild) { pinode->previousSibling = doc->rootNode->lastChild; doc->rootNode->lastChild->nextSibling ................................................................................ parent_node->lastChild = (domNode*)pinode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)pinode; } } x += 2; } else { RetError("Unterminated processing instruction(PI)",(start-xml) ); } continue; } /*---------------------------------------------------------------- | new tag/element | \---------------------------------------------------------------*/ hasContent = 1; while ((c=*x)!=0 && c!='/' && c!='>' && !SPACE(c) ) { x++; } if (c==0) { RetError("Missing \">\"",(start-xml) ); } if ( (x-start)==1) { RetError("Null markup name",(start-xml) ); } *x = '\0'; /* temporarily terminate the string */ /*------------------------------------------------------ | create new DOM element node \-----------------------------------------------------*/ h = Tcl_CreateHashEntry(&HASHTAB(doc,tdom_tagNames), start+1, ................................................................................ domLength nArgName; char *ArgVal = NULL; domLength nArgVal = 0; while ((c=*x)!=0 && c!='=' && c!='>' && !SPACE(c) ) { x++; } nArgName = x - ArgName; while (SPACE(*x)) { x++; } if (*x=='=') { x++; } savedChar = *(ArgName + nArgName); ................................................................................ ampersandSeen = 0; while ((c=*x)!=0 && c!=cDelim) { if (c=='&') { ampersandSeen = 1; } x++; } nArgVal = x - ArgVal; if (c==0) { RetError("Unterminated string",(ArgVal - xml - 1) ); } else { x++; } } else if (c!=0 && c!='>') { ArgVal = x; while ((c=*x)!=0 && c!='>' && !SPACE(c)) { if (c=='&') { ampersandSeen = 1; } x++; } if (c==0) { RetError("Missing \">\"",(start-xml)); } nArgVal = x - ArgVal; } #ifdef TDOM_NS /*------------------------------------------------------------ | handle namespace attributes or normal ones \------------------------------------------------------------*/ ................................................................................ attrnode->nodeValue = (char*)MALLOC(nArgVal+1); attrnode->valueLength = nArgVal; memmove(attrnode->nodeValue, ArgVal, nArgVal); *(attrnode->nodeValue + nArgVal) = 0; if (ampersandSeen) { if (!TranslateEntityRefs(attrnode->nodeValue, &(attrnode->valueLength) )) { RetError("Entity parsing error",(start-xml)); } } if (xmlns[5] == ':') { if (domIsNamespaceInScope (activeNS, activeNSpos, &(xmlns[6]), (char*)attrnode->nodeValue)) ................................................................................ attrnode->nodeValue = (char*)MALLOC(nArgVal+1); attrnode->valueLength = nArgVal; memmove(attrnode->nodeValue, ArgVal, nArgVal); *(attrnode->nodeValue + nArgVal) = 0; if (ampersandSeen) { if (!TranslateEntityRefs(attrnode->nodeValue, &(attrnode->valueLength) )) { RetError("Entity parsing error", (start - xml)); } } if (attrList) { lastAttr->nextSibling = attrnode; } else { attrList = attrnode; } ................................................................................ node->firstAttr = attrList; #endif if (*x=='/') { hasContent = 0; x++; if (*x!='>') { RetError("Syntax Error",(x - xml - 1) ); } #ifdef TDOM_NS /* pop active namespaces */ while ( (activeNSpos >= 0) && (activeNS[activeNSpos].depth == depth) ) { activeNSpos--; ................................................................................ } } } if (forest && parent_node == parent) { FREE ((char *) activeNS); return TCL_OK; } RetError("Unexpected end",(x - xml) ); } /* XML_SimpleParse */ /*---------------------------------------------------------------------------- | XML_SimpleParseDocument |
| | | | | | | | | | > | | | | | | | | | | | | | | | | | | | |
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 ... 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 ... 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 ... 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 ... 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 ... 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 ... 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 ... 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 ... 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 ... 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 ... 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 ... 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 ... 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 ... 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 ... 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 .... 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 |
* text nodes */ tnode = (domTextNode*)parent_node->lastChild; tnode->nodeValue = REALLOC(tnode->nodeValue, tnode->valueLength + x - start + 1); memmove(tnode->nodeValue + tnode->valueLength, start, x - start); saved = tnode->valueLength; tnode->valueLength += (domLength)(x - start); *(tnode->nodeValue + tnode->valueLength) = 0; if (ampersandSeen) { if (!TranslateEntityRefs(tnode->nodeValue + saved, &(tnode->valueLength) )) { RetError("Entity parsing error", (domLength)(x - xml)); } tnode->valueLength += saved; } } else { /*-------------------------------------------------------- | allocate new TEXT node \-------------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->valueLength = (domLength)(x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; tnode->parentNode = parent_node; if (parent_node->firstChild) { parent_node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = parent_node->lastChild; ................................................................................ } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } if (ampersandSeen) { if (!TranslateEntityRefs(tnode->nodeValue, &(tnode->valueLength) )) { RetError("Entity parsing error", (domLength)(x - xml)); } } } } } else if (x[1]=='/') { /*------------------------------------------------------------ | read and check closing tag \-----------------------------------------------------------*/ node = parent_node; if (!parent_node) { RetError("Syntax error", (domLength)(x - xml)); } parent_node = node->parentNode; pn = (char*)node->nodeName; x += 2; while (*x == *pn) { x++; pn++; } if ( *pn || (*x!='>' && !SPACE(*x) ) ) { RetError("Unterminated element", (domLength)(x - xml)); } while (SPACE(*x)) { x++; } if (*x=='>') { x++; } else { RetError("Missing \">\"",((domLength)(x - xml))-1); } #ifdef TDOM_NS depth--; /* pop active namespaces */ while ( (activeNSpos >= 0) && (activeNS[activeNSpos].depth == depth) ) { ................................................................................ \---------------------------------------------------*/ tnode = (domTextNode*) domAlloc(sizeof(domTextNode)); memset(tnode, 0, sizeof(domTextNode)); tnode->nodeType = COMMENT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = (domLength)(x - start - 4); tnode->nodeValue = (char*)MALLOC(tnode->valueLength+1); memmove(tnode->nodeValue, start+4, tnode->valueLength); *(tnode->nodeValue + tnode->valueLength) = 0; if (parent_node == NULL) { if (doc->rootNode->lastChild) { tnode->previousSibling = doc->rootNode->lastChild; ................................................................................ parent_node->lastChild = (domNode*)tnode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } x += 3; } else { RetError("Unterminated comment",(domLength)(start-xml)); } continue; } else if (x[1]=='D' && x[2]=='O' && x[3]=='C' && x[4]=='T' && x[5]=='Y' && x[6]=='P' && x[7]=='E' ) { /*-------------------------------------------------------- ................................................................................ } else { x++; } } if (*x) { x++; } else { RetError("Unterminated DOCTYPE definition", (domLength)(start-xml)); } continue; } else if (x[1]=='[' && x[2]=='C' && x[3]=='D' && x[4]=='A' && x[5]=='T' && x[6]=='A' && x[7]=='[' ) { /*-------------------------------------------------------- ................................................................................ /* normalize text node, i.e. there * are no adjacent text nodes */ tnode = (domTextNode*)parent_node->lastChild; tnode->nodeValue = REALLOC(tnode->nodeValue, tnode->valueLength + x - start + 1); memmove(tnode->nodeValue + tnode->valueLength, start, (x - start)); tnode->valueLength += (domLength)(x - start); *(tnode->nodeValue + tnode->valueLength) = 0; } } else { if (!(only_whites && ignoreWhiteSpaces) && ((x - start) || keepCDATA)) { /*---------------------------------------------------- | allocate new node for CDATA section data ................................................................................ if (keepCDATA) tnode->nodeType = CDATA_SECTION_NODE; else tnode->nodeType = TEXT_NODE; tnode->ownerDocument = doc; tnode->nodeNumber = NODE_NO(doc); tnode->parentNode = parent_node; tnode->valueLength = (domLength)(x - start); tnode->nodeValue = (char*)MALLOC((x - start)+1); memmove(tnode->nodeValue, start, (x - start)); *(tnode->nodeValue + (x - start)) = 0; if (parent_node->firstChild) { parent_node->lastChild->nextSibling = (domNode*)tnode; tnode->previousSibling = parent_node->lastChild; parent_node->lastChild = (domNode*)tnode; ................................................................................ parent_node->firstChild = parent_node->lastChild = (domNode*)tnode; } } } } x += 3; } else { RetError("Unterminated CDATA definition",(domLength)(start-xml) ); } continue; } else { RetError("Incorrect <!... tag",(domLength)(start-xml)); } } else if (*x=='?') { /*-------------------------------------------------------- | read over a processing instructions(PI) / XMLDecl \-------------------------------------------------------*/ x++; ................................................................................ piSep = start; while ( (c=*piSep)!=0 && !SPACE(c) && (c!='?' || piSep[1]!='>')) { piSep++; } *piSep = '\0'; /* temporarily terminate the string */ pinode->targetLength = (domLength)strlen(start); pinode->targetValue = (char*)MALLOC(pinode->targetLength); memmove(pinode->targetValue, start, pinode->targetLength); *piSep = c; /* remove temporarily termination */ /*------------------------------------------------- | extract PI data \------------------------------------------------*/ while (SPACE(*piSep)) { piSep++; } pinode->dataLength = (domLength)(x - piSep); pinode->dataValue = (char*)MALLOC(pinode->dataLength); memmove(pinode->dataValue, piSep, pinode->dataLength); if (parent_node == NULL) { if (doc->rootNode->lastChild) { pinode->previousSibling = doc->rootNode->lastChild; doc->rootNode->lastChild->nextSibling ................................................................................ parent_node->lastChild = (domNode*)pinode; } else { parent_node->firstChild = parent_node->lastChild = (domNode*)pinode; } } x += 2; } else { RetError("Unterminated processing instruction(PI)",(domLength)(start-xml) ); } continue; } /*---------------------------------------------------------------- | new tag/element | \---------------------------------------------------------------*/ hasContent = 1; while ((c=*x)!=0 && c!='/' && c!='>' && !SPACE(c) ) { x++; } if (c==0) { RetError("Missing \">\"",(domLength)(start-xml) ); } if ( (x-start)==1) { RetError("Null markup name",(domLength)(start-xml) ); } *x = '\0'; /* temporarily terminate the string */ /*------------------------------------------------------ | create new DOM element node \-----------------------------------------------------*/ h = Tcl_CreateHashEntry(&HASHTAB(doc,tdom_tagNames), start+1, ................................................................................ domLength nArgName; char *ArgVal = NULL; domLength nArgVal = 0; while ((c=*x)!=0 && c!='=' && c!='>' && !SPACE(c) ) { x++; } nArgName = (domLength)(x - ArgName); while (SPACE(*x)) { x++; } if (*x=='=') { x++; } savedChar = *(ArgName + nArgName); ................................................................................ ampersandSeen = 0; while ((c=*x)!=0 && c!=cDelim) { if (c=='&') { ampersandSeen = 1; } x++; } nArgVal = (domLength)(x - ArgVal); if (c==0) { RetError("Unterminated string",(domLength)(ArgVal - xml - 1)); } else { x++; } } else if (c!=0 && c!='>') { ArgVal = x; while ((c=*x)!=0 && c!='>' && !SPACE(c)) { if (c=='&') { ampersandSeen = 1; } x++; } if (c==0) { RetError("Missing \">\"",(domLength)(start-xml)); } nArgVal = (domLength)(x - ArgVal); } #ifdef TDOM_NS /*------------------------------------------------------------ | handle namespace attributes or normal ones \------------------------------------------------------------*/ ................................................................................ attrnode->nodeValue = (char*)MALLOC(nArgVal+1); attrnode->valueLength = nArgVal; memmove(attrnode->nodeValue, ArgVal, nArgVal); *(attrnode->nodeValue + nArgVal) = 0; if (ampersandSeen) { if (!TranslateEntityRefs(attrnode->nodeValue, &(attrnode->valueLength) )) { RetError("Entity parsing error",(domLength)(start-xml)); } } if (xmlns[5] == ':') { if (domIsNamespaceInScope (activeNS, activeNSpos, &(xmlns[6]), (char*)attrnode->nodeValue)) ................................................................................ attrnode->nodeValue = (char*)MALLOC(nArgVal+1); attrnode->valueLength = nArgVal; memmove(attrnode->nodeValue, ArgVal, nArgVal); *(attrnode->nodeValue + nArgVal) = 0; if (ampersandSeen) { if (!TranslateEntityRefs(attrnode->nodeValue, &(attrnode->valueLength) )) { RetError("Entity parsing error", (domLength)(start - xml)); } } if (attrList) { lastAttr->nextSibling = attrnode; } else { attrList = attrnode; } ................................................................................ node->firstAttr = attrList; #endif if (*x=='/') { hasContent = 0; x++; if (*x!='>') { RetError("Syntax Error",(domLength)(x - xml - 1)); } #ifdef TDOM_NS /* pop active namespaces */ while ( (activeNSpos >= 0) && (activeNS[activeNSpos].depth == depth) ) { activeNSpos--; ................................................................................ } } } if (forest && parent_node == parent) { FREE ((char *) activeNS); return TCL_OK; } RetError("Unexpected end",(domLength)(x - xml)); } /* XML_SimpleParse */ /*---------------------------------------------------------------------------- | XML_SimpleParseDocument |
Changes to tdom.m4.
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 |
TDOM_STUB_LIB_SPEC=${TDOM_BUILD_STUB_LIB_SPEC} fi AC_SUBST(TDOM_VERSION) AC_SUBST(TDOM_STUB_LIB_SPEC) AC_SUBST(TDOM_SRC_DIR) ]) #------------------------------------------------------------------------ # TDOM_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE_NAME}Config.sh file # # Arguments: # None # # Results: # Subst the following vars: # #------------------------------------------------------------------------ AC_DEFUN(TDOM_EXPORT_CONFIG, [ #-------------------------------------------------------------------- # These are for ${PACKAGE_NAME}Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/${PACKAGE_NAME}${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval PKG_STUB_LIB_FLAG="-l${PACKAGE_NAME}stub${PACKAGE_VERSION}" else eval PKG_STUB_LIB_FLAG="-l${PACKAGE_NAME}stub`echo ${PACKAGE_VERSION} | tr -d .`" fi PKG_BUILD_STUB_LIB_SPEC="-L`pwd` ${PKG_STUB_LIB_FLAG}" PKG_STUB_LIB_SPEC="-L${pkglibdir} ${PKG_STUB_LIB_FLAG}" PKG_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" PKG_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST(PKG_BUILD_STUB_LIB_SPEC) AC_SUBST(PKG_STUB_LIB_SPEC) AC_SUBST(PKG_BUILD_STUB_LIB_PATH) AC_SUBST(PKG_STUB_LIB_PATH) ]) # Local Variables: # mode: autoconf # End: # EOF |
< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
709 710 711 712 713 714 715 716 717 718 719 |
TDOM_STUB_LIB_SPEC=${TDOM_BUILD_STUB_LIB_SPEC} fi AC_SUBST(TDOM_VERSION) AC_SUBST(TDOM_STUB_LIB_SPEC) AC_SUBST(TDOM_SRC_DIR) ]) # Local Variables: # mode: autoconf # End: # EOF |
Changes to tdomConfig.sh.in.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# TDOM_STUB_LIB_FILE=@PKG_STUB_LIB_FILE@ # # String to pass to linker to pick up the tDOM library from # its build directory. # TDOM_BUILD_STUB_LIB_SPEC='@PKG_BUILD_STUB_LIB_SPEC@' # # String to pass to linker to pick up the tDOM library from # its installed directory. # TDOM_STUB_LIB_SPEC='@PKG_STUB_LIB_SPEC@' # String to pass to linker to pick up the TDOM stub library from its # build directory. # TDOM_BUILD_STUB_LIB_PATH='@PKG_BUILD_STUB_LIB_PATH@' # String to pass to linker to pick up the TDOM stub library from its # installed directory. # TDOM_STUB_LIB_PATH='@PKG_STUB_LIB_PATH@' # # Location of the top-level source directories from which tDOM # was built. This is the directory that contains generic, unix, # win etc. If tDOM was compiled in a different place than the # directory containing the source files, this points to the # location of the sources, not the location where tDOM was compiled. # TDOM_SRC_DIR='@srcdir@' # EOF |
| | | | |
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# TDOM_STUB_LIB_FILE=@PKG_STUB_LIB_FILE@ # # String to pass to linker to pick up the tDOM library from # its build directory. # TDOM_BUILD_STUB_LIB_SPEC='@tdom_BUILD_STUB_LIB_SPEC@' # # String to pass to linker to pick up the tDOM library from # its installed directory. # TDOM_STUB_LIB_SPEC='@tdom_STUB_LIB_SPEC@' # String to pass to linker to pick up the TDOM stub library from its # build directory. # TDOM_BUILD_STUB_LIB_PATH='@tdom_BUILD_STUB_LIB_PATH@' # String to pass to linker to pick up the TDOM stub library from its # installed directory. # TDOM_STUB_LIB_PATH='@tdom_STUB_LIB_PATH@' # # Location of the top-level source directories from which tDOM # was built. This is the directory that contains generic, unix, # win etc. If tDOM was compiled in a different place than the # directory containing the source files, this points to the # location of the sources, not the location where tDOM was compiled. # TDOM_SRC_DIR='@srcdir@' # EOF |