0000: 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /*--------------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c --------------.|
0050: 20 20 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 Copyright (C)
0060: 20 31 39 39 39 20 20 4a 6f 63 68 65 6e 20 43 2e 1999 Jochen C.
0070: 20 4c 6f 65 77 65 72 20 28 6c 6f 65 77 65 72 6a Loewer (loewerj
0080: 40 68 6f 74 6d 61 69 6c 2e 63 6f 6d 29 0a 2b 2d @hotmail.com).+-
0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 0a 7c ------------.|.|
00e0: 20 20 20 52 63 73 69 64 3a 20 40 28 23 29 24 49 Rcsid: @(#)$I
00f0: 64 24 0a 7c 0a 7c 20 20 20 54 68 65 20 63 6f 6e d$.|.| The con
0100: 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 66 69 tents of this fi
0110: 6c 65 20 61 72 65 20 73 75 62 6a 65 63 74 20 74 le are subject t
0120: 6f 20 74 68 65 20 4d 6f 7a 69 6c 6c 61 20 50 75 o the Mozilla Pu
0130: 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 7c 20 20 blic License.|
0140: 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 28 74 68 Version 2.0 (th
0150: 65 20 22 4c 69 63 65 6e 73 65 22 29 3b 20 79 6f e "License"); yo
0160: 75 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68 u may not use th
0170: 69 73 20 66 69 6c 65 20 65 78 63 65 70 74 20 69 is file except i
0180: 6e 0a 7c 20 20 20 63 6f 6d 70 6c 69 61 6e 63 65 n.| compliance
0190: 20 77 69 74 68 20 74 68 65 20 4c 69 63 65 6e 73 with the Licens
01a0: 65 2e 20 59 6f 75 20 6d 61 79 20 6f 62 74 61 69 e. You may obtai
01b0: 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 n a copy of the
01c0: 4c 69 63 65 6e 73 65 20 61 74 0a 7c 20 20 20 68 License at.| h
01d0: 74 74 70 3a 2f 2f 77 77 77 2e 6d 6f 7a 69 6c 6c ttp://www.mozill
01e0: 61 2e 6f 72 67 2f 4d 50 4c 2f 0a 7c 0a 7c 20 20 a.org/MPL/.|.|
01f0: 20 53 6f 66 74 77 61 72 65 20 64 69 73 74 72 69 Software distri
0200: 62 75 74 65 64 20 75 6e 64 65 72 20 74 68 65 20 buted under the
0210: 4c 69 63 65 6e 73 65 20 69 73 20 64 69 73 74 72 License is distr
0220: 69 62 75 74 65 64 20 6f 6e 20 61 6e 20 22 41 53 ibuted on an "AS
0230: 20 49 53 22 0a 7c 20 20 20 62 61 73 69 73 2c 20 IS".| basis,
0240: 57 49 54 48 4f 55 54 20 57 41 52 52 41 4e 54 59 WITHOUT WARRANTY
0250: 20 4f 46 20 41 4e 59 20 4b 49 4e 44 2c 20 65 69 OF ANY KIND, ei
0260: 74 68 65 72 20 65 78 70 72 65 73 73 20 6f 72 20 ther express or
0270: 69 6d 70 6c 69 65 64 2e 20 53 65 65 20 74 68 65 implied. See the
0280: 0a 7c 20 20 20 4c 69 63 65 6e 73 65 20 66 6f 72 .| License for
0290: 20 74 68 65 20 73 70 65 63 69 66 69 63 20 6c 61 the specific la
02a0: 6e 67 75 61 67 65 20 67 6f 76 65 72 6e 69 6e 67 nguage governing
02b0: 20 72 69 67 68 74 73 20 61 6e 64 20 6c 69 6d 69 rights and limi
02c0: 74 61 74 69 6f 6e 73 0a 7c 20 20 20 75 6e 64 65 tations.| unde
02d0: 72 20 74 68 65 20 4c 69 63 65 6e 73 65 2e 0a 7c r the License..|
02e0: 0a 7c 20 20 20 54 68 65 20 4f 72 69 67 69 6e 61 .| The Origina
02f0: 6c 20 43 6f 64 65 20 69 73 20 74 44 4f 4d 2e 0a l Code is tDOM..
0300: 7c 0a 7c 20 20 20 54 68 65 20 49 6e 69 74 69 61 |.| The Initia
0310: 6c 20 44 65 76 65 6c 6f 70 65 72 20 6f 66 20 74 l Developer of t
0320: 68 65 20 4f 72 69 67 69 6e 61 6c 20 43 6f 64 65 he Original Code
0330: 20 69 73 20 4a 6f 63 68 65 6e 20 4c 6f 65 77 65 is Jochen Loewe
0340: 72 2e 0a 7c 0a 7c 20 20 20 50 6f 72 74 69 6f 6e r..|.| Portion
0350: 73 20 63 72 65 61 74 65 64 20 62 79 20 4a 6f 63 s created by Joc
0360: 68 65 6e 20 4c 6f 65 77 65 72 20 61 72 65 20 43 hen Loewer are C
0370: 6f 70 79 72 69 67 68 74 20 28 43 29 20 31 39 39 opyright (C) 199
0380: 38 2c 20 31 39 39 39 0a 7c 20 20 20 4a 6f 63 68 8, 1999.| Joch
0390: 65 6e 20 4c 6f 65 77 65 72 2e 20 41 6c 6c 20 52 en Loewer. All R
03a0: 69 67 68 74 73 20 52 65 73 65 72 76 65 64 2e 0a ights Reserved..
03b0: 7c 0a 7c 20 20 20 50 6f 72 74 69 6f 6e 73 20 63 |.| Portions c
03c0: 72 65 61 74 65 64 20 62 79 20 5a 6f 72 61 6e 20 reated by Zoran
03d0: 56 61 73 69 6c 6a 65 76 69 63 20 61 72 65 20 43 Vasiljevic are C
03e0: 6f 70 79 72 69 67 68 74 20 28 43 29 20 32 30 30 opyright (C) 200
03f0: 30 2d 32 30 30 32 0a 7c 20 20 20 5a 6f 72 61 6e 0-2002.| Zoran
0400: 20 56 61 73 69 6c 6a 65 76 69 63 2e 20 41 6c 6c Vasiljevic. All
0410: 20 52 69 67 68 74 73 20 52 65 73 65 72 76 65 64 Rights Reserved
0420: 2e 0a 7c 0a 7c 20 20 20 50 6f 72 74 69 6f 6e 73 ..|.| Portions
0430: 20 63 72 65 61 74 65 64 20 62 79 20 52 6f 6c 66 created by Rolf
0440: 20 41 64 65 20 61 72 65 20 43 6f 70 79 72 69 67 Ade are Copyrig
0450: 68 74 20 28 43 29 20 31 39 39 39 2d 32 30 30 32 ht (C) 1999-2002
0460: 0a 7c 20 20 20 52 6f 6c 66 20 41 64 65 2e 20 41 .| Rolf Ade. A
0470: 6c 6c 20 52 69 67 68 74 73 20 52 65 73 65 72 76 ll Rights Reserv
0480: 65 64 2e 0a 7c 0a 7c 20 20 20 57 72 69 74 74 65 ed..|.| Writte
0490: 6e 20 62 79 20 5a 6f 72 61 6e 20 56 61 73 69 6c n by Zoran Vasil
04a0: 6a 65 76 69 63 0a 7c 20 20 20 4a 75 6c 79 20 31 jevic.| July 1
04b0: 32 2c 20 32 30 30 30 0a 7c 0a 5c 2d 2d 2d 2d 2d 2, 2000.|.\-----
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
04d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
04e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
04f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0500: 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 0a 2f 2a 2d 2d 2d ------*/.../*---
0510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 20 49 6e ---------.| In
0560: 63 6c 75 64 65 73 0a 7c 0a 5c 2d 2d 2d 2d 2d 2d cludes.|.\------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05b0: 2d 2d 2d 2d 2d 2a 2f 0a 23 69 6e 63 6c 75 64 65 -----*/.#include
05c0: 20 3c 64 6f 6d 2e 68 3e 0a 23 69 6e 63 6c 75 64 <dom.h>.#includ
05d0: 65 20 3c 74 63 6c 64 6f 6d 2e 68 3e 0a 23 69 6e e <tcldom.h>.#in
05e0: 63 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 69 clude <tcl.h>.#i
05f0: 6e 63 6c 75 64 65 20 3c 6e 6f 64 65 63 6d 64 2e nclude <nodecmd.
0600: 68 3e 0a 0a 23 64 65 66 69 6e 65 20 50 41 52 53 h>..#define PARS
0610: 45 52 5f 4e 4f 44 45 20 39 39 39 39 20 2f 2a 20 ER_NODE 9999 /*
0620: 48 61 63 6b 20 73 6f 20 74 68 61 74 20 77 65 20 Hack so that we
0630: 63 61 6e 20 69 6e 76 6f 6b 65 20 58 4d 4c 20 70 can invoke XML p
0640: 61 72 73 65 72 20 2a 2f 0a 2f 2a 20 4d 6f 72 65 arser */./* More
0650: 20 68 61 63 6b 65 64 20 64 6f 6d 4e 6f 64 65 54 hacked domNodeT
0660: 79 70 65 73 20 2d 20 75 73 65 64 20 74 6f 20 73 ypes - used to s
0670: 69 67 6e 61 6c 2c 20 74 68 61 74 20 77 65 20 77 ignal, that we w
0680: 61 6e 74 20 74 6f 20 63 68 65 63 6b 0a 20 20 20 ant to check.
0690: 6e 61 6d 65 2f 64 61 74 61 20 6f 66 20 74 68 65 name/data of the
06a0: 20 6e 6f 64 65 20 74 6f 20 63 72 65 61 74 65 2e node to create.
06b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4c 45 4d */.#define ELEM
06c0: 45 4e 54 5f 4e 4f 44 45 5f 41 4e 41 4d 45 5f 43 ENT_NODE_ANAME_C
06d0: 48 4b 20 31 30 30 30 30 0a 23 64 65 66 69 6e 65 HK 10000.#define
06e0: 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 5f 41 56 ELEMENT_NODE_AV
06f0: 41 4c 55 45 5f 43 48 4b 20 31 30 30 30 31 0a 23 ALUE_CHK 10001.#
0700: 64 65 66 69 6e 65 20 45 4c 45 4d 45 4e 54 5f 4e define ELEMENT_N
0710: 4f 44 45 5f 43 48 4b 20 31 30 30 30 32 0a 23 64 ODE_CHK 10002.#d
0720: 65 66 69 6e 65 20 54 45 58 54 5f 4e 4f 44 45 5f efine TEXT_NODE_
0730: 43 48 4b 20 31 30 30 30 33 0a 23 64 65 66 69 6e CHK 10003.#defin
0740: 65 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 5f 43 e COMMENT_NODE_C
0750: 48 4b 20 31 30 30 30 34 0a 23 64 65 66 69 6e 65 HK 10004.#define
0760: 20 43 44 41 54 41 5f 53 45 43 54 49 4f 4e 5f 4e CDATA_SECTION_N
0770: 4f 44 45 5f 43 48 4b 20 31 30 30 30 35 0a 23 64 ODE_CHK 10005.#d
0780: 65 66 69 6e 65 20 50 52 4f 43 45 53 53 49 4e 47 efine PROCESSING
0790: 5f 49 4e 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 _INSTRUCTION_NOD
07a0: 45 5f 4e 41 4d 45 5f 43 48 4b 20 31 30 30 30 36 E_NAME_CHK 10006
07b0: 0a 23 64 65 66 69 6e 65 20 50 52 4f 43 45 53 53 .#define PROCESS
07c0: 49 4e 47 5f 49 4e 53 54 52 55 43 54 49 4f 4e 5f ING_INSTRUCTION_
07d0: 4e 4f 44 45 5f 56 41 4c 55 45 5f 43 48 4b 20 31 NODE_VALUE_CHK 1
07e0: 30 30 30 37 0a 23 64 65 66 69 6e 65 20 50 52 4f 0007.#define PRO
07f0: 43 45 53 53 49 4e 47 5f 49 4e 53 54 52 55 43 54 CESSING_INSTRUCT
0800: 49 4f 4e 5f 4e 4f 44 45 5f 43 48 4b 20 31 30 30 ION_NODE_CHK 100
0810: 30 38 0a 0a 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 08../*----------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0860: 2d 2d 0a 7c 20 20 20 54 79 70 65 73 0a 7c 0a 7c --.| Types.|.|
0870: 20 20 20 54 68 69 73 20 73 74 72 75 63 74 75 72 This structur
0880: 65 20 72 65 70 72 65 73 65 6e 74 73 20 6f 6e 65 e represents one
0890: 20 73 74 61 63 6b 20 73 6c 6f 74 2e 20 54 68 65 stack slot. The
08a0: 20 73 74 61 63 6b 20 69 74 73 65 6c 66 0a 7c 20 stack itself.|
08b0: 20 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 is implemented
08c0: 20 61 73 20 64 6f 75 62 6c 65 2d 6c 69 6e 6b 65 as double-linke
08d0: 64 2d 6c 69 73 74 20 6f 66 20 66 6f 6c 6c 6f 77 d-list of follow
08e0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 73 2e 0a ing structures..
08f0: 7c 0a 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.\-------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f --------------*/
0940: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 .typedef struct
0950: 53 74 61 63 6b 53 6c 6f 74 20 7b 0a 20 20 20 20 StackSlot {.
0960: 76 6f 69 64 20 20 20 20 20 20 20 20 20 20 20 20 void
0970: 20 2a 65 6c 65 6d 65 6e 74 3b 20 20 20 2f 2a 20 *element; /*
0980: 54 68 65 20 73 74 61 63 6b 65 64 20 65 6c 65 6d The stacked elem
0990: 65 6e 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 ent */. struc
09a0: 74 20 53 74 61 63 6b 53 6c 6f 74 20 2a 6e 65 78 t StackSlot *nex
09b0: 74 50 74 72 3b 20 20 20 2f 2a 20 4e 65 78 74 20 tPtr; /* Next
09c0: 6c 69 6e 6b 20 2a 2f 0a 20 20 20 20 73 74 72 75 link */. stru
09d0: 63 74 20 53 74 61 63 6b 53 6c 6f 74 20 2a 70 72 ct StackSlot *pr
09e0: 65 76 50 74 72 3b 20 20 20 2f 2a 20 50 72 65 76 evPtr; /* Prev
09f0: 69 6f 75 73 20 6c 69 6e 6b 20 2a 2f 0a 7d 20 53 ious link */.} S
0a00: 74 61 63 6b 53 6c 6f 74 3b 0a 0a 2f 2a 2d 2d 2d tackSlot;../*---
0a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 20 42 65 ---------.| Be
0a60: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 73 ginning of the s
0a70: 74 61 63 6b 20 61 6e 64 20 63 75 72 72 65 6e 74 tack and current
0a80: 20 65 6c 65 6d 65 6e 74 20 70 6f 69 6e 74 65 72 element pointer
0a90: 20 61 72 65 20 6c 6f 63 61 6c 0a 7c 20 20 20 74 are local.| t
0aa0: 6f 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 o current thread
0ab0: 20 61 6e 64 20 61 6c 73 6f 20 6c 6f 63 61 6c 20 and also local
0ac0: 74 6f 20 74 68 69 73 20 66 69 6c 65 2e 0a 7c 20 to this file..|
0ad0: 20 20 46 6f 72 20 6e 6f 6e 2d 74 68 72 65 61 64 For non-thread
0ae0: 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 73 2c ed environments,
0af0: 20 69 74 27 73 20 61 20 72 65 67 75 6c 61 72 20 it's a regular
0b00: 73 74 61 74 69 63 2e 0a 7c 0a 5c 2d 2d 2d 2d 2d static..|.\-----
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0b50: 2d 2d 2d 2d 2d 2d 2a 2f 0a 74 79 70 65 64 65 66 ------*/.typedef
0b60: 20 73 74 72 75 63 74 20 43 75 72 72 65 6e 74 53 struct CurrentS
0b70: 74 61 63 6b 20 7b 0a 20 20 20 20 53 74 61 63 6b tack {. Stack
0b80: 53 6c 6f 74 20 2a 65 6c 65 6d 65 6e 74 53 74 61 Slot *elementSta
0b90: 63 6b 3b 0a 20 20 20 20 53 74 61 63 6b 53 6c 6f ck;. StackSlo
0ba0: 74 20 2a 63 75 72 72 65 6e 74 53 6c 6f 74 3b 0a t *currentSlot;.
0bb0: 7d 20 43 75 72 72 65 6e 74 53 74 61 63 6b 3b 0a } CurrentStack;.
0bc0: 0a 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ./*-------------
0bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
0c10: 7c 20 20 20 53 74 72 75 63 74 75 72 65 20 75 73 | Structure us
0c20: 65 64 20 61 73 20 63 6c 69 65 6e 74 44 61 74 61 ed as clientData
0c30: 20 6f 66 20 74 68 65 20 63 72 65 61 74 65 64 20 of the created
0c40: 63 6f 6d 6d 61 6e 64 73 2e 0a 7c 20 20 20 54 68 commands..| Th
0c50: 65 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 e structure stor
0c60: 65 73 2c 20 77 68 69 63 68 20 74 79 70 65 20 6f es, which type o
0c70: 66 20 6e 6f 64 65 20 74 68 65 20 63 6f 6d 6d 61 f node the comma
0c80: 6e 64 20 68 61 73 0a 7c 20 20 20 74 6f 20 63 72 nd has.| to cr
0c90: 65 61 74 65 20 61 6e 64 2c 20 69 6e 20 63 61 73 eate and, in cas
0ca0: 65 20 6f 66 20 65 6c 65 6d 65 6e 74 4e 6f 64 65 e of elementNode
0cb0: 73 20 61 6e 64 20 69 66 20 67 69 76 65 6e 2c 20 s and if given,
0cc0: 74 68 65 0a 7c 20 20 20 6e 61 6d 65 73 70 61 63 the.| namespac
0cd0: 65 20 6f 66 20 74 68 65 20 6e 6f 64 65 2e 0a 5c e of the node..\
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 74 79 -----------*/.ty
0d30: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 6f 64 pedef struct Nod
0d40: 65 49 6e 66 6f 20 7b 0a 20 20 20 20 69 6e 74 20 eInfo {. int
0d50: 20 20 74 79 70 65 3b 0a 20 20 20 20 63 68 61 72 type;. char
0d60: 20 2a 6e 61 6d 65 73 70 61 63 65 3b 0a 20 20 20 *namespace;.
0d70: 20 69 6e 74 20 20 20 6a 73 6f 6e 54 79 70 65 3b int jsonType;
0d80: 0a 20 20 20 20 63 68 61 72 20 2a 74 61 67 4e 61 . char *tagNa
0d90: 6d 65 3b 0a 7d 20 4e 6f 64 65 49 6e 66 6f 3b 0a me;.} NodeInfo;.
0da0: 0a 23 69 66 6e 64 65 66 20 54 43 4c 5f 54 48 52 .#ifndef TCL_THR
0db0: 45 41 44 53 0a 20 20 73 74 61 74 69 63 20 43 75 EADS. static Cu
0dc0: 72 72 65 6e 74 53 74 61 63 6b 20 64 61 74 61 4b rrentStack dataK
0dd0: 65 79 3b 0a 23 20 64 65 66 69 6e 65 20 54 53 44 ey;.# define TSD
0de0: 50 54 52 28 61 29 20 61 0a 23 65 6c 73 65 0a 20 PTR(a) a.#else.
0df0: 20 73 74 61 74 69 63 20 54 63 6c 5f 54 68 72 65 static Tcl_Thre
0e00: 61 64 44 61 74 61 4b 65 79 20 64 61 74 61 4b 65 adDataKey dataKe
0e10: 79 3b 0a 23 20 64 65 66 69 6e 65 20 54 53 44 50 y;.# define TSDP
0e20: 54 52 28 61 29 20 28 43 75 72 72 65 6e 74 53 74 TR(a) (CurrentSt
0e30: 61 63 6b 2a 29 54 63 6c 5f 47 65 74 54 68 72 65 ack*)Tcl_GetThre
0e40: 61 64 44 61 74 61 28 28 61 29 2c 73 69 7a 65 6f adData((a),sizeo
0e50: 66 28 43 75 72 72 65 6e 74 53 74 61 63 6b 29 29 f(CurrentStack))
0e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 2d 2d 2d 2d 2d .#endif../*-----
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0eb0: 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 20 46 6f 72 77 -------.| Forw
0ec0: 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 ard declarations
0ed0: 0a 7c 0a 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .|.\------------
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a ---------------*
0f20: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a 20 /.static void *
0f30: 53 74 61 63 6b 50 75 73 68 20 20 28 76 6f 69 64 StackPush (void
0f40: 20 2a 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 *);.static void
0f50: 20 2a 20 53 74 61 63 6b 50 6f 70 20 20 20 28 76 * StackPop (v
0f60: 6f 69 64 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 oid);.static voi
0f70: 64 20 2a 20 53 74 61 63 6b 54 6f 70 20 20 20 28 d * StackTop (
0f80: 76 6f 69 64 29 3b 0a 73 74 61 74 69 63 20 69 6e void);.static in
0f90: 74 20 20 20 20 4e 6f 64 65 4f 62 6a 43 6d 64 20 t NodeObjCmd
0fa0: 28 43 6c 69 65 6e 74 44 61 74 61 2c 54 63 6c 5f (ClientData,Tcl_
0fb0: 49 6e 74 65 72 70 2a 2c 69 6e 74 2c 54 63 6c 5f Interp*,int,Tcl_
0fc0: 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 5b 5d 29 3b Obj *const o[]);
0fd0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 20 20 53 .static void S
0fe0: 74 61 63 6b 46 69 6e 61 6c 69 7a 65 20 28 43 6c tackFinalize (Cl
0ff0: 69 65 6e 74 44 61 74 61 29 3b 0a 0a 65 78 74 65 ientData);..exte
1000: 72 6e 20 69 6e 74 20 74 63 6c 64 6f 6d 5f 61 70 rn int tcldom_ap
1010: 70 65 6e 64 58 4d 4c 20 28 54 63 6c 5f 49 6e 74 pendXML (Tcl_Int
1020: 65 72 70 2a 2c 20 64 6f 6d 4e 6f 64 65 2a 2c 20 erp*, domNode*,
1030: 54 63 6c 5f 4f 62 6a 2a 29 3b 0a 0a 0a 2f 2a 2d Tcl_Obj*);.../*-
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 20 -----------.|
1090: 53 74 61 63 6b 50 75 73 68 0a 7c 0a 5c 2d 2d 2d StackPush.|.\---
10a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
10b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
10c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
10d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
10e0: 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 73 74 61 74 69 --------*/.stati
10f0: 63 20 76 6f 69 64 20 2a 0a 53 74 61 63 6b 50 75 c void *.StackPu
1100: 73 68 20 28 0a 20 20 20 20 76 6f 69 64 20 2a 65 sh (. void *e
1110: 6c 65 6d 65 6e 74 0a 29 20 7b 0a 20 20 20 20 53 lement.) {. S
1120: 74 61 63 6b 53 6c 6f 74 20 2a 6e 65 77 45 6c 65 tackSlot *newEle
1130: 6d 65 6e 74 3b 0a 20 20 20 20 43 75 72 72 65 6e ment;. Curren
1140: 74 53 74 61 63 6b 20 2a 74 73 64 50 74 72 20 3d tStack *tsdPtr =
1150: 20 54 53 44 50 54 52 28 26 64 61 74 61 4b 65 79 TSDPTR(&dataKey
1160: 29 3b 0a 0a 20 20 20 20 2f 2a 2d 2d 2d 2d 2d 2d );.. /*------
1170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
11a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 -------------.
11b0: 20 20 7c 20 20 20 52 65 75 73 65 20 61 6c 72 65 | Reuse alre
11c0: 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 ady allocated st
11d0: 61 63 6b 20 73 6c 6f 74 73 2c 20 69 66 20 61 6e ack slots, if an
11e0: 79 0a 20 20 20 20 7c 0a 20 20 20 20 5c 2d 2d 2d y. |. \---
11f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a ---------------*
1230: 2f 0a 20 20 20 20 69 66 20 28 74 73 64 50 74 72 /. if (tsdPtr
1240: 2d 3e 63 75 72 72 65 6e 74 53 6c 6f 74 20 26 26 ->currentSlot &&
1250: 20 74 73 64 50 74 72 2d 3e 63 75 72 72 65 6e 74 tsdPtr->current
1260: 53 6c 6f 74 2d 3e 6e 65 78 74 50 74 72 29 20 7b Slot->nextPtr) {
1270: 0a 20 20 20 20 20 20 20 20 74 73 64 50 74 72 2d . tsdPtr-
1280: 3e 63 75 72 72 65 6e 74 53 6c 6f 74 20 3d 20 74 >currentSlot = t
1290: 73 64 50 74 72 2d 3e 63 75 72 72 65 6e 74 53 6c sdPtr->currentSl
12a0: 6f 74 2d 3e 6e 65 78 74 50 74 72 3b 0a 20 20 20 ot->nextPtr;.
12b0: 20 20 20 20 20 74 73 64 50 74 72 2d 3e 63 75 72 tsdPtr->cur
12c0: 72 65 6e 74 53 6c 6f 74 2d 3e 65 6c 65 6d 65 6e rentSlot->elemen
12d0: 74 20 3d 20 65 6c 65 6d 65 6e 74 3b 0a 20 20 20 t = element;.
12e0: 20 20 20 20 20 72 65 74 75 72 6e 20 65 6c 65 6d return elem
12f0: 65 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ent;. }..
1300: 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /*--------------
1310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1340: 2d 2d 2d 2d 2d 0a 20 20 20 20 7c 20 20 20 41 6c -----. | Al
1350: 6c 6f 63 61 74 65 20 6e 65 77 20 73 74 61 63 6b locate new stack
1360: 20 73 6c 6f 74 0a 20 20 20 20 7c 0a 20 20 20 20 slot. |.
1370: 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d \---------------
1380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13b0: 2d 2d 2d 2a 2f 0a 20 20 20 20 6e 65 77 45 6c 65 ---*/. newEle
13c0: 6d 65 6e 74 20 3d 20 28 53 74 61 63 6b 53 6c 6f ment = (StackSlo
13d0: 74 20 2a 29 4d 41 4c 4c 4f 43 28 73 69 7a 65 6f t *)MALLOC(sizeo
13e0: 66 28 53 74 61 63 6b 53 6c 6f 74 29 29 3b 0a 20 f(StackSlot));.
13f0: 20 20 20 6d 65 6d 73 65 74 28 6e 65 77 45 6c 65 memset(newEle
1400: 6d 65 6e 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 ment, 0, sizeof(
1410: 53 74 61 63 6b 53 6c 6f 74 29 29 3b 0a 0a 20 20 StackSlot));..
1420: 20 20 69 66 20 28 74 73 64 50 74 72 2d 3e 65 6c if (tsdPtr->el
1430: 65 6d 65 6e 74 53 74 61 63 6b 20 3d 3d 20 4e 55 ementStack == NU
1440: 4c 4c 29 20 7b 0a 20 20 20 20 20 20 20 20 74 73 LL) {. ts
1450: 64 50 74 72 2d 3e 65 6c 65 6d 65 6e 74 53 74 61 dPtr->elementSta
1460: 63 6b 20 3d 20 6e 65 77 45 6c 65 6d 65 6e 74 3b ck = newElement;
1470: 0a 23 69 66 64 65 66 20 54 43 4c 5f 54 48 52 45 .#ifdef TCL_THRE
1480: 41 44 53 0a 20 20 20 20 20 20 20 20 54 63 6c 5f ADS. Tcl_
1490: 43 72 65 61 74 65 54 68 72 65 61 64 45 78 69 74 CreateThreadExit
14a0: 48 61 6e 64 6c 65 72 28 53 74 61 63 6b 46 69 6e Handler(StackFin
14b0: 61 6c 69 7a 65 2c 20 74 73 64 50 74 72 2d 3e 65 alize, tsdPtr->e
14c0: 6c 65 6d 65 6e 74 53 74 61 63 6b 29 3b 0a 23 65 lementStack);.#e
14d0: 6c 73 65 0a 20 20 20 20 20 20 20 20 54 63 6c 5f lse. Tcl_
14e0: 43 72 65 61 74 65 45 78 69 74 48 61 6e 64 6c 65 CreateExitHandle
14f0: 72 20 28 53 74 61 63 6b 46 69 6e 61 6c 69 7a 65 r (StackFinalize
1500: 2c 20 74 73 64 50 74 72 2d 3e 65 6c 65 6d 65 6e , tsdPtr->elemen
1510: 74 53 74 61 63 6b 29 3b 0a 23 65 6e 64 69 66 0a tStack);.#endif.
1520: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
1530: 20 20 20 20 20 74 73 64 50 74 72 2d 3e 63 75 72 tsdPtr->cur
1540: 72 65 6e 74 53 6c 6f 74 2d 3e 6e 65 78 74 50 74 rentSlot->nextPt
1550: 72 20 3d 20 6e 65 77 45 6c 65 6d 65 6e 74 3b 0a r = newElement;.
1560: 20 20 20 20 20 20 20 20 6e 65 77 45 6c 65 6d 65 newEleme
1570: 6e 74 2d 3e 70 72 65 76 50 74 72 20 3d 20 74 73 nt->prevPtr = ts
1580: 64 50 74 72 2d 3e 63 75 72 72 65 6e 74 53 6c 6f dPtr->currentSlo
1590: 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 73 t;. }.. ts
15a0: 64 50 74 72 2d 3e 63 75 72 72 65 6e 74 53 6c 6f dPtr->currentSlo
15b0: 74 20 3d 20 6e 65 77 45 6c 65 6d 65 6e 74 3b 0a t = newElement;.
15c0: 20 20 20 20 74 73 64 50 74 72 2d 3e 63 75 72 72 tsdPtr->curr
15d0: 65 6e 74 53 6c 6f 74 2d 3e 65 6c 65 6d 65 6e 74 entSlot->element
15e0: 20 3d 20 65 6c 65 6d 65 6e 74 3b 0a 0a 20 20 20 = element;..
15f0: 20 72 65 74 75 72 6e 20 65 6c 65 6d 65 6e 74 3b return element;
1600: 0a 7d 0a 0a 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .}../*----------
1610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1650: 2d 2d 0a 7c 20 20 20 53 74 61 63 6b 50 6f 70 20 --.| StackPop
1660: 20 2d 20 20 70 6f 70 73 20 74 68 65 20 65 6c 65 - pops the ele
1670: 6d 65 6e 74 20 66 72 6f 6d 20 73 74 61 63 6b 0a ment from stack.
1680: 7c 0a 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.\-------------
1690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
16a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
16b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
16c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f --------------*/
16d0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a 0a 53 .static void *.S
16e0: 74 61 63 6b 50 6f 70 20 28 76 6f 69 64 29 0a 7b tackPop (void).{
16f0: 0a 20 20 20 20 76 6f 69 64 20 2a 65 6c 65 6d 65 . void *eleme
1700: 6e 74 3b 0a 20 20 20 20 43 75 72 72 65 6e 74 53 nt;. CurrentS
1710: 74 61 63 6b 20 2a 74 73 64 50 74 72 20 3d 20 54 tack *tsdPtr = T
1720: 53 44 50 54 52 28 26 64 61 74 61 4b 65 79 29 3b SDPTR(&dataKey);
1730: 0a 0a 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 .. element =
1740: 74 73 64 50 74 72 2d 3e 63 75 72 72 65 6e 74 53 tsdPtr->currentS
1750: 6c 6f 74 2d 3e 65 6c 65 6d 65 6e 74 3b 0a 20 20 lot->element;.
1760: 20 20 69 66 20 28 74 73 64 50 74 72 2d 3e 63 75 if (tsdPtr->cu
1770: 72 72 65 6e 74 53 6c 6f 74 2d 3e 70 72 65 76 50 rrentSlot->prevP
1780: 74 72 29 20 7b 0a 20 20 20 20 20 20 20 20 74 73 tr) {. ts
1790: 64 50 74 72 2d 3e 63 75 72 72 65 6e 74 53 6c 6f dPtr->currentSlo
17a0: 74 20 3d 20 74 73 64 50 74 72 2d 3e 63 75 72 72 t = tsdPtr->curr
17b0: 65 6e 74 53 6c 6f 74 2d 3e 70 72 65 76 50 74 72 entSlot->prevPtr
17c0: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 ;. } else {.
17d0: 20 20 20 20 20 20 20 74 73 64 50 74 72 2d 3e 63 tsdPtr->c
17e0: 75 72 72 65 6e 74 53 6c 6f 74 2d 3e 65 6c 65 6d urrentSlot->elem
17f0: 65 6e 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 ent = NULL;.
1800: 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 65 6c }.. return el
1810: 65 6d 65 6e 74 3b 0a 7d 0a 0a 2f 2a 2d 2d 2d 2d ement;.}../*----
1820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1860: 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 20 53 74 61 --------.| Sta
1870: 63 6b 54 6f 70 20 20 2d 20 20 72 65 74 75 72 6e ckTop - return
1880: 73 20 74 6f 70 2d 6c 65 76 65 6c 20 65 6c 65 6d s top-level elem
1890: 65 6e 74 20 66 72 6f 6d 20 73 74 61 63 6b 0a 7c ent from stack.|
18a0: 0a 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .\--------------
18b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
18c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
18d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
18e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a -------------*/.
18f0: 73 74 61 74 69 63 20 76 6f 69 64 20 2a 0a 53 74 static void *.St
1900: 61 63 6b 54 6f 70 20 28 76 6f 69 64 29 0a 7b 0a ackTop (void).{.
1910: 20 20 20 20 43 75 72 72 65 6e 74 53 74 61 63 6b CurrentStack
1920: 20 2a 74 73 64 50 74 72 20 3d 20 54 53 44 50 54 *tsdPtr = TSDPT
1930: 52 28 26 64 61 74 61 4b 65 79 29 3b 0a 0a 20 20 R(&dataKey);..
1940: 20 20 69 66 20 28 74 73 64 50 74 72 2d 3e 63 75 if (tsdPtr->cu
1950: 72 72 65 6e 74 53 6c 6f 74 20 3d 3d 20 4e 55 4c rrentSlot == NUL
1960: 4c 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 L) {. ret
1970: 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 0a urn NULL;. }.
1980: 0a 20 20 20 20 72 65 74 75 72 6e 20 74 73 64 50 . return tsdP
1990: 74 72 2d 3e 63 75 72 72 65 6e 74 53 6c 6f 74 2d tr->currentSlot-
19a0: 3e 65 6c 65 6d 65 6e 74 3b 0a 7d 0a 0a 0a 2f 2a >element;.}.../*
19b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
19c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
19d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
19f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 ------------.|
1a00: 20 53 74 61 63 6b 46 69 6e 61 6c 69 7a 65 20 2d StackFinalize -
1a10: 20 72 65 63 6c 61 69 6d 73 20 73 74 61 63 6b 20 reclaims stack
1a20: 6d 65 6d 6f 72 79 20 28 73 6c 6f 74 73 20 6f 6e memory (slots on
1a30: 6c 79 2c 20 6e 6f 74 20 65 6c 65 6d 65 6e 74 73 ly, not elements
1a40: 29 0a 7c 0a 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ).|.\-----------
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a90: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 53 */.static void.S
1aa0: 74 61 63 6b 46 69 6e 61 6c 69 7a 65 20 28 0a 20 tackFinalize (.
1ab0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c ClientData cl
1ac0: 69 65 6e 74 44 61 74 61 0a 29 20 7b 0a 20 20 20 ientData.) {.
1ad0: 20 53 74 61 63 6b 53 6c 6f 74 20 2a 74 6d 70 2c StackSlot *tmp,
1ae0: 20 2a 73 74 61 63 6b 20 3d 20 28 53 74 61 63 6b *stack = (Stack
1af0: 53 6c 6f 74 20 2a 29 63 6c 69 65 6e 74 44 61 74 Slot *)clientDat
1b00: 61 3b 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 73 a;.. while (s
1b10: 74 61 63 6b 29 20 7b 0a 20 20 20 20 20 20 20 20 tack) {.
1b20: 74 6d 70 20 3d 20 73 74 61 63 6b 2d 3e 6e 65 78 tmp = stack->nex
1b30: 74 50 74 72 3b 0a 20 20 20 20 20 20 20 20 46 52 tPtr;. FR
1b40: 45 45 28 28 63 68 61 72 2a 29 73 74 61 63 6b 29 EE((char*)stack)
1b50: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 63 6b 20 ;. stack
1b60: 3d 20 74 6d 70 3b 0a 20 20 20 20 7d 0a 7d 0a 0a = tmp;. }.}..
1b70: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /*. *-----------
1b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 -----------. *.
1bc0: 2a 20 6e 61 6d 65 73 70 61 63 65 54 61 69 6c 20 * namespaceTail
1bd0: 2d 2d 0a 20 2a 0a 20 2a 20 20 20 20 20 20 52 65 --. *. * Re
1be0: 74 75 72 6e 73 20 74 68 65 20 74 72 61 69 6c 69 turns the traili
1bf0: 6e 67 20 6e 61 6d 65 20 61 74 20 74 68 65 20 65 ng name at the e
1c00: 6e 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 nd of a string w
1c10: 69 74 68 20 22 3a 3a 22 0a 20 2a 20 20 20 20 20 ith "::". *
1c20: 20 6e 61 6d 65 73 70 61 63 65 20 71 75 61 6c 69 namespace quali
1c30: 66 69 65 72 73 2e 20 54 68 65 73 65 20 71 75 61 fiers. These qua
1c40: 6c 69 66 69 65 72 73 20 61 72 65 20 6e 61 6d 65 lifiers are name
1c50: 73 70 61 63 65 20 6e 61 6d 65 73 0a 20 2a 20 20 space names. *
1c60: 20 20 20 20 73 65 70 61 72 61 74 65 64 20 62 79 separated by
1c70: 20 22 3a 3a 22 73 2e 20 46 6f 72 20 65 78 61 6d "::"s. For exam
1c80: 70 6c 65 2c 20 66 6f 72 20 22 3a 3a 66 6f 6f 3a ple, for "::foo:
1c90: 3a 70 22 20 74 68 69 73 20 66 75 6e 63 74 69 6f :p" this functio
1ca0: 6e 0a 20 2a 20 20 20 20 20 20 72 65 74 75 72 6e n. * return
1cb0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 s a pointer to t
1cc0: 68 65 20 22 70 22 20 69 6e 20 74 68 61 74 20 6f he "p" in that o
1cd0: 62 6a 20 73 74 72 69 6e 67 20 72 65 70 2c 20 61 bj string rep, a
1ce0: 6e 64 20 66 6f 72 0a 20 2a 20 20 20 20 20 20 22 nd for. * "
1cf0: 3a 3a 22 20 69 74 20 72 65 74 75 72 6e 73 20 61 ::" it returns a
1d00: 20 70 6f 69 6e 74 65 72 20 74 6f 20 22 22 2e 0a pointer to ""..
1d10: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 *. * Results:.
1d20: 2a 09 52 65 74 75 72 6e 73 20 61 20 70 6f 69 6e *.Returns a poin
1d30: 74 65 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 ter to the start
1d40: 20 6f 66 20 74 68 65 20 74 61 69 6c 20 6e 61 6d of the tail nam
1d50: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 e.. *. * Side ef
1d60: 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a fects:. *.None..
1d70: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *-----------
1d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a -----------. */.
1dc0: 73 74 61 74 69 63 20 63 68 61 72 2a 0a 6e 61 6d static char*.nam
1dd0: 65 73 70 61 63 65 54 61 69 6c 20 28 0a 20 20 20 espaceTail (.
1de0: 20 54 63 6c 5f 4f 62 6a 20 2a 6e 61 6d 65 4f 62 Tcl_Obj *nameOb
1df0: 6a 0a 29 20 20 20 20 0a 7b 0a 20 20 20 20 63 68 j.) .{. ch
1e00: 61 72 20 2a 6e 61 6d 65 2c 2a 70 3b 0a 20 20 20 ar *name,*p;.
1e10: 20 69 6e 74 20 20 20 6c 65 6e 3b 0a 20 20 20 20 int len;.
1e20: 0a 20 20 20 20 6e 61 6d 65 20 3d 20 54 63 6c 5f . name = Tcl_
1e30: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a GetStringFromObj
1e40: 28 6e 61 6d 65 4f 62 6a 2c 20 26 6c 65 6e 29 3b (nameObj, &len);
1e50: 0a 20 20 20 20 70 20 3d 20 6e 61 6d 65 20 2b 20 . p = name +
1e60: 6c 65 6e 3b 0a 20 20 20 20 2f 2a 20 49 73 6f 6c len;. /* Isol
1e70: 61 74 65 20 6a 75 73 74 20 74 68 65 20 74 61 69 ate just the tai
1e80: 6c 20 6e 61 6d 65 2c 20 69 2e 65 2e 20 73 6b 69 l name, i.e. ski
1e90: 70 20 69 74 27 73 20 70 61 72 65 6e 74 20 6e 61 p it's parent na
1ea0: 6d 65 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 77 mespace */. w
1eb0: 68 69 6c 65 20 28 2d 2d 70 20 3e 20 6e 61 6d 65 hile (--p > name
1ec0: 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 ) {. if (
1ed0: 28 2a 70 20 3d 3d 20 27 3a 27 29 20 26 26 20 28 (*p == ':') && (
1ee0: 2a 28 70 2d 31 29 20 3d 3d 20 27 3a 27 29 29 20 *(p-1) == ':'))
1ef0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 2b {. p+
1f00: 2b 3b 20 2f 2a 20 6a 75 73 74 20 61 66 74 65 72 +; /* just after
1f10: 20 74 68 65 20 6c 61 73 74 20 22 3a 3a 22 20 2a the last "::" *
1f20: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 /. na
1f30: 6d 65 20 3d 20 70 3b 0a 20 20 20 20 20 20 20 20 me = p;.
1f40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 break;.
1f50: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 }. }. r
1f60: 65 74 75 72 6e 20 6e 61 6d 65 3b 0a 7d 0a 0a 2f eturn name;.}../
1f70: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
1f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 -------------.|
1fc0: 20 20 4e 6f 64 65 4f 62 6a 43 6d 64 44 65 6c 65 NodeObjCmdDele
1fd0: 74 65 50 72 6f 63 0a 7c 0a 5c 2d 2d 2d 2d 2d 2d teProc.|.\------
1fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2020: 2d 2d 2d 2d 2d 2a 2f 0a 73 74 61 74 69 63 20 76 -----*/.static v
2030: 6f 69 64 0a 4e 6f 64 65 4f 62 6a 43 6d 64 44 65 oid.NodeObjCmdDe
2040: 6c 65 74 65 50 72 6f 63 20 28 0a 20 20 20 20 43 leteProc (. C
2050: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 lientData client
2060: 44 61 74 61 0a 20 20 20 20 29 0a 7b 0a 20 20 20 Data. ).{.
2070: 20 4e 6f 64 65 49 6e 66 6f 20 2a 6e 6f 64 65 49 NodeInfo *nodeI
2080: 6e 66 6f 20 3d 20 28 4e 6f 64 65 49 6e 66 6f 20 nfo = (NodeInfo
2090: 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 *) clientData;.
20a0: 20 20 20 0a 20 20 20 20 69 66 20 28 6e 6f 64 65 . if (node
20b0: 49 6e 66 6f 2d 3e 6e 61 6d 65 73 70 61 63 65 29 Info->namespace)
20c0: 20 7b 0a 20 20 20 20 20 20 20 20 46 52 45 45 20 {. FREE
20d0: 28 6e 6f 64 65 49 6e 66 6f 2d 3e 6e 61 6d 65 73 (nodeInfo->names
20e0: 70 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 pace);. }.
20f0: 20 69 66 20 28 6e 6f 64 65 49 6e 66 6f 2d 3e 74 if (nodeInfo->t
2100: 61 67 4e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20 agName) {.
2110: 20 20 46 52 45 45 20 28 6e 6f 64 65 49 6e 66 6f FREE (nodeInfo
2120: 2d 3e 74 61 67 4e 61 6d 65 29 3b 0a 20 20 20 20 ->tagName);.
2130: 7d 0a 20 20 20 20 46 52 45 45 20 28 6e 6f 64 65 }. FREE (node
2140: 49 6e 66 6f 29 3b 0a 7d 0a 0a 2f 2a 2d 2d 2d 2d Info);.}../*----
2150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2190: 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 20 4e 6f 64 --------.| Nod
21a0: 65 4f 62 6a 43 6d 64 0a 7c 0a 5c 2d 2d 2d 2d 2d eObjCmd.|.\-----
21b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
21f0: 2d 2d 2d 2d 2d 2d 2a 2f 0a 73 74 61 74 69 63 20 ------*/.static
2200: 69 6e 74 0a 4e 6f 64 65 4f 62 6a 43 6d 64 20 28 int.NodeObjCmd (
2210: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 . ClientData
2220: 20 20 20 20 20 61 72 67 2c 20 20 20 20 20 20 20 arg,
2230: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 /* Type
2240: 20 6f 66 20 6e 6f 64 65 20 74 6f 20 63 72 65 61 of node to crea
2250: 74 65 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 49 te. */. Tcl_I
2260: 6e 74 65 72 70 20 20 20 20 2a 20 69 6e 74 65 72 nterp * inter
2270: 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f p, /
2280: 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70 * Current interp
2290: 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20 69 6e reter. */. in
22a0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 t ob
22b0: 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 jc,
22c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 /* Number of a
22d0: 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 rguments. */.
22e0: 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 Tcl_Obj *const
22f0: 20 6f 62 6a 76 5b 5d 20 20 20 20 20 20 20 20 20 objv[]
2300: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 /* Argument
2310: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 29 20 7b 0a objects. */.) {.
2320: 20 20 20 20 69 6e 74 20 74 79 70 65 2c 20 63 72 int type, cr
2330: 65 61 74 65 54 79 70 65 2c 20 6c 65 6e 2c 20 64 eateType, len, d
2340: 6c 65 6e 2c 20 69 2c 20 72 65 74 2c 20 64 69 73 len, i, ret, dis
2350: 61 62 6c 65 4f 75 74 70 75 74 45 73 63 61 70 69 ableOutputEscapi
2360: 6e 67 20 3d 20 30 2c 20 0a 20 20 20 20 20 20 20 ng = 0, .
2370: 20 69 6e 64 65 78 20 3d 20 31 3b 0a 20 20 20 20 index = 1;.
2380: 63 68 61 72 20 2a 74 61 67 2c 20 2a 70 2c 20 2a char *tag, *p, *
2390: 74 76 61 6c 2c 20 2a 61 76 61 6c 3b 0a 20 20 20 tval, *aval;.
23a0: 20 64 6f 6d 4e 6f 64 65 20 2a 70 61 72 65 6e 74 domNode *parent
23b0: 2c 20 2a 6e 65 77 4e 6f 64 65 20 3d 20 4e 55 4c , *newNode = NUL
23c0: 4c 3b 0a 20 20 20 20 64 6f 6d 54 65 78 74 4e 6f L;. domTextNo
23d0: 64 65 20 2a 74 65 78 74 4e 6f 64 65 20 3d 20 4e de *textNode = N
23e0: 55 4c 4c 3b 0a 20 20 20 20 64 6f 6d 44 6f 63 75 ULL;. domDocu
23f0: 6d 65 6e 74 20 2a 64 6f 63 3b 0a 20 20 20 20 54 ment *doc;. T
2400: 63 6c 5f 4f 62 6a 20 2a 63 6d 64 4f 62 6a 2c 20 cl_Obj *cmdObj,
2410: 2a 2a 6f 70 74 73 3b 0a 20 20 20 20 4e 6f 64 65 **opts;. Node
2420: 49 6e 66 6f 20 2a 6e 6f 64 65 49 6e 66 6f 20 3d Info *nodeInfo =
2430: 20 28 4e 6f 64 65 49 6e 66 6f 2a 29 20 61 72 67 (NodeInfo*) arg
2440: 3b 0a 0a 20 20 20 20 2f 2a 2d 2d 2d 2d 2d 2d 2d ;.. /*-------
2450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2490: 2d 0a 20 20 20 20 7c 20 20 20 4e 65 65 64 20 70 -. | Need p
24a0: 61 72 65 6e 74 20 6e 6f 64 65 20 74 6f 20 67 65 arent node to ge
24b0: 74 20 74 68 65 20 6f 77 6e 65 72 20 64 6f 63 75 t the owner docu
24c0: 6d 65 6e 74 20 61 6e 64 20 74 6f 20 61 70 70 65 ment and to appe
24d0: 6e 64 20 6e 65 77 20 0a 20 20 20 20 7c 20 20 20 nd new . |
24e0: 63 68 69 6c 64 20 74 61 67 20 74 6f 20 69 74 2e child tag to it.
24f0: 20 54 68 65 20 63 75 72 72 65 6e 74 20 70 61 72 The current par
2500: 65 6e 74 20 6e 6f 64 65 20 69 73 20 73 74 6f 72 ent node is stor
2510: 65 64 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2e ed on the stack.
2520: 0a 20 20 20 20 7c 0a 20 20 20 20 5c 2d 2d 2d 2d . |. \----
2530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2570: 2d 2d 2d 2a 2f 0a 0a 20 20 20 20 70 61 72 65 6e ---*/.. paren
2580: 74 20 3d 20 28 64 6f 6d 4e 6f 64 65 20 2a 29 53 t = (domNode *)S
2590: 74 61 63 6b 54 6f 70 28 29 3b 20 20 20 20 0a 20 tackTop(); .
25a0: 20 20 20 69 66 20 28 70 61 72 65 6e 74 20 3d 3d if (parent ==
25b0: 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 20 20 NULL) {.
25c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c Tcl_AppendResul
25d0: 74 28 69 6e 74 65 72 70 2c 20 22 63 61 6c 6c 65 t(interp, "calle
25e0: 64 20 6f 75 74 73 69 64 65 20 64 6f 6d 4e 6f 64 d outside domNod
25f0: 65 20 63 6f 6e 74 65 78 74 22 2c 20 4e 55 4c 4c e context", NULL
2600: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 );. retur
2610: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
2620: 20 7d 0a 20 20 20 20 64 6f 63 20 3d 20 70 61 72 }. doc = par
2630: 65 6e 74 2d 3e 6f 77 6e 65 72 44 6f 63 75 6d 65 ent->ownerDocume
2640: 6e 74 3b 0a 0a 20 20 20 20 2f 2a 2d 2d 2d 2d 2d nt;.. /*-----
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2690: 2d 2d 2d 0a 20 20 20 20 7c 20 20 20 43 72 65 61 ---. | Crea
26a0: 74 65 20 6e 65 77 20 6e 6f 64 65 20 61 63 63 6f te new node acco
26b0: 72 64 69 6e 67 20 74 6f 20 74 79 70 65 2e 20 53 rding to type. S
26c0: 70 65 63 69 61 6c 20 63 61 73 65 20 69 73 20 74 pecial case is t
26d0: 68 65 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 0a he ELEMENT_NODE.
26e0: 20 20 20 20 7c 20 20 20 73 69 6e 63 65 20 68 65 | since he
26f0: 72 65 20 77 65 20 6d 61 79 20 65 6e 74 65 72 20 re we may enter
2700: 69 6e 74 6f 20 72 65 63 75 72 73 69 6f 6e 2e 20 into recursion.
2710: 54 68 65 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 The ELEMENT_NODE
2720: 20 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 is the only.
2730: 20 7c 20 20 20 6e 6f 64 65 20 74 79 70 65 20 77 | node type w
2740: 68 69 63 68 20 6d 61 79 20 68 61 76 65 20 73 63 hich may have sc
2750: 72 69 70 74 20 62 6f 64 79 20 61 73 20 6c 61 73 ript body as las
2760: 74 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 20 20 t argument..
2770: 7c 0a 20 20 20 20 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d |. \---------
2780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
27a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
27b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f --------------*/
27c0: 0a 0a 20 20 20 20 72 65 74 20 20 3d 20 54 43 4c .. ret = TCL
27d0: 5f 4f 4b 3b 0a 20 20 20 20 74 79 70 65 20 3d 20 _OK;. type =
27e0: 6e 6f 64 65 49 6e 66 6f 2d 3e 74 79 70 65 3b 0a nodeInfo->type;.
27f0: 0a 20 20 20 20 73 77 69 74 63 68 20 28 61 62 73 . switch (abs
2800: 28 74 79 70 65 29 29 20 7b 0a 20 20 20 20 63 61 (type)) {. ca
2810: 73 65 20 43 44 41 54 41 5f 53 45 43 54 49 4f 4e se CDATA_SECTION
2820: 5f 4e 4f 44 45 3a 20 20 20 20 20 0a 20 20 20 20 _NODE: .
2830: 63 61 73 65 20 43 44 41 54 41 5f 53 45 43 54 49 case CDATA_SECTI
2840: 4f 4e 5f 4e 4f 44 45 5f 43 48 4b 3a 20 0a 20 20 ON_NODE_CHK: .
2850: 20 20 63 61 73 65 20 43 4f 4d 4d 45 4e 54 5f 4e case COMMENT_N
2860: 4f 44 45 3a 20 20 20 20 20 20 20 20 20 20 20 0a ODE: .
2870: 20 20 20 20 63 61 73 65 20 43 4f 4d 4d 45 4e 54 case COMMENT
2880: 5f 4e 4f 44 45 5f 43 48 4b 3a 20 20 20 20 20 20 _NODE_CHK:
2890: 20 0a 20 20 20 20 63 61 73 65 20 54 45 58 54 5f . case TEXT_
28a0: 4e 4f 44 45 3a 20 20 20 20 20 20 20 20 20 20 20 NODE:
28b0: 20 20 20 0a 20 20 20 20 63 61 73 65 20 54 45 58 . case TEX
28c0: 54 5f 4e 4f 44 45 5f 43 48 4b 3a 0a 20 20 20 20 T_NODE_CHK:.
28d0: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 if (objc !=
28e0: 32 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 2) {.
28f0: 20 69 66 20 28 61 62 73 28 74 79 70 65 29 20 3d if (abs(type) =
2900: 3d 20 54 45 58 54 5f 4e 4f 44 45 20 7c 7c 20 61 = TEXT_NODE || a
2910: 62 73 28 74 79 70 65 29 20 3d 3d 20 54 45 58 54 bs(type) == TEXT
2920: 5f 4e 4f 44 45 5f 43 48 4b 29 20 7b 0a 20 20 20 _NODE_CHK) {.
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
2940: 28 6f 62 6a 63 20 21 3d 20 33 20 7c 7c 0a 20 20 (objc != 3 ||.
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2960: 20 20 73 74 72 63 6d 70 20 28 22 2d 64 69 73 61 strcmp ("-disa
2970: 62 6c 65 4f 75 74 70 75 74 45 73 63 61 70 69 6e bleOutputEscapin
2980: 67 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 g",.
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f Tcl_GetStringFro
29b0: 6d 4f 62 6a 20 28 6f 62 6a 76 5b 31 5d 2c 20 26 mObj (objv[1], &
29c0: 6c 65 6e 29 29 21 3d 30 29 20 7b 0a 20 20 20 20 len))!=0) {.
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29e0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 Tcl_WrongNumArgs
29f0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 (interp, 1, objv
2a00: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a20: 20 20 20 20 20 20 20 22 3f 2d 64 69 73 61 62 6c "?-disabl
2a30: 65 4f 75 74 70 75 74 45 73 63 61 70 69 6e 67 3f eOutputEscaping?
2a40: 20 74 65 78 74 22 29 3b 0a 20 20 20 20 20 20 20 text");.
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
2a60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
2a80: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 else {.
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 61 disa
2aa0: 62 6c 65 4f 75 74 70 75 74 45 73 63 61 70 69 6e bleOutputEscapin
2ab0: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 g = 1;.
2ac0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 index
2ad0: 20 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 = 2;.
2ae0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
2af0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c Tcl
2b10: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e _WrongNumArgs(in
2b20: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 terp, 1, objv, "
2b30: 74 65 78 74 22 29 3b 0a 20 20 20 20 20 20 20 20 text");.
2b40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 return T
2b50: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 CL_ERROR;.
2b60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
2b70: 7d 0a 20 20 20 20 20 20 20 20 74 76 61 6c 20 3d }. tval =
2b80: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 Tcl_GetStringFr
2b90: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 69 6e 64 65 78 omObj(objv[index
2ba0: 5d 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 20 20 ], &len);.
2bb0: 20 20 73 77 69 74 63 68 20 28 61 62 73 28 74 79 switch (abs(ty
2bc0: 70 65 29 29 20 7b 0a 20 20 20 20 20 20 20 20 63 pe)) {. c
2bd0: 61 73 65 20 54 45 58 54 5f 4e 4f 44 45 5f 43 48 ase TEXT_NODE_CH
2be0: 4b 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 K:. i
2bf0: 66 20 28 21 74 63 6c 64 6f 6d 5f 74 65 78 74 43 f (!tcldom_textC
2c00: 68 65 63 6b 20 28 69 6e 74 65 72 70 2c 20 74 76 heck (interp, tv
2c10: 61 6c 2c 20 22 74 65 78 74 22 29 29 20 72 65 74 al, "text")) ret
2c20: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
2c30: 20 20 20 20 20 20 20 20 20 20 20 63 72 65 61 74 creat
2c40: 65 54 79 70 65 20 3d 20 54 45 58 54 5f 4e 4f 44 eType = TEXT_NOD
2c50: 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 E;. b
2c60: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 reak;. ca
2c70: 73 65 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 5f se COMMENT_NODE_
2c80: 43 48 4b 3a 0a 20 20 20 20 20 20 20 20 20 20 20 CHK:.
2c90: 20 69 66 20 28 21 74 63 6c 64 6f 6d 5f 63 6f 6d if (!tcldom_com
2ca0: 6d 65 6e 74 43 68 65 63 6b 20 28 69 6e 74 65 72 mentCheck (inter
2cb0: 70 2c 20 74 76 61 6c 29 29 20 72 65 74 75 72 6e p, tval)) return
2cc0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 TCL_ERROR;.
2cd0: 20 20 20 20 20 20 20 20 63 72 65 61 74 65 54 79 createTy
2ce0: 70 65 20 3d 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 pe = COMMENT_NOD
2cf0: 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 E;. b
2d00: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 reak;. ca
2d10: 73 65 20 43 44 41 54 41 5f 53 45 43 54 49 4f 4e se CDATA_SECTION
2d20: 5f 4e 4f 44 45 5f 43 48 4b 3a 0a 20 20 20 20 20 _NODE_CHK:.
2d30: 20 20 20 20 20 20 20 69 66 20 28 21 74 63 6c 64 if (!tcld
2d40: 6f 6d 5f 43 44 41 54 41 43 68 65 63 6b 20 28 69 om_CDATACheck (i
2d50: 6e 74 65 72 70 2c 20 74 76 61 6c 29 29 20 72 65 nterp, tval)) re
2d60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 61 crea
2d80: 74 65 54 79 70 65 20 3d 20 43 44 41 54 41 5f 53 teType = CDATA_S
2d90: 45 43 54 49 4f 4e 5f 4e 4f 44 45 3b 0a 20 20 20 ECTION_NODE;.
2da0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a break;.
2db0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a default:
2dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 . cre
2dd0: 61 74 65 54 79 70 65 20 3d 20 6e 6f 64 65 49 6e ateType = nodeIn
2de0: 66 6f 2d 3e 74 79 70 65 3b 0a 20 20 20 20 20 20 fo->type;.
2df0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
2e00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 74 }. t
2e10: 65 78 74 4e 6f 64 65 20 3d 20 64 6f 6d 4e 65 77 extNode = domNew
2e20: 54 65 78 74 4e 6f 64 65 28 64 6f 63 2c 20 74 76 TextNode(doc, tv
2e30: 61 6c 2c 20 6c 65 6e 2c 20 63 72 65 61 74 65 54 al, len, createT
2e40: 79 70 65 29 3b 0a 20 20 20 20 20 20 20 20 74 65 ype);. te
2e50: 78 74 4e 6f 64 65 2d 3e 69 6e 66 6f 20 3d 20 6e xtNode->info = n
2e60: 6f 64 65 49 6e 66 6f 2d 3e 6a 73 6f 6e 54 79 70 odeInfo->jsonTyp
2e70: 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 e;. if (d
2e80: 69 73 61 62 6c 65 4f 75 74 70 75 74 45 73 63 61 isableOutputEsca
2e90: 70 69 6e 67 29 20 7b 0a 20 20 20 20 20 20 20 20 ping) {.
2ea0: 20 20 20 20 74 65 78 74 4e 6f 64 65 2d 3e 6e 6f textNode->no
2eb0: 64 65 46 6c 61 67 73 20 7c 3d 20 44 49 53 41 42 deFlags |= DISAB
2ec0: 4c 45 5f 4f 55 54 50 55 54 5f 45 53 43 41 50 49 LE_OUTPUT_ESCAPI
2ed0: 4e 47 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 NG;. }.
2ee0: 20 20 20 20 20 20 64 6f 6d 41 70 70 65 6e 64 43 domAppendC
2ef0: 68 69 6c 64 28 70 61 72 65 6e 74 2c 20 28 64 6f hild(parent, (do
2f00: 6d 4e 6f 64 65 2a 29 20 74 65 78 74 4e 6f 64 65 mNode*) textNode
2f10: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b );. break
2f20: 3b 0a 0a 20 20 20 20 63 61 73 65 20 50 52 4f 43 ;.. case PROC
2f30: 45 53 53 49 4e 47 5f 49 4e 53 54 52 55 43 54 49 ESSING_INSTRUCTI
2f40: 4f 4e 5f 4e 4f 44 45 5f 4e 41 4d 45 5f 43 48 4b ON_NODE_NAME_CHK
2f50: 3a 0a 20 20 20 20 63 61 73 65 20 50 52 4f 43 45 :. case PROCE
2f60: 53 53 49 4e 47 5f 49 4e 53 54 52 55 43 54 49 4f SSING_INSTRUCTIO
2f70: 4e 5f 4e 4f 44 45 5f 56 41 4c 55 45 5f 43 48 4b N_NODE_VALUE_CHK
2f80: 3a 0a 20 20 20 20 63 61 73 65 20 50 52 4f 43 45 :. case PROCE
2f90: 53 53 49 4e 47 5f 49 4e 53 54 52 55 43 54 49 4f SSING_INSTRUCTIO
2fa0: 4e 5f 4e 4f 44 45 5f 43 48 4b 3a 0a 20 20 20 20 N_NODE_CHK:.
2fb0: 63 61 73 65 20 50 52 4f 43 45 53 53 49 4e 47 5f case PROCESSING_
2fc0: 49 4e 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 INSTRUCTION_NODE
2fd0: 3a 0a 20 20 20 20 20 20 20 20 69 66 20 28 6f 62 :. if (ob
2fe0: 6a 63 20 21 3d 20 33 29 20 7b 0a 20 20 20 20 20 jc != 3) {.
2ff0: 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 Tcl_Wrong
3000: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 NumArgs(interp,
3010: 31 2c 20 6f 62 6a 76 2c 20 22 74 61 72 67 65 74 1, objv, "target
3020: 20 64 61 74 61 22 29 3b 0a 20 20 20 20 20 20 20 data");.
3030: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f return TCL_
3040: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 7d ERROR;. }
3050: 20 0a 20 20 20 20 20 20 20 20 74 76 61 6c 20 3d . tval =
3060: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 Tcl_GetStringFr
3070: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20 26 omObj(objv[1], &
3080: 6c 65 6e 29 3b 0a 20 20 20 20 20 20 20 20 69 66 len);. if
3090: 20 28 61 62 73 28 74 79 70 65 29 20 3d 3d 20 50 (abs(type) == P
30a0: 52 4f 43 45 53 53 49 4e 47 5f 49 4e 53 54 52 55 ROCESSING_INSTRU
30b0: 43 54 49 4f 4e 5f 4e 4f 44 45 5f 4e 41 4d 45 5f CTION_NODE_NAME_
30c0: 43 48 4b 0a 20 20 20 20 20 20 20 20 20 20 20 20 CHK.
30d0: 7c 7c 20 61 62 73 28 74 79 70 65 29 20 3d 3d 20 || abs(type) ==
30e0: 50 52 4f 43 45 53 53 49 4e 47 5f 49 4e 53 54 52 PROCESSING_INSTR
30f0: 55 43 54 49 4f 4e 5f 4e 4f 44 45 5f 43 48 4b 29 UCTION_NODE_CHK)
3100: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {. i
3110: 66 20 28 21 74 63 6c 64 6f 6d 5f 50 49 4e 61 6d f (!tcldom_PINam
3120: 65 43 68 65 63 6b 20 28 69 6e 74 65 72 70 2c 20 eCheck (interp,
3130: 74 76 61 6c 29 29 20 72 65 74 75 72 6e 20 54 43 tval)) return TC
3140: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 L_ERROR;.
3150: 20 7d 0a 20 20 20 20 20 20 20 20 61 76 61 6c 20 }. aval
3160: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 = Tcl_GetStringF
3170: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 romObj(objv[2],
3180: 26 64 6c 65 6e 29 3b 0a 20 20 20 20 20 20 20 20 &dlen);.
3190: 69 66 20 28 61 62 73 28 74 79 70 65 29 20 3d 3d if (abs(type) ==
31a0: 20 50 52 4f 43 45 53 53 49 4e 47 5f 49 4e 53 54 PROCESSING_INST
31b0: 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 5f 56 41 4c RUCTION_NODE_VAL
31c0: 55 45 5f 43 48 4b 0a 20 20 20 20 20 20 20 20 20 UE_CHK.
31d0: 20 20 20 7c 7c 20 61 62 73 28 74 79 70 65 29 20 || abs(type)
31e0: 3d 3d 20 50 52 4f 43 45 53 53 49 4e 47 5f 49 4e == PROCESSING_IN
31f0: 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 5f 43 STRUCTION_NODE_C
3200: 48 4b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 HK) {.
3210: 20 20 69 66 20 28 21 74 63 6c 64 6f 6d 5f 50 49 if (!tcldom_PI
3220: 56 61 6c 75 65 43 68 65 63 6b 20 28 69 6e 74 65 ValueCheck (inte
3230: 72 70 2c 20 61 76 61 6c 29 29 20 72 65 74 75 72 rp, aval)) retur
3240: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
3250: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e }. n
3260: 65 77 4e 6f 64 65 20 3d 20 28 64 6f 6d 4e 6f 64 ewNode = (domNod
3270: 65 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 e *).
3280: 20 64 6f 6d 4e 65 77 50 72 6f 63 65 73 73 69 6e domNewProcessin
3290: 67 49 6e 73 74 72 75 63 74 69 6f 6e 4e 6f 64 65 gInstructionNode
32a0: 28 64 6f 63 2c 20 74 76 61 6c 2c 20 6c 65 6e 2c (doc, tval, len,
32b0: 20 61 76 61 6c 2c 20 64 6c 65 6e 29 3b 0a 20 20 aval, dlen);.
32c0: 20 20 20 20 20 20 64 6f 6d 41 70 70 65 6e 64 43 domAppendC
32d0: 68 69 6c 64 28 70 61 72 65 6e 74 2c 20 6e 65 77 hild(parent, new
32e0: 4e 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 62 Node);. b
32f0: 72 65 61 6b 3b 0a 0a 20 20 20 20 63 61 73 65 20 reak;.. case
3300: 50 41 52 53 45 52 5f 4e 4f 44 45 3a 20 2f 2a 20 PARSER_NODE: /*
3310: 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 6e 6f 64 non-standard nod
3320: 65 2d 74 79 70 65 20 3a 20 61 20 68 61 63 6b 21 e-type : a hack!
3330: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 */. if (
3340: 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a 20 20 20 objc != 2) {.
3350: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f Tcl_Wro
3360: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 ngNumArgs(interp
3370: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 6d 61 72 6b , 1, objv, "mark
3380: 75 70 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 up");.
3390: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 return TCL_ERR
33a0: 4f 52 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 OR;. }.
33b0: 20 20 20 20 20 20 72 65 74 20 3d 20 74 63 6c 64 ret = tcld
33c0: 6f 6d 5f 61 70 70 65 6e 64 58 4d 4c 28 69 6e 74 om_appendXML(int
33d0: 65 72 70 2c 20 70 61 72 65 6e 74 2c 20 6f 62 6a erp, parent, obj
33e0: 76 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 v[1]);. b
33f0: 72 65 61 6b 3b 0a 0a 20 20 20 20 63 61 73 65 20 reak;.. case
3400: 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 5f 41 4e 41 ELEMENT_NODE_ANA
3410: 4d 45 5f 43 48 4b 3a 0a 20 20 20 20 63 61 73 65 ME_CHK:. case
3420: 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 5f 41 56 ELEMENT_NODE_AV
3430: 41 4c 55 45 5f 43 48 4b 3a 0a 20 20 20 20 63 61 ALUE_CHK:. ca
3440: 73 65 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 5f se ELEMENT_NODE_
3450: 43 48 4b 3a 0a 20 20 20 20 63 61 73 65 20 45 4c CHK:. case EL
3460: 45 4d 45 4e 54 5f 4e 4f 44 45 3a 0a 20 20 20 20 EMENT_NODE:.
3470: 20 20 20 20 69 66 20 28 21 6e 6f 64 65 49 6e 66 if (!nodeInf
3480: 6f 2d 3e 74 61 67 4e 61 6d 65 29 20 7b 0a 20 20 o->tagName) {.
3490: 20 20 20 20 20 20 20 20 20 20 74 61 67 20 3d 20 tag =
34a0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f Tcl_GetStringFro
34b0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 26 6c mObj(objv[0], &l
34c0: 65 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 en);.
34d0: 20 70 20 3d 20 74 61 67 20 2b 20 6c 65 6e 3b 0a p = tag + len;.
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 /* I
34f0: 73 6f 6c 61 74 65 20 6a 75 73 74 20 74 68 65 20 solate just the
3500: 74 61 67 20 6e 61 6d 65 2c 20 69 2e 65 2e 20 73 tag name, i.e. s
3510: 6b 69 70 20 69 74 27 73 20 70 61 72 65 6e 74 20 kip it's parent
3520: 6e 61 6d 65 73 70 61 63 65 20 2a 2f 0a 20 20 20 namespace */.
3530: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 while (
3540: 2d 2d 70 20 3e 20 74 61 67 29 20 7b 0a 20 20 20 --p > tag) {.
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
3560: 28 28 2a 70 20 3d 3d 20 27 3a 27 29 20 26 26 20 ((*p == ':') &&
3570: 28 2a 28 70 2d 31 29 20 3d 3d 20 27 3a 27 29 29 (*(p-1) == ':'))
3580: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
3590: 20 20 20 20 20 20 20 70 2b 2b 3b 20 2f 2a 20 6a p++; /* j
35a0: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6c 61 ust after the la
35b0: 73 74 20 22 3a 3a 22 20 2a 2f 0a 20 20 20 20 20 st "::" */.
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
35d0: 61 67 20 3d 20 70 3b 0a 20 20 20 20 20 20 20 20 ag = p;.
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 brea
35f0: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 k;.
3600: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 }.
3610: 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }. } els
3620: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e {.
3630: 74 61 67 20 3d 20 6e 6f 64 65 49 6e 66 6f 2d 3e tag = nodeInfo->
3640: 74 61 67 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 tagName;.
3650: 20 7d 0a 0a 20 20 20 20 20 20 20 20 6e 65 77 4e }.. newN
3660: 6f 64 65 20 3d 20 64 6f 6d 41 70 70 65 6e 64 4e ode = domAppendN
3670: 65 77 45 6c 65 6d 65 6e 74 4e 6f 64 65 20 28 70 ewElementNode (p
3680: 61 72 65 6e 74 2c 20 74 61 67 2c 20 6e 6f 64 65 arent, tag, node
3690: 49 6e 66 6f 2d 3e 6e 61 6d 65 73 70 61 63 65 29 Info->namespace)
36a0: 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 4e 6f 64 ;. newNod
36b0: 65 2d 3e 69 6e 66 6f 20 3d 20 6e 6f 64 65 49 6e e->info = nodeIn
36c0: 66 6f 2d 3e 6a 73 6f 6e 54 79 70 65 3b 0a 20 20 fo->jsonType;.
36d0: 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f . /
36e0: 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 41 6c 6c *. * All
36f0: 6f 77 20 66 6f 72 20 66 6f 6c 6c 6f 77 69 6e 67 ow for following
3700: 20 73 79 6e 74 61 78 3a 0a 20 20 20 20 20 20 20 syntax:.
3710: 20 20 2a 20 20 20 63 6d 64 20 3f 2d 6f 70 74 69 * cmd ?-opti
3720: 6f 6e 20 76 61 6c 75 65 20 2e 2e 2e 3f 20 3f 73 on value ...? ?s
3730: 63 72 69 70 74 3f 0a 20 20 20 20 20 20 20 20 20 cript?.
3740: 2a 20 20 20 63 6d 64 20 3f 6f 70 74 6f 6e 20 76 * cmd ?opton v
3750: 61 6c 75 65 20 2e 2e 2e 3f 20 3f 73 63 72 69 70 alue ...? ?scrip
3760: 74 3f 0a 20 20 20 20 20 20 20 20 20 2a 20 20 20 t?. *
3770: 63 6d 64 20 6b 65 79 5f 76 61 6c 75 65 5f 6c 69 cmd key_value_li
3780: 73 74 20 73 63 72 69 70 74 0a 20 20 20 20 20 20 st script.
3790: 20 20 20 2a 20 20 20 20 20 20 20 77 68 65 72 65 * where
37a0: 20 6c 69 73 74 20 63 6f 6e 74 61 69 6e 73 20 22 list contains "
37b0: 2d 6b 65 79 20 76 61 6c 75 65 20 2e 2e 2e 22 20 -key value ..."
37c0: 6f 72 20 22 6b 65 79 20 76 61 6c 75 65 20 2e 2e or "key value ..
37d0: 2e 22 0a 20 20 20 20 20 20 20 20 20 2a 2f 0a 0a .". */..
37e0: 20 20 20 20 20 20 20 20 69 66 20 28 28 6f 62 6a if ((obj
37f0: 63 20 25 20 32 29 20 3d 3d 20 30 29 20 7b 0a 20 c % 2) == 0) {.
3800: 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 4f 62 cmdOb
3810: 6a 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d j = objv[objc-1]
3820: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 ;. le
3830: 6e 20 20 3d 20 6f 62 6a 63 20 2d 20 32 3b 20 2f n = objc - 2; /
3840: 2a 20 73 6b 69 70 20 62 6f 74 68 20 63 6f 6d 6d * skip both comm
3850: 61 6e 64 20 61 6e 64 20 73 63 72 69 70 74 20 2a and and script *
3860: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 /. op
3870: 74 73 20 3d 20 28 54 63 6c 5f 4f 62 6a 2a 2a 29 ts = (Tcl_Obj**)
3880: 6f 62 6a 76 20 2b 20 31 3b 0a 20 20 20 20 20 20 objv + 1;.
3890: 20 20 7d 20 65 6c 73 65 20 69 66 28 28 6f 62 6a } else if((obj
38a0: 63 20 3d 3d 20 33 29 0a 20 20 20 20 20 20 20 20 c == 3).
38b0: 20 20 20 20 20 20 20 20 20 20 26 26 20 54 63 6c && Tcl
38c0: 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 _ListObjGetEleme
38d0: 6e 74 73 28 69 6e 74 65 72 70 2c 6f 62 6a 76 5b nts(interp,objv[
38e0: 31 5d 2c 26 6c 65 6e 2c 26 6f 70 74 73 29 3d 3d 1],&len,&opts)==
38f0: 54 43 4c 5f 4f 4b 0a 20 20 20 20 20 20 20 20 20 TCL_OK.
3900: 20 20 20 20 20 20 20 20 20 26 26 20 28 6c 65 6e && (len
3910: 20 3d 3d 20 30 20 7c 7c 20 6c 65 6e 20 3e 20 31 == 0 || len > 1
3920: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 )) {.
3930: 20 69 66 20 28 28 6c 65 6e 20 25 20 32 29 29 20 if ((len % 2))
3940: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
3950: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 Tcl_AppendResu
3960: 6c 74 28 69 6e 74 65 72 70 2c 20 22 6c 69 73 74 lt(interp, "list
3970: 20 6d 75 73 74 20 68 61 76 65 20 22 0a 20 20 20 must have ".
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 "a
39a0: 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 n even number of
39b0: 20 65 6c 65 6d 65 6e 74 73 22 2c 20 4e 55 4c 4c elements", NULL
39c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 );.
39d0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 return TCL_ER
39e0: 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ROR;.
39f0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 }. c
3a00: 6d 64 4f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b mdObj = objv[2];
3a10: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else
3a20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6d {. cm
3a30: 64 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 dObj = NULL;.
3a40: 20 20 20 20 20 20 20 20 20 6c 65 6e 20 20 3d 20 len =
3a50: 6f 62 6a 63 20 2d 20 31 3b 20 2f 2a 20 73 6b 69 objc - 1; /* ski
3a60: 70 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 20 p command */.
3a70: 20 20 20 20 20 20 20 20 20 6f 70 74 73 20 3d 20 opts =
3a80: 28 54 63 6c 5f 4f 62 6a 2a 2a 29 6f 62 6a 76 20 (Tcl_Obj**)objv
3a90: 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 + 1;. }.
3aa0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20 for (i =
3ab0: 30 3b 20 69 20 3c 20 6c 65 6e 3b 20 69 20 2b 3d 0; i < len; i +=
3ac0: 20 32 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 2) {.
3ad0: 20 20 74 76 61 6c 20 3d 20 54 63 6c 5f 47 65 74 tval = Tcl_Get
3ae0: 53 74 72 69 6e 67 28 6f 70 74 73 5b 69 5d 29 3b String(opts[i]);
3af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
3b00: 28 2a 74 76 61 6c 20 3d 3d 20 27 2d 27 29 20 7b (*tval == '-') {
3b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3b20: 20 74 76 61 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 tval++;.
3b30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
3b40: 20 20 20 69 66 20 28 61 62 73 28 74 79 70 65 29 if (abs(type)
3b50: 20 3d 3d 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 == ELEMENT_NODE
3b60: 5f 41 4e 41 4d 45 5f 43 48 4b 0a 20 20 20 20 20 _ANAME_CHK.
3b70: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 62 || ab
3b80: 73 28 74 79 70 65 29 20 3d 3d 20 45 4c 45 4d 45 s(type) == ELEME
3b90: 4e 54 5f 4e 4f 44 45 5f 43 48 4b 29 20 7b 0a 20 NT_NODE_CHK) {.
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
3bb0: 66 20 28 21 74 63 6c 64 6f 6d 5f 6e 61 6d 65 43 f (!tcldom_nameC
3bc0: 68 65 63 6b 20 28 69 6e 74 65 72 70 2c 20 74 76 heck (interp, tv
3bd0: 61 6c 2c 20 22 61 74 74 72 69 62 75 74 65 22 2c al, "attribute",
3be0: 20 30 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 0)) {.
3bf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
3c00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 }.
3c20: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 }.
3c30: 20 20 20 20 20 20 20 20 20 61 76 61 6c 20 3d 20 aval =
3c40: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 Tcl_GetString(op
3c50: 74 73 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 ts[i+1]);.
3c60: 20 20 20 20 20 20 69 66 20 28 61 62 73 28 74 79 if (abs(ty
3c70: 70 65 29 20 3d 3d 20 45 4c 45 4d 45 4e 54 5f 4e pe) == ELEMENT_N
3c80: 4f 44 45 5f 41 56 41 4c 55 45 5f 43 48 4b 0a 20 ODE_AVALUE_CHK.
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c |
3ca0: 7c 20 61 62 73 28 74 79 70 65 29 20 3d 3d 20 45 | abs(type) == E
3cb0: 4c 45 4d 45 4e 54 5f 4e 4f 44 45 5f 43 48 4b 29 LEMENT_NODE_CHK)
3cc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
3cd0: 20 20 20 69 66 20 28 21 74 63 6c 64 6f 6d 5f 74 if (!tcldom_t
3ce0: 65 78 74 43 68 65 63 6b 20 28 69 6e 74 65 72 70 extCheck (interp
3cf0: 2c 20 61 76 61 6c 2c 20 22 61 74 74 72 69 62 75 , aval, "attribu
3d00: 74 65 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20 te")) {.
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
3d20: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a }.
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
3d50: 20 20 20 20 20 20 20 20 20 20 64 6f 6d 53 65 74 domSet
3d60: 41 74 74 72 69 62 75 74 65 28 6e 65 77 4e 6f 64 Attribute(newNod
3d70: 65 2c 20 74 76 61 6c 2c 20 61 76 61 6c 29 3b 0a e, tval, aval);.
3d80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
3d90: 20 20 69 66 20 28 63 6d 64 4f 62 6a 29 20 7b 0a if (cmdObj) {.
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 20 ret
3db0: 3d 20 6e 6f 64 65 63 6d 64 5f 61 70 70 65 6e 64 = nodecmd_append
3dc0: 46 72 6f 6d 53 63 72 69 70 74 28 69 6e 74 65 72 FromScript(inter
3dd0: 70 2c 20 6e 65 77 4e 6f 64 65 2c 20 63 6d 64 4f p, newNode, cmdO
3de0: 62 6a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 bj);. }.
3df0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
3e00: 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 74 79 70 }.. if (typ
3e10: 65 20 3c 20 30 20 26 26 20 6e 65 77 4e 6f 64 65 e < 0 && newNode
3e20: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 != NULL) {.
3e30: 20 20 20 20 63 68 61 72 20 62 75 66 5b 36 34 5d char buf[64]
3e40: 3b 0a 20 20 20 20 20 20 20 20 74 63 6c 64 6f 6d ;. tcldom
3e50: 5f 63 72 65 61 74 65 4e 6f 64 65 4f 62 6a 28 69 _createNodeObj(i
3e60: 6e 74 65 72 70 2c 20 6e 65 77 4e 6f 64 65 2c 20 nterp, newNode,
3e70: 62 75 66 29 3b 0a 20 20 20 20 20 20 20 20 54 63 buf);. Tc
3e80: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 l_SetObjResult(i
3e90: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 nterp, Tcl_NewSt
3ea0: 72 69 6e 67 4f 62 6a 28 62 75 66 2c 20 73 74 72 ringObj(buf, str
3eb0: 6c 65 6e 28 62 75 66 29 29 29 3b 0a 20 20 20 20 len(buf)));.
3ec0: 7d 0a 20 20 20 20 0a 20 20 20 20 69 66 20 28 72 }. . if (r
3ed0: 65 74 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20 64 6f et == TCL_OK) do
3ee0: 63 2d 3e 6e 6f 64 65 46 6c 61 67 73 20 7c 3d 20 c->nodeFlags |=
3ef0: 4e 45 45 44 53 5f 52 45 4e 55 4d 42 45 52 49 4e NEEDS_RENUMBERIN
3f00: 47 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 65 G;. return re
3f10: 74 3b 0a 7d 0a 0a 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d t;.}../*--------
3f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f60: 2d 2d 2d 2d 0a 7c 20 20 20 6e 6f 64 65 63 6d 64 ----.| nodecmd
3f70: 5f 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 20 _createNodeCmd
3f80: 2d 20 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 - implements th
3f90: 65 20 22 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 e "createNodeCmd
3fa0: 22 20 6d 65 74 68 6f 64 20 6f 66 0a 7c 20 20 20 " method of.|
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fc0: 20 20 20 20 20 20 20 20 20 20 22 64 6f 6d 22 20 "dom"
3fd0: 54 63 6c 20 63 6f 6d 6d 61 6e 64 0a 7c 0a 7c 20 Tcl command.|.|
3fe0: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 This command i
3ff0: 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 s used to genera
4000: 74 65 20 6f 74 68 65 72 20 54 63 6c 20 63 6f 6d te other Tcl com
4010: 6d 61 6e 64 73 20 77 68 69 63 68 20 69 6e 20 74 mands which in t
4020: 75 72 6e 0a 7c 20 20 20 67 65 6e 65 72 61 74 65 urn.| generate
4030: 20 74 44 4f 4d 20 6e 6f 64 65 73 2e 20 54 68 65 tDOM nodes. The
4040: 73 65 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 73 20 se new commands
4050: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c can only be call
4060: 65 64 20 77 69 74 68 69 6e 0a 7c 20 20 20 74 68 ed within.| th
4070: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 e context of the
4080: 20 64 6f 6d 4e 6f 64 65 20 63 6f 6d 6d 61 6e 64 domNode command
4090: 2c 20 68 6f 77 65 76 65 72 2e 0a 7c 0a 7c 20 20 , however..|.|
40a0: 20 53 79 6e 74 61 78 3a 20 64 6f 6d 20 63 72 65 Syntax: dom cre
40b0: 61 74 65 4e 6f 64 65 43 6d 64 20 3f 2d 72 65 74 ateNodeCmd ?-ret
40c0: 75 72 6e 4e 6f 64 65 43 6d 64 3f 20 3c 6e 6f 64 urnNodeCmd? <nod
40d0: 65 54 79 70 65 3e 20 63 6d 64 4e 61 6d 65 0a 7c eType> cmdName.|
40e0: 0a 7c 20 20 20 20 20 20 20 20 20 20 20 77 68 65 .| whe
40f0: 72 65 20 3c 6e 6f 64 65 54 79 70 65 3e 20 63 61 re <nodeType> ca
4100: 6e 20 62 65 20 6f 6e 65 20 6f 66 3a 0a 7c 20 20 n be one of:.|
4110: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d elem
4120: 65 6e 74 4e 6f 64 65 2c 20 63 6f 6d 6d 65 6e 74 entNode, comment
4130: 4e 6f 64 65 2c 20 74 65 78 74 4e 6f 64 65 2c 20 Node, textNode,
4140: 63 64 61 74 61 4e 6f 64 65 20 6f 72 20 70 69 4e cdataNode or piN
4150: 6f 64 65 0a 7c 0a 7c 20 20 20 54 68 65 20 6f 70 ode.|.| The op
4160: 74 69 6f 6e 61 6c 20 22 2d 72 65 74 75 72 6e 4e tional "-returnN
4170: 6f 64 65 43 6d 64 22 20 70 61 72 61 6d 65 74 65 odeCmd" paramete
4180: 72 2c 20 69 66 20 67 69 76 65 6e 2c 20 69 6e 73 r, if given, ins
4190: 74 72 75 63 74 73 20 74 68 65 0a 7c 20 20 20 63 tructs the.| c
41a0: 6f 6d 6d 61 6e 64 20 74 6f 20 72 65 74 75 72 6e ommand to return
41b0: 20 74 68 65 20 6f 62 6a 65 63 74 2d 62 61 73 65 the object-base
41c0: 64 20 6e 6f 64 65 20 63 6f 6d 6d 61 6e 64 20 6f d node command o
41d0: 66 20 74 68 65 20 6e 65 77 6c 79 20 67 65 6e 65 f the newly gene
41e0: 72 61 74 65 64 0a 7c 20 20 20 6e 6f 64 65 2e 20 rated.| node.
41f0: 57 69 74 68 6f 75 74 20 74 68 65 20 70 61 72 61 Without the para
4200: 6d 65 74 65 72 2c 20 74 68 65 20 63 6f 6d 6d 61 meter, the comma
4210: 6e 64 20 72 65 74 75 72 6e 73 20 63 75 72 72 65 nd returns curre
4220: 6e 74 20 69 6e 74 65 72 70 20 72 65 73 75 6c 74 nt interp result
4230: 2e 0a 7c 0a 7c 20 20 20 45 78 61 6d 70 6c 65 3a ..|.| Example:
4240: 0a 7c 0a 7c 20 20 20 20 20 20 25 20 64 6f 6d 20 .|.| % dom
4250: 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 20 20 createNodeCmd
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 ele
4270: 6d 65 6e 74 4e 6f 64 65 20 68 74 6d 6c 3a 3a 62 mentNode html::b
4280: 6f 64 79 0a 7c 20 20 20 20 20 20 25 20 64 6f 6d ody.| % dom
4290: 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 2d createNodeCmd -
42a0: 72 65 74 75 72 6e 4e 6f 64 65 43 6d 64 20 65 6c returnNodeCmd el
42b0: 65 6d 65 6e 74 4e 6f 64 65 20 68 74 6d 6c 3a 3a ementNode html::
42c0: 74 69 74 6c 65 0a 7c 20 20 20 20 20 20 25 20 64 title.| % d
42d0: 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 om createNodeCmd
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
42f0: 74 65 78 74 4e 6f 64 65 20 20 20 20 68 74 6d 6c textNode html
4300: 3a 3a 74 0a 7c 0a 7c 20 20 20 41 6e 64 20 75 73 ::t.|.| And us
4310: 61 67 65 3a 0a 7c 0a 7c 20 20 20 20 20 20 25 20 age:.|.| %
4320: 73 65 74 20 64 20 5b 64 6f 6d 20 63 72 65 61 74 set d [dom creat
4330: 65 44 6f 63 75 6d 65 6e 74 20 68 74 6d 6c 5d 0a eDocument html].
4340: 7c 20 20 20 20 20 20 25 20 73 65 74 20 6e 20 5b | % set n [
4350: 24 64 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 $d documentEleme
4360: 6e 74 5d 0a 7c 20 20 20 20 20 20 25 20 24 6e 20 nt].| % $n
4370: 61 70 70 65 6e 64 46 72 6f 6d 53 63 72 69 70 74 appendFromScript
4380: 20 7b 0a 7c 20 20 20 20 20 20 20 20 20 20 20 68 {.| h
4390: 74 6d 6c 3a 3a 62 6f 64 79 20 7b 0a 7c 20 20 20 tml::body {.|
43a0: 20 20 20 20 20 20 20 20 73 65 74 20 74 69 74 6c set titl
43b0: 65 20 5b 68 74 6d 6c 3a 3a 74 69 74 6c 65 20 7b e [html::title {
43c0: 68 74 6d 6c 3a 3a 74 20 22 54 68 69 73 20 69 73 html::t "This is
43d0: 20 61 6e 20 65 78 61 6d 70 6c 65 22 7d 5d 0a 7c an example"}].|
43e0: 20 20 20 20 20 20 20 20 20 20 20 24 74 69 74 6c $titl
43f0: 65 20 73 65 74 41 74 74 72 69 62 75 74 65 20 64 e setAttribute d
4400: 75 6d 6d 79 20 31 0a 7c 20 20 20 20 20 20 7d 0a ummy 1.| }.
4410: 7c 20 20 20 20 20 20 25 20 70 75 74 73 20 5b 24 | % puts [$
4420: 6e 20 61 73 48 54 4d 4c 5d 0a 7c 0a 5c 2d 2d 2d n asHTML].|.\---
4430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4470: 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 69 6e 74 0a 6e --------*/.int.n
4480: 6f 64 65 63 6d 64 5f 63 72 65 61 74 65 4e 6f 64 odecmd_createNod
4490: 65 43 6d 64 20 28 0a 20 20 20 20 54 63 6c 5f 49 eCmd (. Tcl_I
44a0: 6e 74 65 72 70 20 20 20 20 2a 20 69 6e 74 65 72 nterp * inter
44b0: 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f p, /
44c0: 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70 * Current interp
44d0: 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20 69 6e reter. */. in
44e0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 t ob
44f0: 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 jc,
4500: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 /* Number of a
4510: 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 rguments. */.
4520: 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 Tcl_Obj *const
4530: 20 6f 62 6a 76 5b 5d 2c 20 20 20 20 20 20 20 20 objv[],
4540: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 /* Argument
4550: 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 20 20 20 objects. */.
4560: 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 int
4570: 20 63 68 65 63 6b 4e 61 6d 65 2c 20 20 20 20 20 checkName,
4580: 20 20 20 20 20 2f 2a 20 46 6c 61 67 3a 20 4e 61 /* Flag: Na
4590: 6d 65 20 63 68 65 63 6b 73 3f 20 2a 2f 0a 20 20 me checks? */.
45a0: 20 20 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 int
45b0: 20 20 63 68 65 63 6b 43 68 61 72 44 61 74 61 20 checkCharData
45c0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 3a 20 44 /* Flag: D
45d0: 61 74 61 20 63 68 65 63 6b 73 3f 20 2a 2f 0a 29 ata checks? */.)
45e0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 6e 64 65 78 {. int index
45f0: 2c 20 72 65 74 2c 20 74 79 70 65 2c 20 6e 6f 64 , ret, type, nod
4600: 65 63 6d 64 20 3d 20 30 2c 20 6a 73 6f 6e 54 79 ecmd = 0, jsonTy
4610: 70 65 20 3d 20 30 2c 20 68 61 76 65 4a 73 6f 6e pe = 0, haveJson
4620: 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e Type = 0;. in
4630: 74 20 69 73 45 6c 65 6d 65 6e 74 20 3d 20 30 3b t isElement = 0;
4640: 0a 20 20 20 20 63 68 61 72 20 2a 6e 73 4e 61 6d . char *nsNam
4650: 65 2c 20 62 75 66 5b 36 34 5d 3b 0a 20 20 20 20 e, buf[64];.
4660: 54 63 6c 5f 4f 62 6a 20 2a 74 61 67 4e 61 6d 65 Tcl_Obj *tagName
4670: 20 3d 20 4e 55 4c 4c 2c 20 2a 6e 61 6d 65 73 70 = NULL, *namesp
4680: 61 63 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 ace = NULL;.
4690: 54 63 6c 5f 44 53 74 72 69 6e 67 20 63 6d 64 4e Tcl_DString cmdN
46a0: 61 6d 65 3b 0a 20 20 20 20 4e 6f 64 65 49 6e 66 ame;. NodeInf
46b0: 6f 20 2a 6e 6f 64 65 49 6e 66 6f 3b 0a 0a 20 20 o *nodeInfo;..
46c0: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 53 79 6e 74 /*. * Synt
46d0: 61 78 3a 20 20 0a 20 20 20 20 20 2a 0a 20 20 20 ax: . *.
46e0: 20 20 2a 20 20 20 20 20 64 6f 6d 20 63 72 65 61 * dom crea
46f0: 74 65 4e 6f 64 65 43 6d 64 20 3f 2d 72 65 74 75 teNodeCmd ?-retu
4700: 72 6e 4e 6f 64 65 43 6d 64 3f 20 6e 6f 64 65 54 rnNodeCmd? nodeT
4710: 79 70 65 20 63 6f 6d 6d 61 6e 64 4e 61 6d 65 0a ype commandName.
4720: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 65 6e 75 */.. enu
4730: 6d 20 73 75 62 43 6d 64 20 7b 0a 20 20 20 20 20 m subCmd {.
4740: 20 20 20 45 4c 4d 5f 4e 4f 44 45 2c 20 54 58 54 ELM_NODE, TXT
4750: 5f 4e 4f 44 45 2c 20 43 44 53 5f 4e 4f 44 45 2c _NODE, CDS_NODE,
4760: 20 43 4d 54 5f 4e 4f 44 45 2c 20 50 49 43 5f 4e CMT_NODE, PIC_N
4770: 4f 44 45 2c 20 50 52 53 5f 4e 4f 44 45 0a 20 20 ODE, PRS_NODE.
4780: 20 20 7d 3b 0a 0a 20 20 20 20 73 74 61 74 69 63 };.. static
4790: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 75 62 const char *sub
47a0: 63 6d 64 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 cmds[] = {.
47b0: 20 20 20 22 65 6c 65 6d 65 6e 74 4e 6f 64 65 22 "elementNode"
47c0: 2c 20 22 74 65 78 74 4e 6f 64 65 22 2c 20 22 63 , "textNode", "c
47d0: 64 61 74 61 4e 6f 64 65 22 2c 20 22 63 6f 6d 6d dataNode", "comm
47e0: 65 6e 74 4e 6f 64 65 22 2c 20 22 70 69 4e 6f 64 entNode", "piNod
47f0: 65 22 2c 0a 20 20 20 20 20 20 20 20 22 70 61 72 e",. "par
4800: 73 65 72 4e 6f 64 65 22 2c 20 4e 55 4c 4c 0a 20 serNode", NULL.
4810: 20 20 20 7d 3b 0a 0a 20 20 20 20 73 74 61 74 69 };.. stati
4820: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6f 70 c const char *op
4830: 74 69 6f 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 tions[] = {.
4840: 20 20 20 20 22 2d 72 65 74 75 72 6e 4e 6f 64 65 "-returnNode
4850: 43 6d 64 22 2c 20 22 2d 6a 73 6f 6e 54 79 70 65 Cmd", "-jsonType
4860: 22 2c 20 22 2d 74 61 67 4e 61 6d 65 22 2c 20 22 ", "-tagName", "
4870: 2d 6e 61 6d 65 73 70 61 63 65 22 2c 20 4e 55 4c -namespace", NUL
4880: 4c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 65 6e L. };.. en
4890: 75 6d 20 6f 70 74 69 6f 6e 20 7b 0a 20 20 20 20 um option {.
48a0: 20 20 20 20 6f 5f 72 65 74 75 72 6e 4e 6f 64 65 o_returnNode
48b0: 43 6d 64 2c 20 6f 5f 6a 73 6f 6e 54 79 70 65 2c Cmd, o_jsonType,
48c0: 20 6f 5f 74 61 67 4e 61 6d 65 2c 20 6f 5f 6e 61 o_tagName, o_na
48d0: 6d 65 73 70 61 63 65 0a 20 20 20 20 7d 3b 0a 0a mespace. };..
48e0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 static const
48f0: 20 63 68 61 72 20 2a 6a 73 6f 6e 54 79 70 65 73 char *jsonTypes
4900: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 22 [] = {. "
4910: 4e 4f 4e 45 22 2c 0a 20 20 20 20 20 20 20 20 22 NONE",. "
4920: 41 52 52 41 59 22 2c 0a 20 20 20 20 20 20 20 20 ARRAY",.
4930: 22 4f 42 4a 45 43 54 22 2c 0a 20 20 20 20 20 20 "OBJECT",.
4940: 20 20 22 4e 55 4c 4c 22 2c 0a 20 20 20 20 20 20 "NULL",.
4950: 20 20 22 54 52 55 45 22 2c 0a 20 20 20 20 20 20 "TRUE",.
4960: 20 20 22 46 41 4c 53 45 22 2c 0a 20 20 20 20 20 "FALSE",.
4970: 20 20 20 22 53 54 52 49 4e 47 22 2c 0a 20 20 20 "STRING",.
4980: 20 20 20 20 20 22 4e 55 4d 42 45 52 22 0a 20 20 "NUMBER".
4990: 20 20 7d 3b 0a 0a 20 20 20 20 69 66 20 28 6f 62 };.. if (ob
49a0: 6a 63 20 3c 20 33 20 29 20 7b 0a 20 20 20 20 20 jc < 3 ) {.
49b0: 20 20 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 goto usage;.
49c0: 20 20 20 7d 0a 0a 20 20 20 20 77 68 69 6c 65 20 }.. while
49d0: 28 6f 62 6a 63 20 3e 20 33 29 20 7b 0a 20 20 20 (objc > 3) {.
49e0: 20 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74 if (Tcl_Get
49f0: 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 20 28 69 6e IndexFromObj (in
4a00: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 6f terp, objv[1], o
4a10: 70 74 69 6f 6e 73 2c 20 22 6f 70 74 69 6f 6e 22 ptions, "option"
4a20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a40: 20 20 20 30 2c 20 26 69 6e 64 65 78 29 20 21 3d 0, &index) !=
4a50: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 20 20 20 20 TCL_OK) {.
4a60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 return TC
4a70: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 L_ERROR;.
4a80: 20 7d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 }. switc
4a90: 68 20 28 28 65 6e 75 6d 20 6f 70 74 69 6f 6e 29 h ((enum option)
4aa0: 20 69 6e 64 65 78 29 20 7b 0a 20 20 20 20 20 20 index) {.
4ab0: 20 20 63 61 73 65 20 6f 5f 72 65 74 75 72 6e 4e case o_returnN
4ac0: 6f 64 65 43 6d 64 3a 0a 20 20 20 20 20 20 20 20 odeCmd:.
4ad0: 20 20 20 20 6e 6f 64 65 63 6d 64 20 3d 20 31 3b nodecmd = 1;
4ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a . obj
4af0: 63 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 c--;.
4b00: 20 6f 62 6a 76 2b 2b 3b 0a 20 20 20 20 20 20 20 objv++;.
4b10: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 break;.
4b20: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 .
4b30: 20 63 61 73 65 20 6f 5f 6a 73 6f 6e 54 79 70 65 case o_jsonType
4b40: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 :. if
4b50: 20 28 54 63 6c 5f 47 65 74 49 6e 64 65 78 46 72 (Tcl_GetIndexFr
4b60: 6f 6d 4f 62 6a 20 28 69 6e 74 65 72 70 2c 20 6f omObj (interp, o
4b70: 62 6a 76 5b 32 5d 2c 20 6a 73 6f 6e 54 79 70 65 bjv[2], jsonType
4b80: 73 2c 20 22 6a 73 6f 6e 54 79 70 65 22 2c 0a 20 s, "jsonType",.
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4bb0: 20 20 20 20 31 2c 20 26 6a 73 6f 6e 54 79 70 65 1, &jsonType
4bc0: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 ) != TCL_OK) {.
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
4be0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
4bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 . }.
4c00: 20 20 20 20 20 20 20 20 20 20 20 68 61 76 65 4a haveJ
4c10: 73 6f 6e 54 79 70 65 20 3d 20 31 3b 0a 20 20 20 sonType = 1;.
4c20: 20 20 20 20 20 20 20 20 20 6f 62 6a 63 20 2d 3d objc -=
4c30: 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2;.
4c40: 6f 62 6a 76 20 2b 3d 20 32 3b 0a 20 20 20 20 20 objv += 2;.
4c50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
4c60: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 .
4c70: 20 20 20 63 61 73 65 20 6f 5f 74 61 67 4e 61 6d case o_tagNam
4c80: 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 e:. t
4c90: 61 67 4e 61 6d 65 20 3d 20 6f 62 6a 76 5b 32 5d agName = objv[2]
4ca0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ;. ob
4cb0: 6a 63 20 2d 3d 20 32 3b 0a 20 20 20 20 20 20 20 jc -= 2;.
4cc0: 20 20 20 20 20 6f 62 6a 76 20 2b 3d 20 32 3b 0a objv += 2;.
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 brea
4ce0: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 k;.. case
4cf0: 20 6f 5f 6e 61 6d 65 73 70 61 63 65 3a 0a 20 20 o_namespace:.
4d00: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 73 70 namesp
4d10: 61 63 65 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 20 ace = objv[2];.
4d20: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 63 20 objc
4d30: 2d 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 -= 2;.
4d40: 20 20 6f 62 6a 76 20 2b 3d 20 32 3b 0a 20 20 20 objv += 2;.
4d50: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a break;.
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 .
4d70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 }. }.
4d80: 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 if (objc != 3)
4d90: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 75 {. goto u
4da0: 73 61 67 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 sage;. }..
4db0: 20 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 49 6e ret = Tcl_GetIn
4dc0: 64 65 78 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 dexFromObj(inter
4dd0: 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 73 75 62 63 p, objv[1], subc
4de0: 6d 64 73 2c 20 22 6e 6f 64 65 54 79 70 65 22 2c mds, "nodeType",
4df0: 20 30 2c 20 26 69 6e 64 65 78 29 3b 0a 20 20 20 0, &index);.
4e00: 20 69 66 20 28 72 65 74 20 21 3d 20 54 43 4c 5f if (ret != TCL_
4e10: 4f 4b 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 OK) {. re
4e20: 74 75 72 6e 20 72 65 74 3b 0a 20 20 20 20 7d 0a turn ret;. }.
4e30: 0a 20 20 20 20 2f 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d . /*---------
4e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20 20 -----------.
4e80: 7c 20 20 20 43 6f 6e 73 74 72 75 63 74 20 66 75 | Construct fu
4e90: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 63 6f lly qualified co
4ea0: 6d 6d 61 6e 64 20 6e 61 6d 65 20 75 73 69 6e 67 mmand name using
4eb0: 20 63 75 72 72 65 6e 74 20 6e 61 6d 65 73 70 61 current namespa
4ec0: 63 65 0a 20 20 20 20 7c 0a 20 20 20 20 5c 2d 2d ce. |. \--
4ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4f10: 2d 2a 2f 0a 20 20 20 20 54 63 6c 5f 44 53 74 72 -*/. Tcl_DStr
4f20: 69 6e 67 49 6e 69 74 28 26 63 6d 64 4e 61 6d 65 ingInit(&cmdName
4f30: 29 3b 0a 20 20 20 20 73 74 72 63 70 79 28 62 75 );. strcpy(bu
4f40: 66 2c 20 22 6e 61 6d 65 73 70 61 63 65 20 63 75 f, "namespace cu
4f50: 72 72 65 6e 74 22 29 3b 0a 20 20 20 20 72 65 74 rrent");. ret
4f60: 20 3d 20 54 63 6c 5f 45 76 61 6c 28 69 6e 74 65 = Tcl_Eval(inte
4f70: 72 70 2c 20 62 75 66 29 3b 0a 20 20 20 20 69 66 rp, buf);. if
4f80: 20 28 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 (ret != TCL_OK)
4f90: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {. retur
4fa0: 6e 20 72 65 74 3b 0a 20 20 20 20 7d 0a 20 20 20 n ret;. }.
4fb0: 20 6e 73 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 nsName = (char
4fc0: 2a 29 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 *)Tcl_GetStringR
4fd0: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20 esult(interp);.
4fe0: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 Tcl_DStringAp
4ff0: 70 65 6e 64 28 26 63 6d 64 4e 61 6d 65 2c 20 6e pend(&cmdName, n
5000: 73 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 sName, -1);.
5010: 69 66 20 28 73 74 72 63 6d 70 28 6e 73 4e 61 6d if (strcmp(nsNam
5020: 65 2c 20 22 3a 3a 22 29 29 20 7b 0a 20 20 20 20 e, "::")) {.
5030: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 Tcl_DStringA
5040: 70 70 65 6e 64 28 26 63 6d 64 4e 61 6d 65 2c 20 ppend(&cmdName,
5050: 22 3a 3a 22 2c 20 32 29 3b 0a 20 20 20 20 7d 0a "::", 2);. }.
5060: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 Tcl_DStringA
5070: 70 70 65 6e 64 28 26 63 6d 64 4e 61 6d 65 2c 20 ppend(&cmdName,
5080: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 Tcl_GetString(ob
5090: 6a 76 5b 32 5d 29 2c 20 2d 31 29 3b 0a 0a 20 20 jv[2]), -1);..
50a0: 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c Tcl_ResetResul
50b0: 74 20 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 t (interp);.
50c0: 73 77 69 74 63 68 20 28 28 65 6e 75 6d 20 73 75 switch ((enum su
50d0: 62 43 6d 64 29 69 6e 64 65 78 29 20 7b 0a 20 20 bCmd)index) {.
50e0: 20 20 63 61 73 65 20 45 4c 4d 5f 4e 4f 44 45 3a case ELM_NODE:
50f0: 20 0a 20 20 20 20 20 20 20 20 69 73 45 6c 65 6d . isElem
5100: 65 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 ent = 1;.
5110: 20 69 66 20 28 21 68 61 76 65 4a 73 6f 6e 54 79 if (!haveJsonTy
5120: 70 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 pe) {.
5130: 20 20 69 66 20 28 21 74 63 6c 64 6f 6d 5f 6e 61 if (!tcldom_na
5140: 6d 65 43 68 65 63 6b 28 69 6e 74 65 72 70 2c 20 meCheck(interp,
5150: 6e 61 6d 65 73 70 61 63 65 54 61 69 6c 28 6f 62 namespaceTail(ob
5160: 6a 76 5b 32 5d 29 2c 0a 20 20 20 20 20 20 20 20 jv[2]),.
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5180: 20 20 20 20 20 20 20 20 20 20 22 74 61 67 22 2c "tag",
5190: 20 30 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 0)) {.
51a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 return TC
51b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 L_ERROR;.
51c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
51d0: 20 20 20 69 66 20 28 63 68 65 63 6b 4e 61 6d 65 if (checkName
51e0: 20 26 26 20 63 68 65 63 6b 43 68 61 72 44 61 74 && checkCharDat
51f0: 61 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 a) {.
5200: 20 20 20 20 20 74 79 70 65 20 3d 20 45 4c 45 4d type = ELEM
5210: 45 4e 54 5f 4e 4f 44 45 5f 43 48 4b 3b 0a 20 20 ENT_NODE_CHK;.
5220: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
5230: 20 69 66 20 28 63 68 65 63 6b 4e 61 6d 65 29 20 if (checkName)
5240: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
5250: 20 20 74 79 70 65 20 3d 20 45 4c 45 4d 45 4e 54 type = ELEMENT
5260: 5f 4e 4f 44 45 5f 41 4e 41 4d 45 5f 43 48 4b 3b _NODE_ANAME_CHK;
5270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e
5280: 6c 73 65 20 69 66 20 28 63 68 65 63 6b 43 68 61 lse if (checkCha
5290: 72 44 61 74 61 29 20 7b 0a 20 20 20 20 20 20 20 rData) {.
52a0: 20 20 20 20 20 20 20 20 20 74 79 70 65 20 3d 20 type =
52b0: 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 5f 41 56 41 ELEMENT_NODE_AVA
52c0: 4c 55 45 5f 43 48 4b 3b 0a 20 20 20 20 20 20 20 LUE_CHK;.
52d0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 } else {.
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 ty
52f0: 70 65 20 3d 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 pe = ELEMENT_NOD
5300: 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d E;. }
5310: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else
5320: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 {. if
5330: 20 28 6a 73 6f 6e 54 79 70 65 20 3e 20 32 29 20 (jsonType > 2)
5340: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
5350: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 Tcl_SetResult(
5360: 69 6e 74 65 72 70 2c 20 22 46 6f 72 20 61 6e 20 interp, "For an
5370: 65 6c 65 6d 65 6e 74 20 6e 6f 64 65 20 74 68 65 element node the
5380: 20 6a 73 6f 6e 54 79 70 65 22 0a 20 20 20 20 20 jsonType".
5390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53a0: 20 20 20 20 20 20 20 20 20 22 20 61 72 67 75 6d " argum
53b0: 65 6e 74 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 ent must be one
53c0: 6f 75 74 20 6f 66 20 74 68 69 73 20 6c 69 73 74 out of this list
53d0: 3a 20 41 52 52 41 59 22 0a 20 20 20 20 20 20 20 : ARRAY".
53e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53f0: 20 20 20 20 20 20 20 22 20 4f 42 4a 45 43 54 20 " OBJECT
5400: 4e 4f 4e 45 2e 22 2c 20 4e 55 4c 4c 29 3b 0a 20 NONE.", NULL);.
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
5420: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
5430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 . }.
5440: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 20 type
5450: 3d 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 3b 0a = ELEMENT_NODE;.
5460: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
5470: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 break;. cas
5480: 65 20 50 52 53 5f 4e 4f 44 45 3a 20 0a 20 20 20 e PRS_NODE: .
5490: 20 20 20 20 20 74 79 70 65 20 3d 20 50 41 52 53 type = PARS
54a0: 45 52 5f 4e 4f 44 45 3b 0a 20 20 20 20 20 20 20 ER_NODE;.
54b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 break;. case
54c0: 20 54 58 54 5f 4e 4f 44 45 3a 20 0a 20 20 20 20 TXT_NODE: .
54d0: 20 20 20 20 69 66 20 28 21 68 61 76 65 4a 73 6f if (!haveJso
54e0: 6e 54 79 70 65 29 20 7b 0a 20 20 20 20 20 20 20 nType) {.
54f0: 20 20 20 20 20 69 66 20 28 63 68 65 63 6b 43 68 if (checkCh
5500: 61 72 44 61 74 61 29 20 7b 0a 20 20 20 20 20 20 arData) {.
5510: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 20 3d type =
5520: 20 54 45 58 54 5f 4e 4f 44 45 5f 43 48 4b 3b 0a TEXT_NODE_CHK;.
5530: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
5540: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 se {.
5550: 20 20 20 20 20 74 79 70 65 20 3d 20 54 45 58 54 type = TEXT
5560: 5f 4e 4f 44 45 3b 0a 20 20 20 20 20 20 20 20 20 _NODE;.
5570: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 65 }. } e
5580: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 lse {.
5590: 20 20 69 66 20 28 6a 73 6f 6e 54 79 70 65 20 3c if (jsonType <
55a0: 20 33 20 26 26 20 6a 73 6f 6e 54 79 70 65 20 3e 3 && jsonType >
55b0: 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 0) {.
55c0: 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 Tcl_SetRes
55d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46 6f 72 ult(interp, "For
55e0: 20 61 20 74 65 78 74 20 6e 6f 64 65 20 74 68 65 a text node the
55f0: 20 6a 73 6f 6e 54 79 70 65 20 22 0a 20 20 20 20 jsonType ".
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5610: 20 20 20 20 20 20 20 20 20 20 22 61 72 67 75 6d "argum
5620: 65 6e 74 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 ent must be one
5630: 6f 75 74 20 6f 66 20 74 68 69 73 20 6c 69 73 74 out of this list
5640: 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 : ".
5650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5660: 20 20 22 54 52 55 45 20 46 41 4c 53 45 20 4e 55 "TRUE FALSE NU
5670: 4c 4c 20 4e 55 4d 42 45 52 20 53 54 52 49 4e 47 LL NUMBER STRING
5680: 20 4e 4f 4e 45 22 2c 0a 20 20 20 20 20 20 20 20 NONE",.
5690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56a0: 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 NULL);.
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
56c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
56d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 }.
56e0: 20 20 20 20 20 20 20 20 20 74 79 70 65 20 3d 20 type =
56f0: 54 45 58 54 5f 4e 4f 44 45 3b 0a 20 20 20 20 20 TEXT_NODE;.
5700: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 }. bre
5710: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 43 44 53 ak;. case CDS
5720: 5f 4e 4f 44 45 3a 20 0a 20 20 20 20 20 20 20 20 _NODE: .
5730: 69 66 20 28 63 68 65 63 6b 43 68 61 72 44 61 74 if (checkCharDat
5740: 61 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 a) {.
5750: 20 74 79 70 65 20 3d 20 43 44 41 54 41 5f 53 45 type = CDATA_SE
5760: 43 54 49 4f 4e 5f 4e 4f 44 45 5f 43 48 4b 3b 0a CTION_NODE_CHK;.
5770: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else {
5780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 . typ
5790: 65 20 3d 20 43 44 41 54 41 5f 53 45 43 54 49 4f e = CDATA_SECTIO
57a0: 4e 5f 4e 4f 44 45 3b 0a 20 20 20 20 20 20 20 20 N_NODE;.
57b0: 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b }. break;
57c0: 0a 20 20 20 20 63 61 73 65 20 43 4d 54 5f 4e 4f . case CMT_NO
57d0: 44 45 3a 0a 20 20 20 20 20 20 20 20 69 66 20 28 DE:. if (
57e0: 63 68 65 63 6b 43 68 61 72 44 61 74 61 29 20 7b checkCharData) {
57f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 . typ
5800: 65 20 3d 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 e = COMMENT_NODE
5810: 5f 43 48 4b 3b 0a 20 20 20 20 20 20 20 20 7d 20 _CHK;. }
5820: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 else {.
5830: 20 20 20 74 79 70 65 20 3d 20 43 4f 4d 4d 45 4e type = COMMEN
5840: 54 5f 4e 4f 44 45 3b 0a 20 20 20 20 20 20 20 20 T_NODE;.
5850: 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b }. break;
5860: 0a 20 20 20 20 63 61 73 65 20 50 49 43 5f 4e 4f . case PIC_NO
5870: 44 45 3a 20 0a 20 20 20 20 20 20 20 20 69 66 20 DE: . if
5880: 28 63 68 65 63 6b 4e 61 6d 65 20 26 26 20 63 68 (checkName && ch
5890: 65 63 6b 43 68 61 72 44 61 74 61 29 20 7b 0a 20 eckCharData) {.
58a0: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 20 type
58b0: 3d 20 50 52 4f 43 45 53 53 49 4e 47 5f 49 4e 53 = PROCESSING_INS
58c0: 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 5f 43 48 TRUCTION_NODE_CH
58d0: 4b 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 K;. } els
58e0: 65 20 69 66 20 28 63 68 65 63 6b 4e 61 6d 65 29 e if (checkName)
58f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {. t
5900: 79 70 65 20 3d 20 50 52 4f 43 45 53 53 49 4e 47 ype = PROCESSING
5910: 5f 49 4e 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 _INSTRUCTION_NOD
5920: 45 5f 4e 41 4d 45 5f 43 48 4b 3b 0a 20 20 20 20 E_NAME_CHK;.
5930: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 63 } else if (c
5940: 68 65 63 6b 43 68 61 72 44 61 74 61 29 20 7b 0a heckCharData) {.
5950: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 type
5960: 20 3d 20 50 52 4f 43 45 53 53 49 4e 47 5f 49 4e = PROCESSING_IN
5970: 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 5f 56 STRUCTION_NODE_V
5980: 41 4c 55 45 5f 43 48 4b 3b 0a 20 20 20 20 20 20 ALUE_CHK;.
5990: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
59a0: 20 20 20 20 20 20 20 74 79 70 65 20 3d 20 50 52 type = PR
59b0: 4f 43 45 53 53 49 4e 47 5f 49 4e 53 54 52 55 43 OCESSING_INSTRUC
59c0: 54 49 4f 4e 5f 4e 4f 44 45 3b 0a 20 20 20 20 20 TION_NODE;.
59d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 }. bre
59e0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a ak;. default:
59f0: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 53 65 74 . Tcl_Set
5a00: 52 65 73 75 6c 74 20 28 69 6e 74 65 72 70 2c 20 Result (interp,
5a10: 22 49 6e 76 61 6c 69 64 2f 75 6e 65 78 70 65 63 "Invalid/unexpec
5a20: 74 65 64 20 6e 6f 64 65 20 74 79 70 65 22 2c 20 ted node type",
5a30: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 72 NULL);. r
5a40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
5a50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 . }.. if (
5a60: 74 61 67 4e 61 6d 65 20 26 26 20 21 69 73 45 6c tagName && !isEl
5a70: 65 6d 65 6e 74 29 20 7b 0a 20 20 20 20 20 20 20 ement) {.
5a80: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 Tcl_SetResult(i
5a90: 6e 74 65 72 70 2c 20 22 54 68 65 20 2d 74 61 67 nterp, "The -tag
5aa0: 4e 61 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 Name option is a
5ab0: 6c 6c 6f 77 65 64 20 6f 6e 6c 79 20 66 6f 72 20 llowed only for
5ac0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
5ad0: 20 20 20 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 "element
5ae0: 20 6e 6f 64 65 20 63 6f 6d 6d 61 6e 64 73 2e 22 node commands."
5af0: 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 , NULL);.
5b00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f return TCL_ERRO
5b10: 52 3b 20 20 20 20 20 20 20 20 0a 20 20 20 20 7d R; . }
5b20: 0a 0a 20 20 20 20 69 66 20 28 6e 61 6d 65 73 70 .. if (namesp
5b30: 61 63 65 20 26 26 20 21 69 73 45 6c 65 6d 65 6e ace && !isElemen
5b40: 74 29 20 7b 0a 20 20 20 20 20 20 20 20 54 63 6c t) {. Tcl
5b50: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 _SetResult(inter
5b60: 70 2c 20 22 54 68 65 20 2d 6e 61 6d 65 73 70 61 p, "The -namespa
5b70: 63 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 6c 6c ce option is all
5b80: 6f 77 65 64 20 6f 6e 6c 79 20 66 6f 72 20 22 0a owed only for ".
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ba0: 20 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 20 6e "element n
5bb0: 6f 64 65 20 63 6f 6d 6d 61 6e 64 73 2e 22 2c 20 ode commands.",
5bc0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 72 NULL);. r
5bd0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
5be0: 20 20 20 20 20 20 20 20 0a 20 20 20 20 7d 0a 20 . }.
5bf0: 20 20 20 0a 20 20 20 20 69 66 20 28 68 61 76 65 . if (have
5c00: 4a 73 6f 6e 54 79 70 65 20 26 26 20 74 79 70 65 JsonType && type
5c10: 20 21 3d 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 != ELEMENT_NODE
5c20: 20 26 26 20 74 79 70 65 20 21 3d 20 54 45 58 54 && type != TEXT
5c30: 5f 4e 4f 44 45 29 20 7b 0a 20 20 20 20 20 20 20 _NODE) {.
5c40: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 Tcl_SetResult(i
5c50: 6e 74 65 72 70 2c 20 22 4f 6e 6c 79 20 65 6c 65 nterp, "Only ele
5c60: 6d 65 6e 74 20 61 6e 64 20 74 65 78 74 20 6e 6f ment and text no
5c70: 64 65 73 20 6d 61 79 20 68 61 76 65 20 61 20 22 des may have a "
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5c90: 20 20 20 20 20 20 20 22 4a 53 4f 4e 20 74 79 70 "JSON typ
5ca0: 65 2e 22 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 e.", NULL);.
5cb0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 return TCL_E
5cc0: 52 52 4f 52 3b 20 20 20 20 20 20 20 20 0a 20 20 RROR; .
5cd0: 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 6e 6f 64 }. . nod
5ce0: 65 49 6e 66 6f 20 3d 20 28 4e 6f 64 65 49 6e 66 eInfo = (NodeInf
5cf0: 6f 20 2a 29 20 4d 41 4c 4c 4f 43 20 28 73 69 7a o *) MALLOC (siz
5d00: 65 6f 66 20 28 4e 6f 64 65 49 6e 66 6f 29 29 3b eof (NodeInfo));
5d10: 0a 20 20 20 20 6e 6f 64 65 49 6e 66 6f 2d 3e 6e . nodeInfo->n
5d20: 61 6d 65 73 70 61 63 65 20 3d 20 4e 55 4c 4c 3b amespace = NULL;
5d30: 0a 20 20 20 20 6e 6f 64 65 49 6e 66 6f 2d 3e 74 . nodeInfo->t
5d40: 79 70 65 20 3d 20 74 79 70 65 3b 0a 20 20 20 20 ype = type;.
5d50: 69 66 20 28 6e 6f 64 65 63 6d 64 29 20 7b 0a 20 if (nodecmd) {.
5d60: 20 20 20 20 20 20 20 6e 6f 64 65 49 6e 66 6f 2d nodeInfo-
5d70: 3e 74 79 70 65 20 2a 3d 20 2d 31 3b 20 2f 2a 20 >type *= -1; /*
5d80: 53 69 67 6e 61 6c 20 74 68 69 73 20 66 61 63 74 Signal this fact
5d90: 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 6e 6f */. }. no
5da0: 64 65 49 6e 66 6f 2d 3e 6a 73 6f 6e 54 79 70 65 deInfo->jsonType
5db0: 20 3d 20 6a 73 6f 6e 54 79 70 65 3b 0a 20 20 20 = jsonType;.
5dc0: 20 6e 6f 64 65 49 6e 66 6f 2d 3e 74 61 67 4e 61 nodeInfo->tagNa
5dd0: 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 69 me = NULL;. i
5de0: 66 20 28 6e 61 6d 65 73 70 61 63 65 29 20 7b 0a f (namespace) {.
5df0: 20 20 20 20 20 20 20 20 6e 6f 64 65 49 6e 66 6f nodeInfo
5e00: 2d 3e 6e 61 6d 65 73 70 61 63 65 20 3d 20 74 64 ->namespace = td
5e10: 6f 6d 73 74 72 64 75 70 20 28 54 63 6c 5f 47 65 omstrdup (Tcl_Ge
5e20: 74 53 74 72 69 6e 67 28 6e 61 6d 65 73 70 61 63 tString(namespac
5e30: 65 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 e));. }. i
5e40: 66 20 28 74 61 67 4e 61 6d 65 29 20 7b 0a 20 20 f (tagName) {.
5e50: 20 20 20 20 20 20 6e 6f 64 65 49 6e 66 6f 2d 3e nodeInfo->
5e60: 74 61 67 4e 61 6d 65 20 3d 20 74 64 6f 6d 73 74 tagName = tdomst
5e70: 72 64 75 70 20 28 54 63 6c 5f 47 65 74 53 74 72 rdup (Tcl_GetStr
5e80: 69 6e 67 28 74 61 67 4e 61 6d 65 29 29 3b 0a 20 ing(tagName));.
5e90: 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 43 72 65 }. Tcl_Cre
5ea0: 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e ateObjCommand(in
5eb0: 74 65 72 70 2c 20 54 63 6c 5f 44 53 74 72 69 6e terp, Tcl_DStrin
5ec0: 67 56 61 6c 75 65 28 26 63 6d 64 4e 61 6d 65 29 gValue(&cmdName)
5ed0: 2c 20 4e 6f 64 65 4f 62 6a 43 6d 64 2c 0a 20 20 , NodeObjCmd,.
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ef0: 20 20 20 20 20 20 20 28 43 6c 69 65 6e 74 44 61 (ClientDa
5f00: 74 61 29 6e 6f 64 65 49 6e 66 6f 2c 20 4e 6f 64 ta)nodeInfo, Nod
5f10: 65 4f 62 6a 43 6d 64 44 65 6c 65 74 65 50 72 6f eObjCmdDeletePro
5f20: 63 29 3b 0a 20 20 20 20 54 63 6c 5f 44 53 74 72 c);. Tcl_DStr
5f30: 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ingResult(interp
5f40: 2c 20 26 63 6d 64 4e 61 6d 65 29 3b 0a 20 20 20 , &cmdName);.
5f50: 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 Tcl_DStringFree
5f60: 28 26 63 6d 64 4e 61 6d 65 29 3b 0a 0a 20 20 20 (&cmdName);..
5f70: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a return TCL_OK;.
5f80: 0a 20 75 73 61 67 65 3a 0a 20 20 20 20 54 63 6c . usage:. Tcl
5f90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
5fa0: 74 65 72 70 2c 20 22 64 6f 6d 20 63 72 65 61 74 terp, "dom creat
5fb0: 65 4e 6f 64 65 43 6d 64 5c 6e 22 0a 20 20 20 20 eNodeCmd\n".
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5fd0: 20 22 5c 74 3f 2d 72 65 74 75 72 6e 4e 6f 64 65 "\t?-returnNode
5fe0: 43 6d 64 3f 5c 6e 22 0a 20 20 20 20 20 20 20 20 Cmd?\n".
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 74 "\t
6000: 3f 2d 6a 73 6f 6e 54 79 70 65 20 3c 6a 73 6f 6e ?-jsonType <json
6010: 54 79 70 65 3e 3f 5c 6e 22 0a 20 20 20 20 20 20 Type>?\n".
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
6030: 5c 74 3f 2d 74 61 67 4e 61 6d 65 20 3c 74 61 67 \t?-tagName <tag
6040: 4e 61 6d 65 3e 3f 5c 6e 22 0a 20 20 20 20 20 20 Name>?\n".
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
6060: 20 6e 6f 64 65 54 79 70 65 20 63 6d 64 4e 61 6d nodeType cmdNam
6070: 65 22 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 72 e", NULL);. r
6080: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
6090: 0a 7d 0a 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d .}..../*. *-----
60a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
60b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
60c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
60d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
60e0: 2d 0a 20 2a 0a 20 2a 20 6e 6f 64 65 63 6d 64 5f -. *. * nodecmd_
60f0: 61 70 70 65 6e 64 46 72 6f 6d 53 63 72 69 70 74 appendFromScript
6100: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 --. *. *.This p
6110: 72 6f 63 65 64 75 72 65 20 69 6d 70 6c 65 6d 65 rocedure impleme
6120: 6e 74 73 20 74 68 65 20 64 6f 6d 20 6d 65 74 68 nts the dom meth
6130: 6f 64 20 61 70 70 65 6e 64 46 72 6f 6d 53 63 72 od appendFromScr
6140: 69 70 74 2e 0a 20 2a 20 20 20 20 20 20 53 65 65 ipt.. * See
6150: 20 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65 the user docume
6160: 6e 74 61 74 69 6f 6e 20 66 6f 72 20 64 65 74 61 ntation for deta
6170: 69 6c 73 20 6f 6e 20 77 68 61 74 20 69 74 20 64 ils on what it d
6180: 6f 65 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c oes.. *. * Resul
6190: 74 73 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 ts:. *.A standar
61a0: 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 0a 20 2a d Tcl result.. *
61b0: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 . * Side effects
61c0: 3a 0a 20 2a 09 41 70 70 65 6e 64 73 20 6e 65 77 :. *.Appends new
61d0: 20 63 68 69 6c 64 20 6e 6f 64 65 73 20 74 6f 20 child nodes to
61e0: 6e 6f 64 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d node.. *. *-----
61f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6230: 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 6e 6f 64 65 63 -. */..int.nodec
6240: 6d 64 5f 61 70 70 65 6e 64 46 72 6f 6d 53 63 72 md_appendFromScr
6250: 69 70 74 20 28 0a 20 20 20 20 54 63 6c 5f 49 6e ipt (. Tcl_In
6260: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 terp *interp,
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
6280: 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 Current interpre
6290: 74 65 72 2e 20 2a 2f 0a 20 20 20 20 64 6f 6d 4e ter. */. domN
62a0: 6f 64 65 20 20 20 20 2a 6e 6f 64 65 2c 20 20 20 ode *node,
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
62c0: 2a 20 50 61 72 65 6e 74 20 64 6f 6d 20 6e 6f 64 * Parent dom nod
62d0: 65 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 4f 62 6a e */. Tcl_Obj
62e0: 20 20 20 20 2a 63 6d 64 4f 62 6a 20 20 20 20 20 *cmdObj
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 /* A
6300: 72 67 75 6d 65 6e 74 20 6f 62 6a 65 63 74 73 2e rgument objects.
6310: 20 2a 2f 0a 29 20 7b 0a 20 20 20 20 69 6e 74 20 */.) {. int
6320: 72 65 74 3b 0a 20 20 20 20 64 6f 6d 4e 6f 64 65 ret;. domNode
6330: 20 2a 6f 6c 64 4c 61 73 74 43 68 69 6c 64 2c 20 *oldLastChild,
6340: 2a 63 68 69 6c 64 2c 20 2a 6e 65 78 74 43 68 69 *child, *nextChi
6350: 6c 64 3b 0a 0a 20 20 20 20 69 66 20 28 6e 6f 64 ld;.. if (nod
6360: 65 2d 3e 6e 6f 64 65 54 79 70 65 20 21 3d 20 45 e->nodeType != E
6370: 4c 45 4d 45 4e 54 5f 4e 4f 44 45 29 20 7b 0a 20 LEMENT_NODE) {.
6380: 20 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 Tcl_SetRe
6390: 73 75 6c 74 20 28 69 6e 74 65 72 70 2c 20 22 4e sult (interp, "N
63a0: 4f 54 5f 41 4e 5f 45 4c 45 4d 45 4e 54 20 3a 20 OT_AN_ELEMENT :
63b0: 63 61 6e 27 74 20 61 70 70 65 6e 64 20 6e 6f 64 can't append nod
63c0: 65 73 22 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 es", NULL);.
63d0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 return TCL_E
63e0: 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 RROR;. }.
63f0: 0a 20 20 20 20 6f 6c 64 4c 61 73 74 43 68 69 6c . oldLastChil
6400: 64 20 3d 20 6e 6f 64 65 2d 3e 6c 61 73 74 43 68 d = node->lastCh
6410: 69 6c 64 3b 0a 0a 20 20 20 20 53 74 61 63 6b 50 ild;.. StackP
6420: 75 73 68 28 28 76 6f 69 64 20 2a 29 6e 6f 64 65 ush((void *)node
6430: 29 3b 0a 20 20 20 20 54 63 6c 5f 41 6c 6c 6f 77 );. Tcl_Allow
6440: 45 78 63 65 70 74 69 6f 6e 73 28 69 6e 74 65 72 Exceptions(inter
6450: 70 29 3b 0a 20 20 20 20 72 65 74 20 3d 20 54 63 p);. ret = Tc
6460: 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 l_EvalObjEx(inte
6470: 72 70 2c 20 63 6d 64 4f 62 6a 2c 20 30 29 3b 0a rp, cmdObj, 0);.
6480: 20 20 20 20 69 66 20 28 72 65 74 20 21 3d 20 54 if (ret != T
6490: 43 4c 5f 45 52 52 4f 52 29 20 7b 0a 20 20 20 20 CL_ERROR) {.
64a0: 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 Tcl_ResetRes
64b0: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 ult(interp);.
64c0: 20 7d 0a 20 20 20 20 53 74 61 63 6b 50 6f 70 28 }. StackPop(
64d0: 29 3b 0a 0a 20 20 20 20 69 66 20 28 72 65 74 20 );.. if (ret
64e0: 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b 0a == TCL_ERROR) {.
64f0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 6c 64 4c if (oldL
6500: 61 73 74 43 68 69 6c 64 29 20 7b 0a 20 20 20 20 astChild) {.
6510: 20 20 20 20 20 20 20 20 63 68 69 6c 64 20 3d 20 child =
6520: 6f 6c 64 4c 61 73 74 43 68 69 6c 64 2d 3e 6e 65 oldLastChild->ne
6530: 78 74 53 69 62 6c 69 6e 67 3b 0a 20 20 20 20 20 xtSibling;.
6540: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 } else {.
6550: 20 20 20 20 20 20 20 20 63 68 69 6c 64 20 3d 20 child =
6560: 6e 6f 64 65 2d 3e 66 69 72 73 74 43 68 69 6c 64 node->firstChild
6570: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
6580: 20 20 20 20 77 68 69 6c 65 20 28 63 68 69 6c 64 while (child
6590: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ) {.
65a0: 6e 65 78 74 43 68 69 6c 64 20 3d 20 63 68 69 6c nextChild = chil
65b0: 64 2d 3e 6e 65 78 74 53 69 62 6c 69 6e 67 3b 0a d->nextSibling;.
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 6d 46 domF
65d0: 72 65 65 4e 6f 64 65 20 28 63 68 69 6c 64 2c 20 reeNode (child,
65e0: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a NULL, NULL, 0);.
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 69 6c chil
6600: 64 20 3d 20 6e 65 78 74 43 68 69 6c 64 3b 0a 20 d = nextChild;.
6610: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
6620: 20 69 66 20 28 6f 6c 64 4c 61 73 74 43 68 69 6c if (oldLastChil
6630: 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 d) {.
6640: 20 6f 6c 64 4c 61 73 74 43 68 69 6c 64 2d 3e 6e oldLastChild->n
6650: 65 78 74 53 69 62 6c 69 6e 67 20 3d 20 4e 55 4c extSibling = NUL
6660: 4c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e L;. n
6670: 6f 64 65 2d 3e 6c 61 73 74 43 68 69 6c 64 20 3d ode->lastChild =
6680: 20 6f 6c 64 4c 61 73 74 43 68 69 6c 64 3b 0a 20 oldLastChild;.
6690: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a } else {.
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 node
66b0: 2d 3e 66 69 72 73 74 43 68 69 6c 64 20 3d 20 4e ->firstChild = N
66c0: 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ULL;.
66d0: 20 6e 6f 64 65 2d 3e 6c 61 73 74 43 68 69 6c 64 node->lastChild
66e0: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 20 = NULL;.
66f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }. }.
6700: 20 20 20 20 20 0a 20 20 20 20 72 65 74 75 72 6e . return
6710: 20 28 72 65 74 20 3d 3d 20 54 43 4c 5f 42 52 45 (ret == TCL_BRE
6720: 41 4b 29 20 3f 20 54 43 4c 5f 4f 4b 20 3a 20 72 AK) ? TCL_OK : r
6730: 65 74 3b 0a 7d 0a 0a 0c 0a 2f 2a 0a 20 2a 2d 2d et;.}..../*. *--
6740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6780: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 6e 6f 64 65 63 ----. *. * nodec
6790: 6d 64 5f 69 6e 73 65 72 74 42 65 66 6f 72 65 46 md_insertBeforeF
67a0: 72 6f 6d 53 63 72 69 70 74 20 2d 2d 0a 20 2a 0a romScript --. *.
67b0: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 *.This procedur
67c0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 e implements the
67d0: 20 64 6f 6d 20 6d 65 74 68 6f 64 0a 20 2a 09 69 dom method. *.i
67e0: 6e 73 65 72 74 42 65 66 6f 72 65 46 72 6f 6d 53 nsertBeforeFromS
67f0: 63 72 69 70 74 2e 20 53 65 65 20 74 68 65 20 75 cript. See the u
6800: 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f ser documentatio
6810: 6e 20 66 6f 72 20 64 65 74 61 69 6c 73 0a 20 2a n for details. *
6820: 09 6f 6e 20 77 68 61 74 20 69 74 20 64 6f 65 73 .on what it does
6830: 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 20 54 68 69 .. *. * Thi
6840: 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 61 s procedure is a
6850: 63 74 75 61 6c 6c 79 20 6d 6f 73 74 6c 79 20 61 ctually mostly a
6860: 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 0a wrapper around.
6870: 20 2a 20 20 20 20 20 20 6e 6f 64 65 63 6d 64 5f * nodecmd_
6880: 61 70 70 65 6e 64 46 72 6f 6d 53 63 72 69 70 74 appendFromScript
6890: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a .. *. * Results:
68a0: 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 . *.A standard T
68b0: 63 6c 20 72 65 73 75 6c 74 2e 0a 20 2a 0a 20 2a cl result.. *. *
68c0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 Side effects:.
68d0: 2a 09 49 6e 73 65 72 74 20 6e 65 77 20 63 68 69 *.Insert new chi
68e0: 6c 64 20 6e 6f 64 65 73 20 62 65 66 6f 72 65 20 ld nodes before
68f0: 72 65 66 65 72 65 6e 63 65 43 68 69 6c 64 20 74 referenceChild t
6900: 6f 20 6e 6f 64 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d o node.. *. *---
6910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6950: 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 6e 6f 64 ---. */..int.nod
6960: 65 63 6d 64 5f 69 6e 73 65 72 74 42 65 66 6f 72 ecmd_insertBefor
6970: 65 46 72 6f 6d 53 63 72 69 70 74 20 28 0a 20 20 eFromScript (.
6980: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
6990: 74 65 72 70 2c 20 20 20 20 20 20 20 20 20 20 20 terp,
69a0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 /* Current
69b0: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f interpreter. */
69c0: 0a 20 20 20 20 64 6f 6d 4e 6f 64 65 20 20 20 20 . domNode
69d0: 2a 6e 6f 64 65 2c 20 20 20 20 20 20 20 20 20 20 *node,
69e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 /* Pare
69f0: 6e 74 20 64 6f 6d 20 6e 6f 64 65 20 2a 2f 0a 20 nt dom node */.
6a00: 20 20 20 54 63 6c 5f 4f 62 6a 20 20 20 20 2a 63 Tcl_Obj *c
6a10: 6d 64 4f 62 6a 2c 20 20 20 20 20 20 20 20 20 20 mdObj,
6a20: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 /* Argume
6a30: 6e 74 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 20 nt objects. */.
6a40: 20 20 20 64 6f 6d 4e 6f 64 65 20 20 20 20 2a 72 domNode *r
6a50: 65 66 43 68 69 6c 64 20 20 20 20 20 20 20 20 20 efChild
6a60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 73 65 72 74 /* Insert
6a70: 20 6e 65 77 20 63 68 69 6c 64 73 20 62 65 66 6f new childs befo
6a80: 72 65 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 re this.
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ab0: 20 2a 20 6e 6f 64 65 3b 20 6d 61 79 20 62 65 20 * node; may be
6ac0: 4e 55 4c 4c 20 2a 2f 0a 29 20 7b 0a 20 20 20 20 NULL */.) {.
6ad0: 69 6e 74 20 20 20 20 20 20 72 65 74 3b 0a 20 20 int ret;.
6ae0: 20 20 64 6f 6d 4e 6f 64 65 20 2a 73 74 6f 72 65 domNode *store
6af0: 64 4c 61 73 74 43 68 69 6c 64 2c 20 2a 6e 3b 0a dLastChild, *n;.
6b00: 0a 20 20 20 20 69 66 20 28 21 72 65 66 43 68 69 . if (!refChi
6b10: 6c 64 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 ld) {. re
6b20: 74 75 72 6e 20 6e 6f 64 65 63 6d 64 5f 61 70 70 turn nodecmd_app
6b30: 65 6e 64 46 72 6f 6d 53 63 72 69 70 74 20 28 69 endFromScript (i
6b40: 6e 74 65 72 70 2c 20 6e 6f 64 65 2c 20 63 6d 64 nterp, node, cmd
6b50: 4f 62 6a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 Obj);. }.
6b60: 0a 20 20 20 20 69 66 20 28 6e 6f 64 65 2d 3e 6e . if (node->n
6b70: 6f 64 65 54 79 70 65 20 21 3d 20 45 4c 45 4d 45 odeType != ELEME
6b80: 4e 54 5f 4e 4f 44 45 29 20 7b 0a 20 20 20 20 20 NT_NODE) {.
6b90: 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 Tcl_SetResult
6ba0: 20 28 69 6e 74 65 72 70 2c 20 22 4e 4f 54 5f 41 (interp, "NOT_A
6bb0: 4e 5f 45 4c 45 4d 45 4e 54 20 3a 20 63 61 6e 27 N_ELEMENT : can'
6bc0: 74 20 61 70 70 65 6e 64 20 6e 6f 64 65 73 22 2c t append nodes",
6bd0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 NULL);.
6be0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
6bf0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 ;. }.. /*
6c00: 63 68 65 63 6b 2c 20 69 66 20 6e 6f 64 65 20 69 check, if node i
6c10: 73 20 69 6e 20 64 65 65 64 20 74 68 65 20 70 61 s in deed the pa
6c20: 72 65 6e 74 20 6f 66 20 72 65 66 43 68 69 6c 64 rent of refChild
6c30: 20 2a 2f 0a 20 20 20 20 69 66 20 28 72 65 66 43 */. if (refC
6c40: 68 69 6c 64 2d 3e 70 61 72 65 6e 74 4e 6f 64 65 hild->parentNode
6c50: 20 21 3d 20 6e 6f 64 65 29 20 7b 0a 20 20 20 20 != node) {.
6c60: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 64 65 20 69 /* If node i
6c70: 73 20 74 68 65 20 72 6f 6f 74 20 6e 6f 64 65 20 s the root node
6c80: 6f 66 20 61 20 64 6f 63 75 6d 65 6e 74 20 61 6e of a document an
6c90: 64 20 72 65 66 43 68 69 6c 64 0a 20 20 20 20 20 d refChild.
6ca0: 20 20 20 20 20 20 69 73 20 69 6e 20 64 65 65 64 is in deed
6cb0: 20 61 20 63 68 69 6c 64 20 6f 66 20 74 68 69 73 a child of this
6cc0: 20 6e 6f 64 65 2c 20 74 68 65 6e 20 0a 20 20 20 node, then .
6cd0: 20 20 20 20 20 20 20 20 72 65 66 43 68 69 6c 64 refChild
6ce0: 2d 3e 70 61 72 65 6e 74 4e 6f 64 65 20 77 69 6c ->parentNode wil
6cf0: 6c 20 62 65 20 4e 55 4c 4c 2e 20 49 6e 20 74 68 l be NULL. In th
6d00: 69 73 20 63 61 73 65 2c 20 77 65 0a 20 20 20 20 is case, we.
6d10: 20 20 20 20 20 20 20 6c 6f 6f 70 20 74 68 72 6f loop thro
6d20: 75 20 74 68 65 20 63 68 69 6c 64 73 20 6f 66 20 u the childs of
6d30: 6e 6f 64 65 2c 20 74 6f 20 73 65 65 2c 20 69 66 node, to see, if
6d40: 20 74 68 65 20 72 65 66 43 68 69 6c 64 0a 20 20 the refChild.
6d50: 20 20 20 20 20 20 20 20 20 69 73 20 76 61 6c 69 is vali
6d60: 64 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 54 63 d. */. Tc
6d70: 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 20 28 69 l_ResetResult (i
6d80: 6e 74 65 72 70 29 3b 0a 20 20 20 20 20 20 20 20 nterp);.
6d90: 69 66 20 28 6e 6f 64 65 2d 3e 6f 77 6e 65 72 44 if (node->ownerD
6da0: 6f 63 75 6d 65 6e 74 2d 3e 72 6f 6f 74 4e 6f 64 ocument->rootNod
6db0: 65 20 3d 3d 20 6e 6f 64 65 29 20 7b 0a 20 20 20 e == node) {.
6dc0: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 6e 6f 64 n = nod
6dd0: 65 2d 3e 66 69 72 73 74 43 68 69 6c 64 3b 0a 20 e->firstChild;.
6de0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 while
6df0: 20 28 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 20 (n) {.
6e00: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 if (n ==
6e10: 72 65 66 43 68 69 6c 64 29 20 7b 0a 20 20 20 20 refChild) {.
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6e30: 2f 2a 20 72 65 66 43 68 69 6c 64 20 69 73 20 69 /* refChild is i
6e40: 6e 20 64 65 65 64 20 61 20 63 68 69 6c 64 20 6f n deed a child o
6e50: 66 20 6e 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 f node */.
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 br
6e70: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 eak;.
6e80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
6e90: 20 20 20 20 20 20 20 6e 20 3d 20 6e 2d 3e 6e 65 n = n->ne
6ea0: 78 74 53 69 62 6c 69 6e 67 3b 0a 20 20 20 20 20 xtSibling;.
6eb0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
6ec0: 20 20 20 20 20 69 66 20 28 21 6e 29 20 7b 0a 20 if (!n) {.
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
6ee0: 63 6c 5f 53 65 74 53 74 72 69 6e 67 4f 62 6a 28 cl_SetStringObj(
6ef0: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_GetObjResult
6f00: 28 69 6e 74 65 72 70 29 2c 20 22 4e 4f 54 5f 46 (interp), "NOT_F
6f10: 4f 55 4e 44 5f 45 52 52 22 2c 0a 20 20 20 20 20 OUND_ERR",.
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 29 3b -1);
6f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6f50: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f return TCL_ERRO
6f60: 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d R;. }
6f70: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else
6f80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63 {. Tc
6f90: 6c 5f 53 65 74 53 74 72 69 6e 67 4f 62 6a 28 54 l_SetStringObj(T
6fa0: 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 cl_GetObjResult(
6fb0: 69 6e 74 65 72 70 29 2c 20 22 4e 4f 54 5f 46 4f interp), "NOT_FO
6fc0: 55 4e 44 5f 45 52 52 22 2c 20 2d 31 29 3b 0a 20 UND_ERR", -1);.
6fd0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
6fe0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
6ff0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 }. }..
7000: 20 20 73 74 6f 72 65 64 4c 61 73 74 43 68 69 6c storedLastChil
7010: 64 20 3d 20 6e 6f 64 65 2d 3e 6c 61 73 74 43 68 d = node->lastCh
7020: 69 6c 64 3b 0a 20 20 20 20 69 66 20 28 72 65 66 ild;. if (ref
7030: 43 68 69 6c 64 2d 3e 70 72 65 76 69 6f 75 73 53 Child->previousS
7040: 69 62 6c 69 6e 67 29 20 7b 0a 20 20 20 20 20 20 ibling) {.
7050: 20 20 72 65 66 43 68 69 6c 64 2d 3e 70 72 65 76 refChild->prev
7060: 69 6f 75 73 53 69 62 6c 69 6e 67 2d 3e 6e 65 78 iousSibling->nex
7070: 74 53 69 62 6c 69 6e 67 20 3d 20 4e 55 4c 4c 3b tSibling = NULL;
7080: 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 2d 3e 6c . node->l
7090: 61 73 74 43 68 69 6c 64 20 3d 20 72 65 66 43 68 astChild = refCh
70a0: 69 6c 64 2d 3e 70 72 65 76 69 6f 75 73 53 69 62 ild->previousSib
70b0: 6c 69 6e 67 3b 0a 20 20 20 20 7d 20 65 6c 73 65 ling;. } else
70c0: 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 2d {. node-
70d0: 3e 66 69 72 73 74 43 68 69 6c 64 20 3d 20 4e 55 >firstChild = NU
70e0: 4c 4c 3b 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 LL;. node
70f0: 2d 3e 6c 61 73 74 43 68 69 6c 64 20 3d 20 4e 55 ->lastChild = NU
7100: 4c 4c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 LL;. }. re
7110: 74 20 3d 20 6e 6f 64 65 63 6d 64 5f 61 70 70 65 t = nodecmd_appe
7120: 6e 64 46 72 6f 6d 53 63 72 69 70 74 20 28 69 6e ndFromScript (in
7130: 74 65 72 70 2c 20 6e 6f 64 65 2c 20 63 6d 64 4f terp, node, cmdO
7140: 62 6a 29 3b 0a 20 20 20 20 69 66 20 28 6e 6f 64 bj);. if (nod
7150: 65 2d 3e 6c 61 73 74 43 68 69 6c 64 29 20 7b 0a e->lastChild) {.
7160: 20 20 20 20 20 20 20 20 6e 6f 64 65 2d 3e 6c 61 node->la
7170: 73 74 43 68 69 6c 64 2d 3e 6e 65 78 74 53 69 62 stChild->nextSib
7180: 6c 69 6e 67 20 3d 20 72 65 66 43 68 69 6c 64 3b ling = refChild;
7190: 0a 20 20 20 20 20 20 20 20 72 65 66 43 68 69 6c . refChil
71a0: 64 2d 3e 70 72 65 76 69 6f 75 73 53 69 62 6c 69 d->previousSibli
71b0: 6e 67 20 3d 20 6e 6f 64 65 2d 3e 6c 61 73 74 43 ng = node->lastC
71c0: 68 69 6c 64 3b 0a 20 20 20 20 7d 20 65 6c 73 65 hild;. } else
71d0: 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f 64 65 2d {. node-
71e0: 3e 66 69 72 73 74 43 68 69 6c 64 20 3d 20 72 65 >firstChild = re
71f0: 66 43 68 69 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 fChild;. }.
7200: 20 20 6e 6f 64 65 2d 3e 6c 61 73 74 43 68 69 6c node->lastChil
7210: 64 20 3d 20 73 74 6f 72 65 64 4c 61 73 74 43 68 d = storedLastCh
7220: 69 6c 64 3b 0a 20 20 20 20 0a 20 20 20 20 72 65 ild;. . re
7230: 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 0a 2f 2a turn ret;.}.../*
7240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 7c 20 20 ------------.|
7290: 20 6e 6f 64 65 63 6d 64 5f 63 75 72 65 6e 74 4e nodecmd_curentN
72a0: 6f 64 65 0a 7c 0a 5c 2d 2d 2d 2d 2d 2d 2d 2d 2d ode.|.\---------
72b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
72c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
72d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
72e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
72f0: 2d 2d 2a 2f 0a 0a 76 6f 69 64 20 2a 0a 6e 6f 64 --*/..void *.nod
7300: 65 63 6d 64 5f 63 75 72 72 65 6e 74 4e 6f 64 65 ecmd_currentNode
7310: 28 76 6f 69 64 29 0a 7b 0a 20 20 20 20 72 65 74 (void).{. ret
7320: 75 72 6e 20 53 74 61 63 6b 54 6f 70 28 29 3b 0a urn StackTop();.
7330: 7d 0a 0a 2f 2a 20 45 4f 46 20 24 52 43 53 66 69 }../* EOF $RCSfi
7340: 6c 65 20 24 20 2a 2f 0a 0a 2f 2a 20 45 6d 61 63 le $ */../* Emac
7350: 73 20 53 65 74 75 70 20 56 61 72 69 61 62 6c 65 s Setup Variable
7360: 73 20 2a 2f 0a 2f 2a 20 4c 6f 63 61 6c 20 56 61 s */./* Local Va
7370: 72 69 61 62 6c 65 73 3a 20 20 20 20 20 20 2a 2f riables: */
7380: 0a 2f 2a 20 6d 6f 64 65 3a 20 43 20 20 20 20 20 ./* mode: C
7390: 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 2f 2a 20 */./*
73a0: 69 6e 64 65 6e 74 2d 74 61 62 73 2d 6d 6f 64 65 indent-tabs-mode
73b0: 3a 20 6e 69 6c 20 2a 2f 0a 2f 2a 20 63 2d 62 61 : nil */./* c-ba
73c0: 73 69 63 2d 6f 66 66 73 65 74 3a 20 34 20 20 20 sic-offset: 4
73d0: 20 20 2a 2f 0a 2f 2a 20 45 6e 64 3a 20 20 20 20 */./* End:
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f */
73f0: 0a 0a ..