Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | wip |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | wip |
Files: | files | file ages | folders |
SHA3-256: |
eed7c07609d269e48e19afe0ec92e7a1 |
User & Date: | rolf 2019-08-24 13:27:25 |
Context
2019-08-25
| ||
00:22 | wip check-in: b6f3e3b2b4 user: rolf tags: wip | |
2019-08-24
| ||
13:27 | wip check-in: eed7c07609 user: rolf tags: wip | |
2019-08-23
| ||
22:56 | Added documentation to few commands, implemented earlier. check-in: 8fce09e002 user: rolf tags: schema | |
Changes
Changes to generic/schema.c.
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 .... 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 .... 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 .... 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 .... 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 .... 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 .... 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 .... 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 .... 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 |
se->activeChild = ac + 1; \ se->hasMatched = 0; \ } else { \ se->activeChild = ac; \ se->hasMatched = 1; \ } #define serializeElementName(rObj, cp) \ rObj = Tcl_NewObj(); \ if (cp->namespace) { \ Tcl_SetStringObj (rObj, cp->namespace, -1); \ Tcl_AppendToObj (rObj, ":", 1); \ } \ Tcl_AppendToObj (rObj, cp->name, -1); #define S(str) str, sizeof (str) -1 static SchemaCP* initSchemaCP ( Schema_CP_Type type, void *namespace, char *name ................................................................................ if (se->pattern->namespace) { Tcl_AppendResult (interp, namespace, ":", NULL); } Tcl_AppendResult (interp, name, "\"", NULL); return TCL_ERROR; } } else { if (!pattern) { if (recover (interp, sdata, S("UNKNOWN_ROOT_ELEMENT"), 0, 0)) { sdata->skipDeep = 1; return TCL_OK; } SetResult ("Unknown element"); return TCL_ERROR; } pushToStack (sdata, pattern); sdata->validationState = VALIDATION_STARTED; return TCL_OK; } /* The normal case: we're inside the tree */ rc = matchElementStart (interp, sdata, (char *) namePtr, namespacePtr); while (rc == -1) { popStack (sdata); ................................................................................ sdata->cp = savedCP; sdata->contentSize = savedContenSize; if (sdata->cp && !sdata->isAttributeConstaint && cp->nc) { sdata->cp->flags |= CONSTRAINT_TEXT_CHILD; } return result; } static int schemaInstanceInfoCmd ( SchemaData *sdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[] ................................................................................ Tcl_HashSearch search; SchemaCP *cp; SchemaValidationStack *se; Tcl_Obj *resultObj, *elmObj; static const char *schemaInstanceInfoMethods[] = { "validationstate", "vstate", "defelements", "stack", "toplevel", NULL }; enum schemaInstanceInfoMethod { m_validationstate, m_vstate, m_defelements, m_stack, m_toplevel }; static const char *schemaInstanceInfoStackMethods[] = { "top", "inside", NULL }; enum schemaInstanceInfoStackMethod { m_top, m_inside ................................................................................ for (h = Tcl_FirstHashEntry (&sdata->element, &search); h != NULL; h = Tcl_NextHashEntry (&search)) { cp = (SchemaCP *) Tcl_GetHashValue (h); if (!cp) continue; if (cp->flags & FORWARD_PATTERN_DEF || cp->flags & PLACEHOLDER_PATTERN_DEF) continue; serializeElementName (elmObj, cp); if (Tcl_ListObjAppendElement (interp, resultObj, elmObj) != TCL_OK) return TCL_ERROR; } break; case m_stack: if (Tcl_GetIndexFromObj (interp, objv[2], ................................................................................ Tcl_ResetResult (interp); return TCL_OK; } se = sdata->stack; while (se->pattern->type != SCHEMA_CTYPE_NAME) { se = se->down; } serializeElementName (elmObj, se->pattern); Tcl_SetObjResult (interp, elmObj); return TCL_OK; break; } case m_toplevel: if (objc != 2) { ................................................................................ return TCL_ERROR; } if (!sdata->defineToplevel && sdata->currentEvals > 1) { SetBooleanResult (0); } else { SetBooleanResult (1); } } return TCL_OK; } int schemaInstanceCmd ( ................................................................................ Tcl_HashTable *hashTable; Tcl_HashEntry *h, *h1; SchemaCP *pattern, *current = NULL; void *namespacePtr, *savedNamespacePtr; char *xmlstr, *errMsg; domDocument *doc; domNode *node; static const char *schemaInstanceMethods[] = { "defelement", "defpattern", "start", "event", "delete", "nrForwardDefinitions", "reset", "define", "validate", "domvalidate", "deftext", "info", "reportcmd", "prefixns", NULL }; ................................................................................ } else { node = tcldom_getNodeFromObj (interp, objv[2]); if (!node) { SetResult ("The second argument must be either a " "document or a element node"); return TCL_ERROR; } sdata->validationState = VALIDATION_STARTED; } if (validateDOM (interp, sdata, node) == TCL_OK) { SetBooleanResult (1); if (objc == 4) { Tcl_SetVar (interp, Tcl_GetString (objv[3]), "", 0); } } else { if (objc == 4) { |
< < < < < < < < > < > > > > > > > > > > > > > > > > > > | | > | | > > > > > > > > > > > > > > > > > > < > |
256 257 258 259 260 261 262 263 264 265 266 267 268 269 .... 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 .... 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 .... 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 .... 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 .... 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 .... 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 .... 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 .... 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 |
se->activeChild = ac + 1; \ se->hasMatched = 0; \ } else { \ se->activeChild = ac; \ se->hasMatched = 1; \ } #define S(str) str, sizeof (str) -1 static SchemaCP* initSchemaCP ( Schema_CP_Type type, void *namespace, char *name ................................................................................ if (se->pattern->namespace) { Tcl_AppendResult (interp, namespace, ":", NULL); } Tcl_AppendResult (interp, name, "\"", NULL); return TCL_ERROR; } } else { sdata->validationState = VALIDATION_STARTED; if (!pattern) { if (recover (interp, sdata, S("UNKNOWN_ROOT_ELEMENT"), 0, 0)) { sdata->skipDeep = 1; return TCL_OK; } SetResult ("Unknown element"); return TCL_ERROR; } pushToStack (sdata, pattern); return TCL_OK; } /* The normal case: we're inside the tree */ rc = matchElementStart (interp, sdata, (char *) namePtr, namespacePtr); while (rc == -1) { popStack (sdata); ................................................................................ sdata->cp = savedCP; sdata->contentSize = savedContenSize; if (sdata->cp && !sdata->isAttributeConstaint && cp->nc) { sdata->cp->flags |= CONSTRAINT_TEXT_CHILD; } return result; } /* cp must be of type SCHEMA_CTYPE_NAME for useful results */ static Tcl_Obj* serializeElementName ( Tcl_Interp *interp, SchemaCP *cp ) { Tcl_Obj *rObj; rObj = Tcl_NewObj(); Tcl_ListObjAppendElement (interp, rObj, Tcl_NewStringObj (cp->name, -1)); if (cp->namespace) { Tcl_ListObjAppendElement (interp, rObj, Tcl_NewStringObj (cp->namespace, -1)); } return rObj; } static int schemaInstanceInfoCmd ( SchemaData *sdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[] ................................................................................ Tcl_HashSearch search; SchemaCP *cp; SchemaValidationStack *se; Tcl_Obj *resultObj, *elmObj; static const char *schemaInstanceInfoMethods[] = { "validationstate", "vstate", "defelements", "stack", "toplevel", "expected", NULL }; enum schemaInstanceInfoMethod { m_validationstate, m_vstate, m_defelements, m_stack, m_toplevel, m_expected }; static const char *schemaInstanceInfoStackMethods[] = { "top", "inside", NULL }; enum schemaInstanceInfoStackMethod { m_top, m_inside ................................................................................ for (h = Tcl_FirstHashEntry (&sdata->element, &search); h != NULL; h = Tcl_NextHashEntry (&search)) { cp = (SchemaCP *) Tcl_GetHashValue (h); if (!cp) continue; if (cp->flags & FORWARD_PATTERN_DEF || cp->flags & PLACEHOLDER_PATTERN_DEF) continue; elmObj = serializeElementName (interp, cp); if (Tcl_ListObjAppendElement (interp, resultObj, elmObj) != TCL_OK) return TCL_ERROR; } break; case m_stack: if (Tcl_GetIndexFromObj (interp, objv[2], ................................................................................ Tcl_ResetResult (interp); return TCL_OK; } se = sdata->stack; while (se->pattern->type != SCHEMA_CTYPE_NAME) { se = se->down; } elmObj = serializeElementName (interp, se->pattern); Tcl_SetObjResult (interp, elmObj); return TCL_OK; break; } case m_toplevel: if (objc != 2) { ................................................................................ return TCL_ERROR; } if (!sdata->defineToplevel && sdata->currentEvals > 1) { SetBooleanResult (0); } else { SetBooleanResult (1); } case m_expected: if (sdata->validationState != VALIDATION_STARTED) { SetResult ("No validation started"); return TCL_ERROR; } if (!sdata->stack) { if (sdata->start) { Tcl_AppendElement (interp, sdata->start); if (sdata->startNamespace) { Tcl_AppendElement (interp, sdata->startNamespace); } } else { /* do the same as defelements: factor that out */ } } else { } } return TCL_OK; } int schemaInstanceCmd ( ................................................................................ Tcl_HashTable *hashTable; Tcl_HashEntry *h, *h1; SchemaCP *pattern, *current = NULL; void *namespacePtr, *savedNamespacePtr; char *xmlstr, *errMsg; domDocument *doc; domNode *node; Tcl_Obj *obj; static const char *schemaInstanceMethods[] = { "defelement", "defpattern", "start", "event", "delete", "nrForwardDefinitions", "reset", "define", "validate", "domvalidate", "deftext", "info", "reportcmd", "prefixns", NULL }; ................................................................................ } else { node = tcldom_getNodeFromObj (interp, objv[2]); if (!node) { SetResult ("The second argument must be either a " "document or a element node"); return TCL_ERROR; } } sdata->validationState = VALIDATION_STARTED; if (validateDOM (interp, sdata, node) == TCL_OK) { SetBooleanResult (1); if (objc == 4) { Tcl_SetVar (interp, Tcl_GetString (objv[3]), "", 0); } } else { if (objc == 4) { |