Lines Matching defs:ctxt
52 * @ctxt: an XML validation parser context
58 xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra)
64 if (ctxt != NULL) {
65 channel = ctxt->error;
66 data = ctxt->userData;
69 if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
70 (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
71 long delta = (char *) ctxt - (char *) ctxt->userData;
73 pctxt = ctxt->userData;
90 * @ctxt: an XML validation parser context
97 xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error,
104 if (ctxt != NULL) {
105 channel = ctxt->error;
106 data = ctxt->userData;
109 if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
110 (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
111 long delta = (char *) ctxt - (char *) ctxt->userData;
113 pctxt = ctxt->userData;
131 * @ctxt: an XML validation parser context
141 xmlErrValidNode(xmlValidCtxtPtr ctxt,
151 if (ctxt != NULL) {
152 channel = ctxt->error;
153 data = ctxt->userData;
156 if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
157 (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
158 long delta = (char *) ctxt - (char *) ctxt->userData;
160 pctxt = ctxt->userData;
174 * @ctxt: an XML validation parser context
184 xmlErrValidNodeNr(xmlValidCtxtPtr ctxt,
194 if (ctxt != NULL) {
195 channel = ctxt->error;
196 data = ctxt->userData;
199 if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
200 (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
201 long delta = (char *) ctxt - (char *) ctxt->userData;
203 pctxt = ctxt->userData;
215 * @ctxt: an XML validation parser context
225 xmlErrValidWarning(xmlValidCtxtPtr ctxt,
235 if (ctxt != NULL) {
236 channel = ctxt->warning;
237 data = ctxt->userData;
240 if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
241 (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
242 long delta = (char *) ctxt - (char *) ctxt->userData;
244 pctxt = ctxt->userData;
274 vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) {
275 if ((ctxt->vstateMax == 0) || (ctxt->vstateTab == NULL)) {
276 ctxt->vstateMax = 10;
277 ctxt->vstateTab = (xmlValidState *) xmlMalloc(ctxt->vstateMax *
278 sizeof(ctxt->vstateTab[0]));
279 if (ctxt->vstateTab == NULL) {
280 xmlVErrMemory(ctxt, "malloc failed");
285 if (ctxt->vstateNr >= ctxt->vstateMax) {
288 tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab,
289 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
291 xmlVErrMemory(ctxt, "realloc failed");
294 ctxt->vstateMax *= 2;
295 ctxt->vstateTab = tmp;
297 ctxt->vstate = &ctxt->vstateTab[ctxt->vstateNr];
298 ctxt->vstateTab[ctxt->vstateNr].elemDecl = elemDecl;
299 ctxt->vstateTab[ctxt->vstateNr].node = node;
302 xmlValidBuildContentModel(ctxt, elemDecl);
304 ctxt->vstateTab[ctxt->vstateNr].exec =
307 ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
308 xmlErrValidNode(ctxt, (xmlNodePtr) elemDecl,
314 return(ctxt->vstateNr++);
318 vstateVPop(xmlValidCtxtPtr ctxt) {
321 if (ctxt->vstateNr < 1) return(-1);
322 ctxt->vstateNr--;
323 elemDecl = ctxt->vstateTab[ctxt->vstateNr].elemDecl;
324 ctxt->vstateTab[ctxt->vstateNr].elemDecl = NULL;
325 ctxt->vstateTab[ctxt->vstateNr].node = NULL;
327 xmlRegFreeExecCtxt(ctxt->vstateTab[ctxt->vstateNr].exec);
329 ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
330 if (ctxt->vstateNr >= 1)
331 ctxt->vstate = &ctxt->vstateTab[ctxt->vstateNr - 1];
333 ctxt->vstate = NULL;
334 return(ctxt->vstateNr);
361 #define CONT ctxt->vstate->cont
362 #define NODE ctxt->vstate->node
363 #define DEPTH ctxt->vstate->depth
364 #define OCCURS ctxt->vstate->occurs
365 #define STATE ctxt->vstate->state
367 #define OCCURRENCE (ctxt->vstate->occurs & (1 << DEPTH))
368 #define PARENT_OCCURRENCE (ctxt->vstate->occurs & ((1 << DEPTH) - 1))
370 #define SET_OCCURRENCE ctxt->vstate->occurs |= (1 << DEPTH)
371 #define RESET_OCCURRENCE ctxt->vstate->occurs &= ((1 << DEPTH) - 1)
374 vstateVPush(xmlValidCtxtPtr ctxt, xmlElementContentPtr cont,
377 int i = ctxt->vstateNr - 1;
379 if (ctxt->vstateNr > MAX_RECURSE) {
382 if (ctxt->vstateTab == NULL) {
383 ctxt->vstateMax = 8;
384 ctxt->vstateTab = (xmlValidState *) xmlMalloc(
385 ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
386 if (ctxt->vstateTab == NULL) {
387 xmlVErrMemory(ctxt, "malloc failed");
391 if (ctxt->vstateNr >= ctxt->vstateMax) {
394 tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab,
395 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
397 xmlVErrMemory(ctxt, "malloc failed");
400 ctxt->vstateMax *= 2;
401 ctxt->vstateTab = tmp;
402 ctxt->vstate = &ctxt->vstateTab[0];
407 if ((i >= 0) && (ctxt->vstateTab[i].cont == cont) &&
408 (ctxt->vstateTab[i].node == node) &&
409 (ctxt->vstateTab[i].depth == depth) &&
410 (ctxt->vstateTab[i].occurs == occurs) &&
411 (ctxt->vstateTab[i].state == state))
412 return(ctxt->vstateNr);
413 ctxt->vstateTab[ctxt->vstateNr].cont = cont;
414 ctxt->vstateTab[ctxt->vstateNr].node = node;
415 ctxt->vstateTab[ctxt->vstateNr].depth = depth;
416 ctxt->vstateTab[ctxt->vstateNr].occurs = occurs;
417 ctxt->vstateTab[ctxt->vstateNr].state = state;
418 return(ctxt->vstateNr++);
422 vstateVPop(xmlValidCtxtPtr ctxt) {
423 if (ctxt->vstateNr <= 1) return(-1);
424 ctxt->vstateNr--;
425 ctxt->vstate = &ctxt->vstateTab[0];
426 ctxt->vstate->cont = ctxt->vstateTab[ctxt->vstateNr].cont;
427 ctxt->vstate->node = ctxt->vstateTab[ctxt->vstateNr].node;
428 ctxt->vstate->depth = ctxt->vstateTab[ctxt->vstateNr].depth;
429 ctxt->vstate->occurs = ctxt->vstateTab[ctxt->vstateNr].occurs;
430 ctxt->vstate->state = ctxt->vstateTab[ctxt->vstateNr].state;
431 return(ctxt->vstateNr);
437 nodeVPush(xmlValidCtxtPtr ctxt, xmlNodePtr value)
439 if (ctxt->nodeMax <= 0) {
440 ctxt->nodeMax = 4;
441 ctxt->nodeTab =
442 (xmlNodePtr *) xmlMalloc(ctxt->nodeMax *
443 sizeof(ctxt->nodeTab[0]));
444 if (ctxt->nodeTab == NULL) {
445 xmlVErrMemory(ctxt, "malloc failed");
446 ctxt->nodeMax = 0;
450 if (ctxt->nodeNr >= ctxt->nodeMax) {
452 tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab,
453 ctxt->nodeMax * 2 * sizeof(ctxt->nodeTab[0]));
455 xmlVErrMemory(ctxt, "realloc failed");
458 ctxt->nodeMax *= 2;
459 ctxt->nodeTab = tmp;
461 ctxt->nodeTab[ctxt->nodeNr] = value;
462 ctxt->node = value;
463 return (ctxt->nodeNr++);
466 nodeVPop(xmlValidCtxtPtr ctxt)
470 if (ctxt->nodeNr <= 0)
472 ctxt->nodeNr--;
473 if (ctxt->nodeNr > 0)
474 ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1];
476 ctxt->node = NULL;
477 ret = ctxt->nodeTab[ctxt->nodeNr];
478 ctxt->nodeTab[ctxt->nodeNr] = NULL;
607 xmlValidStateDebug(xmlValidCtxtPtr ctxt) {
611 xmlValidDebugState(ctxt->vstate);
613 ctxt->vstateNr - 1);
614 for (i = 0, j = ctxt->vstateNr - 1;(i < 3) && (j > 0);i++,j--)
615 xmlValidDebugState(&ctxt->vstateTab[j]);
623 #define DEBUG_VALID_STATE(n,c) xmlValidStateDebug(ctxt);
651 * @ctxt: the schema parser context
660 xmlValidCtxtPtr ctxt,
663 xmlErrValidNode(ctxt, NULL, XML_ERR_INTERNAL_ERROR,
670 xmlErrValidNode(ctxt, NULL, XML_ERR_INTERNAL_ERROR,
676 xmlAutomataStatePtr oldstate = ctxt->state;
682 xmlVErrMemory(ctxt, "Building content model");
688 ctxt->state = xmlAutomataNewTransition(ctxt->am,
689 ctxt->state, NULL, fullname, NULL);
692 ctxt->state = xmlAutomataNewTransition(ctxt->am,
693 ctxt->state, NULL, fullname, NULL);
694 xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
697 ctxt->state = xmlAutomataNewTransition(ctxt->am,
698 ctxt->state, NULL, fullname, NULL);
699 xmlAutomataNewTransition(ctxt->am, ctxt->state,
700 ctxt->state, fullname, NULL);
703 ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
704 ctxt->state, NULL);
705 xmlAutomataNewTransition(ctxt->am,
706 ctxt->state, ctxt->state, fullname, NULL);
720 oldstate = ctxt->state;
723 ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
724 oldstate = ctxt->state;
727 xmlValidBuildAContentModel(content->c1, ctxt, name);
731 xmlValidBuildAContentModel(content, ctxt, name);
732 oldend = ctxt->state;
733 ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldend, NULL);
738 xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
741 xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
742 xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
745 xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
757 ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
758 ctxt->state, NULL);
760 oldstate = ctxt->state;
761 oldend = xmlAutomataNewState(ctxt->am);
768 ctxt->state = oldstate;
769 xmlValidBuildAContentModel(content->c1, ctxt, name);
770 xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldend);
774 ctxt->state = oldstate;
775 xmlValidBuildAContentModel(content, ctxt, name);
776 xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldend);
777 ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldend, NULL);
782 xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
785 xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
786 xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
789 xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
795 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
804 * @ctxt: a validation context
813 xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, xmlElementPtr elem) {
815 if ((ctxt == NULL) || (elem == NULL))
824 ctxt->valid = 0;
830 ctxt->am = xmlNewAutomata();
831 if (ctxt->am == NULL) {
832 xmlErrValidNode(ctxt, (xmlNodePtr) elem,
838 ctxt->state = xmlAutomataGetInitState(ctxt->am);
839 xmlValidBuildAContentModel(elem->content, ctxt, elem->name);
840 xmlAutomataSetFinalState(ctxt->am, ctxt->state);
841 elem->contModel = xmlAutomataCompile(ctxt->am);
846 xmlErrValidNode(ctxt, (xmlNodePtr) elem,
853 ctxt->valid = 0;
854 ctxt->state = NULL;
855 xmlFreeAutomata(ctxt->am);
856 ctxt->am = NULL;
859 ctxt->state = NULL;
860 xmlFreeAutomata(ctxt->am);
861 ctxt->am = NULL;
1370 * @ctxt: the validation context
1381 xmlAddElementDecl(xmlValidCtxtPtr ctxt,
1400 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
1408 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
1416 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
1424 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
1431 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
1457 xmlVErrMemory(ctxt,
1491 xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ELEM_REDEFINED,
1508 xmlVErrMemory(ctxt, "malloc failed");
1523 xmlVErrMemory(ctxt, "malloc failed");
1542 xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ELEM_REDEFINED,
1567 if ((ctxt != NULL) &&
1568 ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
1569 (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1))) {
1835 * @ctxt: the validation context
1845 xmlScanIDAttributeDecl(xmlValidCtxtPtr ctxt, xmlElementPtr elem, int err) {
1855 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_MULTIPLE_ID,
1909 * @ctxt: the validation context
1925 xmlAddAttributeDecl(xmlValidCtxtPtr ctxt,
1976 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
1984 xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT,
1988 if (ctxt != NULL)
1989 ctxt->valid = 0;
2016 xmlVErrMemory(ctxt,
2025 xmlVErrMemory(ctxt, "malloc failed");
2069 xmlErrValidWarning(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_REDEFINED,
2087 xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_MULTIPLE_ID,
2090 if (ctxt != NULL)
2091 ctxt->valid = 0;
2336 * @ctxt
2346 xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
2374 xmlVErrMemory(ctxt,
2381 xmlVErrMemory(ctxt, "malloc failed");
2567 * @ctxt: the validation context
2577 xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
2600 xmlVErrMemory(ctxt,
2607 xmlVErrMemory(ctxt, "malloc failed");
2616 if ((ctxt != NULL) && (ctxt->vstateNr != 0)) {
2636 if ((ctxt != NULL) && (ctxt->error != NULL)) {
2637 xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
2817 xmlValidCtxtPtr ctxt;
2889 * @ctxt: the validation context
2899 xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
2923 xmlVErrMemory(ctxt,
2930 xmlVErrMemory(ctxt, "malloc failed");
2938 if ((ctxt != NULL) && (ctxt->vstateNr != 0)) {
3340 * @ctxt: the validation context
3351 xmlValidateNotationUse(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
3361 if ((notaDecl == NULL) && (ctxt != NULL)) {
3362 xmlErrValidNode(ctxt, (xmlNodePtr) doc, XML_DTD_UNKNOWN_NOTATION,
3726 * @ctxt: the validation context
3740 xmlValidateNotationDecl(xmlValidCtxtPtr ctxt ATTRIBUTE_UNUSED, xmlDocPtr doc ATTRIBUTE_UNUSED,
3812 * @ctxt: the validation context
3840 xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
3862 xmlErrValidNode(ctxt, (xmlNodePtr) doc,
3868 xmlErrValidNode(ctxt, (xmlNodePtr) doc,
3891 xmlErrValidNode(ctxt, (xmlNodePtr) doc,
3897 xmlErrValidNode(ctxt, (xmlNodePtr) doc,
3919 xmlErrValidNode(ctxt, (xmlNodePtr) doc,
3933 * @ctxt: the validation context
3938 * @ctxt: the validation context or NULL
3949 * ctxt->valid accordingly
3956 xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
4014 xmlErrValidNode(ctxt, elem, XML_DTD_NOT_STANDALONE,
4017 ctxt->valid = 0;
4099 * @ctxt: the validation context
4116 xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
4129 xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ATTRIBUTE_DEFAULT,
4140 xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ID_FIXED,
4171 xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
4181 xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
4185 xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
4200 xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ATTRIBUTE_VALUE,
4212 * @ctxt: the validation context
4227 xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
4239 ret = xmlValidBuildContentModel(ctxt, elem);
4260 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
4264 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
4277 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
4281 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
4300 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_ELEM_REDEFINED,
4310 xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_ELEM_REDEFINED,
4317 if (xmlScanIDAttributeDecl(ctxt, elem) > 1) {
4325 * @ctxt: the validation context
4349 xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
4401 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
4410 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
4419 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
4428 if (xmlAddID(ctxt, doc, value, attr) == NULL)
4434 if (xmlAddRef(ctxt, doc, value, attr) == NULL)
4449 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
4461 xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
4476 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
4486 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
4493 ret &= xmlValidateAttributeValue2(ctxt, doc, attr->name,
4501 * @ctxt: the validation context
4526 xmlValidateOneNamespace(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
4543 xmlVErrMemory(ctxt, "Validating namespace");
4582 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
4586 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
4596 xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_DEFAULT,
4600 xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_DEFAULT,
4611 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
4615 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
4625 if (xmlAddID(ctxt, doc, value, (xmlAttrPtr) ns) == NULL)
4631 if (xmlAddRef(ctxt, doc, value, (xmlAttrPtr) ns) == NULL)
4647 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
4651 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
4665 xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
4669 xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
4686 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
4690 xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
4702 xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
4706 xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
4715 ret &= xmlValidateAttributeValue2(ctxt, doc, ns->prefix,
4718 ret &= xmlValidateAttributeValue2(ctxt, doc, BAD_CAST "xmlns",
4728 * @ctxt: the validation context
4763 * @ctxt: the validation context
4773 xmlValidateElementType(xmlValidCtxtPtr ctxt) {
4817 if (vstateVPush(ctxt, CONT, NODE, DEPTH, OCCURS, ROLLBACK_PARENT) < 0)
4924 if (vstateVPush(ctxt, CONT->c2, NODE, (unsigned char)(DEPTH + 1),
4979 cur = ctxt->vstate->node;
4981 if (vstateVPop(ctxt) < 0 ) {
4985 if (cur != ctxt->vstate->node)
4990 cur = ctxt->vstate->node;
4992 if (vstateVPop(ctxt) < 0 ) {
4996 if (cur != ctxt->vstate->node)
5104 cur = ctxt->vstate->node;
5106 if (vstateVPop(ctxt) < 0 ) {
5110 if (cur != ctxt->vstate->node)
5117 cur = ctxt->vstate->node;
5119 if (vstateVPop(ctxt) < 0 ) {
5123 if (cur != ctxt->vstate->node)
5217 * @ctxt: the validation context
5229 xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
5247 ret = xmlValidBuildContentModel(ctxt, elemDecl);
5256 ctxt->nodeMax = 0;
5257 ctxt->nodeNr = 0;
5258 ctxt->nodeTab = NULL;
5271 nodeVPush(ctxt, cur);
5311 cur = nodeVPop(ctxt);
5326 ctxt->vstateMax = 8;
5327 ctxt->vstateTab = (xmlValidState *) xmlMalloc(
5328 ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
5329 if (ctxt->vstateTab == NULL) {
5330 xmlVErrMemory(ctxt, "malloc failed");
5336 ctxt->nodeMax = 0;
5337 ctxt->nodeNr = 0;
5338 ctxt->nodeTab = NULL;
5339 ctxt->vstate = &ctxt->vstateTab[0];
5340 ctxt->vstateNr = 1;
5346 ret = xmlValidateElementType(ctxt);
5348 xmlErrValidWarning(ctxt, child, XML_DTD_CONTENT_NOT_DETERMINIST,
5368 nodeVPush(ctxt, cur);
5386 xmlVErrMemory(ctxt, "malloc failed");
5418 cur = nodeVPop(ctxt);
5428 ctxt->vstate = &ctxt->vstateTab[0];
5429 ctxt->vstateNr = 1;
5435 ret = xmlValidateElementType(ctxt);
5439 if (ctxt != NULL) {
5454 xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
5458 xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
5464 xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
5468 xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
5488 ctxt->vstateMax = 0;
5489 if (ctxt->vstateTab != NULL) {
5490 xmlFree(ctxt->vstateTab);
5491 ctxt->vstateTab = NULL;
5494 ctxt->nodeMax = 0;
5495 ctxt->nodeNr = 0;
5496 if (ctxt->nodeTab != NULL) {
5497 xmlFree(ctxt->nodeTab);
5498 ctxt->nodeTab = NULL;
5506 * @ctxt: the validation context
5515 xmlValidateOneCdataElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
5520 if ((ctxt == NULL) || (doc == NULL) || (elem == NULL))
5535 nodeVPush(ctxt, cur);
5554 cur = nodeVPop(ctxt);
5561 ctxt->nodeMax = 0;
5562 ctxt->nodeNr = 0;
5563 if (ctxt->nodeTab != NULL) {
5564 xmlFree(ctxt->nodeTab);
5565 ctxt->nodeTab = NULL;
5572 * @ctxt: the validation context
5581 xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
5625 xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
5638 * @ctxt: the validation context
5649 xmlValidGetElemDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
5654 if ((ctxt == NULL) || (doc == NULL) ||
5691 xmlErrValidNode(ctxt, elem,
5702 * @ctxt: the validation context
5712 xmlValidatePushElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
5718 if (ctxt == NULL)
5721 if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
5722 xmlValidStatePtr state = ctxt->vstate;
5736 xmlErrValidNode(ctxt, state->node,
5750 xmlErrValidNode(ctxt, state->node,
5756 ret = xmlValidateCheckMixed(ctxt, elemDecl->content,
5759 xmlErrValidNode(ctxt, state->node,
5776 xmlErrValidNode(ctxt, state->node,
5789 eDecl = xmlValidGetElemDecl(ctxt, doc, elem, &extsubset);
5790 vstateVPush(ctxt, eDecl, elem);
5796 * @ctxt: the validation context
5805 xmlValidatePushCData(xmlValidCtxtPtr ctxt, const xmlChar *data, int len) {
5809 if (ctxt == NULL)
5813 if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
5814 xmlValidStatePtr state = ctxt->vstate;
5828 xmlErrValidNode(ctxt, state->node,
5844 xmlErrValidNode(ctxt, state->node,
5869 * @ctxt: the validation context
5879 xmlValidatePopElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc ATTRIBUTE_UNUSED,
5884 if (ctxt == NULL)
5887 if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
5888 xmlValidStatePtr state = ctxt->vstate;
5901 xmlErrValidNode(ctxt, state->node,
5915 vstateVPop(ctxt);
5923 * @ctxt: the validation context
5940 xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
5955 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
5960 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
5966 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
5972 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
5987 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
5991 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
5997 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
6001 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
6007 xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
6015 ctxt, doc, elem, &extsubset);
6023 if (ctxt->vstateNr == 0) {
6027 xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ELEM,
6033 xmlErrValidNode(ctxt, elem, XML_DTD_NOT_EMPTY,
6047 ret = xmlValidateOneCdataElement(ctxt, doc, elem);
6049 xmlErrValidNode(ctxt, elem, XML_DTD_NOT_PCDATA,
6104 xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
6112 xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_CHILD,
6137 xmlErrValidNode(ctxt, elem,
6150 tmp = xmlValidateElementContent(ctxt, child, elemDecl, 1, elem);
6222 xmlErrValidNode(ctxt, elem, XML_DTD_MISSING_ATTRIBUTE,
6227 xmlErrValidNode(ctxt, elem, XML_DTD_MISSING_ATTRIBUTE,
6233 xmlErrValidWarning(ctxt, elem, XML_DTD_NO_PREFIX,
6237 xmlErrValidWarning(ctxt, elem, XML_DTD_DIFFERENT_PREFIX,
6255 xmlErrValidNode(ctxt, elem,
6272 xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
6291 * @ctxt: the validation context
6304 xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
6312 xmlErrValid(ctxt, XML_DTD_NO_ROOT,
6333 xmlVErrMemory(ctxt, NULL);
6345 xmlErrValidNode(ctxt, root, XML_DTD_ROOT_NAME,
6358 * @ctxt: the validation context
6368 xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) {
6394 ret &= xmlValidateOneElement(ctxt, doc, elem);
6399 ret &= xmlValidateOneAttribute(ctxt, doc, elem, attr, value);
6407 ret &= xmlValidateOneNamespace(ctxt, doc, elem, NULL,
6410 ret &= xmlValidateOneNamespace(ctxt, doc, elem,
6417 ret &= xmlValidateElement(ctxt, doc, child);
6427 * @ctxt: Validation context
6432 xmlValidateRef(xmlRefPtr ref, xmlValidCtxtPtr ctxt,
6447 ctxt->valid = 0;
6456 id = xmlGetID(ctxt->doc, str);
6458 xmlErrValidNodeNr(ctxt, NULL, XML_DTD_UNKNOWN_ID,
6461 ctxt->valid = 0;
6470 id = xmlGetID(ctxt->doc, name);
6472 xmlErrValidNode(ctxt, attr->parent, XML_DTD_UNKNOWN_ID,
6475 ctxt->valid = 0;
6482 xmlVErrMemory(ctxt, "IDREFS split");
6483 ctxt->valid = 0;
6492 id = xmlGetID(ctxt->doc, str);
6494 xmlErrValidNode(ctxt, attr->parent, XML_DTD_UNKNOWN_ID,
6497 ctxt->valid = 0;
6519 xmlValidateRef((xmlRefPtr)data, memo->ctxt, memo->name);
6526 * @ctxt: Validation context
6531 xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
6537 memo.ctxt = ctxt;
6546 * @ctxt: the validation context
6560 xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
6564 if (ctxt == NULL)
6567 xmlErrValid(ctxt, XML_DTD_NO_DOC,
6573 save = ctxt->finishDtd;
6574 ctxt->finishDtd = 0;
6586 ctxt->doc = doc;
6587 ctxt->valid = 1;
6588 xmlHashScan(table, (xmlHashScanner) xmlValidateCheckRefCallback, ctxt);
6590 ctxt->finishDtd = save;
6591 return(ctxt->valid);
6596 * @ctxt: the validation context
6611 xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd) {
6622 ret = xmlValidateRoot(ctxt, doc);
6637 ret = xmlValidateElement(ctxt, doc, root);
6638 ret &= xmlValidateDocumentFinal(ctxt, doc);
6645 xmlValidateNotationCallback(xmlEntityPtr cur, xmlValidCtxtPtr ctxt,
6655 ret = xmlValidateNotationUse(ctxt, cur->doc, notation);
6657 ctxt->valid = 0;
6664 xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
6686 ret = xmlValidateAttributeValue2(ctxt, ctxt->doc, cur->name,
6688 if ((ret == 0) && (ctxt->valid == 1))
6689 ctxt->valid = 0;
6694 ret = xmlValidateAttributeValue2(ctxt, ctxt->doc,
6696 if ((ret == 0) && (ctxt->valid == 1))
6697 ctxt->valid = 0;
6705 xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
6719 xmlErrValidNode(ctxt, NULL, XML_DTD_UNKNOWN_ELEM,
6725 xmlErrValidNode(ctxt, NULL, XML_DTD_EMPTY_NOTATION,
6728 ctxt->valid = 0;
6735 * @ctxt: the validation context
6751 xmlValidateDtdFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
6756 if ((doc == NULL) || (ctxt == NULL)) return(0);
6759 ctxt->doc = doc;
6760 ctxt->valid = 1;
6764 xmlHashScan(table, (xmlHashScanner) xmlValidateAttributeCallback, ctxt);
6769 ctxt);
6774 xmlHashScan(table, (xmlHashScanner) xmlValidateAttributeCallback, ctxt);
6779 ctxt);
6781 return(ctxt->valid);
6786 * @ctxt: the validation context
6799 xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
6806 xmlErrValid(ctxt, XML_DTD_NO_DTD,
6817 xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
6830 xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
6834 xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
6850 ret = xmlValidateDtdFinal(ctxt, doc);
6851 if (!xmlValidateRoot(ctxt, doc)) return(0);
6854 ret &= xmlValidateElement(ctxt, doc, root);
6855 ret &= xmlValidateDocumentFinal(ctxt, doc);