0000: 23 20 46 65 61 74 75 72 65 73 20 63 6f 76 65 72 # Features cover
0010: 65 64 3a 20 64 6f 6d 20 63 6f 6d 6d 61 6e 64 0a ed: dom command.
0020: 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 63 6f #.# This file co
0030: 6e 74 61 69 6e 73 20 61 20 63 6f 6c 6c 65 63 74 ntains a collect
0040: 69 6f 6e 20 6f 66 20 74 65 73 74 73 20 66 6f 72 ion of tests for
0050: 20 74 68 65 20 64 6f 6d 20 63 6f 6d 6d 61 6e 64 the dom command
0060: 20 6f 66 0a 23 20 74 44 4f 4d 2e 0a 23 0a 23 20 of.# tDOM..#.#
0070: 20 20 20 64 6f 6d 2d 31 2e 2a 3a 20 20 63 72 65 dom-1.*: cre
0080: 61 74 65 44 6f 63 75 6d 65 6e 74 2c 20 63 72 65 ateDocument, cre
0090: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 0a 23 20 ateDocumentNS.#
00a0: 20 20 20 64 6f 6d 2d 32 2e 2a 3a 20 20 70 61 72 dom-2.*: par
00b0: 73 65 0a 23 20 20 20 20 64 6f 6d 2d 33 2e 2a 3a se.# dom-3.*:
00c0: 20 20 69 73 4e 61 6d 65 2c 20 69 73 4e 43 4e 61 isName, isNCNa
00d0: 6d 65 2c 20 69 73 43 68 61 72 44 61 74 61 2c 20 me, isCharData,
00e0: 69 73 50 49 4e 61 6d 65 2c 20 69 73 43 6f 6d 6d isPIName, isComm
00f0: 65 6e 74 2c 20 69 73 43 44 41 54 41 0a 23 20 20 ent, isCDATA.#
0100: 20 20 64 6f 6d 2d 34 2e 2a 3a 20 20 70 61 72 73 dom-4.*: pars
0110: 65 20 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 44 e -useForeignDTD
0120: 0a 23 20 20 20 20 64 6f 6d 2d 35 2e 2a 3a 20 20 .# dom-5.*:
0130: 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 external entitie
0140: 73 0a 23 20 20 20 20 64 6f 6d 2d 36 2e 2a 3a 20 s.# dom-6.*:
0150: 20 75 73 65 20 69 6e 20 73 6c 61 76 65 20 69 6e use in slave in
0160: 74 65 72 70 72 65 74 65 72 0a 23 20 20 20 20 64 terpreter.# d
0170: 6f 6d 2d 37 2e 2a 3a 20 20 73 65 74 4e 61 6d 65 om-7.*: setName
0180: 43 68 65 63 6b 2c 20 73 65 74 54 65 78 74 43 68 Check, setTextCh
0190: 65 63 6b 0a 23 20 20 20 20 64 6f 6d 2d 38 2e 2a eck.# dom-8.*
01a0: 3a 20 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e : createDocumen
01b0: 74 4e 6f 64 65 2c 20 64 6f 63 75 6d 65 6e 74 4e tNode, documentN
01c0: 6f 64 65 73 0a 23 20 20 20 20 64 6f 6d 2d 39 2e odes.# dom-9.
01d0: 2a 3a 20 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d *: setObjectCom
01e0: 6d 61 6e 64 73 0a 23 20 20 20 20 64 6f 6d 2d 31 mands.# dom-1
01f0: 30 2e 2a 3a 20 63 72 65 61 74 65 4e 6f 64 65 43 0.*: createNodeC
0200: 6d 64 0a 23 20 20 20 20 64 6f 6d 2d 31 31 2e 2a md.# dom-11.*
0210: 3a 20 66 65 61 74 75 72 65 69 6e 66 6f 0a 23 20 : featureinfo.#
0220: 20 20 20 64 6f 6d 2d 31 32 2e 2a 3a 20 2d 66 65 dom-12.*: -fe
0230: 65 64 62 61 63 6b 41 66 74 65 72 0a 23 0a 23 20 edbackAfter.#.#
0240: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
0250: 30 32 2c 20 32 30 30 33 2c 20 32 30 30 34 20 52 02, 2003, 2004 R
0260: 6f 6c 66 20 41 64 65 2e 0a 0a 73 6f 75 72 63 65 olf Ade...source
0270: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c [file join [fil
0280: 65 20 64 69 72 20 5b 69 6e 66 6f 20 73 63 72 69 e dir [info scri
0290: 70 74 5d 5d 20 6c 6f 61 64 74 64 6f 6d 2e 74 63 pt]] loadtdom.tc
02a0: 6c 5d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 l]..test dom-1.1
02b0: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
02c0: 20 77 69 74 68 20 72 6f 6f 74 20 6e 6f 64 65 20 with root node
02d0: 6e 61 6d 65 20 6e 6f 74 20 61 20 58 4d 4c 20 4e name not a XML N
02e0: 61 6d 65 7d 20 7b 0a 20 20 20 20 6c 69 73 74 20 ame} {. list
02f0: 5b 63 61 74 63 68 20 7b 64 6f 6d 20 63 72 65 61 [catch {dom crea
0300: 74 65 44 6f 63 75 6d 65 6e 74 20 22 72 6f 6f 74 teDocument "root
0310: 20 6e 6f 64 65 22 7d 20 6d 73 67 5d 20 24 6d 73 node"} msg] $ms
0320: 67 0a 7d 20 22 31 20 7b 49 6e 76 61 6c 69 64 20 g.} "1 {Invalid
0330: 72 6f 6f 74 20 65 6c 65 6d 65 6e 74 20 6e 61 6d root element nam
0340: 65 20 27 72 6f 6f 74 20 6e 6f 64 65 27 7d 22 0a e 'root node'}".
0350: 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 32 20 7b 63 .test dom-1.2 {c
0360: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 77 69 reateDocument wi
0370: 74 68 20 72 6f 6f 74 20 6e 6f 64 65 20 6e 61 6d th root node nam
0380: 65 20 6e 6f 74 20 61 20 58 4d 4c 20 4e 61 6d 65 e not a XML Name
0390: 7d 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 } {. list [ca
03a0: 74 63 68 20 7b 64 6f 6d 20 63 72 65 61 74 65 44 tch {dom createD
03b0: 6f 63 75 6d 65 6e 74 20 22 31 72 6f 6f 74 22 7d ocument "1root"}
03c0: 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 22 31 20 msg] $msg.} "1
03d0: 7b 49 6e 76 61 6c 69 64 20 72 6f 6f 74 20 65 6c {Invalid root el
03e0: 65 6d 65 6e 74 20 6e 61 6d 65 20 27 31 72 6f 6f ement name '1roo
03f0: 74 27 7d 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 t'}"..test dom-1
0400: 2e 33 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 .3 {createDocume
0410: 6e 74 20 2d 20 72 6f 6f 74 20 6e 61 6d 65 20 75 nt - root name u
0420: 73 2d 61 73 63 69 69 7d 20 7b 0a 20 20 20 20 64 s-ascii} {. d
0430: 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e om createDocumen
0440: 74 20 22 72 6f 6f 74 22 20 64 6f 63 20 0a 20 20 t "root" doc .
0450: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 set root [$doc
0460: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
0470: 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 ]. set result
0480: 20 5b 24 72 6f 6f 74 20 6e 6f 64 65 4e 61 6d 65 [$root nodeName
0490: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 ]. $doc delet
04a0: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
04b0: 0a 7d 20 22 72 6f 6f 74 22 0a 0a 74 65 73 74 20 .} "root"..test
04c0: 64 6f 6d 2d 31 2e 34 20 7b 63 72 65 61 74 65 44 dom-1.4 {createD
04d0: 6f 63 75 6d 65 6e 74 20 2d 20 72 6f 6f 74 20 6e ocument - root n
04e0: 61 6d 65 20 77 69 74 68 20 55 54 46 2d 38 20 63 ame with UTF-8 c
04f0: 68 61 72 73 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 hars} {. dom
0500: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 22 createDocument "
0510: 5c 75 30 30 63 34 5c 75 30 30 64 34 5c 75 30 30 \u00c4\u00d4\u00
0520: 64 63 22 20 64 6f 63 20 0a 20 20 20 20 73 65 74 dc" doc . set
0530: 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 root [$doc docu
0540: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 mentElement].
0550: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f set result [$ro
0560: 6f 74 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 ot nodeName].
0570: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
0580: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 22 5c set result.} "\
0590: 75 30 30 63 34 5c 75 30 30 64 34 5c 75 30 30 64 u00c4\u00d4\u00d
05a0: 63 22 0a 20 20 20 20 0a 74 65 73 74 20 64 6f 6d c". .test dom
05b0: 2d 31 2e 35 20 7b 63 72 65 61 74 65 44 6f 63 75 -1.5 {createDocu
05c0: 6d 65 6e 74 20 77 69 74 68 20 46 51 20 72 6f 6f ment with FQ roo
05d0: 74 20 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f t name} {. do
05e0: 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 m createDocument
05f0: 20 22 66 6f 6f 3a 62 61 72 22 20 64 6f 63 0a 20 "foo:bar" doc.
0600: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f set root [$do
0610: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
0620: 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c t]. set resul
0630: 74 20 5b 24 72 6f 6f 74 20 6e 6f 64 65 4e 61 6d t [$root nodeNam
0640: 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 e]. $doc dele
0650: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c te. set resul
0660: 74 0a 7d 20 22 66 6f 6f 3a 62 61 72 22 0a 0a 74 t.} "foo:bar"..t
0670: 65 73 74 20 64 6f 6d 2d 31 2e 36 20 7b 63 72 65 est dom-1.6 {cre
0680: 61 74 65 44 6f 63 75 6d 65 6e 74 20 77 69 74 68 ateDocument with
0690: 20 77 72 6f 6e 67 20 23 20 6f 66 20 61 72 67 73 wrong # of args
06a0: 7d 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 } {. list [ca
06b0: 74 63 68 20 7b 64 6f 6d 20 63 72 65 61 74 65 44 tch {dom createD
06c0: 6f 63 75 6d 65 6e 74 20 22 72 6f 6f 74 22 20 22 ocument "root" "
06d0: 68 74 74 70 3a 2f 66 6f 6f 3a 62 61 72 22 20 64 http:/foo:bar" d
06e0: 6f 63 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 oc} msg] $msg.}
06f0: 22 31 20 7b 77 72 6f 6e 67 20 5c 23 20 61 72 67 "1 {wrong \# arg
0700: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 63 s: should be \"c
0710: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 64 6f reateDocument do
0720: 63 45 6c 65 6d 4e 61 6d 65 20 3f 6e 65 77 4f 62 cElemName ?newOb
0730: 6a 56 61 72 3f 5c 22 7d 22 0a 0a 74 65 73 74 20 jVar?\"}"..test
0740: 64 6f 6d 2d 31 2e 37 20 7b 63 72 65 61 74 65 44 dom-1.7 {createD
0750: 6f 63 75 6d 65 6e 74 4e 53 20 2d 20 63 68 65 63 ocumentNS - chec
0760: 6b 20 72 6f 6f 74 20 6e 61 6d 65 7d 20 7b 0a 20 k root name} {.
0770: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
0780: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 createDocumentNS
0790: 20 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 "http://foo.bar
07a0: 22 20 22 72 6f 6f 74 22 5d 0a 20 20 20 20 73 65 " "root"]. se
07b0: 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 t root [$doc doc
07c0: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 umentElement].
07d0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 set result [$r
07e0: 6f 6f 74 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 oot nodeName].
07f0: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
0800: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 22 set result.} "
0810: 72 6f 6f 74 22 0a 0a 74 65 73 74 20 64 6f 6d 2d root"..test dom-
0820: 31 2e 38 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 1.8 {createDocum
0830: 65 6e 74 4e 53 20 2d 20 63 68 65 63 6b 20 74 68 entNS - check th
0840: 65 20 4e 53 20 6f 66 20 74 68 65 20 63 72 65 61 e NS of the crea
0850: 74 65 64 20 72 6f 6f 74 7d 20 7b 0a 20 20 20 20 ted root} {.
0860: 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 dom createDocume
0870: 6e 74 4e 53 20 22 68 74 74 70 3a 2f 2f 66 6f 6f ntNS "http://foo
0880: 2e 62 61 72 22 20 22 72 6f 6f 74 22 20 64 6f 63 .bar" "root" doc
0890: 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 . set root [$
08a0: 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d doc documentElem
08b0: 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 ent]. set res
08c0: 75 6c 74 20 5b 24 72 6f 6f 74 20 6e 61 6d 65 73 ult [$root names
08d0: 70 61 63 65 55 52 49 5d 0a 20 20 20 20 24 64 6f paceURI]. $do
08e0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 c delete. set
08f0: 20 72 65 73 75 6c 74 0a 7d 20 22 68 74 74 70 3a result.} "http:
0900: 2f 2f 66 6f 6f 2e 62 61 72 22 20 20 20 20 0a 0a //foo.bar" ..
0910: 74 65 73 74 20 64 6f 6d 2d 31 2e 39 20 7b 63 72 test dom-1.9 {cr
0920: 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 77 eateDocumentNS w
0930: 69 74 68 20 72 6f 6f 74 20 6e 61 6d 65 20 6e 6f ith root name no
0940: 74 20 61 20 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 t a NCName} {.
0950: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 64 list [catch {d
0960: 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e om createDocumen
0970: 74 4e 53 20 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e tNS "http://foo.
0980: 62 61 72 22 20 22 66 6f 6f 20 62 61 72 22 20 64 bar" "foo bar" d
0990: 6f 63 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 oc} msg] $msg.}
09a0: 22 31 20 7b 49 6e 76 61 6c 69 64 20 72 6f 6f 74 "1 {Invalid root
09b0: 20 65 6c 65 6d 65 6e 74 20 6e 61 6d 65 20 27 66 element name 'f
09c0: 6f 6f 20 62 61 72 27 7d 22 0a 0a 74 65 73 74 20 oo bar'}"..test
09d0: 64 6f 6d 2d 31 2e 31 30 20 7b 63 72 65 61 74 65 dom-1.10 {create
09e0: 44 6f 63 75 6d 65 6e 74 4e 53 20 77 69 74 68 20 DocumentNS with
09f0: 72 6f 6f 74 20 6e 61 6d 65 20 6e 6f 74 20 61 20 root name not a
0a00: 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 6c 69 NCName} {. li
0a10: 73 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 63 st [catch {dom c
0a20: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 reateDocumentNS
0a30: 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 22 "http://foo.bar"
0a40: 20 22 61 3a 62 3a 63 22 20 64 6f 63 7d 20 6d 73 "a:b:c" doc} ms
0a50: 67 5d 20 24 6d 73 67 0a 7d 20 22 31 20 7b 49 6e g] $msg.} "1 {In
0a60: 76 61 6c 69 64 20 72 6f 6f 74 20 65 6c 65 6d 65 valid root eleme
0a70: 6e 74 20 6e 61 6d 65 20 27 61 3a 62 3a 63 27 7d nt name 'a:b:c'}
0a80: 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 31 "..test dom-1.11
0a90: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
0aa0: 4e 53 20 77 69 74 68 20 72 6f 6f 74 20 6e 61 6d NS with root nam
0ab0: 65 20 6e 6f 74 20 61 20 4e 43 4e 61 6d 65 7d 20 e not a NCName}
0ac0: 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 {. list [catc
0ad0: 68 20 7b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 h {dom createDoc
0ae0: 75 6d 65 6e 74 4e 53 20 22 68 74 74 70 3a 2f 2f umentNS "http://
0af0: 66 6f 6f 2e 62 61 72 22 20 22 61 20 62 3a 62 22 foo.bar" "a b:b"
0b00: 20 64 6f 63 7d 20 6d 73 67 5d 20 24 6d 73 67 0a doc} msg] $msg.
0b10: 7d 20 22 31 20 7b 49 6e 76 61 6c 69 64 20 72 6f } "1 {Invalid ro
0b20: 6f 74 20 65 6c 65 6d 65 6e 74 20 6e 61 6d 65 20 ot element name
0b30: 27 61 20 62 3a 62 27 7d 22 0a 0a 74 65 73 74 20 'a b:b'}"..test
0b40: 64 6f 6d 2d 31 2e 31 32 20 7b 63 72 65 61 74 65 dom-1.12 {create
0b50: 44 6f 63 75 6d 65 6e 74 4e 53 20 77 69 74 68 20 DocumentNS with
0b60: 72 6f 6f 74 20 6e 61 6d 65 20 6e 6f 74 20 61 20 root name not a
0b70: 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 6c 69 NCName} {. li
0b80: 73 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 63 st [catch {dom c
0b90: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 reateDocumentNS
0ba0: 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 22 "http://foo.bar"
0bb0: 20 22 61 3a 61 20 62 22 20 64 6f 63 7d 20 6d 73 "a:a b" doc} ms
0bc0: 67 5d 20 24 6d 73 67 0a 7d 20 22 31 20 7b 49 6e g] $msg.} "1 {In
0bd0: 76 61 6c 69 64 20 72 6f 6f 74 20 65 6c 65 6d 65 valid root eleme
0be0: 6e 74 20 6e 61 6d 65 20 27 61 3a 61 20 62 27 7d nt name 'a:a b'}
0bf0: 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 33 "..test dom-1.13
0c00: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
0c10: 4e 53 20 2d 20 63 68 65 63 6b 20 72 6f 6f 74 20 NS - check root
0c20: 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 name} {. set
0c30: 64 6f 63 20 5b 64 6f 6d 20 63 72 65 61 74 65 44 doc [dom createD
0c40: 6f 63 75 6d 65 6e 74 4e 53 20 22 68 74 74 70 3a ocumentNS "http:
0c50: 2f 2f 66 6f 6f 2e 62 61 72 22 20 66 6f 6f 3a 72 //foo.bar" foo:r
0c60: 6f 6f 74 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f oot]. set roo
0c70: 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 t [$doc document
0c80: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 Element]. set
0c90: 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 6e result [$root n
0ca0: 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 6f odeName]. $do
0cb0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 c delete. set
0cc0: 20 72 65 73 75 6c 74 0a 7d 20 22 66 6f 6f 3a 72 result.} "foo:r
0cd0: 6f 6f 74 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 oot"..test dom-1
0ce0: 2e 31 34 20 7b 63 72 65 61 74 65 44 6f 63 75 6d .14 {createDocum
0cf0: 65 6e 74 20 2d 20 72 65 6e 61 6d 65 20 74 68 65 ent - rename the
0d00: 20 64 6f 63 20 63 6d 64 7d 20 7b 0a 20 20 20 20 doc cmd} {.
0d10: 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 63 72 65 set doc [dom cre
0d20: 61 74 65 44 6f 63 75 6d 65 6e 74 20 72 6f 6f 74 ateDocument root
0d30: 5d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 ]. if {[info
0d40: 63 6f 6d 6d 61 6e 64 73 20 66 6f 6f 43 6d 64 5d commands fooCmd]
0d50: 20 3d 3d 20 22 66 6f 6f 43 6d 64 22 7d 20 7b 0a == "fooCmd"} {.
0d60: 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66 rename f
0d70: 6f 6f 43 6d 64 20 7b 7d 0a 20 20 20 20 7d 0a 20 ooCmd {}. }.
0d80: 20 20 20 72 65 6e 61 6d 65 20 24 64 6f 63 20 66 rename $doc f
0d90: 6f 6f 43 6d 64 0a 20 20 20 20 73 65 74 20 72 65 ooCmd. set re
0da0: 73 75 6c 74 20 5b 5b 66 6f 6f 43 6d 64 20 64 6f sult [[fooCmd do
0db0: 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 6e cumentElement] n
0dc0: 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 66 6f 6f odeName]. foo
0dd0: 43 6d 64 20 64 65 6c 65 74 65 0a 20 20 20 20 73 Cmd delete. s
0de0: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 72 6f 6f et result.} {roo
0df0: 74 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 t}..test dom-1.1
0e00: 35 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 5 {createDocumen
0e10: 74 20 2d 20 72 65 6e 61 6d 65 20 74 68 65 20 64 t - rename the d
0e20: 6f 63 20 63 6d 64 7d 20 7b 0a 20 20 20 20 69 66 oc cmd} {. if
0e30: 20 7b 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 {[info commands
0e40: 20 66 6f 6f 43 6d 64 5d 20 3d 3d 20 22 66 6f 6f fooCmd] == "foo
0e50: 43 6d 64 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 Cmd"} {.
0e60: 72 65 6e 61 6d 65 20 66 6f 6f 43 6d 64 20 7b 7d rename fooCmd {}
0e70: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 6e . }. set n
0e80: 72 4f 66 43 6f 6d 6d 61 6e 64 73 20 5b 6c 6c 65 rOfCommands [lle
0e90: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma
0ea0: 6e 64 73 5d 5d 0a 20 20 20 20 73 65 74 20 64 6f nds]]. set do
0eb0: 63 20 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 c [dom createDoc
0ec0: 75 6d 65 6e 74 20 72 6f 6f 74 5d 0a 20 20 20 20 ument root].
0ed0: 72 65 6e 61 6d 65 20 24 64 6f 63 20 66 6f 6f 43 rename $doc fooC
0ee0: 6d 64 0a 20 20 20 20 66 6f 6f 43 6d 64 20 64 65 md. fooCmd de
0ef0: 6c 65 74 65 0a 20 20 20 20 65 78 70 72 20 7b 5b lete. expr {[
0f00: 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f llength [info co
0f10: 6d 6d 61 6e 64 73 5d 5d 20 3d 3d 20 24 6e 72 4f mmands]] == $nrO
0f20: 66 43 6f 6d 6d 61 6e 64 73 7d 0a 7d 20 7b 31 7d fCommands}.} {1}
0f30: 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 36 20 ..test dom-1.16
0f40: 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e {createDocumentN
0f50: 53 20 2d 20 65 6d 70 74 79 20 6e 61 6d 65 73 70 S - empty namesp
0f60: 61 63 65 2c 20 6e 6f 20 70 72 65 66 69 78 7d 20 ace, no prefix}
0f70: 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 {. dom create
0f80: 44 6f 63 75 6d 65 6e 74 4e 53 20 22 22 20 64 6f DocumentNS "" do
0f90: 63 20 64 6f 63 0a 20 20 20 20 73 65 74 20 72 65 c doc. set re
0fa0: 73 75 6c 74 20 5b 24 64 6f 63 20 61 73 58 4d 4c sult [$doc asXML
0fb0: 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 -indent none].
0fc0: 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 $doc delete.
0fd0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
0fe0: 7b 3c 64 6f 63 2f 3e 7d 0a 0a 74 65 73 74 20 64 {<doc/>}..test d
0ff0: 6f 6d 2d 31 2e 31 37 20 7b 63 72 65 61 74 65 44 om-1.17 {createD
1000: 6f 63 75 6d 65 6e 74 4e 53 20 2d 20 20 6e 61 6d ocumentNS - nam
1010: 65 73 70 61 63 65 2c 20 6e 6f 20 70 72 65 66 69 espace, no prefi
1020: 78 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 x} {. dom cre
1030: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 22 75 ateDocumentNS "u
1040: 72 69 22 20 64 6f 63 20 64 6f 63 0a 20 20 20 20 ri" doc doc.
1050: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 set result [$doc
1060: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
1070: 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 one]. $doc de
1080: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
1090: 75 6c 74 0a 7d 20 7b 3c 64 6f 63 20 78 6d 6c 6e ult.} {<doc xmln
10a0: 73 3d 22 75 72 69 22 2f 3e 7d 0a 0a 74 65 73 74 s="uri"/>}..test
10b0: 20 64 6f 6d 2d 31 2e 31 38 20 7b 63 72 65 61 74 dom-1.18 {creat
10c0: 65 44 6f 63 75 6d 65 6e 74 4e 53 20 2d 20 20 6e eDocumentNS - n
10d0: 61 6d 65 73 70 61 63 65 2c 20 6e 6f 20 70 72 65 amespace, no pre
10e0: 66 69 78 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 fix} {. dom c
10f0: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 reateDocumentNS
1100: 22 75 72 69 22 20 64 6f 63 20 64 6f 63 0a 20 20 "uri" doc doc.
1110: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 set result [$d
1120: 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 2d oc selectNodes -
1130: 6e 61 6d 65 73 70 61 63 65 73 20 7b 6e 73 20 75 namespaces {ns u
1140: 72 69 7d 20 63 6f 75 6e 74 28 2f 6e 73 3a 64 6f ri} count(/ns:do
1150: 63 29 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c c)]. $doc del
1160: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 ete. set resu
1170: 6c 74 0a 7d 20 31 0a 0a 74 65 73 74 20 64 6f 6d lt.} 1..test dom
1180: 2d 31 2e 31 39 20 7b 63 72 65 61 74 65 44 6f 63 -1.19 {createDoc
1190: 75 6d 65 6e 74 4e 53 20 2d 20 6e 61 6d 65 73 70 umentNS - namesp
11a0: 61 63 65 2c 20 70 72 65 66 69 78 7d 20 7b 0a 20 ace, prefix} {.
11b0: 20 20 20 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 dom createDoc
11c0: 75 6d 65 6e 74 4e 53 20 22 75 72 69 22 20 6e 31 umentNS "uri" n1
11d0: 3a 64 6f 63 20 64 6f 63 0a 20 20 20 20 73 65 74 :doc doc. set
11e0: 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 73 65 result [$doc se
11f0: 6c 65 63 74 4e 6f 64 65 73 20 2d 6e 61 6d 65 73 lectNodes -names
1200: 70 61 63 65 73 20 7b 6e 73 20 75 72 69 7d 20 63 paces {ns uri} c
1210: 6f 75 6e 74 28 2f 6e 73 3a 64 6f 63 29 5d 0a 20 ount(/ns:doc)].
1220: 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 $doc delete.
1230: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
1240: 31 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 32 30 1..test dom-1.20
1250: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
1260: 4e 53 20 2d 20 65 6d 70 74 79 20 6e 61 6d 65 73 NS - empty names
1270: 70 61 63 65 2c 20 70 72 65 66 69 78 7d 20 7b 0a pace, prefix} {.
1280: 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 63 catch {dom c
1290: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 reateDocumentNS
12a0: 22 22 20 6e 31 3a 64 6f 63 20 64 6f 63 7d 20 65 "" n1:doc doc} e
12b0: 72 72 4d 73 67 0a 20 20 20 20 73 65 74 20 65 72 rrMsg. set er
12c0: 72 4d 73 67 0a 7d 20 7b 4d 69 73 73 69 6e 67 20 rMsg.} {Missing
12d0: 55 52 49 20 69 6e 20 4e 61 6d 65 73 70 61 63 65 URI in Namespace
12e0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 7d 0a 0a 74 declaration}..t
12f0: 65 73 74 20 64 6f 6d 2d 31 2e 32 31 20 7b 45 78 est dom-1.21 {Ex
1300: 70 6c 69 63 69 74 20 64 65 6c 65 74 65 20 6f 66 plicit delete of
1310: 20 73 63 6f 70 65 64 20 64 6f 63 20 77 69 74 68 scoped doc with
1320: 20 64 6f 6d 44 6f 63 20 63 6d 64 7d 20 7b 7d 20 domDoc cmd} {}
1330: 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 {. dom create
1340: 44 6f 63 75 6d 65 6e 74 20 74 65 73 74 20 64 6f Document test do
1350: 63 0a 20 20 20 20 64 6f 6d 44 6f 63 20 24 64 6f c. domDoc $do
1360: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 75 6e 73 c delete. uns
1370: 65 74 20 64 6f 63 0a 7d 20 7b 7d 20 20 20 20 0a et doc.} {} .
1380: 0a 70 72 6f 63 20 64 6f 6d 2d 31 2e 32 32 20 7b .proc dom-1.22 {
1390: 64 6f 63 7d 20 7b 0a 20 20 20 20 24 64 6f 63 20 doc} {. $doc
13a0: 64 65 6c 65 74 65 0a 7d 0a 74 65 73 74 20 64 6f delete.}.test do
13b0: 6d 2d 31 2e 32 32 20 7b 45 78 70 6c 69 63 69 74 m-1.22 {Explicit
13c0: 20 64 65 6c 65 74 65 20 6f 66 20 73 63 6f 70 65 delete of scope
13d0: 64 20 64 6f 63 20 69 6e 20 70 72 6f 63 20 63 61 d doc in proc ca
13e0: 6c 6c 20 66 72 6f 6d 20 73 63 6f 70 65 7d 20 7b ll from scope} {
13f0: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 } {. dom crea
1400: 74 65 44 6f 63 75 6d 65 6e 74 20 74 65 73 74 20 teDocument test
1410: 64 6f 63 0a 20 20 20 20 64 6f 6d 2d 31 2e 32 32 doc. dom-1.22
1420: 20 24 64 6f 63 0a 20 20 20 20 75 6e 73 65 74 20 $doc. unset
1430: 64 6f 63 0a 7d 20 7b 7d 20 20 20 20 0a 0a 74 65 doc.} {} ..te
1440: 73 74 20 64 6f 6d 2d 31 2e 32 33 20 7b 45 78 70 st dom-1.23 {Exp
1450: 6c 69 63 69 74 20 64 65 6c 65 74 65 20 6f 66 20 licit delete of
1460: 73 63 6f 70 65 64 20 64 6f 63 7d 20 7b 0a 20 20 scoped doc} {.
1470: 20 20 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 dom createDocu
1480: 6d 65 6e 74 20 74 65 73 74 20 64 6f 63 0a 20 20 ment test doc.
1490: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
14a0: 20 20 75 6e 73 65 74 20 64 6f 63 0a 7d 20 7b 7d unset doc.} {}
14b0: 20 20 20 20 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 ..test dom-1
14c0: 2e 32 34 20 7b 45 78 70 6c 69 63 69 74 20 64 65 .24 {Explicit de
14d0: 6c 65 74 65 20 6f 66 20 73 63 6f 70 65 64 20 64 lete of scoped d
14e0: 6f 63 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 oc} {. dom cr
14f0: 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 74 65 73 eateDocument tes
1500: 74 20 64 6f 63 0a 20 20 20 20 73 65 74 20 72 65 t doc. set re
1510: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 65 74 sult [catch {set
1520: 20 64 6f 63 20 66 6f 6f 7d 20 65 72 72 4d 73 67 doc foo} errMsg
1530: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
1540: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 20 20 20 sult $errMsg.
1550: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
1560: 20 75 6e 73 65 74 20 64 6f 63 0a 20 20 20 20 73 unset doc. s
1570: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 20 7b et result.} {1 {
1580: 63 61 6e 27 74 20 73 65 74 20 22 64 6f 63 22 3a can't set "doc":
1590: 20 76 61 72 20 69 73 20 72 65 61 64 2d 6f 6e 6c var is read-onl
15a0: 79 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e y}}..test dom-1.
15b0: 32 35 20 7b 44 6f 63 20 76 61 72 7d 20 7b 0a 20 25 {Doc var} {.
15c0: 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c 74 65 dom parse <te
15d0: 73 74 2f 3e 20 64 6f 63 0a 20 20 20 20 64 6f 6d st/> doc. dom
15e0: 20 70 61 72 73 65 20 3c 74 65 73 74 2f 3e 20 64 parse <test/> d
15f0: 6f 63 0a 20 20 20 20 75 6e 73 65 74 20 64 6f 63 oc. unset doc
1600: 0a 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d .} {}..test dom-
1610: 31 2e 32 36 20 7b 44 6f 63 20 76 61 72 7d 20 7b 1.26 {Doc var} {
1620: 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 3c . dom parse <
1630: 74 65 73 74 2f 3e 20 64 6f 63 0a 20 20 20 20 73 test/> doc. s
1640: 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 et result [catch
1650: 20 7b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 {$doc documentE
1660: 6c 65 6d 65 6e 74 20 64 6f 63 7d 5d 0a 20 20 20 lement doc}].
1670: 20 75 6e 73 65 74 20 64 6f 63 0a 20 20 20 20 73 unset doc. s
1680: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 7d 0a et result.} {1}.
1690: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 20 7b 44 .test dom-2.1 {D
16a0: 6f 6e 27 74 20 71 75 61 73 68 20 77 68 69 74 65 on't quash white
16b0: 20 73 70 61 63 65 20 61 74 20 73 74 61 72 74 20 space at start
16c0: 6f 72 20 65 6e 64 20 6f 66 20 6e 6f 6e 20 77 68 or end of non wh
16d0: 69 74 65 20 73 70 61 63 65 20 63 6f 6e 74 65 6e ite space conten
16e0: 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 t} {. set doc
16f0: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f [dom parse {<ro
1700: 6f 74 3e 0a 20 20 20 20 73 6f 6d 65 20 63 6f 6e ot>. some con
1710: 74 65 6e 74 0a 20 20 20 20 3c 2f 72 6f 6f 74 3e tent. </root>
1720: 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 }]. set root
1730: 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c [$doc documentEl
1740: 65 6d 65 6e 74 5d 0a 20 20 20 20 24 72 6f 6f 74 ement]. $root
1750: 20 74 65 78 74 0a 7d 20 7b 0a 20 20 20 20 73 6f text.} {. so
1760: 6d 65 20 63 6f 6e 74 65 6e 74 0a 20 20 20 20 7d me content. }
1770: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 32 20 7b ..test dom-2.2 {
1780: 70 61 72 73 65 20 64 6f 63 20 77 69 74 68 20 76 parse doc with v
1790: 61 72 69 6f 75 73 20 72 65 2d 64 65 63 6c 61 72 arious re-declar
17a0: 61 74 69 6f 6e 20 6f 66 20 61 20 70 72 65 66 69 ation of a prefi
17b0: 78 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 x} {. set doc
17c0: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 70 3a [dom parse {<p:
17d0: 61 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 69 31 22 a xmlns:p="uri1"
17e0: 3e 0a 20 20 20 20 3c 70 3a 62 20 78 6d 6c 6e 73 >. <p:b xmlns
17f0: 3a 70 3d 22 75 72 69 32 22 3e 0a 20 20 20 20 20 :p="uri2">.
1800: 20 20 20 3c 70 3a 63 20 78 6d 6c 6e 73 3a 70 3d <p:c xmlns:p=
1810: 22 75 72 69 31 22 2f 3e 0a 20 20 20 20 3c 2f 70 "uri1"/>. </p
1820: 3a 62 3e 0a 3c 2f 70 3a 61 3e 7d 5d 0a 20 20 20 :b>.</p:a>}].
1830: 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 set root [$doc
1840: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
1850: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
1860: 5b 24 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 [$root asXML].
1870: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
1880: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
1890: 3c 70 3a 61 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 <p:a xmlns:p="ur
18a0: 69 31 22 3e 0a 20 20 20 20 3c 70 3a 62 20 78 6d i1">. <p:b xm
18b0: 6c 6e 73 3a 70 3d 22 75 72 69 32 22 3e 0a 20 20 lns:p="uri2">.
18c0: 20 20 20 20 20 20 3c 70 3a 63 20 78 6d 6c 6e 73 <p:c xmlns
18d0: 3a 70 3d 22 75 72 69 31 22 2f 3e 0a 20 20 20 20 :p="uri1"/>.
18e0: 3c 2f 70 3a 62 3e 0a 3c 2f 70 3a 61 3e 0a 7d 0a </p:b>.</p:a>.}.
18f0: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 20 7b 70 .test dom-2.3 {p
1900: 61 72 73 65 20 64 6f 63 20 77 69 74 68 20 64 65 arse doc with de
1910: 66 61 75 6c 74 20 4e 53 20 64 65 63 6c 61 72 61 fault NS declara
1920: 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 73 65 74 20 tion} {. set
1930: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b doc [dom parse {
1940: 3c 61 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 69 22 <a xmlns:p="uri"
1950: 3e 0a 20 20 20 20 3c 70 3a 62 2f 3e 0a 20 20 20 >. <p:b/>.
1960: 20 3c 70 3a 62 2f 3e 0a 3c 2f 61 3e 7d 5d 0a 20 <p:b/>.</a>}].
1970: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f set root [$do
1980: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
1990: 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c t]. set resul
19a0: 74 20 5b 24 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a t [$root asXML].
19b0: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
19c0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
19d0: 20 7b 3c 61 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 {<a xmlns:p="ur
19e0: 69 22 3e 0a 20 20 20 20 3c 70 3a 62 2f 3e 0a 20 i">. <p:b/>.
19f0: 20 20 20 3c 70 3a 62 2f 3e 0a 3c 2f 61 3e 0a 7d <p:b/>.</a>.}
1a00: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 34 20 7b ..test dom-2.4 {
1a10: 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 73 79 parse method: sy
1a20: 6e 74 61 78 20 63 68 65 63 6b 7d 20 7b 0a 20 20 ntax check} {.
1a30: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
1a40: 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 arse -keepEmptie
1a50: 73 20 7b 3c 72 6f 6f 74 3e 0a 20 20 74 65 78 74 s {<root>. text
1a60: 0a 20 20 20 20 3c 2f 72 6f 6f 74 3e 7d 5d 0a 20 . </root>}].
1a70: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 set result [$
1a80: 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e doc asXML -inden
1a90: 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 t none]. $doc
1aa0: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 delete. set
1ab0: 72 65 73 75 6c 74 0a 7d 20 7b 3c 72 6f 6f 74 3e result.} {<root>
1ac0: 0a 20 20 74 65 78 74 0a 20 20 20 20 3c 2f 72 6f . text. </ro
1ad0: 6f 74 3e 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 ot>}..test dom-2
1ae0: 2e 35 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 .5 {parse method
1af0: 3a 20 73 79 6e 74 61 78 20 63 68 65 63 6b 7d 20 : syntax check}
1b00: 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 {. set doc [d
1b10: 6f 6d 20 70 61 72 73 65 20 2d 75 73 65 46 6f 72 om parse -useFor
1b20: 65 69 67 6e 44 54 44 20 30 20 2d 6b 65 65 70 45 eignDTD 0 -keepE
1b30: 6d 70 74 69 65 73 20 7b 3c 72 6f 6f 74 3e 0a 20 mpties {<root>.
1b40: 20 74 65 78 74 0a 20 20 20 20 3c 2f 72 6f 6f 74 text. </root
1b50: 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 >}]. set resu
1b60: 6c 74 20 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d lt [$doc asXML -
1b70: 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 indent none].
1b80: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
1b90: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c set result.} {<
1ba0: 72 6f 6f 74 3e 0a 20 20 74 65 78 74 0a 20 20 20 root>. text.
1bb0: 20 3c 2f 72 6f 6f 74 3e 7d 0a 0a 74 65 73 74 20 </root>}..test
1bc0: 64 6f 6d 2d 32 2e 36 20 7b 70 61 72 73 65 20 6d dom-2.6 {parse m
1bd0: 65 74 68 6f 64 3a 20 73 79 6e 74 61 78 20 63 68 ethod: syntax ch
1be0: 65 63 6b 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 eck} -setup {.
1bf0: 20 20 73 65 74 20 78 6d 6c 46 69 6c 65 20 5b 6d set xmlFile [m
1c00: 61 6b 65 46 69 6c 65 20 7b 3c 72 6f 6f 74 3e 20 akeFile {<root>
1c10: 20 20 20 3c 2f 72 6f 6f 74 3e 7d 20 64 6f 6d 2e </root>} dom.
1c20: 78 6d 6c 5d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 xml].} -body {.
1c30: 20 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 set fd [open
1c40: 24 78 6d 6c 46 69 6c 65 5d 0a 20 20 20 20 73 65 $xmlFile]. se
1c50: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
1c60: 20 2d 63 68 61 6e 6e 65 6c 20 24 66 64 20 2d 6b -channel $fd -k
1c70: 65 65 70 45 6d 70 74 69 65 73 5d 0a 20 20 20 20 eepEmpties].
1c80: 63 6c 6f 73 65 20 24 66 64 0a 20 20 20 20 73 65 close $fd. se
1c90: 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 t root [$doc doc
1ca0: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 umentElement].
1cb0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 set result [$r
1cc0: 6f 6f 74 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e oot asXML -inden
1cd0: 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 t none]. $doc
1ce0: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 delete. set
1cf0: 72 65 73 75 6c 74 0a 7d 20 2d 63 6c 65 61 6e 75 result.} -cleanu
1d00: 70 20 7b 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 p {. removeFi
1d10: 6c 65 20 64 6f 6d 2e 78 6d 6c 0a 7d 20 2d 72 65 le dom.xml.} -re
1d20: 73 75 6c 74 20 7b 3c 72 6f 6f 74 3e 20 20 20 20 sult {<root>
1d30: 3c 2f 72 6f 6f 74 3e 7d 0a 0a 74 65 73 74 20 64 </root>}..test d
1d40: 6f 6d 2d 32 2e 37 20 7b 70 61 72 73 65 20 6d 65 om-2.7 {parse me
1d50: 74 68 6f 64 3a 20 73 79 6e 74 61 78 20 63 68 65 thod: syntax che
1d60: 63 6b 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 ck} -setup {.
1d70: 20 73 65 74 20 78 6d 6c 46 69 6c 65 20 5b 6d 61 set xmlFile [ma
1d80: 6b 65 46 69 6c 65 20 7b 3c 72 6f 6f 74 3e 20 20 keFile {<root>
1d90: 20 20 3c 2f 72 6f 6f 74 3e 7d 20 64 6f 6d 2e 78 </root>} dom.x
1da0: 6d 6c 5d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 ml].} -body {.
1db0: 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 2d catch {unset -
1dc0: 6b 65 65 70 45 6d 70 74 69 65 73 7d 0a 20 20 20 keepEmpties}.
1dd0: 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 78 set fd [open $x
1de0: 6d 6c 46 69 6c 65 5d 0a 20 20 20 20 73 65 74 20 mlFile]. set
1df0: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d doc [dom parse -
1e00: 63 68 61 6e 6e 65 6c 20 24 66 64 20 2d 6b 65 65 channel $fd -kee
1e10: 70 45 6d 70 74 69 65 73 5d 0a 20 20 20 20 63 6c pEmpties]. cl
1e20: 6f 73 65 20 24 66 64 0a 20 20 20 20 24 64 6f 63 ose $fd. $doc
1e30: 20 64 65 6c 65 74 65 0a 20 20 20 20 69 6e 66 6f delete. info
1e40: 20 65 78 69 73 74 73 20 2d 6b 65 65 70 45 6d 70 exists -keepEmp
1e50: 74 69 65 73 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 ties.} -cleanup
1e60: 7b 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 {. removeFile
1e70: 20 64 6f 6d 2e 78 6d 6c 0a 7d 20 2d 72 65 73 75 dom.xml.} -resu
1e80: 6c 74 20 30 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 lt 0..test dom-2
1e90: 2e 38 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 .8 {parse method
1ea0: 3a 20 62 6f 67 75 73 20 6f 70 74 69 6f 6e 7d 20 : bogus option}
1eb0: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 20 -body {. set
1ec0: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 result [catch {s
1ed0: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
1ee0: 65 20 2d 62 6f 67 75 73 4f 70 74 69 6f 6e 20 66 e -bogusOption f
1ef0: 6f 6f 20 3c 72 6f 6f 74 2f 3e 5d 7d 20 65 72 72 oo <root/>]} err
1f00: 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 Msg]. lappend
1f10: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
1f20: 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 } -match regexp
1f30: 2d 72 65 73 75 6c 74 20 7b 31 20 7b 62 61 64 20 -result {1 {bad
1f40: 6f 70 74 69 6f 6e 20 22 2d 62 6f 67 75 73 4f 70 option "-bogusOp
1f50: 74 69 6f 6e 22 3a 20 6d 75 73 74 20 62 65 20 2e tion": must be .
1f60: 2a 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e *}}..test dom-2.
1f70: 39 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 9 {parse method:
1f80: 20 62 6f 67 75 73 20 6f 70 74 69 6f 6e 7d 20 2d bogus option} -
1f90: 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74 20 setup {. set
1fa0: 78 6d 6c 46 69 6c 65 20 5b 6d 61 6b 65 46 69 6c xmlFile [makeFil
1fb0: 65 20 7b 3c 72 6f 6f 74 3e 20 20 20 20 3c 2f 72 e {<root> </r
1fc0: 6f 6f 74 3e 7d 20 64 6f 6d 2e 78 6d 6c 5d 0a 7d oot>} dom.xml].}
1fd0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 61 74 -body {. cat
1fe0: 63 68 20 7b 75 6e 73 65 74 20 2d 6b 65 65 70 45 ch {unset -keepE
1ff0: 6d 70 74 69 65 73 7d 0a 20 20 20 20 73 65 74 20 mpties}. set
2000: 66 64 20 5b 6f 70 65 6e 20 24 78 6d 6c 46 69 6c fd [open $xmlFil
2010: 65 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c e]. set resul
2020: 74 20 5b 63 61 74 63 68 20 7b 73 65 74 20 64 6f t [catch {set do
2030: 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 63 68 c [dom parse -ch
2040: 61 6e 6e 65 6c 20 24 66 64 20 2d 62 6f 67 75 73 annel $fd -bogus
2050: 4f 70 74 69 6f 6e 5d 7d 20 65 72 72 4d 73 67 5d Option]} errMsg]
2060: 0a 20 20 20 20 63 6c 6f 73 65 20 24 66 64 0a 20 . close $fd.
2070: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul
2080: 74 20 24 65 72 72 4d 73 67 0a 7d 20 2d 63 6c 65 t $errMsg.} -cle
2090: 61 6e 75 70 20 7b 0a 20 20 20 20 72 65 6d 6f 76 anup {. remov
20a0: 65 46 69 6c 65 20 64 6f 6d 2e 78 6d 6c 0a 7d 20 eFile dom.xml.}
20b0: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 -match regexp -r
20c0: 65 73 75 6c 74 20 7b 31 20 7b 62 61 64 20 6f 70 esult {1 {bad op
20d0: 74 69 6f 6e 20 22 2d 62 6f 67 75 73 4f 70 74 69 tion "-bogusOpti
20e0: 6f 6e 22 3a 20 6d 75 73 74 20 62 65 20 2e 2a 7d on": must be .*}
20f0: 7d 0a 0a 73 65 74 20 64 6f 6d 5f 64 74 64 20 22 }..set dom_dtd "
2100: 0a 20 20 20 20 3c 21 45 4c 45 4d 45 4e 54 20 72 . <!ELEMENT r
2110: 6f 6f 74 20 45 4d 50 54 59 3e 0a 20 20 20 20 3c oot EMPTY>. <
2120: 21 41 54 54 4c 49 53 54 20 72 6f 6f 74 20 6c 61 !ATTLIST root la
2130: 6e 67 20 43 44 41 54 41 20 23 46 49 58 45 44 20 ng CDATA #FIXED
2140: 5c 22 65 6e 5c 22 3e 22 0a 0a 70 72 6f 63 20 65 \"en\">"..proc e
2150: 78 74 52 65 66 52 65 73 6f 6c 76 65 72 20 7b 62 xtRefResolver {b
2160: 61 73 65 20 73 79 73 74 65 6d 49 64 20 70 75 62 ase systemId pub
2170: 6c 69 63 49 64 7d 20 7b 0a 20 20 20 20 67 6c 6f licId} {. glo
2180: 62 61 6c 20 64 6f 6d 5f 64 74 64 0a 0a 20 20 20 bal dom_dtd..
2190: 20 69 66 20 7b 24 70 75 62 6c 69 63 49 64 20 3d if {$publicId =
21a0: 3d 20 22 44 4f 4d 43 4d 44 54 45 53 54 22 7d 20 = "DOMCMDTEST"}
21b0: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e {. return
21c0: 20 5b 6c 69 73 74 20 73 74 72 69 6e 67 20 24 62 [list string $b
21d0: 61 73 65 20 24 64 6f 6d 5f 64 74 64 5d 0a 20 20 ase $dom_dtd].
21e0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
21f0: 20 20 20 72 65 74 75 72 6e 20 5b 3a 3a 74 64 6f return [::tdo
2200: 6d 3a 3a 65 78 74 52 65 66 48 61 6e 64 6c 65 72 m::extRefHandler
2210: 20 24 62 61 73 65 20 24 73 79 73 74 65 6d 49 64 $base $systemId
2220: 20 24 70 75 62 6c 69 63 49 64 5d 0a 20 20 20 20 $publicId].
2230: 7d 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e }.}..test dom-2.
2240: 31 30 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 10 {parse method
2250: 3a 20 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 61 : -paramentitypa
2260: 72 73 69 6e 67 20 64 65 66 61 75 6c 74 20 69 73 rsing default is
2270: 20 27 61 6c 77 61 79 73 27 7d 20 7b 0a 20 20 20 'always'} {.
2280: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
2290: 72 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 rse -externalent
22a0: 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 itycommand extRe
22b0: 66 52 65 73 6f 6c 76 65 72 20 7b 0a 20 20 20 20 fResolver {.
22c0: 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 72 6f <!DOCTYPE ro
22d0: 6f 74 20 50 55 42 4c 49 43 20 22 44 4f 4d 43 4d ot PUBLIC "DOMCM
22e0: 44 54 45 53 54 22 20 22 64 75 6d 6d 79 73 79 73 DTEST" "dummysys
22f0: 74 65 6d 49 44 22 3e 0a 20 20 20 20 20 20 20 20 temID">.
2300: 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d 5d 0a 20 <root/>. }].
2310: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f set root [$do
2320: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
2330: 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c t]. set resul
2340: 74 20 5b 24 72 6f 6f 74 20 40 6c 61 6e 67 5d 0a t [$root @lang].
2350: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
2360: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
2370: 20 7b 65 6e 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d {en}..test dom-
2380: 32 2e 31 31 20 7b 70 61 72 73 65 20 6d 65 74 68 2.11 {parse meth
2390: 6f 64 3a 20 65 78 70 6c 69 63 69 74 20 2d 70 61 od: explicit -pa
23a0: 72 61 6d 65 6e 74 69 74 79 70 61 72 73 69 6e 67 ramentityparsing
23b0: 20 61 6c 77 61 79 73 7d 20 7b 0a 20 20 20 20 73 always} {. s
23c0: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
23d0: 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 e -externalentit
23e0: 79 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 ycommand extRefR
23f0: 65 73 6f 6c 76 65 72 20 5c 0a 20 20 20 20 20 20 esolver \.
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2410: 20 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 61 72 -paramentitypar
2420: 73 69 6e 67 20 61 6c 77 61 79 73 20 7b 0a 20 20 sing always {.
2430: 20 20 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 <!DOCTYPE
2440: 72 6f 6f 74 20 50 55 42 4c 49 43 20 22 44 4f 4d root PUBLIC "DOM
2450: 43 4d 44 54 45 53 54 22 20 22 64 75 6d 6d 79 73 CMDTEST" "dummys
2460: 79 73 74 65 6d 49 44 22 3e 0a 20 20 20 20 20 20 ystemID">.
2470: 20 20 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d 5d <root/>. }]
2480: 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 . set root [$
2490: 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d doc documentElem
24a0: 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 ent]. set res
24b0: 75 6c 74 20 5b 24 72 6f 6f 74 20 40 6c 61 6e 67 ult [$root @lang
24c0: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 ]. $doc delet
24d0: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
24e0: 0a 7d 20 7b 65 6e 7d 0a 0a 74 65 73 74 20 64 6f .} {en}..test do
24f0: 6d 2d 32 2e 31 32 20 7b 70 61 72 73 65 20 6d 65 m-2.12 {parse me
2500: 74 68 6f 64 3a 20 2d 70 61 72 61 6d 65 6e 74 69 thod: -paramenti
2510: 74 79 70 61 72 73 69 6e 67 20 6e 65 76 65 72 7d typarsing never}
2520: 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b {. set doc [
2530: 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 dom parse -exter
2540: 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 nalentitycommand
2550: 20 65 78 74 52 65 66 52 65 73 6f 6c 76 65 72 20 extRefResolver
2560: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
2570: 20 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d 65 -parame
2580: 6e 74 69 74 79 70 61 72 73 69 6e 67 20 6e 65 76 ntityparsing nev
2590: 65 72 20 7b 0a 20 20 20 20 20 20 20 20 3c 21 44 er {. <!D
25a0: 4f 43 54 59 50 45 20 72 6f 6f 74 20 50 55 42 4c OCTYPE root PUBL
25b0: 49 43 20 22 44 4f 4d 43 4d 44 54 45 53 54 22 20 IC "DOMCMDTEST"
25c0: 22 64 75 6d 6d 79 73 79 73 74 65 6d 49 44 22 3e "dummysystemID">
25d0: 0a 20 20 20 20 20 20 20 20 3c 72 6f 6f 74 2f 3e . <root/>
25e0: 0a 20 20 20 20 7d 5d 0a 20 20 20 20 73 65 74 20 . }]. set
25f0: 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d root [$doc docum
2600: 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 entElement].
2610: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 set result [catc
2620: 68 20 7b 73 65 74 20 72 65 73 75 6c 74 20 5b 24 h {set result [$
2630: 72 6f 6f 74 20 40 6c 61 6e 67 5d 7d 20 65 72 72 root @lang]} err
2640: 4d 73 67 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 Msg]. $doc de
2650: 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e 64 lete. lappend
2660: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
2670: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
2680: 20 7b 31 20 7b 41 74 74 72 69 62 75 74 65 20 22 {1 {Attribute "
2690: 6c 61 6e 67 22 20 6e 6f 74 20 66 6f 75 6e 64 21 lang" not found!
26a0: 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 }}..test dom-2.1
26b0: 33 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 3 {parse method:
26c0: 20 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 61 72 -paramentitypar
26d0: 73 69 6e 67 20 6e 6f 74 73 74 61 6e 64 61 6c 6f sing notstandalo
26e0: 6e 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f ne} {. set do
26f0: 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 c [dom parse -ex
2700: 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d ternalentitycomm
2710: 61 6e 64 20 65 78 74 52 65 66 52 65 73 6f 6c 76 and extRefResolv
2720: 65 72 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 er \.
2730: 20 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 72 -par
2740: 61 6d 65 6e 74 69 74 79 70 61 72 73 69 6e 67 20 amentityparsing
2750: 6e 6f 74 73 74 61 6e 64 61 6c 6f 6e 65 20 7b 0a notstandalone {.
2760: 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 59 50 <!DOCTYP
2770: 45 20 72 6f 6f 74 20 50 55 42 4c 49 43 20 22 44 E root PUBLIC "D
2780: 4f 4d 43 4d 44 54 45 53 54 22 20 22 64 75 6d 6d OMCMDTEST" "dumm
2790: 79 73 79 73 74 65 6d 49 44 22 3e 0a 20 20 20 20 ysystemID">.
27a0: 20 20 20 20 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 <root/>.
27b0: 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 }]. set root
27c0: 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c [$doc documentEl
27d0: 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 ement]. set r
27e0: 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 40 6c 61 esult [$root @la
27f0: 6e 67 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c ng]. $doc del
2800: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 ete. set resu
2810: 6c 74 0a 7d 20 7b 65 6e 7d 0a 0a 74 65 73 74 20 lt.} {en}..test
2820: 64 6f 6d 2d 32 2e 31 34 20 7b 70 61 72 73 65 20 dom-2.14 {parse
2830: 6d 65 74 68 6f 64 3a 20 2d 70 61 72 61 6d 65 6e method: -paramen
2840: 74 69 74 79 70 61 72 73 69 6e 67 20 6e 6f 74 73 tityparsing nots
2850: 74 61 6e 64 61 6c 6f 6e 65 7d 20 7b 0a 20 20 20 tandalone} {.
2860: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
2870: 72 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 rse -externalent
2880: 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 itycommand extRe
2890: 66 52 65 73 6f 6c 76 65 72 20 5c 0a 20 20 20 20 fResolver \.
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28b0: 20 20 20 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 -paramentityp
28c0: 61 72 73 69 6e 67 20 6e 6f 74 73 74 61 6e 64 61 arsing notstanda
28d0: 6c 6f 6e 65 20 5c 0a 20 20 20 20 20 20 20 20 20 lone \.
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 3c {<
28f0: 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e ?xml version="1.
2900: 30 22 20 73 74 61 6e 64 61 6c 6f 6e 65 3d 22 79 0" standalone="y
2910: 65 73 22 3f 3e 0a 20 20 20 20 20 20 20 20 3c 21 es"?>. <!
2920: 44 4f 43 54 59 50 45 20 72 6f 6f 74 20 50 55 42 DOCTYPE root PUB
2930: 4c 49 43 20 22 44 4f 4d 43 4d 44 54 45 53 54 22 LIC "DOMCMDTEST"
2940: 20 22 64 75 6d 6d 79 73 79 73 74 65 6d 49 44 22 "dummysystemID"
2950: 3e 0a 20 20 20 20 20 20 20 20 3c 72 6f 6f 74 2f >. <root/
2960: 3e 0a 20 20 20 20 7d 5d 0a 20 20 20 20 73 65 74 >. }]. set
2970: 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 root [$doc docu
2980: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 mentElement].
2990: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 set result [cat
29a0: 63 68 20 7b 73 65 74 20 72 65 73 75 6c 74 20 5b ch {set result [
29b0: 24 72 6f 6f 74 20 40 6c 61 6e 67 5d 7d 20 65 72 $root @lang]} er
29c0: 72 4d 73 67 5d 0a 20 20 20 20 24 64 6f 63 20 64 rMsg]. $doc d
29d0: 65 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e elete. lappen
29e0: 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 d result $errMsg
29f0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
2a00: 7d 20 7b 31 20 7b 41 74 74 72 69 62 75 74 65 20 } {1 {Attribute
2a10: 22 6c 61 6e 67 22 20 6e 6f 74 20 66 6f 75 6e 64 "lang" not found
2a20: 21 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e !}}..test dom-2.
2a30: 31 35 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 15 {parse method
2a40: 3a 20 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 61 : -paramentitypa
2a50: 72 73 69 6e 67 20 6e 6f 74 73 74 61 6e 64 61 6c rsing notstandal
2a60: 6f 6e 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 one} {. set d
2a70: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 65 oc [dom parse -e
2a80: 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d xternalentitycom
2a90: 6d 61 6e 64 20 65 78 74 52 65 66 52 65 73 6f 6c mand extRefResol
2aa0: 76 65 72 20 5c 0a 20 20 20 20 20 20 20 20 20 20 ver \.
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 70 61 -pa
2ac0: 72 61 6d 65 6e 74 69 74 79 70 61 72 73 69 6e 67 ramentityparsing
2ad0: 20 6e 6f 74 73 74 61 6e 64 61 6c 6f 6e 65 20 5c notstandalone \
2ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2af0: 20 20 20 20 20 20 20 20 7b 3c 3f 78 6d 6c 20 76 {<?xml v
2b00: 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 73 74 61 ersion="1.0" sta
2b10: 6e 64 61 6c 6f 6e 65 3d 22 6e 6f 22 3f 3e 0a 20 ndalone="no"?>.
2b20: 20 20 20 20 20 20 20 3c 21 44 4f 43 54 59 50 45 <!DOCTYPE
2b30: 20 72 6f 6f 74 20 50 55 42 4c 49 43 20 22 44 4f root PUBLIC "DO
2b40: 4d 43 4d 44 54 45 53 54 22 20 22 64 75 6d 6d 79 MCMDTEST" "dummy
2b50: 73 79 73 74 65 6d 49 44 22 3e 0a 20 20 20 20 20 systemID">.
2b60: 20 20 20 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d <root/>. }
2b70: 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b ]. set root [
2b80: 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 $doc documentEle
2b90: 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 ment]. set re
2ba0: 73 75 6c 74 20 5b 24 72 6f 6f 74 20 40 6c 61 6e sult [$root @lan
2bb0: 67 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 g]. $doc dele
2bc0: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c te. set resul
2bd0: 74 0a 7d 20 7b 65 6e 7d 0a 0a 74 65 73 74 20 64 t.} {en}..test d
2be0: 6f 6d 2d 32 2e 31 36 20 7b 70 61 72 73 65 20 6d om-2.16 {parse m
2bf0: 65 74 68 6f 64 3a 20 77 72 6f 6e 67 20 76 61 6c ethod: wrong val
2c00: 75 65 20 61 72 67 20 66 6f 72 20 2d 70 61 72 61 ue arg for -para
2c10: 6d 65 6e 74 69 74 79 70 61 72 73 69 6e 67 7d 20 mentityparsing}
2c20: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
2c30: 20 5b 63 61 74 63 68 20 7b 73 65 74 20 64 6f 63 [catch {set doc
2c40: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 70 61 72 [dom parse -par
2c50: 61 6d 65 6e 74 69 74 79 70 61 72 73 69 6e 67 20 amentityparsing
2c60: 77 72 6f 6e 67 20 7b 0a 20 20 20 20 20 20 20 20 wrong {.
2c70: 3c 72 6f 6f 74 2f 3e 7d 5d 7d 20 65 72 72 4d 73 <root/>}]} errMs
2c80: 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 g]. lappend r
2c90: 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 esult $errMsg.}
2ca0: 7b 31 20 7b 62 61 64 20 76 61 6c 75 65 20 22 77 {1 {bad value "w
2cb0: 72 6f 6e 67 22 3a 20 6d 75 73 74 20 62 65 20 61 rong": must be a
2cc0: 6c 77 61 79 73 2c 20 6e 65 76 65 72 2c 20 6f 72 lways, never, or
2cd0: 20 6e 6f 74 73 74 61 6e 64 61 6c 6f 6e 65 7d 7d notstandalone}}
2ce0: 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e ..# The followin
2cf0: 67 20 69 73 20 73 79 6e 74 61 63 74 69 63 61 6c g is syntactical
2d00: 6c 79 20 77 72 6f 6e 67 2e 20 49 74 27 73 20 75 ly wrong. It's u
2d10: 73 65 64 2c 20 74 6f 20 74 65 73 74 20 74 68 65 sed, to test the
2d20: 0a 23 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 .# error reporti
2d30: 6e 67 20 69 6e 20 65 78 74 65 72 6e 61 6c 20 44 ng in external D
2d40: 54 44 73 0a 73 65 74 20 64 6f 6d 5f 64 74 64 20 TDs.set dom_dtd
2d50: 22 3c 21 41 54 54 4c 49 53 54 20 72 6f 6f 74 20 "<!ATTLIST root
2d60: 6c 61 6e 67 20 23 46 49 58 45 44 20 5c 22 65 6e lang #FIXED \"en
2d70: 5c 22 3e 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 \">"..test dom-2
2d80: 2e 31 37 20 7b 70 61 72 73 65 20 6d 65 74 68 6f .17 {parse metho
2d90: 64 3a 20 74 65 73 74 20 72 65 70 6f 72 74 69 6e d: test reportin
2da0: 67 20 6f 66 20 65 72 72 6f 72 20 69 6e 20 65 78 g of error in ex
2db0: 74 65 72 6e 61 6c 20 73 75 62 73 65 74 7d 20 7b ternal subset} {
2dc0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
2dd0: 5b 63 61 74 63 68 20 7b 73 65 74 20 64 6f 63 20 [catch {set doc
2de0: 5b 64 6f 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 [dom parse \.
2df0: 20 20 20 20 20 20 20 20 20 2d 65 78 74 65 72 6e -extern
2e00: 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 alentitycommand
2e10: 65 78 74 52 65 66 52 65 73 6f 6c 76 65 72 20 7b extRefResolver {
2e20: 0a 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 59 . <!DOCTY
2e30: 50 45 20 72 6f 6f 74 20 50 55 42 4c 49 43 20 22 PE root PUBLIC "
2e40: 44 4f 4d 43 4d 44 54 45 53 54 22 20 22 64 75 6d DOMCMDTEST" "dum
2e50: 6d 79 73 79 73 74 65 6d 49 44 22 3e 0a 20 20 20 mysystemID">.
2e60: 20 20 20 20 20 3c 72 6f 6f 74 2f 3e 0a 20 20 20 <root/>.
2e70: 20 7d 5d 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 }]} errMsg].
2e80: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
2e90: 24 65 72 72 4d 73 67 0a 7d 20 7b 31 20 7b 65 72 $errMsg.} {1 {er
2ea0: 72 6f 72 20 22 73 79 6e 74 61 78 20 65 72 72 6f ror "syntax erro
2eb0: 72 22 20 69 6e 20 65 6e 74 69 74 79 20 22 64 75 r" in entity "du
2ec0: 6d 6d 79 73 79 73 74 65 6d 49 44 22 20 61 74 20 mmysystemID" at
2ed0: 6c 69 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 line 1 character
2ee0: 20 32 30 0a 22 3c 21 41 54 54 4c 49 53 54 20 72 20."<!ATTLIST r
2ef0: 6f 6f 74 20 6c 61 6e 67 20 23 20 3c 2d 2d 45 72 oot lang # <--Er
2f00: 72 6f 72 2d 2d 20 46 49 58 45 44 20 22 65 6e 22 ror-- FIXED "en"
2f10: 3e 22 2c 20 72 65 66 65 72 65 6e 63 65 64 20 61 >", referenced a
2f20: 74 20 6c 69 6e 65 20 32 20 63 68 61 72 61 63 74 t line 2 charact
2f30: 65 72 20 35 38 7d 7d 0a 0a 74 65 73 74 20 64 6f er 58}}..test do
2f40: 6d 2d 32 2e 31 38 20 7b 70 61 72 73 65 20 64 6f m-2.18 {parse do
2f50: 63 75 6d 65 6e 74 20 77 69 74 68 20 6e 6f 64 65 cument with node
2f60: 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 s before and aft
2f70: 65 72 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 45 er the documentE
2f80: 6c 65 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 73 65 lement} {. se
2f90: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
2fa0: 20 7b 3c 21 2d 2d 20 46 69 72 73 74 20 63 6f 6d {<!-- First com
2fb0: 6d 65 6e 74 20 2d 2d 3e 0a 3c 64 6f 63 3e 0a 20 ment -->.<doc>.
2fc0: 20 3c 21 2d 2d 20 46 72 6f 6e 74 20 63 6f 6d 6d <!-- Front comm
2fd0: 65 6e 74 20 2d 2d 3e 0a 20 20 3c 69 6e 6e 65 72 ent -->. <inner
2fe0: 2f 3e 0a 20 20 3c 21 2d 2d 20 42 61 63 6b 20 63 />. <!-- Back c
2ff0: 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 3c 2f 64 6f 63 omment -->.</doc
3000: 3e 0a 3c 21 2d 2d 20 4c 61 73 74 20 63 6f 6d 6d >.<!-- Last comm
3010: 65 6e 74 20 2d 2d 3e 7d 5d 0a 20 20 20 20 73 65 ent -->}]. se
3020: 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 61 t result [$doc a
3030: 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e sXML -indent non
3040: 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 e]. $doc dele
3050: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c te. set resul
3060: 74 0a 7d 20 7b 3c 21 2d 2d 20 46 69 72 73 74 20 t.} {<!-- First
3070: 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 3c 64 6f 63 3e comment --><doc>
3080: 3c 21 2d 2d 20 46 72 6f 6e 74 20 63 6f 6d 6d 65 <!-- Front comme
3090: 6e 74 20 2d 2d 3e 3c 69 6e 6e 65 72 2f 3e 3c 21 nt --><inner/><!
30a0: 2d 2d 20 42 61 63 6b 20 63 6f 6d 6d 65 6e 74 20 -- Back comment
30b0: 2d 2d 3e 3c 2f 64 6f 63 3e 3c 21 2d 2d 20 4c 61 --></doc><!-- La
30c0: 73 74 20 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 7d 0a st comment -->}.
30d0: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 39 20 7b .test dom-2.19 {
30e0: 70 61 72 73 65 20 64 6f 63 75 6d 65 6e 74 20 2d parse document -
30f0: 20 72 65 6e 61 6d 65 20 64 6f 63 43 6d 64 7d 20 rename docCmd}
3100: 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 {. set doc [d
3110: 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e om parse {<root>
3120: 66 6f 6f 3c 63 68 69 6c 64 2f 3e 3c 2f 72 6f 6f foo<child/></roo
3130: 74 3e 7d 5d 0a 20 20 20 20 69 66 20 7b 5b 69 6e t>}]. if {[in
3140: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 66 6f 6f 43 fo commands fooC
3150: 6d 64 5d 20 3d 3d 20 22 66 6f 6f 43 6d 64 22 7d md] == "fooCmd"}
3160: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d {. renam
3170: 65 20 66 6f 6f 43 6d 64 20 7b 7d 0a 20 20 20 20 e fooCmd {}.
3180: 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 24 64 6f }. rename $do
3190: 63 20 66 6f 6f 43 6d 64 0a 20 20 20 20 73 65 74 c fooCmd. set
31a0: 20 72 65 73 75 6c 74 20 5b 66 6f 6f 43 6d 64 20 result [fooCmd
31b0: 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f asXML -indent no
31c0: 6e 65 5d 0a 20 20 20 20 66 6f 6f 43 6d 64 20 64 ne]. fooCmd d
31d0: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 elete. set re
31e0: 73 75 6c 74 0a 7d 20 7b 3c 72 6f 6f 74 3e 66 6f sult.} {<root>fo
31f0: 6f 3c 63 68 69 6c 64 2f 3e 3c 2f 72 6f 6f 74 3e o<child/></root>
3200: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 32 30 }..test dom-2.20
3210: 20 7b 70 61 72 73 65 20 2d 20 64 6f 63 20 77 69 {parse - doc wi
3220: 74 68 20 69 6e 74 65 72 6e 61 6c 20 73 75 62 73 th internal subs
3230: 65 74 20 70 61 72 73 65 64 20 77 69 74 68 20 2d et parsed with -
3240: 6b 65 65 70 45 6d 70 74 69 65 73 7d 20 7b 0a 20 keepEmpties} {.
3250: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
3260: 70 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 parse -keepEmpti
3270: 65 73 20 7b 0a 20 20 20 20 20 20 20 20 3c 21 44 es {. <!D
3280: 4f 43 54 59 50 45 20 72 6f 6f 74 20 5b 0a 20 20 OCTYPE root [.
3290: 20 20 20 20 20 20 20 20 20 3c 21 45 4c 45 4d 45 <!ELEME
32a0: 4e 54 20 72 6f 6f 74 20 45 4d 50 54 59 3e 0a 20 NT root EMPTY>.
32b0: 20 20 20 20 20 20 20 20 20 20 3c 21 2d 2d 20 43 <!-- C
32c0: 6f 6d 6d 65 6e 74 20 69 6e 73 69 64 65 20 74 68 omment inside th
32d0: 65 20 44 54 44 20 2d 2d 3e 0a 20 20 20 20 20 20 e DTD -->.
32e0: 20 20 20 20 20 3c 3f 61 50 49 20 49 6e 73 69 64 <?aPI Insid
32f0: 65 20 74 68 65 20 44 54 44 3f 3e 0a 20 20 20 20 e the DTD?>.
3300: 20 20 20 20 20 20 20 3c 21 41 54 54 4c 49 53 54 <!ATTLIST
3310: 20 72 6f 6f 74 20 6c 61 6e 67 20 43 44 41 54 41 root lang CDATA
3320: 20 23 46 49 58 45 44 20 22 65 6e 22 3e 0a 20 20 #FIXED "en">.
3330: 20 20 20 20 20 20 20 20 5d 3e 0a 20 20 20 20 20 ]>.
3340: 20 20 20 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 <root/>}].
3350: 20 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c $doc documentEl
3360: 65 6d 65 6e 74 20 72 6f 6f 74 0a 20 20 20 20 73 ement root. s
3370: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 20 20 20 et result "".
3380: 20 66 6f 72 65 61 63 68 20 6e 6f 64 65 20 5b 24 foreach node [$
3390: 72 6f 6f 74 20 73 65 6c 65 63 74 4e 6f 64 65 73 root selectNodes
33a0: 20 2f 6e 6f 64 65 28 29 5d 20 7b 0a 20 20 20 20 /node()] {.
33b0: 20 20 20 20 73 77 69 74 63 68 20 5b 24 6e 6f 64 switch [$nod
33c0: 65 20 6e 6f 64 65 54 79 70 65 5d 20 7b 0a 20 20 e nodeType] {.
33d0: 20 20 20 20 20 20 20 20 20 20 54 45 58 54 5f 4e TEXT_N
33e0: 4f 44 45 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ODE {.
33f0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re
3400: 73 75 6c 74 20 54 45 58 54 5f 4e 4f 44 45 0a 20 sult TEXT_NODE.
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
3420: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 append result [s
3430: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 24 6e tring length [$n
3440: 6f 64 65 20 76 61 6c 75 65 5d 5d 0a 20 20 20 20 ode value]].
3450: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
3460: 20 20 20 20 20 20 43 4f 4d 4d 45 4e 54 5f 4e 4f COMMENT_NO
3470: 44 45 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 DE {.
3480: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res
3490: 75 6c 74 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 ult COMMENT_NODE
34a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34b0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
34c0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b [string length [
34d0: 24 6e 6f 64 65 20 76 61 6c 75 65 5d 5d 0a 20 20 $node value]].
34e0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
34f0: 20 20 20 20 20 20 20 20 50 52 4f 43 45 53 53 49 PROCESSI
3500: 4e 47 5f 49 4e 53 54 52 55 43 54 49 4f 4e 5f 4e NG_INSTRUCTION_N
3510: 4f 44 45 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ODE {.
3520: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re
3530: 73 75 6c 74 20 50 52 4f 43 45 53 53 49 4e 47 5f sult PROCESSING_
3540: 49 4e 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 INSTRUCTION_NODE
3550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3560: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
3570: 5b 24 6e 6f 64 65 20 74 61 72 67 65 74 5d 0a 20 [$node target].
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
3590: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 append result [$
35a0: 6e 6f 64 65 20 64 61 74 61 5d 0a 20 20 20 20 20 node data].
35b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
35c0: 20 20 20 20 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 ELEMENT_NOD
35d0: 45 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 E {.
35e0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
35f0: 6c 74 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 0a lt ELEMENT_NODE.
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3610: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [
3620: 24 6e 6f 64 65 20 6e 6f 64 65 4e 61 6d 65 5d 0a $node nodeName].
3630: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
3640: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c defaul
3650: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t {.
3660: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
3670: 6c 74 20 5b 24 6e 6f 64 65 20 6e 6f 64 65 54 79 lt [$node nodeTy
3680: 70 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 pe].
3690: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
36a0: 7d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 }. $doc delet
36b0: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
36c0: 0a 7d 20 7b 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 .} {ELEMENT_NODE
36d0: 20 72 6f 6f 74 7d 0a 0a 74 65 73 74 20 64 6f 6d root}..test dom
36e0: 2d 32 2e 32 31 20 7b 70 61 72 73 65 20 2d 20 65 -2.21 {parse - e
36f0: 6d 70 74 79 20 43 44 41 54 41 20 73 65 63 74 69 mpty CDATA secti
3700: 6f 6e 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f on} {. set do
3710: 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 c [dom parse {<d
3720: 6f 63 3e 3c 21 5b 43 44 41 54 41 5b 5d 5d 3e 3c oc><![CDATA[]]><
3730: 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 73 65 74 20 /doc>}]. set
3740: 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d root [$doc docum
3750: 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 entElement].
3760: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f set result [$roo
3770: 74 20 68 61 73 43 68 69 6c 64 4e 6f 64 65 73 5d t hasChildNodes]
3780: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 . $doc delete
3790: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
37a0: 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d } {0}..test dom-
37b0: 32 2e 32 32 20 7b 70 61 72 73 65 20 2d 20 65 6d 2.22 {parse - em
37c0: 70 74 79 20 63 6f 6d 6d 65 6e 74 20 73 65 63 74 pty comment sect
37d0: 69 6f 6e 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 ion} {. set d
37e0: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c oc [dom parse {<
37f0: 64 6f 63 3e 3c 21 2d 2d 2d 2d 3e 3c 2f 64 6f 63 doc><!----></doc
3800: 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 >}]. set root
3810: 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 [$doc documentE
3820: 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 lement]. set
3830: 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 68 61 result [$root ha
3840: 73 43 68 69 6c 64 4e 6f 64 65 73 5d 0a 20 20 20 sChildNodes].
3850: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
3860: 5b 5b 24 72 6f 6f 74 20 66 69 72 73 74 43 68 69 [[$root firstChi
3870: 6c 64 5d 20 6e 6f 64 65 56 61 6c 75 65 5d 0a 20 ld] nodeValue].
3880: 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 $doc delete.
3890: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
38a0: 7b 31 20 7b 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d {1 {}}..test dom
38b0: 2d 32 2e 32 33 20 7b 70 61 72 73 65 20 2d 20 70 -2.23 {parse - p
38c0: 69 20 77 69 74 68 6f 75 74 20 70 69 76 61 6c 75 i without pivalu
38d0: 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 e} {. set doc
38e0: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f [dom parse {<do
38f0: 63 3e 3c 3f 70 3f 3e 3c 2f 64 6f 63 3e 7d 5d 0a c><?p?></doc>}].
3900: 20 20 20 20 73 65 74 20 70 69 20 5b 5b 24 64 6f set pi [[$do
3910: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
3920: 74 5d 20 66 69 72 73 74 43 68 69 6c 64 5d 0a 20 t] firstChild].
3930: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l
3940: 69 73 74 20 5b 24 70 69 20 6e 6f 64 65 4e 61 6d ist [$pi nodeNam
3950: 65 5d 20 5b 24 70 69 20 6e 6f 64 65 56 61 6c 75 e] [$pi nodeValu
3960: 65 5d 20 5b 24 70 69 20 74 61 72 67 65 74 5d 20 e] [$pi target]
3970: 5b 24 70 69 20 64 61 74 61 5d 5d 0a 20 20 20 20 [$pi data]].
3980: 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 $doc delete.
3990: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 70 20 set result.} {p
39a0: 7b 7d 20 70 20 7b 7d 7d 0a 0a 70 72 6f 63 20 32 {} p {}}..proc 2
39b0: 2e 32 34 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 .24 {args} {.
39c0: 20 65 72 72 6f 72 20 22 32 2e 32 34 20 65 78 74 error "2.24 ext
39d0: 65 72 6e 61 6c 20 65 6e 74 69 74 69 79 20 72 65 ernal entitiy re
39e0: 73 6f 6c 76 65 72 20 73 63 72 69 70 74 20 65 72 solver script er
39f0: 72 6f 72 22 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d ror".}..test dom
3a00: 2d 32 2e 32 34 20 7b 70 61 72 73 65 20 2d 20 73 -2.24 {parse - s
3a10: 63 72 69 70 74 20 65 72 72 6f 72 20 69 6e 20 2d cript error in -
3a20: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
3a30: 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 73 65 74 mmand} {. set
3a40: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
3a50: 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 70 61 72 . dom par
3a60: 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 se -externalenti
3a70: 74 79 63 6f 6d 6d 61 6e 64 20 32 2e 32 34 20 7b tycommand 2.24 {
3a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 44 . <!D
3a90: 4f 43 54 59 50 45 20 72 6f 6f 74 20 53 59 53 54 OCTYPE root SYST
3aa0: 45 4d 20 22 64 61 74 61 2f 64 6f 6d 43 6d 64 32 EM "data/domCmd2
3ab0: 2e 64 74 64 22 3e 0a 20 20 20 20 20 20 20 20 20 .dtd">.
3ac0: 20 20 20 3c 72 6f 6f 74 2f 3e 7d 7d 20 65 72 72 <root/>}} err
3ad0: 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 Msg]. lappend
3ae0: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
3af0: 7d 20 7b 31 20 7b 32 2e 32 34 20 65 78 74 65 72 } {1 {2.24 exter
3b00: 6e 61 6c 20 65 6e 74 69 74 69 79 20 72 65 73 6f nal entitiy reso
3b10: 6c 76 65 72 20 73 63 72 69 70 74 20 65 72 72 6f lver script erro
3b20: 72 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e r}}..test dom-2.
3b30: 32 35 20 7b 57 68 69 74 65 20 73 70 61 63 65 20 25 {White space
3b40: 6f 75 74 73 69 64 65 20 74 68 65 20 64 6f 63 75 outside the docu
3b50: 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 69 73 20 ment element is
3b60: 6d 61 72 6b 75 70 20 61 6e 64 20 69 67 6e 6f 72 markup and ignor
3b70: 65 64 2c 20 65 76 65 6e 20 77 69 74 68 20 2d 6b ed, even with -k
3b80: 65 65 70 45 6d 70 74 69 65 73 7d 20 7b 0a 20 20 eepEmpties} {.
3b90: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
3ba0: 61 72 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 arse -keepEmptie
3bb0: 73 20 7b 0a 3c 21 2d 2d 20 46 69 72 73 74 20 63 s {.<!-- First c
3bc0: 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 3c 64 6f 63 3e omment -->.<doc>
3bd0: 0a 20 20 3c 21 2d 2d 20 46 72 6f 6e 74 20 63 6f . <!-- Front co
3be0: 6d 6d 65 6e 74 20 2d 2d 3e 0a 20 20 3c 69 6e 6e mment -->. <inn
3bf0: 65 72 2f 3e 0a 20 20 3c 21 2d 2d 20 42 61 63 6b er/>. <!-- Back
3c00: 20 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 3c 2f 64 comment -->.</d
3c10: 6f 63 3e 0a 3c 21 2d 2d 20 4c 61 73 74 20 63 6f oc>.<!-- Last co
3c20: 6d 6d 65 6e 74 20 2d 2d 3e 7d 5d 0a 20 20 20 20 mment -->}].
3c30: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 set result [$doc
3c40: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
3c50: 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 one]. $doc de
3c60: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
3c70: 75 6c 74 0a 7d 20 7b 3c 21 2d 2d 20 46 69 72 73 ult.} {<!-- Firs
3c80: 74 20 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 3c 64 6f t comment --><do
3c90: 63 3e 0a 20 20 3c 21 2d 2d 20 46 72 6f 6e 74 20 c>. <!-- Front
3ca0: 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 20 20 3c 69 comment -->. <i
3cb0: 6e 6e 65 72 2f 3e 0a 20 20 3c 21 2d 2d 20 42 61 nner/>. <!-- Ba
3cc0: 63 6b 20 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 3c ck comment -->.<
3cd0: 2f 64 6f 63 3e 3c 21 2d 2d 20 4c 61 73 74 20 63 /doc><!-- Last c
3ce0: 6f 6d 6d 65 6e 74 20 2d 2d 3e 7d 0a 0a 74 65 73 omment -->}..tes
3cf0: 74 20 64 6f 6d 2d 32 2e 32 36 20 7b 4e 6f 74 20 t dom-2.26 {Not
3d00: 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 69 6e 70 75 well-formed inpu
3d10: 74 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b t} {. catch {
3d20: 64 6f 6d 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a dom parse {<xsl:
3d30: 74 72 61 6e 73 66 6f 72 6d 20 20 20 20 20 20 20 transform
3d40: 0a 20 20 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78 . xmlns:x
3d50: 73 6c 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 sl="http://www.w
3d60: 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 3.org/1999/XSL/T
3d70: 72 61 6e 73 66 6f 72 6d 20 20 20 20 20 20 20 20 ransform
3d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3d90: 20 20 20 20 3c 68 74 74 70 3a 2f 2f 77 77 77 2e <http://www.
3da0: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f w3.org/1999/XSL/
3db0: 54 72 61 6e 73 66 6f 72 6d 3e 20 22 2f 3e 7d 7d Transform> "/>}}
3dc0: 0a 7d 20 31 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 .} 1..test dom-2
3dd0: 2e 32 37 20 7b 70 61 72 73 65 20 2d 69 67 6e 6f .27 {parse -igno
3de0: 72 65 78 6d 6c 6e 73 7d 20 7b 0a 20 20 20 20 73 rexmlns} {. s
3df0: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d et result [list]
3e00: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
3e10: 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 20 78 6d m parse {<doc xm
3e20: 6c 6e 73 3d 22 66 6f 6f 2e 62 61 72 22 3e 3c 63 lns="foo.bar"><c
3e30: 68 69 6c 64 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 hild/></doc>}].
3e40: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f set root [$do
3e50: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
3e60: 74 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 t]. lappend r
3e70: 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 6c 6f 63 esult [$root loc
3e80: 61 6c 4e 61 6d 65 5d 0a 20 20 20 20 6c 61 70 70 alName]. lapp
3e90: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f end result [$roo
3ea0: 74 20 6e 61 6d 65 73 70 61 63 65 55 52 49 5d 0a t namespaceURI].
3eb0: 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 5b 24 set child [$
3ec0: 72 6f 6f 74 20 66 69 72 73 74 43 68 69 6c 64 5d root firstChild]
3ed0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
3ee0: 75 6c 74 20 5b 24 63 68 69 6c 64 20 6c 6f 63 61 ult [$child loca
3ef0: 6c 4e 61 6d 65 5d 0a 20 20 20 20 6c 61 70 70 65 lName]. lappe
3f00: 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 68 69 6c nd result [$chil
3f10: 64 20 6e 61 6d 65 73 70 61 63 65 55 52 49 5d 0a d namespaceURI].
3f20: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
3f30: 6c 74 20 5b 24 64 6f 63 20 73 65 6c 65 63 74 4e lt [$doc selectN
3f40: 6f 64 65 73 20 63 6f 75 6e 74 28 2f 64 6f 63 2f odes count(/doc/
3f50: 63 68 69 6c 64 29 5d 0a 20 20 20 20 24 64 6f 63 child)]. $doc
3f60: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 delete. set
3f70: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d doc [dom parse -
3f80: 69 67 6e 6f 72 65 78 6d 6c 6e 73 20 7b 3c 64 6f ignorexmlns {<do
3f90: 63 20 78 6d 6c 6e 73 3d 22 66 6f 6f 2e 62 61 72 c xmlns="foo.bar
3fa0: 22 3e 3c 63 68 69 6c 64 2f 3e 3c 2f 64 6f 63 3e "><child/></doc>
3fb0: 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 }]. set root
3fc0: 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c [$doc documentEl
3fd0: 65 6d 65 6e 74 5d 0a 20 20 20 20 6c 61 70 70 65 ement]. lappe
3fe0: 6e 64 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 nd result [$root
3ff0: 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 6c nodeName]. l
4000: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 append result [$
4010: 72 6f 6f 74 20 6e 61 6d 65 73 70 61 63 65 55 52 root namespaceUR
4020: 49 5d 0a 20 20 20 20 73 65 74 20 63 68 69 6c 64 I]. set child
4030: 20 5b 24 72 6f 6f 74 20 66 69 72 73 74 43 68 69 [$root firstChi
4040: 6c 64 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 ld]. lappend
4050: 72 65 73 75 6c 74 20 5b 24 63 68 69 6c 64 20 6e result [$child n
4060: 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 6c 61 70 odeName]. lap
4070: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 68 pend result [$ch
4080: 69 6c 64 20 6e 61 6d 65 73 70 61 63 65 55 52 49 ild namespaceURI
4090: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
40a0: 73 75 6c 74 20 5b 24 64 6f 63 20 73 65 6c 65 63 sult [$doc selec
40b0: 74 4e 6f 64 65 73 20 63 6f 75 6e 74 28 2f 64 6f tNodes count(/do
40c0: 63 2f 63 68 69 6c 64 29 5d 0a 20 20 20 20 24 64 c/child)]. $d
40d0: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
40e0: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 64 6f 63 20 t result.} {doc
40f0: 66 6f 6f 2e 62 61 72 20 63 68 69 6c 64 20 66 6f foo.bar child fo
4100: 6f 2e 62 61 72 20 30 20 64 6f 63 20 7b 7d 20 63 o.bar 0 doc {} c
4110: 68 69 6c 64 20 7b 7d 20 31 7d 0a 0a 74 65 73 74 hild {} 1}..test
4120: 20 64 6f 6d 2d 32 2e 32 38 20 7b 70 61 72 73 65 dom-2.28 {parse
4130: 20 64 6f 63 75 6d 65 6e 74 20 77 69 74 68 20 75 document with u
4140: 6e 64 65 63 6c 61 72 65 64 20 78 6d 6c 20 70 72 ndeclared xml pr
4150: 65 66 69 78 7d 20 7b 0a 20 20 20 20 63 61 74 63 efix} {. catc
4160: 68 20 7b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 h {dom parse {<d
4170: 6f 63 3e 3c 66 6f 6f 3a 65 2f 3e 3c 2f 64 6f 63 oc><foo:e/></doc
4180: 3e 7d 7d 20 65 72 72 4d 73 67 0a 20 20 20 20 73 >}} errMsg. s
4190: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 65 72 72 tring range $err
41a0: 4d 73 67 20 30 20 33 30 0a 7d 20 7b 4e 61 6d 65 Msg 0 30.} {Name
41b0: 73 70 61 63 65 20 70 72 65 66 69 78 20 69 73 20 space prefix is
41c0: 6e 6f 74 20 64 65 66 69 6e 65 64 7d 0a 0a 74 65 not defined}..te
41d0: 73 74 20 64 6f 6d 2d 32 2e 32 39 20 7b 70 61 72 st dom-2.29 {par
41e0: 73 65 20 6e 6f 74 20 77 65 6c 6c 2d 66 6f 72 6d se not well-form
41f0: 65 64 20 64 6f 63 75 6d 65 6e 74 20 77 69 74 68 ed document with
4200: 20 75 6e 64 65 63 6c 61 72 65 64 20 78 6d 6c 20 undeclared xml
4210: 70 72 65 66 69 78 7d 20 7b 0a 20 20 20 20 63 61 prefix} {. ca
4220: 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 65 20 7b tch {dom parse {
4230: 3c 66 6f 6f 3a 65 2f 3e 7d 7d 20 65 72 72 4d 73 <foo:e/>}} errMs
4240: 67 0a 20 20 20 20 73 74 72 69 6e 67 20 72 61 6e g. string ran
4250: 67 65 20 24 65 72 72 4d 73 67 20 30 20 33 30 0a ge $errMsg 0 30.
4260: 7d 20 7b 4e 61 6d 65 73 70 61 63 65 20 70 72 65 } {Namespace pre
4270: 66 69 78 20 69 73 20 6e 6f 74 20 64 65 66 69 6e fix is not defin
4280: 65 64 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e ed}..test dom-2.
4290: 33 30 20 7b 70 61 72 73 65 20 64 6f 63 75 6d 65 30 {parse docume
42a0: 6e 74 20 77 69 74 68 20 75 6e 64 65 63 6c 61 72 nt with undeclar
42b0: 65 64 20 78 6d 6c 20 70 72 65 66 69 78 7d 20 7b ed xml prefix} {
42c0: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 . catch {dom
42d0: 70 61 72 73 65 20 7b 3c 66 6f 6f 3a 65 3e 3c 61 parse {<foo:e><a
42e0: 2f 3e 3c 2f 66 6f 6f 3a 65 3e 7d 7d 20 65 72 72 /></foo:e>}} err
42f0: 4d 73 67 0a 20 20 20 20 73 74 72 69 6e 67 20 72 Msg. string r
4300: 61 6e 67 65 20 24 65 72 72 4d 73 67 20 30 20 33 ange $errMsg 0 3
4310: 30 0a 7d 20 7b 4e 61 6d 65 73 70 61 63 65 20 70 0.} {Namespace p
4320: 72 65 66 69 78 20 69 73 20 6e 6f 74 20 64 65 66 refix is not def
4330: 69 6e 65 64 7d 0a 0a 70 72 6f 63 20 64 6f 6d 2d ined}..proc dom-
4340: 32 2e 33 31 20 7b 62 61 73 65 20 73 79 73 74 65 2.31 {base syste
4350: 6d 49 64 20 70 75 62 6c 69 63 49 64 7d 20 7b 0a mId publicId} {.
4360: 20 20 20 20 73 77 69 74 63 68 20 24 70 75 62 6c switch $publ
4370: 69 63 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 icId {. "
4380: 65 31 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 e1" {.
4390: 20 20 23 20 4e 6f 74 20 77 65 6c 6c 2d 66 6f 72 # Not well-for
43a0: 6d 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 med.
43b0: 73 65 74 20 64 61 74 61 20 22 3c 66 6f 6f 3a 65 set data "<foo:e
43c0: 2f 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 />". }.
43d0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a default {.
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
43f0: 72 20 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 6c 69 r "unknown publi
4400: 63 20 49 44 22 0a 20 20 20 20 20 20 20 20 7d 0a c ID". }.
4410: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e }. return
4420: 20 5b 6c 69 73 74 20 22 73 74 72 69 6e 67 22 20 [list "string"
4430: 24 62 61 73 65 20 24 64 61 74 61 5d 0a 7d 0a 74 $base $data].}.t
4440: 65 73 74 20 64 6f 6d 2d 32 2e 33 31 20 7b 70 61 est dom-2.31 {pa
4450: 72 73 65 20 64 6f 63 75 6d 65 6e 74 20 77 69 74 rse document wit
4460: 68 20 75 6e 64 65 63 6c 61 72 65 64 20 78 6d 6c h undeclared xml
4470: 20 70 72 65 66 69 78 7d 20 7b 0a 20 20 20 20 63 prefix} {. c
4480: 61 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 65 20 atch {dom parse
4490: 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 -externalentityc
44a0: 6f 6d 6d 61 6e 64 20 64 6f 6d 2d 32 2e 33 31 20 ommand dom-2.31
44b0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
44c0: 20 20 7b 3c 21 44 4f 43 54 59 50 45 20 64 6f 63 {<!DOCTYPE doc
44d0: 20 5b 3c 21 45 4e 54 49 54 59 20 65 31 20 50 55 [<!ENTITY e1 PU
44e0: 42 4c 49 43 20 22 65 31 22 20 22 65 31 2e 78 6d BLIC "e1" "e1.xm
44f0: 6c 22 3e 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 l">]>.
4500: 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 3e 26 <doc>&
4510: 65 31 3b 3c 2f 64 6f 63 3e 7d 0a 20 20 20 20 7d e1;</doc>}. }
4520: 20 65 72 72 4d 73 67 0a 20 20 20 20 73 74 72 69 errMsg. stri
4530: 6e 67 20 72 61 6e 67 65 20 24 65 72 72 4d 73 67 ng range $errMsg
4540: 20 30 20 33 30 0a 7d 20 7b 4e 61 6d 65 73 70 61 0 30.} {Namespa
4550: 63 65 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 ce prefix is not
4560: 20 64 65 66 69 6e 65 64 7d 0a 20 20 20 20 0a 74 defined}. .t
4570: 65 73 74 20 64 6f 6d 2d 32 2e 33 32 20 7b 70 61 est dom-2.32 {pa
4580: 72 73 65 20 64 6f 63 75 6d 65 6e 74 20 77 69 74 rse document wit
4590: 68 20 75 6e 64 65 63 6c 61 72 65 64 20 78 6d 6c h undeclared xml
45a0: 20 70 72 65 66 69 78 20 61 6e 64 20 2d 69 67 6e prefix and -ign
45b0: 6f 72 65 78 6d 6c 6e 73 7d 20 7b 0a 20 20 20 20 orexmlns} {.
45c0: 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 set doc [dom par
45d0: 73 65 20 2d 69 67 6e 6f 72 65 78 6d 6c 6e 73 20 se -ignorexmlns
45e0: 7b 3c 66 6f 6f 3a 65 3e 3c 61 2f 3e 3c 2f 66 6f {<foo:e><a/></fo
45f0: 6f 3a 65 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 o:e>}]. set r
4600: 65 73 75 6c 74 20 5b 5b 24 64 6f 63 20 64 6f 63 esult [[$doc doc
4610: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 6e 6f umentElement] no
4620: 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 6f 63 deName]. $doc
4630: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 delete. set
4640: 72 65 73 75 6c 74 0a 7d 20 7b 66 6f 6f 3a 65 7d result.} {foo:e}
4650: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 33 20 ..test dom-2.33
4660: 7b 65 6e 64 20 6f 66 20 6f 70 74 69 6f 6e 73 20 {end of options
4670: 6f 70 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 73 65 option} {. se
4680: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
4690: 20 2d 6a 73 6f 6e 20 2d 2d 20 2d 30 2e 31 32 33 -json -- -0.123
46a0: 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 ]. set result
46b0: 20 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e [$doc asXML -in
46c0: 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 dent none]. $
46d0: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 doc delete. s
46e0: 65 74 20 72 65 73 75 6c 74 0a 7d 20 2d 30 2e 31 et result.} -0.1
46f0: 32 33 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 23..test dom-2.3
4700: 34 20 7b 58 4d 4c 20 70 72 65 66 69 78 20 64 65 4 {XML prefix de
4710: 63 6c 61 72 61 74 69 6f 6e 20 77 69 74 68 20 65 claration with e
4720: 6d 70 74 79 20 6e 61 6d 65 73 70 61 63 65 7d 20 mpty namespace}
4730: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d {. catch {dom
4740: 20 70 61 72 73 65 20 7b 3c 66 6f 6f 3a 64 6f 63 parse {<foo:doc
4750: 20 78 6d 6c 6e 73 3a 66 6f 6f 3d 22 22 3e 3c 65 xmlns:foo=""><e
4760: 31 2f 3e 3c 2f 66 6f 6f 3a 64 6f 63 3e 7d 7d 20 1/></foo:doc>}}
4770: 65 72 72 4d 73 67 0a 20 20 20 20 73 65 74 20 65 errMsg. set e
4780: 72 72 4d 73 67 0a 7d 20 7b 4d 69 73 73 69 6e 67 rrMsg.} {Missing
4790: 20 55 52 49 20 69 6e 20 4e 61 6d 65 73 70 61 63 URI in Namespac
47a0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2c 20 72 e declaration, r
47b0: 65 66 65 72 65 6e 63 65 64 20 61 74 20 6c 69 6e eferenced at lin
47c0: 65 20 31 20 63 68 61 72 61 63 74 65 72 20 32 32 e 1 character 22
47d0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 35 }..test dom-2.35
47e0: 20 7b 2d 6b 65 65 70 43 44 41 54 41 7d 20 7b 0a {-keepCDATA} {.
47f0: 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d set doc [dom
4800: 20 70 61 72 73 65 20 2d 6b 65 65 70 43 44 41 54 parse -keepCDAT
4810: 41 20 7b 3c 64 6f 63 3e 66 6f 6f 20 3c 21 5b 43 A {<doc>foo <![C
4820: 44 41 54 41 5b 74 65 73 74 20 6f 66 20 26 20 3c DATA[test of & <
4830: 62 61 64 3e 20 66 6f 72 6d 61 74 5d 5d 3e 20 62 bad> format]]> b
4840: 61 72 20 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 ar </doc>}].
4850: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 set result [$doc
4860: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
4870: 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 one]. $doc de
4880: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
4890: 75 6c 74 0a 7d 20 7b 3c 64 6f 63 3e 66 6f 6f 20 ult.} {<doc>foo
48a0: 3c 21 5b 43 44 41 54 41 5b 74 65 73 74 20 6f 66 <![CDATA[test of
48b0: 20 26 20 3c 62 61 64 3e 20 66 6f 72 6d 61 74 5d & <bad> format]
48c0: 5d 3e 20 62 61 72 20 3c 2f 64 6f 63 3e 7d 0a 0a ]> bar </doc>}..
48d0: 74 65 73 74 20 64 6f 6d 2d 32 2e 33 36 20 7b 2d test dom-2.36 {-
48e0: 6b 65 65 70 43 44 41 54 41 7d 20 7b 0a 20 20 20 keepCDATA} {.
48f0: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
4900: 72 73 65 20 2d 6b 65 65 70 43 44 41 54 41 20 7b rse -keepCDATA {
4910: 3c 64 6f 63 3e 66 6f 6f 20 3c 21 5b 43 44 41 54 <doc>foo <![CDAT
4920: 41 5b 74 65 73 74 20 6f 66 20 26 20 3c 62 61 64 A[test of & <bad
4930: 3e 20 66 6f 72 6d 61 74 5d 5d 3e 20 62 61 72 20 > format]]> bar
4940: 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 73 65 74 </doc>}]. set
4950: 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 root [$doc docu
4960: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 mentElement].
4970: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 set result [lis
4980: 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 63 t]. foreach c
4990: 68 69 6c 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c hild [$root chil
49a0: 64 4e 6f 64 65 73 5d 20 7b 0a 20 20 20 20 20 20 dNodes] {.
49b0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
49c0: 20 5b 24 63 68 69 6c 64 20 6e 6f 64 65 54 79 70 [$child nodeTyp
49d0: 65 5d 0a 20 20 20 20 7d 0a 20 20 20 20 24 64 6f e]. }. $do
49e0: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 c delete. set
49f0: 20 72 65 73 75 6c 74 0a 7d 20 7b 54 45 58 54 5f result.} {TEXT_
4a00: 4e 4f 44 45 20 43 44 41 54 41 5f 53 45 43 54 49 NODE CDATA_SECTI
4a10: 4f 4e 5f 4e 4f 44 45 20 54 45 58 54 5f 4e 4f 44 ON_NODE TEXT_NOD
4a20: 45 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 E}..test dom-2.3
4a30: 37 20 7b 2d 6b 65 65 70 43 44 41 54 41 7d 20 7b 7 {-keepCDATA} {
4a40: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
4a50: 6d 20 70 61 72 73 65 20 2d 6b 65 65 70 43 44 41 m parse -keepCDA
4a60: 54 41 20 7b 3c 64 6f 63 3e 3c 65 3e 3c 21 5b 43 TA {<doc><e><![C
4a70: 44 41 54 41 5b 6f 6e 65 5d 5d 3e 3c 2f 65 3e 3c DATA[one]]></e><
4a80: 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 73 65 74 20 /doc>}]. set
4a90: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0a 20 20 result [list].
4aa0: 20 20 66 6f 72 65 61 63 68 20 63 68 69 6c 64 20 foreach child
4ab0: 5b 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 [$doc selectNode
4ac0: 73 20 64 6f 63 2f 65 2f 6e 6f 64 65 28 29 5d 20 s doc/e/node()]
4ad0: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e {. lappen
4ae0: 64 20 72 65 73 75 6c 74 20 5b 24 63 68 69 6c 64 d result [$child
4af0: 20 6e 6f 64 65 54 79 70 65 5d 0a 20 20 20 20 7d nodeType]. }
4b00: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 . $doc delete
4b10: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
4b20: 7d 20 7b 43 44 41 54 41 5f 53 45 43 54 49 4f 4e } {CDATA_SECTION
4b30: 5f 4e 4f 44 45 7d 0a 0a 74 65 73 74 20 64 6f 6d _NODE}..test dom
4b40: 2d 32 2e 33 38 20 7b 2d 6b 65 65 70 43 44 41 54 -2.38 {-keepCDAT
4b50: 41 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 A} {. set doc
4b60: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 [dom parse -kee
4b70: 70 43 44 41 54 41 20 7b 3c 64 6f 63 3e 3c 65 3e pCDATA {<doc><e>
4b80: 3c 21 5b 43 44 41 54 41 5b 6f 6e 65 5d 5d 3e 3c <![CDATA[one]]><
4b90: 21 5b 43 44 41 54 41 5b 74 77 6f 5d 5d 3e 3c 2f ![CDATA[two]]></
4ba0: 65 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 73 e></doc>}]. s
4bb0: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d et result [list]
4bc0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 63 68 69 . foreach chi
4bd0: 6c 64 20 5b 24 64 6f 63 20 73 65 6c 65 63 74 4e ld [$doc selectN
4be0: 6f 64 65 73 20 64 6f 63 2f 65 2f 6e 6f 64 65 28 odes doc/e/node(
4bf0: 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 )] {. lap
4c00: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 68 pend result [$ch
4c10: 69 6c 64 20 6e 6f 64 65 54 79 70 65 5d 0a 20 20 ild nodeType].
4c20: 20 20 7d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c }. $doc del
4c30: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 ete. set resu
4c40: 6c 74 0a 7d 20 7b 43 44 41 54 41 5f 53 45 43 54 lt.} {CDATA_SECT
4c50: 49 4f 4e 5f 4e 4f 44 45 20 43 44 41 54 41 5f 53 ION_NODE CDATA_S
4c60: 45 43 54 49 4f 4e 5f 4e 4f 44 45 7d 0a 0a 74 65 ECTION_NODE}..te
4c70: 73 74 20 64 6f 6d 2d 32 2e 33 39 20 7b 2d 6b 65 st dom-2.39 {-ke
4c80: 65 70 43 44 41 54 41 7d 20 7b 0a 20 20 20 20 73 epCDATA} {. s
4c90: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
4ca0: 65 20 2d 6b 65 65 70 43 44 41 54 41 20 7b 3c 64 e -keepCDATA {<d
4cb0: 6f 63 3e 3c 65 3e 3c 21 5b 43 44 41 54 41 5b 5d oc><e><![CDATA[]
4cc0: 5d 3e 3c 2f 65 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 ]></e></doc>}].
4cd0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 set result [$
4ce0: 64 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 doc selectNodes
4cf0: 63 6f 75 6e 74 28 64 6f 63 2f 65 2f 6e 6f 64 65 count(doc/e/node
4d00: 28 29 29 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 ())]. $doc de
4d10: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
4d20: 75 6c 74 0a 7d 20 30 0a 0a 74 65 73 74 20 64 6f ult.} 0..test do
4d30: 6d 2d 32 2e 34 30 20 7b 2d 6b 65 65 70 43 44 41 m-2.40 {-keepCDA
4d40: 54 41 20 77 68 69 74 65 20 73 70 61 63 65 20 6f TA white space o
4d50: 6e 6c 79 20 43 44 41 54 41 20 73 65 63 74 69 6f nly CDATA sectio
4d60: 6e 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 n} {. set doc
4d70: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 65 [dom parse -kee
4d80: 70 43 44 41 54 41 20 7b 3c 64 6f 63 3e 3c 65 3e pCDATA {<doc><e>
4d90: 3c 21 5b 43 44 41 54 41 5b 0a 20 20 20 20 5d 5d <![CDATA[. ]]
4da0: 3e 3c 2f 65 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 ></e></doc>}].
4db0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 set result [$d
4dc0: 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 63 oc selectNodes c
4dd0: 6f 75 6e 74 28 64 6f 63 2f 65 2f 6e 6f 64 65 28 ount(doc/e/node(
4de0: 29 29 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c ))]. $doc del
4df0: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 ete. set resu
4e00: 6c 74 0a 7d 20 30 0a 0a 74 65 73 74 20 64 6f 6d lt.} 0..test dom
4e10: 2d 32 2e 34 31 20 7b 2d 6b 65 65 70 43 44 41 54 -2.41 {-keepCDAT
4e20: 41 20 61 6e 64 20 2d 6b 65 65 70 45 6d 70 74 69 A and -keepEmpti
4e30: 65 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f es} {. set do
4e40: 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 6b 65 c [dom parse -ke
4e50: 65 70 43 44 41 54 41 20 2d 6b 65 65 70 45 6d 70 epCDATA -keepEmp
4e60: 74 69 65 73 20 7b 3c 64 6f 63 3e 3c 65 3e 3c 21 ties {<doc><e><!
4e70: 5b 43 44 41 54 41 5b 5d 5d 3e 3c 2f 65 3e 3c 2f [CDATA[]]></e></
4e80: 64 6f 63 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 doc>}]. set r
4e90: 65 73 75 6c 74 20 5b 24 64 6f 63 20 73 65 6c 65 esult [$doc sele
4ea0: 63 74 4e 6f 64 65 73 20 63 6f 75 6e 74 28 64 6f ctNodes count(do
4eb0: 63 2f 65 2f 6e 6f 64 65 28 29 29 5d 0a 20 20 20 c/e/node())].
4ec0: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
4ed0: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 31 0a set result.} 1.
4ee0: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 34 32 20 7b .test dom-2.42 {
4ef0: 6e 61 6d 65 73 70 61 63 65 73 7d 20 7b 0a 20 20 namespaces} {.
4f00: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
4f10: 61 72 73 65 20 7b 0a 20 20 20 20 20 20 20 20 3c arse {. <
4f20: 68 65 6c 70 3e 3c 62 72 20 78 6d 6c 6e 73 3a 78 help><br xmlns:x
4f30: 73 69 3d 22 61 22 2f 3e 3c 65 6d 20 78 6d 6c 6e si="a"/><em xmln
4f40: 73 3a 78 73 69 3d 22 61 22 3e 6e 6f 74 65 73 3c s:xsi="a">notes<
4f50: 2f 65 6d 3e 3c 2f 68 65 6c 70 3e 0a 20 20 20 20 /em></help>.
4f60: 7d 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 }]. $doc dele
4f70: 74 65 0a 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f te.} {}..test do
4f80: 6d 2d 33 2e 31 20 7b 69 73 4e 61 6d 65 7d 20 7b m-3.1 {isName} {
4f90: 0a 20 20 20 20 64 6f 6d 20 69 73 4e 61 6d 65 20 . dom isName
4fa0: 22 3a 66 6f 6f 22 0a 7d 20 7b 31 7d 0a 0a 74 65 ":foo".} {1}..te
4fb0: 73 74 20 64 6f 6d 2d 33 2e 32 20 7b 69 73 4e 61 st dom-3.2 {isNa
4fc0: 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 me} {. dom is
4fd0: 4e 61 6d 65 20 22 5f 66 6f 6f 22 0a 7d 20 7b 31 Name "_foo".} {1
4fe0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 20 }..test dom-3.3
4ff0: 7b 69 73 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 {isName} {. d
5000: 6f 6d 20 69 73 4e 61 6d 65 20 22 66 6f 6f 3a 62 om isName "foo:b
5010: 61 72 3a 62 61 7a 22 0a 7d 20 7b 31 7d 0a 0a 74 ar:baz".} {1}..t
5020: 65 73 74 20 64 6f 6d 2d 33 2e 34 20 7b 69 73 4e est dom-3.4 {isN
5030: 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 ame} {. dom i
5040: 73 4e 61 6d 65 20 22 2d 66 6f 6f 22 0a 7d 20 7b sName "-foo".} {
5050: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 35 0}..test dom-3.5
5060: 20 7b 69 73 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 {isName} {.
5070: 64 6f 6d 20 69 73 4e 61 6d 65 20 22 2e 66 6f 6f dom isName ".foo
5080: 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f ".} {0}..test do
5090: 6d 2d 33 2e 36 20 7b 69 73 4e 61 6d 65 7d 20 7b m-3.6 {isName} {
50a0: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 . catch {dom
50b0: 69 73 4e 61 6d 65 7d 0a 7d 20 7b 31 7d 0a 0a 74 isName}.} {1}..t
50c0: 65 73 74 20 64 6f 6d 2d 33 2e 37 20 7b 69 73 4e est dom-3.7 {isN
50d0: 61 6d 65 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 ame} {. catch
50e0: 20 7b 64 6f 6d 20 69 73 4e 61 6d 65 20 66 6f 6f {dom isName foo
50f0: 20 62 61 72 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 bar}.} {1}..# T
5100: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 he following cha
5110: 72 61 63 74 65 72 20 63 6c 61 73 73 65 73 20 61 racter classes a
5120: 72 65 20 6f 75 74 20 6f 66 20 58 4d 4c 20 31 2e re out of XML 1.
5130: 30 20 53 65 63 6f 6e 64 20 45 64 69 74 69 6f 6e 0 Second Edition
5140: 20 72 65 63 2c 0a 23 20 41 70 70 65 6e 64 69 78 rec,.# Appendix
5150: 20 42 20 28 77 68 69 63 68 20 69 73 20 66 6f 6c B (which is fol
5160: 6c 6f 77 69 6e 67 20 74 68 65 20 55 6e 69 63 6f lowing the Unico
5170: 64 65 20 73 74 61 6e 64 61 72 64 29 2e 0a 0a 73 de standard)...s
5180: 65 74 20 42 61 73 65 43 68 61 72 20 7b 0a 20 20 et BaseChar {.
5190: 20 20 7b 30 78 30 30 34 31 20 30 78 30 30 35 41 {0x0041 0x005A
51a0: 7d 20 7b 30 78 30 30 36 31 20 30 78 30 30 37 41 } {0x0061 0x007A
51b0: 7d 20 7b 30 78 30 30 43 30 20 30 78 30 30 44 36 } {0x00C0 0x00D6
51c0: 7d 0a 20 20 20 20 7b 30 78 30 30 44 38 20 30 78 }. {0x00D8 0x
51d0: 30 30 46 36 7d 20 7b 30 78 30 30 46 38 20 30 78 00F6} {0x00F8 0x
51e0: 30 30 46 46 7d 20 7b 30 78 30 31 30 30 20 30 78 00FF} {0x0100 0x
51f0: 30 31 33 31 7d 20 7b 30 78 30 31 33 34 20 30 78 0131} {0x0134 0x
5200: 30 31 33 45 7d 0a 20 20 20 20 7b 30 78 30 31 34 013E}. {0x014
5210: 31 20 30 78 30 31 34 38 7d 20 7b 30 78 30 31 34 1 0x0148} {0x014
5220: 41 20 30 78 30 31 37 45 7d 20 7b 30 78 30 31 38 A 0x017E} {0x018
5230: 30 20 30 78 30 31 43 33 7d 0a 20 20 20 20 7b 30 0 0x01C3}. {0
5240: 78 30 31 43 44 20 30 78 30 31 46 30 7d 20 7b 30 x01CD 0x01F0} {0
5250: 78 30 31 46 34 20 30 78 30 31 46 35 7d 20 7b 30 x01F4 0x01F5} {0
5260: 78 30 31 46 41 20 30 78 30 32 31 37 7d 20 7b 30 x01FA 0x0217} {0
5270: 78 30 32 35 30 20 30 78 30 32 41 38 7d 0a 20 20 x0250 0x02A8}.
5280: 20 20 7b 30 78 30 32 42 42 20 30 78 30 32 43 31 {0x02BB 0x02C1
5290: 7d 20 30 78 30 33 38 36 20 7b 30 78 30 33 38 38 } 0x0386 {0x0388
52a0: 20 30 78 30 33 38 41 7d 20 30 78 30 33 38 43 0a 0x038A} 0x038C.
52b0: 20 20 20 20 7b 30 78 30 33 38 45 20 30 78 30 33 {0x038E 0x03
52c0: 41 31 7d 20 7b 30 78 30 33 41 33 20 30 78 30 33 A1} {0x03A3 0x03
52d0: 43 45 7d 20 7b 30 78 30 33 44 30 20 30 78 30 33 CE} {0x03D0 0x03
52e0: 44 36 7d 20 30 78 30 33 44 41 20 30 78 30 33 44 D6} 0x03DA 0x03D
52f0: 43 0a 20 20 20 20 30 78 30 33 44 45 20 30 78 30 C. 0x03DE 0x0
5300: 33 45 30 20 7b 30 78 30 33 45 32 20 30 78 30 33 3E0 {0x03E2 0x03
5310: 46 33 7d 20 7b 30 78 30 34 30 31 20 30 78 30 34 F3} {0x0401 0x04
5320: 30 43 7d 0a 20 20 20 20 7b 30 78 30 34 30 45 20 0C}. {0x040E
5330: 30 78 30 34 34 46 7d 20 7b 30 78 30 34 35 31 20 0x044F} {0x0451
5340: 30 78 30 34 35 43 7d 20 7b 30 78 30 34 35 45 20 0x045C} {0x045E
5350: 30 78 30 34 38 31 7d 20 7b 30 78 30 34 39 30 20 0x0481} {0x0490
5360: 30 78 30 34 43 34 7d 0a 20 20 20 20 7b 30 78 30 0x04C4}. {0x0
5370: 34 43 37 20 30 78 30 34 43 38 7d 20 7b 30 78 30 4C7 0x04C8} {0x0
5380: 34 43 42 20 30 78 30 34 43 43 7d 20 7b 30 78 30 4CB 0x04CC} {0x0
5390: 34 44 30 20 30 78 30 34 45 42 7d 0a 20 20 20 20 4D0 0x04EB}.
53a0: 7b 30 78 30 34 45 45 20 30 78 30 34 46 35 7d 20 {0x04EE 0x04F5}
53b0: 7b 30 78 30 34 46 38 20 30 78 30 34 46 39 7d 20 {0x04F8 0x04F9}
53c0: 7b 30 78 30 35 33 31 20 30 78 30 35 35 36 7d 20 {0x0531 0x0556}
53d0: 30 78 30 35 35 39 0a 20 20 20 20 7b 30 78 30 35 0x0559. {0x05
53e0: 36 31 20 30 78 30 35 38 36 7d 20 7b 30 78 30 35 61 0x0586} {0x05
53f0: 44 30 20 30 78 30 35 45 41 7d 20 7b 30 78 30 35 D0 0x05EA} {0x05
5400: 46 30 20 30 78 30 35 46 32 7d 20 7b 30 78 30 36 F0 0x05F2} {0x06
5410: 32 31 20 30 78 30 36 33 41 7d 0a 20 20 20 20 7b 21 0x063A}. {
5420: 30 78 30 36 34 31 20 30 78 30 36 34 41 7d 20 7b 0x0641 0x064A} {
5430: 30 78 30 36 37 31 20 30 78 30 36 42 37 7d 20 7b 0x0671 0x06B7} {
5440: 30 78 30 36 42 41 20 30 78 30 36 42 45 7d 0a 20 0x06BA 0x06BE}.
5450: 20 20 20 7b 30 78 30 36 43 30 20 30 78 30 36 43 {0x06C0 0x06C
5460: 45 7d 20 7b 30 78 30 36 44 30 20 30 78 30 36 44 E} {0x06D0 0x06D
5470: 33 7d 20 30 78 30 36 44 35 20 7b 30 78 30 36 45 3} 0x06D5 {0x06E
5480: 35 20 30 78 30 36 45 36 7d 0a 20 20 20 20 7b 30 5 0x06E6}. {0
5490: 78 30 39 30 35 20 30 78 30 39 33 39 7d 20 30 78 x0905 0x0939} 0x
54a0: 30 39 33 44 20 7b 30 78 30 39 35 38 20 30 78 30 093D {0x0958 0x0
54b0: 39 36 31 7d 20 7b 30 78 30 39 38 35 20 30 78 30 961} {0x0985 0x0
54c0: 39 38 43 7d 0a 20 20 20 20 7b 30 78 30 39 38 46 98C}. {0x098F
54d0: 20 30 78 30 39 39 30 7d 20 7b 30 78 30 39 39 33 0x0990} {0x0993
54e0: 20 30 78 30 39 41 38 7d 20 7b 30 78 30 39 41 41 0x09A8} {0x09AA
54f0: 20 30 78 30 39 42 30 7d 20 30 78 30 39 42 32 0a 0x09B0} 0x09B2.
5500: 20 20 20 20 7b 30 78 30 39 42 36 20 30 78 30 39 {0x09B6 0x09
5510: 42 39 7d 20 7b 30 78 30 39 44 43 20 30 78 30 39 B9} {0x09DC 0x09
5520: 44 44 7d 20 7b 30 78 30 39 44 46 20 30 78 30 39 DD} {0x09DF 0x09
5530: 45 31 7d 20 7b 30 78 30 39 46 30 20 30 78 30 39 E1} {0x09F0 0x09
5540: 46 31 7d 0a 20 20 20 20 7b 30 78 30 41 30 35 20 F1}. {0x0A05
5550: 30 78 30 41 30 41 7d 20 7b 30 78 30 41 30 46 20 0x0A0A} {0x0A0F
5560: 30 78 30 41 31 30 7d 20 7b 30 78 30 41 31 33 20 0x0A10} {0x0A13
5570: 30 78 30 41 32 38 7d 0a 20 20 20 20 7b 30 78 30 0x0A28}. {0x0
5580: 41 32 41 20 30 78 30 41 33 30 7d 20 7b 30 78 30 A2A 0x0A30} {0x0
5590: 41 33 32 20 30 78 30 41 33 33 7d 20 7b 30 78 30 A32 0x0A33} {0x0
55a0: 41 33 35 20 30 78 30 41 33 36 7d 20 7b 30 78 30 A35 0x0A36} {0x0
55b0: 41 33 38 20 30 78 30 41 33 39 7d 0a 20 20 20 20 A38 0x0A39}.
55c0: 7b 30 78 30 41 35 39 20 30 78 30 41 35 43 7d 20 {0x0A59 0x0A5C}
55d0: 30 78 30 41 35 45 20 7b 30 78 30 41 37 32 20 30 0x0A5E {0x0A72 0
55e0: 78 30 41 37 34 7d 20 7b 30 78 30 41 38 35 20 30 x0A74} {0x0A85 0
55f0: 78 30 41 38 42 7d 0a 20 20 20 20 30 78 30 41 38 x0A8B}. 0x0A8
5600: 44 20 7b 30 78 30 41 38 46 20 30 78 30 41 39 31 D {0x0A8F 0x0A91
5610: 7d 20 7b 30 78 30 41 39 33 20 30 78 30 41 41 38 } {0x0A93 0x0AA8
5620: 7d 20 7b 30 78 30 41 41 41 20 30 78 30 41 42 30 } {0x0AAA 0x0AB0
5630: 7d 0a 20 20 20 20 7b 30 78 30 41 42 32 20 30 78 }. {0x0AB2 0x
5640: 30 41 42 33 7d 20 7b 30 78 30 41 42 35 20 30 78 0AB3} {0x0AB5 0x
5650: 30 41 42 39 7d 20 30 78 30 41 42 44 20 30 78 30 0AB9} 0x0ABD 0x0
5660: 41 45 30 20 7b 30 78 30 42 30 35 20 30 78 30 42 AE0 {0x0B05 0x0B
5670: 30 43 7d 0a 20 20 20 20 7b 30 78 30 42 30 46 20 0C}. {0x0B0F
5680: 30 78 30 42 31 30 7d 20 7b 30 78 30 42 31 33 20 0x0B10} {0x0B13
5690: 30 78 30 42 32 38 7d 20 7b 30 78 30 42 32 41 20 0x0B28} {0x0B2A
56a0: 30 78 30 42 33 30 7d 0a 20 20 20 20 7b 30 78 30 0x0B30}. {0x0
56b0: 42 33 32 20 30 78 30 42 33 33 7d 20 7b 30 78 30 B32 0x0B33} {0x0
56c0: 42 33 36 20 30 78 30 42 33 39 7d 20 30 78 30 42 B36 0x0B39} 0x0B
56d0: 33 44 20 7b 30 78 30 42 35 43 20 30 78 30 42 35 3D {0x0B5C 0x0B5
56e0: 44 7d 0a 20 20 20 20 7b 30 78 30 42 35 46 20 30 D}. {0x0B5F 0
56f0: 78 30 42 36 31 7d 20 7b 30 78 30 42 38 35 20 30 x0B61} {0x0B85 0
5700: 78 30 42 38 41 7d 20 7b 30 78 30 42 38 45 20 30 x0B8A} {0x0B8E 0
5710: 78 30 42 39 30 7d 20 7b 30 78 30 42 39 32 20 30 x0B90} {0x0B92 0
5720: 78 30 42 39 35 7d 0a 20 20 20 20 7b 30 78 30 42 x0B95}. {0x0B
5730: 39 39 20 30 78 30 42 39 41 7d 20 30 78 30 42 39 99 0x0B9A} 0x0B9
5740: 43 20 7b 30 78 30 42 39 45 20 30 78 30 42 39 46 C {0x0B9E 0x0B9F
5750: 7d 20 7b 30 78 30 42 41 33 20 30 78 30 42 41 34 } {0x0BA3 0x0BA4
5760: 7d 0a 20 20 20 20 7b 30 78 30 42 41 38 20 30 78 }. {0x0BA8 0x
5770: 30 42 41 41 7d 20 7b 30 78 30 42 41 45 20 30 78 0BAA} {0x0BAE 0x
5780: 30 42 42 35 7d 20 7b 30 78 30 42 42 37 20 30 78 0BB5} {0x0BB7 0x
5790: 30 42 42 39 7d 20 7b 30 78 30 43 30 35 20 30 78 0BB9} {0x0C05 0x
57a0: 30 43 30 43 7d 0a 20 20 20 20 7b 30 78 30 43 30 0C0C}. {0x0C0
57b0: 45 20 30 78 30 43 31 30 7d 20 7b 30 78 30 43 31 E 0x0C10} {0x0C1
57c0: 32 20 30 78 30 43 32 38 7d 20 7b 30 78 30 43 32 2 0x0C28} {0x0C2
57d0: 41 20 30 78 30 43 33 33 7d 0a 20 20 20 20 7b 30 A 0x0C33}. {0
57e0: 78 30 43 33 35 20 30 78 30 43 33 39 7d 20 7b 30 x0C35 0x0C39} {0
57f0: 78 30 43 36 30 20 30 78 30 43 36 31 7d 20 7b 30 x0C60 0x0C61} {0
5800: 78 30 43 38 35 20 30 78 30 43 38 43 7d 20 7b 30 x0C85 0x0C8C} {0
5810: 78 30 43 38 45 20 30 78 30 43 39 30 7d 0a 20 20 x0C8E 0x0C90}.
5820: 20 20 7b 30 78 30 43 39 32 20 30 78 30 43 41 38 {0x0C92 0x0CA8
5830: 7d 20 7b 30 78 30 43 41 41 20 30 78 30 43 42 33 } {0x0CAA 0x0CB3
5840: 7d 20 7b 30 78 30 43 42 35 20 30 78 30 43 42 39 } {0x0CB5 0x0CB9
5850: 7d 20 30 78 30 43 44 45 0a 20 20 20 20 7b 30 78 } 0x0CDE. {0x
5860: 30 43 45 30 20 30 78 30 43 45 31 7d 20 7b 30 78 0CE0 0x0CE1} {0x
5870: 30 44 30 35 20 30 78 30 44 30 43 7d 20 7b 30 78 0D05 0x0D0C} {0x
5880: 30 44 30 45 20 30 78 30 44 31 30 7d 20 7b 30 78 0D0E 0x0D10} {0x
5890: 30 44 31 32 20 30 78 30 44 32 38 7d 0a 20 20 20 0D12 0x0D28}.
58a0: 20 7b 30 78 30 44 32 41 20 30 78 30 44 33 39 7d {0x0D2A 0x0D39}
58b0: 20 7b 30 78 30 44 36 30 20 30 78 30 44 36 31 7d {0x0D60 0x0D61}
58c0: 20 7b 30 78 30 45 30 31 20 30 78 30 45 32 45 7d {0x0E01 0x0E2E}
58d0: 20 30 78 30 45 33 30 0a 20 20 20 20 7b 30 78 30 0x0E30. {0x0
58e0: 45 33 32 20 30 78 30 45 33 33 7d 20 7b 30 78 30 E32 0x0E33} {0x0
58f0: 45 34 30 20 30 78 30 45 34 35 7d 20 7b 30 78 30 E40 0x0E45} {0x0
5900: 45 38 31 20 30 78 30 45 38 32 7d 20 30 78 30 45 E81 0x0E82} 0x0E
5910: 38 34 0a 20 20 20 20 7b 30 78 30 45 38 37 20 30 84. {0x0E87 0
5920: 78 30 45 38 38 7d 20 30 78 30 45 38 41 20 30 78 x0E88} 0x0E8A 0x
5930: 30 45 38 44 20 7b 30 78 30 45 39 34 20 30 78 30 0E8D {0x0E94 0x0
5940: 45 39 37 7d 20 7b 30 78 30 45 39 39 20 30 78 30 E97} {0x0E99 0x0
5950: 45 39 46 7d 0a 20 20 20 20 7b 30 78 30 45 41 31 E9F}. {0x0EA1
5960: 20 30 78 30 45 41 33 7d 20 30 78 30 45 41 35 20 0x0EA3} 0x0EA5
5970: 30 78 30 45 41 37 20 7b 30 78 30 45 41 41 20 30 0x0EA7 {0x0EAA 0
5980: 78 30 45 41 42 7d 0a 20 20 20 20 7b 30 78 30 45 x0EAB}. {0x0E
5990: 41 44 20 30 78 30 45 41 45 7d 20 30 78 30 45 42 AD 0x0EAE} 0x0EB
59a0: 30 20 7b 30 78 30 45 42 32 20 30 78 30 45 42 33 0 {0x0EB2 0x0EB3
59b0: 7d 20 30 78 30 45 42 44 20 7b 30 78 30 45 43 30 } 0x0EBD {0x0EC0
59c0: 20 30 78 30 45 43 34 7d 0a 20 20 20 20 7b 30 78 0x0EC4}. {0x
59d0: 30 46 34 30 20 30 78 30 46 34 37 7d 20 7b 30 78 0F40 0x0F47} {0x
59e0: 30 46 34 39 20 30 78 30 46 36 39 7d 20 7b 30 78 0F49 0x0F69} {0x
59f0: 31 30 41 30 20 30 78 31 30 43 35 7d 0a 20 20 20 10A0 0x10C5}.
5a00: 20 7b 30 78 31 30 44 30 20 30 78 31 30 46 36 7d {0x10D0 0x10F6}
5a10: 20 30 78 31 31 30 30 20 7b 30 78 31 31 30 32 20 0x1100 {0x1102
5a20: 30 78 31 31 30 33 7d 20 7b 30 78 31 31 30 35 20 0x1103} {0x1105
5a30: 30 78 31 31 30 37 7d 20 30 78 31 31 30 39 0a 20 0x1107} 0x1109.
5a40: 20 20 20 7b 30 78 31 31 30 42 20 30 78 31 31 30 {0x110B 0x110
5a50: 43 7d 20 7b 30 78 31 31 30 45 20 30 78 31 31 31 C} {0x110E 0x111
5a60: 32 7d 20 30 78 31 31 33 43 20 30 78 31 31 33 45 2} 0x113C 0x113E
5a70: 20 30 78 31 31 34 30 0a 20 20 20 20 30 78 31 31 0x1140. 0x11
5a80: 34 43 20 30 78 31 31 34 45 20 30 78 31 31 35 30 4C 0x114E 0x1150
5a90: 20 7b 30 78 31 31 35 34 20 30 78 31 31 35 35 7d {0x1154 0x1155}
5aa0: 20 30 78 31 31 35 39 20 7b 30 78 31 31 35 46 20 0x1159 {0x115F
5ab0: 30 78 31 31 36 31 7d 0a 20 20 20 20 30 78 31 31 0x1161}. 0x11
5ac0: 36 33 20 30 78 31 31 36 35 20 30 78 31 31 36 37 63 0x1165 0x1167
5ad0: 20 30 78 31 31 36 39 20 7b 30 78 31 31 36 44 20 0x1169 {0x116D
5ae0: 30 78 31 31 36 45 7d 0a 20 20 20 20 7b 30 78 31 0x116E}. {0x1
5af0: 31 37 32 20 30 78 31 31 37 33 7d 20 30 78 31 31 172 0x1173} 0x11
5b00: 37 35 20 30 78 31 31 39 45 20 30 78 31 31 41 38 75 0x119E 0x11A8
5b10: 20 30 78 31 31 41 42 20 7b 30 78 31 31 41 45 20 0x11AB {0x11AE
5b20: 30 78 31 31 41 46 7d 0a 20 20 20 20 7b 30 78 31 0x11AF}. {0x1
5b30: 31 42 37 20 30 78 31 31 42 38 7d 20 30 78 31 31 1B7 0x11B8} 0x11
5b40: 42 41 20 7b 30 78 31 31 42 43 20 30 78 31 31 43 BA {0x11BC 0x11C
5b50: 32 7d 20 30 78 31 31 45 42 20 30 78 31 31 46 30 2} 0x11EB 0x11F0
5b60: 0a 20 20 20 20 30 78 31 31 46 39 20 7b 30 78 31 . 0x11F9 {0x1
5b70: 45 30 30 20 30 78 31 45 39 42 7d 20 7b 30 78 31 E00 0x1E9B} {0x1
5b80: 45 41 30 20 30 78 31 45 46 39 7d 20 7b 30 78 31 EA0 0x1EF9} {0x1
5b90: 46 30 30 20 30 78 31 46 31 35 7d 0a 20 20 20 20 F00 0x1F15}.
5ba0: 7b 30 78 31 46 31 38 20 30 78 31 46 31 44 7d 20 {0x1F18 0x1F1D}
5bb0: 7b 30 78 31 46 32 30 20 30 78 31 46 34 35 7d 20 {0x1F20 0x1F45}
5bc0: 7b 30 78 31 46 34 38 20 30 78 31 46 34 44 7d 20 {0x1F48 0x1F4D}
5bd0: 7b 30 78 31 46 35 30 20 30 78 31 46 35 37 7d 0a {0x1F50 0x1F57}.
5be0: 20 20 20 20 30 78 31 46 35 39 20 30 78 31 46 35 0x1F59 0x1F5
5bf0: 42 20 30 78 31 46 35 44 20 7b 30 78 31 46 35 46 B 0x1F5D {0x1F5F
5c00: 20 30 78 31 46 37 44 7d 20 7b 30 78 31 46 38 30 0x1F7D} {0x1F80
5c10: 20 30 78 31 46 42 34 7d 0a 20 20 20 20 7b 30 78 0x1FB4}. {0x
5c20: 31 46 42 36 20 30 78 31 46 42 43 7d 20 30 78 31 1FB6 0x1FBC} 0x1
5c30: 46 42 45 20 7b 30 78 31 46 43 32 20 30 78 31 46 FBE {0x1FC2 0x1F
5c40: 43 34 7d 20 7b 30 78 31 46 43 36 20 30 78 31 46 C4} {0x1FC6 0x1F
5c50: 43 43 7d 0a 20 20 20 20 7b 30 78 31 46 44 30 20 CC}. {0x1FD0
5c60: 30 78 31 46 44 33 7d 20 7b 30 78 31 46 44 36 20 0x1FD3} {0x1FD6
5c70: 30 78 31 46 44 42 7d 20 7b 30 78 31 46 45 30 20 0x1FDB} {0x1FE0
5c80: 30 78 31 46 45 43 7d 20 7b 30 78 31 46 46 32 20 0x1FEC} {0x1FF2
5c90: 30 78 31 46 46 34 7d 0a 20 20 20 20 7b 30 78 31 0x1FF4}. {0x1
5ca0: 46 46 36 20 30 78 31 46 46 43 7d 20 30 78 32 31 FF6 0x1FFC} 0x21
5cb0: 32 36 20 7b 30 78 32 31 32 41 20 30 78 32 31 32 26 {0x212A 0x212
5cc0: 42 7d 20 30 78 32 31 32 45 0a 20 20 20 20 7b 30 B} 0x212E. {0
5cd0: 78 32 31 38 30 20 30 78 32 31 38 32 7d 20 7b 30 x2180 0x2182} {0
5ce0: 78 33 30 34 31 20 30 78 33 30 39 34 7d 20 7b 30 x3041 0x3094} {0
5cf0: 78 33 30 41 31 20 30 78 33 30 46 41 7d 20 7b 30 x30A1 0x30FA} {0
5d00: 78 33 31 30 35 20 30 78 33 31 32 43 7d 0a 20 20 x3105 0x312C}.
5d10: 20 20 7b 30 78 41 43 30 30 20 30 78 44 37 41 33 {0xAC00 0xD7A3
5d20: 7d 0a 7d 0a 0a 73 65 74 20 49 64 65 6f 67 72 61 }.}..set Ideogra
5d30: 70 68 69 63 20 7b 0a 20 20 20 20 7b 30 78 34 45 phic {. {0x4E
5d40: 30 30 20 30 78 39 46 41 35 7d 20 30 78 33 30 30 00 0x9FA5} 0x300
5d50: 37 20 7b 30 78 33 30 32 31 20 30 78 33 30 32 39 7 {0x3021 0x3029
5d60: 7d 0a 7d 0a 0a 73 65 74 20 43 6f 6d 62 69 6e 69 }.}..set Combini
5d70: 6e 67 43 68 61 72 20 7b 0a 20 20 20 20 7b 30 78 ngChar {. {0x
5d80: 30 33 30 30 20 30 78 30 33 34 35 7d 20 7b 30 78 0300 0x0345} {0x
5d90: 30 33 36 30 20 30 78 30 33 36 31 7d 20 7b 30 78 0360 0x0361} {0x
5da0: 30 34 38 33 20 30 78 30 34 38 36 7d 20 7b 30 78 0483 0x0486} {0x
5db0: 30 35 39 31 20 30 78 30 35 41 31 7d 0a 20 20 20 0591 0x05A1}.
5dc0: 20 7b 30 78 30 35 41 33 20 30 78 30 35 42 39 7d {0x05A3 0x05B9}
5dd0: 20 7b 30 78 30 35 42 42 20 30 78 30 35 42 44 7d {0x05BB 0x05BD}
5de0: 20 30 78 30 35 42 46 20 7b 30 78 30 35 43 31 20 0x05BF {0x05C1
5df0: 30 78 30 35 43 32 7d 0a 20 20 20 20 30 78 30 35 0x05C2}. 0x05
5e00: 43 34 20 7b 30 78 30 36 34 42 20 30 78 30 36 35 C4 {0x064B 0x065
5e10: 32 7d 20 30 78 30 36 37 30 20 7b 30 78 30 36 44 2} 0x0670 {0x06D
5e20: 36 20 30 78 30 36 44 43 7d 20 7b 30 78 30 36 44 6 0x06DC} {0x06D
5e30: 44 20 30 78 30 36 44 46 7d 0a 20 20 20 20 7b 30 D 0x06DF}. {0
5e40: 78 30 36 45 30 20 30 78 30 36 45 34 7d 20 7b 30 x06E0 0x06E4} {0
5e50: 78 30 36 45 37 20 30 78 30 36 45 38 7d 20 7b 30 x06E7 0x06E8} {0
5e60: 78 30 36 45 41 20 30 78 30 36 45 44 7d 0a 20 20 x06EA 0x06ED}.
5e70: 20 20 7b 30 78 30 39 30 31 20 30 78 30 39 30 33 {0x0901 0x0903
5e80: 7d 20 30 78 30 39 33 43 20 7b 30 78 30 39 33 45 } 0x093C {0x093E
5e90: 20 30 78 30 39 34 43 7d 20 30 78 30 39 34 44 20 0x094C} 0x094D
5ea0: 7b 30 78 30 39 35 31 20 30 78 30 39 35 34 7d 0a {0x0951 0x0954}.
5eb0: 20 20 20 20 7b 30 78 30 39 36 32 20 30 78 30 39 {0x0962 0x09
5ec0: 36 33 7d 20 7b 30 78 30 39 38 31 20 30 78 30 39 63} {0x0981 0x09
5ed0: 38 33 7d 20 30 78 30 39 42 43 20 30 78 30 39 42 83} 0x09BC 0x09B
5ee0: 45 20 30 78 30 39 42 46 0a 20 20 20 20 7b 30 78 E 0x09BF. {0x
5ef0: 30 39 43 30 20 30 78 30 39 43 34 7d 20 7b 30 78 09C0 0x09C4} {0x
5f00: 30 39 43 37 20 30 78 30 39 43 38 7d 20 7b 30 78 09C7 0x09C8} {0x
5f10: 30 39 43 42 20 30 78 30 39 43 44 7d 20 30 78 30 09CB 0x09CD} 0x0
5f20: 39 44 37 0a 20 20 20 20 7b 30 78 30 39 45 32 20 9D7. {0x09E2
5f30: 30 78 30 39 45 33 7d 20 30 78 30 41 30 32 20 30 0x09E3} 0x0A02 0
5f40: 78 30 41 33 43 20 30 78 30 41 33 45 20 30 78 30 x0A3C 0x0A3E 0x0
5f50: 41 33 46 20 7b 30 78 30 41 34 30 20 30 78 30 41 A3F {0x0A40 0x0A
5f60: 34 32 7d 0a 20 20 20 20 7b 30 78 30 41 34 37 20 42}. {0x0A47
5f70: 30 78 30 41 34 38 7d 20 7b 30 78 30 41 34 42 20 0x0A48} {0x0A4B
5f80: 30 78 30 41 34 44 7d 20 7b 30 78 30 41 37 30 20 0x0A4D} {0x0A70
5f90: 30 78 30 41 37 31 7d 0a 20 20 20 20 7b 30 78 30 0x0A71}. {0x0
5fa0: 41 38 31 20 30 78 30 41 38 33 7d 20 30 78 30 41 A81 0x0A83} 0x0A
5fb0: 42 43 20 7b 30 78 30 41 42 45 20 30 78 30 41 43 BC {0x0ABE 0x0AC
5fc0: 35 7d 20 7b 30 78 30 41 43 37 20 30 78 30 41 43 5} {0x0AC7 0x0AC
5fd0: 39 7d 0a 20 20 20 20 7b 30 78 30 41 43 42 20 30 9}. {0x0ACB 0
5fe0: 78 30 41 43 44 7d 20 7b 30 78 30 42 30 31 20 30 x0ACD} {0x0B01 0
5ff0: 78 30 42 30 33 7d 20 30 78 30 42 33 43 20 7b 30 x0B03} 0x0B3C {0
6000: 78 30 42 33 45 20 30 78 30 42 34 33 7d 0a 20 20 x0B3E 0x0B43}.
6010: 20 20 7b 30 78 30 42 34 37 20 30 78 30 42 34 38 {0x0B47 0x0B48
6020: 7d 20 7b 30 78 30 42 34 42 20 30 78 30 42 34 44 } {0x0B4B 0x0B4D
6030: 7d 20 7b 30 78 30 42 35 36 20 30 78 30 42 35 37 } {0x0B56 0x0B57
6040: 7d 20 7b 30 78 30 42 38 32 20 30 78 30 42 38 33 } {0x0B82 0x0B83
6050: 7d 0a 20 20 20 20 7b 30 78 30 42 42 45 20 30 78 }. {0x0BBE 0x
6060: 30 42 43 32 7d 20 7b 30 78 30 42 43 36 20 30 78 0BC2} {0x0BC6 0x
6070: 30 42 43 38 7d 20 7b 30 78 30 42 43 41 20 30 78 0BC8} {0x0BCA 0x
6080: 30 42 43 44 7d 20 30 78 30 42 44 37 0a 20 20 20 0BCD} 0x0BD7.
6090: 20 7b 30 78 30 43 30 31 20 30 78 30 43 30 33 7d {0x0C01 0x0C03}
60a0: 20 7b 30 78 30 43 33 45 20 30 78 30 43 34 34 7d {0x0C3E 0x0C44}
60b0: 20 7b 30 78 30 43 34 36 20 30 78 30 43 34 38 7d {0x0C46 0x0C48}
60c0: 20 7b 30 78 30 43 34 41 20 30 78 30 43 34 44 7d {0x0C4A 0x0C4D}
60d0: 0a 20 20 20 20 7b 30 78 30 43 35 35 20 30 78 30 . {0x0C55 0x0
60e0: 43 35 36 7d 20 7b 30 78 30 43 38 32 20 30 78 30 C56} {0x0C82 0x0
60f0: 43 38 33 7d 20 7b 30 78 30 43 42 45 20 30 78 30 C83} {0x0CBE 0x0
6100: 43 43 34 7d 0a 20 20 20 20 7b 30 78 30 43 43 36 CC4}. {0x0CC6
6110: 20 30 78 30 43 43 38 7d 20 7b 30 78 30 43 43 41 0x0CC8} {0x0CCA
6120: 20 30 78 30 43 43 44 7d 20 7b 30 78 30 43 44 35 0x0CCD} {0x0CD5
6130: 20 30 78 30 43 44 36 7d 20 7b 30 78 30 44 30 32 0x0CD6} {0x0D02
6140: 20 30 78 30 44 30 33 7d 0a 20 20 20 20 7b 30 78 0x0D03}. {0x
6150: 30 44 33 45 20 30 78 30 44 34 33 7d 20 7b 30 78 0D3E 0x0D43} {0x
6160: 30 44 34 36 20 30 78 30 44 34 38 7d 20 7b 30 78 0D46 0x0D48} {0x
6170: 30 44 34 41 20 30 78 30 44 34 44 7d 20 30 78 30 0D4A 0x0D4D} 0x0
6180: 44 35 37 0a 20 20 20 20 30 78 30 45 33 31 20 7b D57. 0x0E31 {
6190: 30 78 30 45 33 34 20 30 78 30 45 33 41 7d 20 7b 0x0E34 0x0E3A} {
61a0: 30 78 30 45 34 37 20 30 78 30 45 34 45 7d 20 30 0x0E47 0x0E4E} 0
61b0: 78 30 45 42 31 20 7b 30 78 30 45 42 34 20 30 78 x0EB1 {0x0EB4 0x
61c0: 30 45 42 39 7d 0a 20 20 20 20 7b 30 78 30 45 42 0EB9}. {0x0EB
61d0: 42 20 30 78 30 45 42 43 7d 20 7b 30 78 30 45 43 B 0x0EBC} {0x0EC
61e0: 38 20 30 78 30 45 43 44 7d 20 7b 30 78 30 46 31 8 0x0ECD} {0x0F1
61f0: 38 20 30 78 30 46 31 39 7d 20 30 78 30 46 33 35 8 0x0F19} 0x0F35
6200: 0a 20 20 20 20 30 78 30 46 33 37 20 30 78 30 46 . 0x0F37 0x0F
6210: 33 39 20 30 78 30 46 33 45 20 30 78 30 46 33 46 39 0x0F3E 0x0F3F
6220: 20 7b 30 78 30 46 37 31 20 30 78 30 46 38 34 7d {0x0F71 0x0F84}
6230: 20 7b 30 78 30 46 38 36 20 30 78 30 46 38 42 7d {0x0F86 0x0F8B}
6240: 0a 20 20 20 20 7b 30 78 30 46 39 30 20 30 78 30 . {0x0F90 0x0
6250: 46 39 35 7d 20 30 78 30 46 39 37 20 7b 30 78 30 F95} 0x0F97 {0x0
6260: 46 39 39 20 30 78 30 46 41 44 7d 20 7b 30 78 30 F99 0x0FAD} {0x0
6270: 46 42 31 20 30 78 30 46 42 37 7d 0a 20 20 20 20 FB1 0x0FB7}.
6280: 30 78 30 46 42 39 20 7b 30 78 32 30 44 30 20 30 0x0FB9 {0x20D0 0
6290: 78 32 30 44 43 7d 20 30 78 32 30 45 31 20 7b 30 x20DC} 0x20E1 {0
62a0: 78 33 30 32 41 20 30 78 33 30 32 46 7d 20 30 78 x302A 0x302F} 0x
62b0: 33 30 39 39 20 30 78 33 30 39 41 0a 7d 0a 0a 73 3099 0x309A.}..s
62c0: 65 74 20 44 69 67 69 74 20 7b 0a 20 20 20 20 7b et Digit {. {
62d0: 30 78 30 30 33 30 20 30 78 30 30 33 39 7d 20 7b 0x0030 0x0039} {
62e0: 30 78 30 36 36 30 20 30 78 30 36 36 39 7d 20 7b 0x0660 0x0669} {
62f0: 30 78 30 36 46 30 20 30 78 30 36 46 39 7d 20 7b 0x06F0 0x06F9} {
6300: 30 78 30 39 36 36 20 30 78 30 39 36 46 7d 0a 20 0x0966 0x096F}.
6310: 20 20 20 7b 30 78 30 39 45 36 20 30 78 30 39 45 {0x09E6 0x09E
6320: 46 7d 20 7b 30 78 30 41 36 36 20 30 78 30 41 36 F} {0x0A66 0x0A6
6330: 46 7d 20 7b 30 78 30 41 45 36 20 30 78 30 41 45 F} {0x0AE6 0x0AE
6340: 46 7d 0a 20 20 20 20 7b 30 78 30 42 36 36 20 30 F}. {0x0B66 0
6350: 78 30 42 36 46 7d 20 7b 30 78 30 42 45 37 20 30 x0B6F} {0x0BE7 0
6360: 78 30 42 45 46 7d 20 7b 30 78 30 43 36 36 20 30 x0BEF} {0x0C66 0
6370: 78 30 43 36 46 7d 20 7b 30 78 30 43 45 36 20 30 x0C6F} {0x0CE6 0
6380: 78 30 43 45 46 7d 0a 20 20 20 20 7b 30 78 30 44 x0CEF}. {0x0D
6390: 36 36 20 30 78 30 44 36 46 7d 20 7b 30 78 30 45 66 0x0D6F} {0x0E
63a0: 35 30 20 30 78 30 45 35 39 7d 20 7b 30 78 30 45 50 0x0E59} {0x0E
63b0: 44 30 20 30 78 30 45 44 39 7d 0a 20 20 20 20 7b D0 0x0ED9}. {
63c0: 30 78 30 46 32 30 20 30 78 30 46 32 39 7d 0a 7d 0x0F20 0x0F29}.}
63d0: 0a 0a 73 65 74 20 45 78 74 65 6e 64 65 72 20 7b ..set Extender {
63e0: 0a 20 20 20 20 30 78 30 30 42 37 20 30 78 30 32 . 0x00B7 0x02
63f0: 44 30 20 30 78 30 32 44 31 20 30 78 30 33 38 37 D0 0x02D1 0x0387
6400: 20 30 78 30 36 34 30 20 30 78 30 45 34 36 20 30 0x0640 0x0E46 0
6410: 78 30 45 43 36 20 30 78 33 30 30 35 0a 20 20 20 x0EC6 0x3005.
6420: 20 7b 30 78 33 30 33 31 20 30 78 33 30 33 35 7d {0x3031 0x3035}
6430: 20 7b 30 78 33 30 39 44 20 30 78 33 30 39 45 7d {0x309D 0x309E}
6440: 20 7b 30 78 33 30 46 43 20 30 78 33 30 46 45 7d {0x30FC 0x30FE}
6450: 0a 7d 0a 0a 70 72 6f 63 20 73 6f 72 74 43 6d 64 .}..proc sortCmd
6460: 20 7b 61 20 62 7d 20 7b 0a 20 20 20 20 69 66 20 {a b} {. if
6470: 7b 5b 6c 69 6e 64 65 78 20 24 61 20 30 5d 20 3e {[lindex $a 0] >
6480: 20 5b 6c 69 6e 64 65 78 20 24 62 20 30 5d 7d 20 [lindex $b 0]}
6490: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e {. return
64a0: 20 31 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 1. } else {.
64b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d return -
64c0: 31 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 20 69 66 1. }.}..# if
64d0: 20 7b 24 74 63 6c 5f 76 65 72 73 69 6f 6e 20 3c {$tcl_version <
64e0: 20 38 2e 34 7d 20 7b 0a 23 20 20 20 20 20 20 73 8.4} {.# s
64f0: 65 74 20 6e 61 6d 65 53 74 61 72 74 43 68 61 72 et nameStartChar
6500: 73 20 5b 6c 73 6f 72 74 20 2d 63 6f 6d 6d 61 6e s [lsort -comman
6510: 64 20 73 6f 72 74 43 6d 64 20 5c 0a 23 20 20 20 d sortCmd \.#
6520: 20 20 20 20 20 20 20 20 20 20 20 5b 63 6f 6e 63 [conc
6530: 61 74 20 24 42 61 73 65 43 68 61 72 20 24 49 64 at $BaseChar $Id
6540: 65 6f 67 72 61 70 68 69 63 20 30 78 30 30 35 46 eographic 0x005F
6550: 20 30 78 30 30 33 41 5d 5d 0a 23 20 20 7d 20 65 0x003A]].# } e
6560: 6c 73 65 20 7b 0a 23 20 20 20 20 20 20 73 65 74 lse {.# set
6570: 20 6e 61 6d 65 53 74 61 72 74 43 68 61 72 73 20 nameStartChars
6580: 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 [lsort -integer
6590: 2d 69 6e 64 65 78 20 30 20 5c 0a 23 20 20 20 20 -index 0 \.#
65a0: 20 20 20 20 20 20 20 20 20 20 5b 63 6f 6e 63 61 [conca
65b0: 74 20 24 42 61 73 65 43 68 61 72 20 24 49 64 65 t $BaseChar $Ide
65c0: 6f 67 72 61 70 68 69 63 20 30 78 30 30 35 46 20 ographic 0x005F
65d0: 30 78 30 30 33 41 5d 5d 0a 23 20 20 7d 0a 0a 73 0x003A]].# }..s
65e0: 65 74 20 6e 61 6d 65 53 74 61 72 74 43 68 61 72 et nameStartChar
65f0: 73 20 5b 6c 73 6f 72 74 20 2d 63 6f 6d 6d 61 6e s [lsort -comman
6600: 64 20 73 6f 72 74 43 6d 64 20 5c 0a 20 20 20 20 d sortCmd \.
6610: 20 20 20 20 5b 63 6f 6e 63 61 74 20 24 42 61 73 [concat $Bas
6620: 65 43 68 61 72 20 24 49 64 65 6f 67 72 61 70 68 eChar $Ideograph
6630: 69 63 20 30 78 30 30 35 46 20 30 78 30 30 33 41 ic 0x005F 0x003A
6640: 5d 5d 0a 0a 23 20 41 70 70 65 6e 64 20 73 74 6f ]]..# Append sto
6650: 70 20 63 68 61 72 20 6e 65 65 64 65 64 20 62 79 p char needed by
6660: 20 74 68 65 20 74 65 73 74 20 63 6f 64 65 20 74 the test code t
6670: 6f 20 77 6f 72 6b 20 70 72 6f 70 65 72 6c 79 2e o work properly.
6680: 0a 6c 61 70 70 65 6e 64 20 6e 61 6d 65 53 74 61 .lappend nameSta
6690: 72 74 43 68 61 72 73 20 30 78 31 30 30 30 30 0a rtChars 0x10000.
66a0: 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 38 20 7b 69 .test dom-3.8 {i
66b0: 73 4e 61 6d 65 7d 20 7b 6c 6f 6e 67 52 75 6e 6e sName} {longRunn
66c0: 69 6e 67 7d 20 7b 0a 20 20 20 20 73 65 74 20 69 ing} {. set i
66d0: 6e 64 20 30 0a 20 20 20 20 73 65 74 20 6e 72 20 nd 0. set nr
66e0: 30 0a 20 20 20 20 77 68 69 6c 65 20 7b 24 6e 72 0. while {$nr
66f0: 20 3c 20 36 35 35 33 36 7d 20 7b 0a 20 20 20 20 < 65536} {.
6700: 20 20 20 20 73 65 74 20 72 61 6e 67 65 20 5b 6c set range [l
6710: 69 6e 64 65 78 20 24 6e 61 6d 65 53 74 61 72 74 index $nameStart
6720: 43 68 61 72 73 20 24 69 6e 64 5d 0a 20 20 20 20 Chars $ind].
6730: 20 20 20 20 69 6e 63 72 20 69 6e 64 0a 20 20 20 incr ind.
6740: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt
6750: 68 20 24 72 61 6e 67 65 5d 20 3d 3d 20 32 7d 20 h $range] == 2}
6760: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f {. fo
6770: 72 65 61 63 68 20 7b 6d 69 6e 20 6d 61 78 7d 20 reach {min max}
6780: 24 72 61 6e 67 65 20 62 72 65 61 6b 0a 20 20 20 $range break.
6790: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 } else {.
67a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 69 set mi
67b0: 6e 20 24 72 61 6e 67 65 0a 20 20 20 20 20 20 20 n $range.
67c0: 20 20 20 20 20 73 65 74 20 6d 61 78 20 24 72 61 set max $ra
67d0: 6e 67 65 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 nge. }.
67e0: 20 20 20 20 20 20 77 68 69 6c 65 20 7b 24 6e 72 while {$nr
67f0: 20 3c 20 24 6d 69 6e 7d 20 7b 0a 20 20 20 20 20 < $min} {.
6800: 20 20 20 20 20 20 20 69 66 20 7b 5b 64 6f 6d 20 if {[dom
6810: 69 73 4e 61 6d 65 20 5b 73 75 62 73 74 20 5c 5c isName [subst \\
6820: 75 5b 66 6f 72 6d 61 74 20 22 25 30 34 78 22 20 u[format "%04x"
6830: 24 6e 72 5d 5d 5d 20 21 3d 20 30 7d 20 7b 0a 20 $nr]]] != 0} {.
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
6850: 72 72 6f 72 20 22 77 72 6f 6e 67 20 27 69 73 4e rror "wrong 'isN
6860: 61 6d 65 27 20 72 65 73 75 6c 74 20 66 6f 72 20 ame' result for
6870: 6e 61 6d 65 20 73 74 61 72 74 20 63 68 61 72 20 name start char
6880: 23 78 5b 66 6f 72 6d 61 74 20 22 25 30 34 78 22 #x[format "%04x"
6890: 20 24 6e 72 5d 20 2d 20 73 68 6f 75 6c 64 20 62 $nr] - should b
68a0: 65 20 69 6c 6c 65 67 61 6c 22 0a 20 20 20 20 20 e illegal".
68b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
68c0: 20 20 20 20 20 69 6e 63 72 20 6e 72 0a 20 20 20 incr nr.
68d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 }. i
68e0: 66 20 7b 24 6e 72 20 3d 3d 20 30 78 31 30 30 30 f {$nr == 0x1000
68f0: 30 7d 20 7b 62 72 65 61 6b 7d 0a 20 20 20 20 20 0} {break}.
6900: 20 20 20 77 68 69 6c 65 20 7b 24 6e 72 20 3c 3d while {$nr <=
6910: 20 24 6d 61 78 7d 20 7b 0a 20 20 20 20 20 20 20 $max} {.
6920: 20 20 20 20 20 69 66 20 7b 5b 64 6f 6d 20 69 73 if {[dom is
6930: 4e 61 6d 65 20 5b 73 75 62 73 74 20 5c 5c 75 5b Name [subst \\u[
6940: 66 6f 72 6d 61 74 20 22 25 30 34 78 22 20 24 6e format "%04x" $n
6950: 72 5d 5d 5d 20 21 3d 20 31 7d 20 7b 0a 20 20 20 r]]] != 1} {.
6960: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
6970: 6f 72 20 22 77 72 6f 6e 67 20 27 69 73 4e 61 6d or "wrong 'isNam
6980: 65 27 20 72 65 73 75 6c 74 20 66 6f 72 20 6e 61 e' result for na
6990: 6d 65 20 73 74 61 72 74 20 63 68 61 72 20 23 78 me start char #x
69a0: 5b 66 6f 72 6d 61 74 20 22 25 30 34 78 22 20 24 [format "%04x" $
69b0: 6e 72 5d 20 2d 20 73 68 6f 75 6c 64 20 62 65 20 nr] - should be
69c0: 6c 65 67 61 6c 22 0a 20 20 20 20 20 20 20 20 20 legal".
69d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 }.
69e0: 20 69 6e 63 72 20 6e 72 0a 20 20 20 20 20 20 20 incr nr.
69f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 }. }. set
6a00: 20 6e 72 0a 7d 20 7b 36 35 35 33 36 7d 0a 0a 73 nr.} {65536}..s
6a10: 65 74 20 6e 61 6d 65 43 68 61 72 73 20 5b 6c 73 et nameChars [ls
6a20: 6f 72 74 20 2d 63 6f 6d 6d 61 6e 64 20 73 6f 72 ort -command sor
6a30: 74 43 6d 64 20 5c 0a 20 20 20 20 20 20 20 20 5b tCmd \. [
6a40: 63 6f 6e 63 61 74 20 24 42 61 73 65 43 68 61 72 concat $BaseChar
6a50: 20 24 49 64 65 6f 67 72 61 70 68 69 63 20 24 44 $Ideographic $D
6a60: 69 67 69 74 20 30 78 30 30 32 45 20 30 78 30 30 igit 0x002E 0x00
6a70: 32 44 20 30 78 30 30 35 46 20 30 78 30 30 33 41 2D 0x005F 0x003A
6a80: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
6a90: 20 20 20 24 43 6f 6d 62 69 6e 69 6e 67 43 68 61 $CombiningCha
6aa0: 72 20 24 45 78 74 65 6e 64 65 72 5d 5d 0a 0a 23 r $Extender]]..#
6ab0: 20 41 70 70 65 6e 64 20 73 74 6f 70 20 63 68 61 Append stop cha
6ac0: 72 20 6e 65 65 64 65 64 20 62 79 20 74 68 65 20 r needed by the
6ad0: 74 65 73 74 20 63 6f 64 65 20 74 6f 20 77 6f 72 test code to wor
6ae0: 6b 20 70 72 6f 70 65 72 6c 79 2e 0a 6c 61 70 70 k properly..lapp
6af0: 65 6e 64 20 6e 61 6d 65 43 68 61 72 73 20 30 78 end nameChars 0x
6b00: 31 30 30 30 30 0a 0a 74 65 73 74 20 64 6f 6d 2d 10000..test dom-
6b10: 33 2e 39 20 7b 69 73 4e 61 6d 65 7d 20 7b 0a 20 3.9 {isName} {.
6b20: 20 20 20 73 65 74 20 69 6e 64 20 30 0a 20 20 20 set ind 0.
6b30: 20 73 65 74 20 6e 72 20 30 0a 20 20 20 20 77 68 set nr 0. wh
6b40: 69 6c 65 20 7b 24 6e 72 20 3c 20 36 35 35 33 36 ile {$nr < 65536
6b50: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 } {. set
6b60: 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 6e range [lindex $n
6b70: 61 6d 65 43 68 61 72 73 20 24 69 6e 64 5d 0a 20 ameChars $ind].
6b80: 20 20 20 20 20 20 20 69 6e 63 72 20 69 6e 64 0a incr ind.
6b90: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 if {[lle
6ba0: 6e 67 74 68 20 24 72 61 6e 67 65 5d 20 3d 3d 20 ngth $range] ==
6bb0: 32 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 2} {.
6bc0: 20 66 6f 72 65 61 63 68 20 7b 6d 69 6e 20 6d 61 foreach {min ma
6bd0: 78 7d 20 24 72 61 6e 67 65 20 62 72 65 61 6b 0a x} $range break.
6be0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else {
6bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set
6c00: 20 6d 69 6e 20 24 72 61 6e 67 65 0a 20 20 20 20 min $range.
6c10: 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 78 20 set max
6c20: 24 72 61 6e 67 65 0a 20 20 20 20 20 20 20 20 7d $range. }
6c30: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 7b . while {
6c40: 24 6e 72 20 3c 20 24 6d 69 6e 7d 20 7b 0a 20 20 $nr < $min} {.
6c50: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 64 if {[d
6c60: 6f 6d 20 69 73 4e 61 6d 65 20 61 5b 73 75 62 73 om isName a[subs
6c70: 74 20 5c 5c 75 5b 66 6f 72 6d 61 74 20 22 25 30 t \\u[format "%0
6c80: 34 78 22 20 24 6e 72 5d 5d 5d 20 21 3d 20 30 7d 4x" $nr]]] != 0}
6c90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
6ca0: 20 20 20 65 72 72 6f 72 20 22 77 72 6f 6e 67 20 error "wrong
6cb0: 27 69 73 4e 61 6d 65 27 20 72 65 73 75 6c 74 20 'isName' result
6cc0: 66 6f 72 20 6e 61 6d 65 20 63 68 61 72 20 23 78 for name char #x
6cd0: 5b 66 6f 72 6d 61 74 20 22 25 30 34 78 22 20 24 [format "%04x" $
6ce0: 6e 72 5d 20 2d 20 73 68 6f 75 6c 64 20 62 65 20 nr] - should be
6cf0: 69 6c 6c 65 67 61 6c 22 0a 20 20 20 20 20 20 20 illegal".
6d00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
6d10: 20 20 20 69 6e 63 72 20 6e 72 0a 20 20 20 20 20 incr nr.
6d20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 }. if
6d30: 7b 24 6e 72 20 3d 3d 20 30 78 31 30 30 30 30 7d {$nr == 0x10000}
6d40: 20 7b 62 72 65 61 6b 7d 0a 20 20 20 20 20 20 20 {break}.
6d50: 20 77 68 69 6c 65 20 7b 24 6e 72 20 3c 3d 20 24 while {$nr <= $
6d60: 6d 61 78 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 max} {.
6d70: 20 20 20 69 66 20 7b 5b 64 6f 6d 20 69 73 4e 61 if {[dom isNa
6d80: 6d 65 20 61 5b 73 75 62 73 74 20 5c 5c 75 5b 66 me a[subst \\u[f
6d90: 6f 72 6d 61 74 20 22 25 30 34 78 22 20 24 6e 72 ormat "%04x" $nr
6da0: 5d 5d 5d 20 21 3d 20 31 7d 20 7b 0a 20 20 20 20 ]]] != 1} {.
6db0: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
6dc0: 72 20 22 77 72 6f 6e 67 20 27 69 73 4e 61 6d 65 r "wrong 'isName
6dd0: 27 20 72 65 73 75 6c 74 20 66 6f 72 20 6e 61 6d ' result for nam
6de0: 65 20 63 68 61 72 20 23 78 5b 66 6f 72 6d 61 74 e char #x[format
6df0: 20 22 25 30 34 78 22 20 24 6e 72 5d 20 2d 20 73 "%04x" $nr] - s
6e00: 68 6f 75 6c 64 20 62 65 20 6c 65 67 61 6c 22 0a hould be legal".
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
6e20: 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e incr n
6e30: 72 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 r. }.
6e40: 7d 0a 20 20 20 20 73 65 74 20 6e 72 0a 7d 20 7b }. set nr.} {
6e50: 36 35 35 33 36 7d 0a 0a 0a 74 65 73 74 20 64 6f 65536}...test do
6e60: 6d 2d 33 2e 31 30 20 7b 69 73 4e 43 4e 61 6d 65 m-3.10 {isNCName
6e70: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 4e 43 } {. dom isNC
6e80: 4e 61 6d 65 20 22 3a 66 6f 6f 22 0a 7d 20 7b 30 Name ":foo".} {0
6e90: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 31 }..test dom-3.11
6ea0: 20 7b 69 73 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 {isNCName} {.
6eb0: 20 20 64 6f 6d 20 69 73 4e 43 4e 61 6d 65 20 22 dom isNCName "
6ec0: 5f 66 6f 6f 22 0a 7d 20 7b 31 7d 0a 0a 74 65 73 _foo".} {1}..tes
6ed0: 74 20 64 6f 6d 2d 33 2e 31 32 20 7b 69 73 4e 43 t dom-3.12 {isNC
6ee0: 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 Name} {. dom
6ef0: 69 73 4e 43 4e 61 6d 65 20 22 66 6f 6f 3a 62 61 isNCName "foo:ba
6f00: 72 3a 62 61 7a 22 0a 7d 20 7b 30 7d 0a 0a 74 65 r:baz".} {0}..te
6f10: 73 74 20 64 6f 6d 2d 33 2e 31 33 20 7b 69 73 4e st dom-3.13 {isN
6f20: 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d CName} {. dom
6f30: 20 69 73 4e 43 4e 61 6d 65 20 22 2d 66 6f 6f 22 isNCName "-foo"
6f40: 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d .} {0}..test dom
6f50: 2d 33 2e 31 34 20 7b 69 73 4e 43 4e 61 6d 65 7d -3.14 {isNCName}
6f60: 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 4e 43 4e {. dom isNCN
6f70: 61 6d 65 20 22 2e 66 6f 6f 22 0a 7d 20 7b 30 7d ame ".foo".} {0}
6f80: 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 35 20 ..test dom-3.15
6f90: 7b 69 73 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 {isNCName} {.
6fa0: 20 63 61 74 63 68 20 7b 64 6f 6d 20 69 73 4e 43 catch {dom isNC
6fb0: 4e 61 6d 65 7d 0a 7d 20 7b 31 7d 0a 0a 74 65 73 Name}.} {1}..tes
6fc0: 74 20 64 6f 6d 2d 33 2e 31 36 20 7b 69 73 4e 43 t dom-3.16 {isNC
6fd0: 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 63 61 74 63 Name} {. catc
6fe0: 68 20 7b 64 6f 6d 20 69 73 4e 43 4e 61 6d 65 20 h {dom isNCName
6ff0: 66 6f 6f 20 62 61 72 7d 0a 7d 20 7b 31 7d 0a 0a foo bar}.} {1}..
7000: 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 37 20 7b .test dom-3.17 {
7010: 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 isQName} {. d
7020: 6f 6d 20 69 73 51 4e 61 6d 65 20 22 3a 66 6f 6f om isQName ":foo
7030: 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f ".} {0}..test do
7040: 6d 2d 33 2e 31 38 20 7b 69 73 51 4e 61 6d 65 7d m-3.18 {isQName}
7050: 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 51 4e 61 {. dom isQNa
7060: 6d 65 20 22 5f 66 6f 6f 22 0a 7d 20 7b 31 7d 0a me "_foo".} {1}.
7070: 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 39 20 7b .test dom-3.19 {
7080: 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 isQName} {. d
7090: 6f 6d 20 69 73 51 4e 61 6d 65 20 22 66 6f 6f 3a om isQName "foo:
70a0: 62 61 72 3a 62 61 7a 22 0a 7d 20 7b 30 7d 0a 0a bar:baz".} {0}..
70b0: 74 65 73 74 20 64 6f 6d 2d 33 2e 32 30 20 7b 69 test dom-3.20 {i
70c0: 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f sQName} {. do
70d0: 6d 20 69 73 51 4e 61 6d 65 20 22 2d 66 6f 6f 22 m isQName "-foo"
70e0: 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d .} {0}..test dom
70f0: 2d 33 2e 32 31 20 7b 69 73 51 4e 61 6d 65 7d 20 -3.21 {isQName}
7100: 7b 0a 20 20 20 20 64 6f 6d 20 69 73 51 4e 61 6d {. dom isQNam
7110: 65 20 22 2e 66 6f 6f 22 0a 7d 20 7b 30 7d 0a 0a e ".foo".} {0}..
7120: 74 65 73 74 20 64 6f 6d 2d 33 2e 32 32 20 7b 69 test dom-3.22 {i
7130: 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f sQName} {. do
7140: 6d 20 69 73 51 4e 61 6d 65 20 22 66 6f 6f 3a 62 m isQName "foo:b
7150: 61 72 22 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 ar".} {1}..test
7160: 64 6f 6d 2d 33 2e 32 33 20 7b 69 73 51 4e 61 6d dom-3.23 {isQNam
7170: 65 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b e} {. catch {
7180: 64 6f 6d 20 69 73 51 4e 61 6d 65 7d 0a 7d 20 7b dom isQName}.} {
7190: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 1}..test dom-3.2
71a0: 34 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 4 {isQName} {.
71b0: 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 69 73 51 catch {dom isQ
71c0: 4e 61 6d 65 20 66 6f 6f 20 62 61 72 7d 0a 7d 20 Name foo bar}.}
71d0: 7b 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e {1}..test dom-3.
71e0: 32 35 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 25 {isQName} {.
71f0: 20 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 22 dom isQName "
7200: 66 6f 6f 20 62 61 72 22 0a 7d 20 7b 30 7d 0a 20 foo bar".} {0}.
7210: 20 20 20 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 .test dom-3.2
7220: 36 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 6 {isQName} {.
7230: 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 22 77 dom isQName "w
7240: 6f 6f 7a 62 69 7a 3a 22 0a 7d 20 7b 30 7d 0a 0a oozbiz:".} {0}..
7250: 74 65 73 74 20 64 6f 6d 2d 33 2e 32 36 2e 31 20 test dom-3.26.1
7260: 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 {isQName} {.
7270: 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 66 6f 6f dom isQName foo
7280: 3a 31 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 :1.} {0}..test d
7290: 6f 6d 2d 33 2e 32 36 2e 32 20 7b 69 73 51 4e 61 om-3.26.2 {isQNa
72a0: 6d 65 7d 20 7b 0a 20 20 20 20 20 64 6f 6d 20 69 me} {. dom i
72b0: 73 51 4e 61 6d 65 20 31 3a 66 6f 6f 0a 7d 20 7b sQName 1:foo.} {
72c0: 30 7d 0a 0a 73 65 74 20 58 4d 4c 43 68 61 72 73 0}..set XMLChars
72d0: 20 7b 0a 20 20 20 20 30 78 39 20 30 78 41 20 30 {. 0x9 0xA 0
72e0: 78 44 20 7b 30 78 32 30 20 30 78 44 37 46 46 7d xD {0x20 0xD7FF}
72f0: 20 7b 30 78 45 30 30 30 20 30 78 46 46 46 44 7d {0xE000 0xFFFD}
7300: 20 7b 30 78 31 30 30 30 30 20 30 78 31 30 46 46 {0x10000 0x10FF
7310: 46 46 7d 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d FF}.}..test dom-
7320: 33 2e 32 37 20 7b 69 73 43 68 61 72 44 61 74 61 3.27 {isCharData
7330: 7d 20 7b 6c 6f 6e 67 52 75 6e 6e 69 6e 67 7d 20 } {longRunning}
7340: 7b 0a 20 20 20 20 73 65 74 20 69 6e 64 20 30 0a {. set ind 0.
7350: 20 20 20 20 73 65 74 20 6e 72 20 31 0a 20 20 20 set nr 1.
7360: 20 77 68 69 6c 65 20 7b 24 6e 72 20 3c 20 36 35 while {$nr < 65
7370: 35 33 36 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 536} {. s
7380: 65 74 20 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 et range [lindex
7390: 20 24 58 4d 4c 43 68 61 72 73 20 24 69 6e 64 5d $XMLChars $ind]
73a0: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 69 6e . incr in
73b0: 64 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c d. if {[l
73c0: 6c 65 6e 67 74 68 20 24 72 61 6e 67 65 5d 20 3d length $range] =
73d0: 3d 20 32 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 = 2} {.
73e0: 20 20 20 66 6f 72 65 61 63 68 20 7b 6d 69 6e 20 foreach {min
73f0: 6d 61 78 7d 20 24 72 61 6e 67 65 20 62 72 65 61 max} $range brea
7400: 6b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 k. } else
7410: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {. s
7420: 65 74 20 6d 69 6e 20 24 72 61 6e 67 65 0a 20 20 et min $range.
7430: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 set ma
7440: 78 20 24 72 61 6e 67 65 0a 20 20 20 20 20 20 20 x $range.
7450: 20 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 }. while
7460: 20 7b 24 6e 72 20 3c 20 24 6d 69 6e 7d 20 7b 0a {$nr < $min} {.
7470: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
7480: 5b 64 6f 6d 20 69 73 43 68 61 72 44 61 74 61 20 [dom isCharData
7490: 22 61 5b 73 75 62 73 74 20 5c 5c 75 5b 66 6f 72 "a[subst \\u[for
74a0: 6d 61 74 20 22 25 30 34 78 22 20 24 6e 72 5d 5d mat "%04x" $nr]]
74b0: 62 22 5d 20 21 3d 20 30 7d 20 7b 0a 20 20 20 20 b"] != 0} {.
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
74d0: 72 20 22 77 72 6f 6e 67 20 27 69 73 43 68 61 72 r "wrong 'isChar
74e0: 44 61 74 61 27 20 72 65 73 75 6c 74 20 66 6f 72 Data' result for
74f0: 20 63 68 61 72 20 23 78 5b 66 6f 72 6d 61 74 20 char #x[format
7500: 22 25 30 34 78 22 20 24 6e 72 5d 20 2d 20 73 68 "%04x" $nr] - sh
7510: 6f 75 6c 64 20 62 65 20 69 6c 6c 65 67 61 6c 22 ould be illegal"
7520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 . }.
7530: 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 incr
7540: 6e 72 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 nr. }.
7550: 20 20 20 20 20 69 66 20 7b 24 6e 72 20 3d 3d 20 if {$nr ==
7560: 30 78 31 30 30 30 30 7d 20 7b 62 72 65 61 6b 7d 0x10000} {break}
7570: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 7b . while {
7580: 24 6e 72 20 3c 3d 20 24 6d 61 78 7d 20 7b 0a 20 $nr <= $max} {.
7590: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[
75a0: 64 6f 6d 20 69 73 43 68 61 72 44 61 74 61 20 22 dom isCharData "
75b0: 61 5b 73 75 62 73 74 20 5c 5c 75 5b 66 6f 72 6d a[subst \\u[form
75c0: 61 74 20 22 25 30 34 78 22 20 24 6e 72 5d 5d 62 at "%04x" $nr]]b
75d0: 22 5d 20 21 3d 20 31 7d 20 7b 0a 20 20 20 20 20 "] != 1} {.
75e0: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
75f0: 20 22 77 72 6f 6e 67 20 27 69 73 43 68 61 72 44 "wrong 'isCharD
7600: 61 74 61 27 20 72 65 73 75 6c 74 20 66 6f 72 20 ata' result for
7610: 63 68 61 72 20 23 78 5b 66 6f 72 6d 61 74 20 22 char #x[format "
7620: 25 30 34 78 22 20 24 6e 72 5d 20 2d 20 73 68 6f %04x" $nr] - sho
7630: 75 6c 64 20 62 65 20 6c 65 67 61 6c 22 0a 20 20 uld be legal".
7640: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
7650: 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e 72 0a incr nr.
7660: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a }. }.
7670: 20 20 20 20 73 65 74 20 6e 72 0a 7d 20 7b 36 35 set nr.} {65
7680: 35 33 36 7d 0a 0a 0a 74 65 73 74 20 64 6f 6d 2d 536}...test dom-
7690: 33 2e 32 38 20 7b 69 73 50 49 4e 61 6d 65 7d 20 3.28 {isPIName}
76a0: 7b 0a 20 20 20 20 64 6f 6d 20 69 73 50 49 4e 61 {. dom isPINa
76b0: 6d 65 20 22 74 61 72 67 65 74 22 0a 7d 20 7b 31 me "target".} {1
76c0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 39 }..test dom-3.29
76d0: 20 7b 69 73 50 49 4e 61 6d 65 7d 20 7b 0a 20 20 {isPIName} {.
76e0: 20 20 64 6f 6d 20 69 73 50 49 4e 61 6d 65 20 22 dom isPIName "
76f0: 66 6f 6f 3a 74 61 72 67 65 74 22 0a 7d 20 7b 31 foo:target".} {1
7700: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 30 }..test dom-3.30
7710: 20 7b 69 73 50 49 4e 61 6d 65 7d 20 7b 0a 20 20 {isPIName} {.
7720: 20 20 64 6f 6d 20 69 73 50 49 4e 61 6d 65 20 22 dom isPIName "
7730: 58 6d 6c 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 Xml".} {0}..test
7740: 20 64 6f 6d 2d 33 2e 33 31 20 7b 69 73 43 6f 6d dom-3.31 {isCom
7750: 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 ment} {. dom
7760: 69 73 43 6f 6d 6d 65 6e 74 20 22 73 6f 6d 65 20 isComment "some
7770: 63 6f 6d 6d 65 6e 74 22 0a 7d 20 7b 31 7d 0a 0a comment".} {1}..
7780: 74 65 73 74 20 64 6f 6d 2d 33 2e 33 32 20 7b 69 test dom-3.32 {i
7790: 73 43 6f 6d 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 sComment} {.
77a0: 64 6f 6d 20 69 73 43 6f 6d 6d 65 6e 74 20 22 73 dom isComment "s
77b0: 6f 6d 65 20 69 6e 76 61 6c 69 64 20 2d 2d 20 63 ome invalid -- c
77c0: 6f 6d 6d 65 6e 74 22 0a 7d 20 7b 30 7d 0a 0a 74 omment".} {0}..t
77d0: 65 73 74 20 64 6f 6d 2d 33 2e 33 33 20 7b 69 73 est dom-3.33 {is
77e0: 43 6f 6d 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 64 Comment} {. d
77f0: 6f 6d 20 69 73 43 6f 6d 6d 65 6e 74 20 22 73 6f om isComment "so
7800: 6d 65 20 69 6e 76 61 6c 69 64 20 63 6f 6d 6d 65 me invalid comme
7810: 6e 74 2d 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 nt-".} {0}..test
7820: 20 64 6f 6d 2d 33 2e 33 34 20 7b 69 73 43 44 41 dom-3.34 {isCDA
7830: 54 41 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 TA} {. dom is
7840: 43 44 41 54 41 20 22 3c 76 61 6c 69 64 3e 73 6f CDATA "<valid>so
7850: 6d 65 20 5d 5d 20 43 44 41 54 41 20 3c 2f 76 61 me ]] CDATA </va
7860: 6c 69 64 3e 22 0a 7d 20 7b 31 7d 0a 0a 74 65 73 lid>".} {1}..tes
7870: 74 20 64 6f 6d 2d 33 2e 33 35 20 7b 69 73 43 44 t dom-3.35 {isCD
7880: 41 54 41 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 ATA} {. dom i
7890: 73 43 44 41 54 41 20 22 3c 69 6e 76 61 6c 69 64 sCDATA "<invalid
78a0: 3e 73 6f 6d 65 20 5d 5d 3e 20 43 44 41 54 41 20 >some ]]> CDATA
78b0: 3c 2f 69 6e 76 61 6c 69 64 3e 22 0a 7d 20 7b 30 </invalid>".} {0
78c0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 36 }..test dom-3.36
78d0: 20 7b 69 73 43 44 41 54 41 7d 20 7b 0a 20 20 20 {isCDATA} {.
78e0: 20 64 6f 6d 20 69 73 43 44 41 54 41 20 22 69 6e dom isCDATA "in
78f0: 76 61 6c 69 64 3a 20 5d 5d 3e 22 0a 7d 20 7b 30 valid: ]]>".} {0
7900: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 37 }..test dom-3.37
7910: 20 7b 69 73 43 44 41 54 41 7d 20 7b 0a 20 20 20 {isCDATA} {.
7920: 20 64 6f 6d 20 69 73 43 44 41 54 41 20 22 76 61 dom isCDATA "va
7930: 6c 69 64 3a 20 5d 5d 3e 20 22 0a 7d 20 7b 30 7d lid: ]]> ".} {0}
7940: 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 38 20 ..test dom-3.38
7950: 7b 69 73 43 44 41 54 41 7d 20 7b 0a 20 20 20 20 {isCDATA} {.
7960: 64 6f 6d 20 69 73 43 44 41 54 41 20 22 5c 75 64 dom isCDATA "\ud
7970: 37 66 61 5c 75 64 37 66 62 5c 75 64 37 66 63 5c 7fa\ud7fb\ud7fc\
7980: 75 64 37 66 64 5c 75 64 37 66 65 5c 75 64 37 66 ud7fd\ud7fe\ud7f
7990: 66 5d 5d 3e 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 f]]>".} {0}..tes
79a0: 74 20 64 6f 6d 2d 33 2e 33 39 20 7b 69 73 50 49 t dom-3.39 {isPI
79b0: 56 61 6c 75 65 7d 20 7b 0a 20 20 20 20 64 6f 6d Value} {. dom
79c0: 20 69 73 50 49 56 61 6c 75 65 20 22 73 6f 6d 65 isPIValue "some
79d0: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 6e 73 74 processing inst
79e0: 72 75 63 74 69 6f 6e 20 64 61 74 61 22 0a 7d 20 ruction data".}
79f0: 7b 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e {1}..test dom-3.
7a00: 34 30 20 7b 69 73 50 49 56 61 6c 75 65 7d 20 7b 40 {isPIValue} {
7a10: 0a 20 20 20 20 64 6f 6d 20 69 73 50 49 56 61 6c . dom isPIVal
7a20: 75 65 20 22 73 6f 6d 65 20 69 6e 76 61 6c 69 64 ue "some invalid
7a30: 20 3f 3e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 ?> processing i
7a40: 6e 73 74 72 75 63 74 69 6f 6e 20 64 61 74 61 22 nstruction data"
7a50: 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d .} {0}..test dom
7a60: 2d 33 2e 34 31 20 7b 69 73 50 49 56 61 6c 75 65 -3.41 {isPIValue
7a70: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 50 49 } {. dom isPI
7a80: 56 61 6c 75 65 20 22 73 6f 6d 65 20 69 6e 76 61 Value "some inva
7a90: 6c 69 64 20 70 72 6f 63 65 73 73 69 6e 67 20 69 lid processing i
7aa0: 6e 73 74 72 75 63 74 69 6f 6e 20 64 61 74 61 3f nstruction data?
7ab0: 3e 22 0a 7d 20 7b 30 7d 0a 0a 0a 74 65 73 74 20 >".} {0}...test
7ac0: 64 6f 6d 2d 34 2e 31 20 7b 2d 75 73 65 46 6f 72 dom-4.1 {-useFor
7ad0: 65 69 67 6e 44 54 44 20 30 7d 20 7b 0a 20 20 20 eignDTD 0} {.
7ae0: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
7af0: 72 73 65 20 2d 75 73 65 46 6f 72 65 69 67 6e 44 rse -useForeignD
7b00: 54 44 20 30 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a TD 0 {<root/>}].
7b10: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
7b20: 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 34 } {}..test dom-4
7b30: 2e 32 20 7b 2d 75 73 65 46 6f 72 65 69 67 6e 44 .2 {-useForeignD
7b40: 54 44 20 31 20 77 69 74 68 20 64 6f 63 75 6d 65 TD 1 with docume
7b50: 6e 74 20 77 69 74 68 20 69 6e 74 65 72 6e 61 6c nt with internal
7b60: 20 73 75 62 73 65 74 7d 20 7b 6e 65 65 64 5f 75 subset} {need_u
7b70: 72 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 62 61 ri} {. set ba
7b80: 73 65 55 52 49 20 5b 74 64 6f 6d 3a 3a 62 61 73 seURI [tdom::bas
7b90: 65 55 52 4c 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 eURL [file join
7ba0: 5b 70 77 64 5d 20 5b 66 69 6c 65 20 64 69 72 20 [pwd] [file dir
7bb0: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 64 [info script]] d
7bc0: 6f 6d 2e 74 65 73 74 5d 5d 0a 20 20 20 20 73 65 om.test]]. se
7bd0: 74 20 3a 3a 74 64 6f 6d 3a 3a 75 73 65 46 6f 72 t ::tdom::useFor
7be0: 65 69 67 6e 44 54 44 20 22 64 61 74 61 2f 64 6f eignDTD "data/do
7bf0: 6d 43 6d 64 31 2e 64 74 64 22 0a 20 20 20 20 73 mCmd1.dtd". s
7c00: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
7c10: 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 e \.
7c20: 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 44 20 31 -useForeignDTD 1
7c30: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \. -
7c40: 62 61 73 65 75 72 6c 20 24 62 61 73 65 55 52 49 baseurl $baseURI
7c50: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \. -
7c60: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
7c70: 6d 6d 61 6e 64 20 3a 3a 74 64 6f 6d 3a 3a 65 78 mmand ::tdom::ex
7c80: 74 52 65 66 48 61 6e 64 6c 65 72 20 7b 0a 3c 21 tRefHandler {.<!
7c90: 44 4f 43 54 59 50 45 20 72 6f 6f 74 20 5b 0a 20 DOCTYPE root [.
7ca0: 20 20 20 3c 21 41 54 54 4c 49 53 54 20 72 6f 6f <!ATTLIST roo
7cb0: 74 20 66 69 78 65 64 20 43 44 41 54 41 20 23 46 t fixed CDATA #F
7cc0: 49 58 45 44 20 22 74 6f 54 68 61 74 22 3e 0a 5d IXED "toThat">.]
7cd0: 3e 0a 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 >.<root/>}].
7ce0: 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 set root [$doc d
7cf0: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a ocumentElement].
7d00: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
7d10: 24 72 6f 6f 74 20 40 66 69 78 65 64 5d 0a 20 20 $root @fixed].
7d20: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
7d30: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
7d40: 74 6f 54 68 61 74 7d 0a 0a 74 65 73 74 20 64 6f toThat}..test do
7d50: 6d 2d 34 2e 33 20 7b 2d 75 73 65 46 6f 72 65 69 m-4.3 {-useForei
7d60: 67 6e 44 54 44 20 31 20 77 69 74 68 20 64 6f 63 gnDTD 1 with doc
7d70: 75 6d 65 6e 74 20 77 69 74 68 20 69 6e 74 65 72 ument with inter
7d80: 6e 61 6c 20 73 75 62 73 65 74 7d 20 7b 6e 65 65 nal subset} {nee
7d90: 64 5f 75 72 69 7d 20 7b 0a 20 20 20 20 73 65 74 d_uri} {. set
7da0: 20 62 61 73 65 55 52 49 20 5b 74 64 6f 6d 3a 3a baseURI [tdom::
7db0: 62 61 73 65 55 52 4c 20 5b 66 69 6c 65 20 6a 6f baseURL [file jo
7dc0: 69 6e 20 5b 70 77 64 5d 20 5b 66 69 6c 65 20 64 in [pwd] [file d
7dd0: 69 72 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d ir [info script]
7de0: 5d 20 64 6f 6d 2e 74 65 73 74 5d 5d 0a 20 20 20 ] dom.test]].
7df0: 20 73 65 74 20 3a 3a 74 64 6f 6d 3a 3a 75 73 65 set ::tdom::use
7e00: 46 6f 72 65 69 67 6e 44 54 44 20 22 64 61 74 61 ForeignDTD "data
7e10: 2f 64 6f 6d 43 6d 64 31 2e 64 74 64 22 0a 20 20 /domCmd1.dtd".
7e20: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
7e30: 61 72 73 65 20 5c 0a 20 20 20 20 20 20 20 20 20 arse \.
7e40: 20 20 20 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 -useForeignDT
7e50: 44 20 31 20 5c 0a 20 20 20 20 20 20 20 20 20 20 D 1 \.
7e60: 20 20 2d 62 61 73 65 75 72 6c 20 24 62 61 73 65 -baseurl $base
7e70: 55 52 49 20 5c 0a 20 20 20 20 20 20 20 20 20 20 URI \.
7e80: 20 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 -externalentit
7e90: 79 63 6f 6d 6d 61 6e 64 20 3a 3a 74 64 6f 6d 3a ycommand ::tdom:
7ea0: 3a 65 78 74 52 65 66 48 61 6e 64 6c 65 72 20 7b :extRefHandler {
7eb0: 0a 3c 21 44 4f 43 54 59 50 45 20 72 6f 6f 74 20 .<!DOCTYPE root
7ec0: 5b 0a 20 20 20 20 3c 21 41 54 54 4c 49 53 54 20 [. <!ATTLIST
7ed0: 72 6f 6f 74 20 66 69 78 65 64 32 20 43 44 41 54 root fixed2 CDAT
7ee0: 41 20 23 46 49 58 45 44 20 22 74 6f 54 68 61 74 A #FIXED "toThat
7ef0: 22 3e 0a 5d 3e 0a 3c 72 6f 6f 74 2f 3e 7d 5d 0a ">.]>.<root/>}].
7f00: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 set root [$d
7f10: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
7f20: 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 nt]. set resu
7f30: 6c 74 20 5b 24 72 6f 6f 74 20 40 66 69 78 65 64 lt [$root @fixed
7f40: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
7f50: 73 75 6c 74 20 5b 24 72 6f 6f 74 20 40 66 69 78 sult [$root @fix
7f60: 65 64 32 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 ed2]. $doc de
7f70: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
7f80: 75 6c 74 0a 7d 20 7b 74 6f 54 68 69 73 20 74 6f ult.} {toThis to
7f90: 54 68 61 74 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d That}..test dom-
7fa0: 34 2e 34 20 7b 2d 75 73 65 46 6f 72 65 69 67 6e 4.4 {-useForeign
7fb0: 44 54 44 20 31 20 77 69 74 68 20 64 6f 63 75 6d DTD 1 with docum
7fc0: 65 6e 74 20 77 69 74 68 6f 75 74 20 64 6f 63 75 ent without docu
7fd0: 6d 65 6e 74 20 64 65 63 6c 61 72 61 74 69 6f 6e ment declaration
7fe0: 7d 20 7b 6e 65 65 64 5f 75 72 69 7d 20 7b 0a 20 } {need_uri} {.
7ff0: 20 20 20 73 65 74 20 62 61 73 65 55 52 49 20 5b set baseURI [
8000: 74 64 6f 6d 3a 3a 62 61 73 65 55 52 4c 20 5b 66 tdom::baseURL [f
8010: 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b ile join [pwd] [
8020: 66 69 6c 65 20 64 69 72 20 5b 69 6e 66 6f 20 73 file dir [info s
8030: 63 72 69 70 74 5d 5d 20 64 6f 6d 2e 74 65 73 74 cript]] dom.test
8040: 5d 5d 0a 20 20 20 20 73 65 74 20 3a 3a 74 64 6f ]]. set ::tdo
8050: 6d 3a 3a 75 73 65 46 6f 72 65 69 67 6e 44 54 44 m::useForeignDTD
8060: 20 22 64 61 74 61 2f 64 6f 6d 43 6d 64 31 2e 64 "data/domCmd1.d
8070: 74 64 22 0a 20 20 20 20 73 65 74 20 64 6f 63 20 td". set doc
8080: 5b 64 6f 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 [dom parse \.
8090: 20 20 20 20 20 20 20 20 20 2d 75 73 65 46 6f 72 -useFor
80a0: 65 69 67 6e 44 54 44 20 31 20 5c 0a 20 20 20 20 eignDTD 1 \.
80b0: 20 20 20 20 20 20 20 20 2d 62 61 73 65 75 72 6c -baseurl
80c0: 20 24 62 61 73 65 55 52 49 20 5c 0a 20 20 20 20 $baseURI \.
80d0: 20 20 20 20 20 20 20 20 2d 65 78 74 65 72 6e 61 -externa
80e0: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 3a lentitycommand :
80f0: 3a 74 64 6f 6d 3a 3a 65 78 74 52 65 66 48 61 6e :tdom::extRefHan
8100: 64 6c 65 72 20 3c 72 6f 6f 74 2f 3e 5d 0a 20 20 dler <root/>].
8110: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 set root [$doc
8120: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
8130: 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 ]. set result
8140: 20 5b 24 72 6f 6f 74 20 40 66 69 78 65 64 5d 0a [$root @fixed].
8150: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
8160: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
8170: 20 7b 74 6f 54 68 69 73 7d 0a 0a 74 65 73 74 20 {toThis}..test
8180: 64 6f 6d 2d 34 2e 35 20 7b 2d 75 73 65 46 6f 72 dom-4.5 {-useFor
8190: 65 69 67 6e 44 54 44 20 31 20 64 6f 65 73 20 6e eignDTD 1 does n
81a0: 6f 74 20 6f 76 65 72 77 72 69 74 65 20 61 20 67 ot overwrite a g
81b0: 69 76 65 6e 20 65 78 74 65 72 6e 61 6c 20 73 75 iven external su
81c0: 62 73 65 74 7d 20 7b 6e 65 65 64 5f 75 72 69 7d bset} {need_uri}
81d0: 20 7b 0a 20 20 20 20 73 65 74 20 62 61 73 65 55 {. set baseU
81e0: 52 49 20 5b 74 64 6f 6d 3a 3a 62 61 73 65 55 52 RI [tdom::baseUR
81f0: 4c 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 L [file join [pw
8200: 64 5d 20 5b 66 69 6c 65 20 64 69 72 20 5b 69 6e d] [file dir [in
8210: 66 6f 20 73 63 72 69 70 74 5d 5d 20 64 6f 6d 2e fo script]] dom.
8220: 74 65 73 74 5d 5d 0a 20 20 20 20 73 65 74 20 3a test]]. set :
8230: 3a 74 64 6f 6d 3a 3a 75 73 65 46 6f 72 65 69 67 :tdom::useForeig
8240: 6e 44 54 44 20 22 64 61 74 61 2f 64 6f 6d 43 6d nDTD "data/domCm
8250: 64 31 2e 64 74 64 22 0a 20 20 20 20 73 65 74 20 d1.dtd". set
8260: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 5c doc [dom parse \
8270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 75 73 . -us
8280: 65 46 6f 72 65 69 67 6e 44 54 44 20 31 20 5c 0a eForeignDTD 1 \.
8290: 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 61 73 -bas
82a0: 65 75 72 6c 20 24 62 61 73 65 55 52 49 20 5c 0a eurl $baseURI \.
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 65 78 74 -ext
82c0: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 ernalentitycomma
82d0: 6e 64 20 3a 3a 74 64 6f 6d 3a 3a 65 78 74 52 65 nd ::tdom::extRe
82e0: 66 48 61 6e 64 6c 65 72 20 7b 0a 3c 21 44 4f 43 fHandler {.<!DOC
82f0: 54 59 50 45 20 72 6f 6f 74 20 53 59 53 54 45 4d TYPE root SYSTEM
8300: 20 22 64 61 74 61 2f 64 6f 6d 43 6d 64 32 2e 64 "data/domCmd2.d
8310: 74 64 22 3e 0a 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 td">.<root/>}].
8320: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f set root [$do
8330: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
8340: 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c t]. set resul
8350: 74 20 5b 24 72 6f 6f 74 20 40 66 69 78 65 64 5d t [$root @fixed]
8360: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 . $doc delete
8370: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
8380: 7d 20 7b 74 6f 54 68 61 74 7d 0a 0a 74 65 73 74 } {toThat}..test
8390: 20 64 6f 6d 2d 34 2e 36 20 7b 2d 75 73 65 46 6f dom-4.6 {-useFo
83a0: 72 65 69 67 6e 44 54 44 20 77 69 74 68 20 6e 6f reignDTD with no
83b0: 6e 62 6f 6f 6c 65 61 6e 20 61 72 67 7d 20 7b 6e nboolean arg} {n
83c0: 65 65 64 5f 75 72 69 7d 20 7b 0a 20 20 20 20 73 eed_uri} {. s
83d0: 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 et result [catch
83e0: 20 7b 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 {set doc [dom p
83f0: 61 72 73 65 20 2d 75 73 65 46 6f 72 65 69 67 6e arse -useForeign
8400: 44 54 44 20 66 6f 6f 20 3c 72 6f 6f 74 2f 3e 5d DTD foo <root/>]
8410: 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 } errMsg]. la
8420: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65 72 ppend result $er
8430: 72 4d 73 67 0a 7d 20 7b 31 20 7b 65 78 70 65 63 rMsg.} {1 {expec
8440: 74 65 64 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 ted boolean valu
8450: 65 20 62 75 74 20 67 6f 74 20 22 66 6f 6f 22 7d e but got "foo"}
8460: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 35 2e 31 20 }..test dom-5.1
8470: 7b 64 6f 63 75 6d 65 6e 74 20 77 69 74 68 20 65 {document with e
8480: 78 74 65 72 6e 61 6c 20 73 75 62 73 65 74 7d 20 xternal subset}
8490: 7b 6e 65 65 64 5f 75 72 69 7d 20 7b 0a 20 20 20 {need_uri} {.
84a0: 20 73 65 74 20 62 61 73 65 55 52 49 20 5b 74 64 set baseURI [td
84b0: 6f 6d 3a 3a 62 61 73 65 55 52 4c 20 5b 66 69 6c om::baseURL [fil
84c0: 65 20 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b 66 69 e join [pwd] [fi
84d0: 6c 65 20 64 69 72 20 5b 69 6e 66 6f 20 73 63 72 le dir [info scr
84e0: 69 70 74 5d 5d 20 64 6f 6d 2e 74 65 73 74 5d 5d ipt]] dom.test]]
84f0: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
8500: 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 m parse \.
8510: 20 20 20 20 20 20 2d 62 61 73 65 75 72 6c 20 24 -baseurl $
8520: 62 61 73 65 55 52 49 20 5c 0a 20 20 20 20 20 20 baseURI \.
8530: 20 20 20 20 20 20 2d 65 78 74 65 72 6e 61 6c 65 -externale
8540: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 3a 3a 74 ntitycommand ::t
8550: 64 6f 6d 3a 3a 65 78 74 52 65 66 48 61 6e 64 6c dom::extRefHandl
8560: 65 72 20 7b 0a 3c 21 44 4f 43 54 59 50 45 20 72 er {.<!DOCTYPE r
8570: 6f 6f 74 20 53 59 53 54 45 4d 20 22 64 61 74 61 oot SYSTEM "data
8580: 2f 64 6f 6d 43 6d 64 32 2e 64 74 64 22 3e 0a 3c /domCmd2.dtd">.<
8590: 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 root/>}]. set
85a0: 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 root [$doc docu
85b0: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 mentElement].
85c0: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f set result [$ro
85d0: 6f 74 20 40 66 69 78 65 64 5d 0a 20 20 20 20 24 ot @fixed]. $
85e0: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 doc delete. s
85f0: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 74 6f 54 et result.} {toT
8600: 68 61 74 7d 0a 0a 70 72 6f 63 20 64 6f 6d 2d 35 hat}..proc dom-5
8610: 2e 32 20 7b 6d 79 70 61 72 6d 20 62 61 73 65 20 .2 {myparm base
8620: 73 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 systemId publicI
8630: 64 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 64 d} {. set ::d
8640: 6f 6d 2d 35 5f 32 20 24 6d 79 70 61 72 6d 0a 20 om-5_2 $myparm.
8650: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
8660: 73 74 72 69 6e 67 20 64 75 6d 6d 79 20 22 22 5d string dummy ""]
8670: 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 35 2e 32 .}..test dom-5.2
8680: 20 7b 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 {-externalentit
8690: 79 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 ycommand} {.
86a0: 73 65 74 20 3a 3a 64 6f 6d 2d 35 5f 32 20 22 22 set ::dom-5_2 ""
86b0: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
86c0: 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 m parse \.
86d0: 20 20 20 20 20 20 20 20 20 20 20 2d 62 61 73 65 -base
86e0: 75 72 6c 20 22 64 75 6d 6d 79 22 20 5c 0a 20 20 url "dummy" \.
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d -
8700: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
8710: 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 64 6f 6d 2d mmand [list dom-
8720: 35 2e 32 20 74 68 69 73 44 6f 63 5d 20 7b 0a 20 5.2 thisDoc] {.
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8740: 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 72 6f <!DOCTYPE ro
8750: 6f 74 20 53 59 53 54 45 4d 20 22 22 3e 0a 20 20 ot SYSTEM "">.
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8770: 20 20 20 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 <root/>}].
8780: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
8790: 20 73 65 74 20 3a 3a 64 6f 6d 2d 35 5f 32 0a 7d set ::dom-5_2.}
87a0: 20 7b 74 68 69 73 44 6f 63 7d 0a 0a 70 72 6f 63 {thisDoc}..proc
87b0: 20 64 6f 6d 2d 35 2e 33 20 7b 62 61 73 65 20 73 dom-5.3 {base s
87c0: 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 64 ystemId publicId
87d0: 7d 20 7b 0a 20 20 20 20 73 77 69 74 63 68 20 24 } {. switch $
87e0: 70 75 62 6c 69 63 49 64 20 7b 0a 20 20 20 20 20 publicId {.
87f0: 20 20 20 22 65 31 22 20 7b 0a 20 20 20 20 20 20 "e1" {.
8800: 20 20 20 20 20 20 23 20 4e 6f 74 20 77 65 6c 6c # Not well
8810: 2d 66 6f 72 6d 65 64 0a 20 20 20 20 20 20 20 20 -formed.
8820: 20 20 20 20 73 65 74 20 64 61 74 61 20 22 3c 65 set data "<e
8830: 2c 31 2f 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a ,1/>". }.
8840: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default
8850: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 {. er
8860: 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 ror "unknown pub
8870: 6c 69 63 20 49 44 22 0a 20 20 20 20 20 20 20 20 lic ID".
8880: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 }. }. retu
8890: 72 6e 20 5b 6c 69 73 74 20 22 73 74 72 69 6e 67 rn [list "string
88a0: 22 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a 7d " $base $data].}
88b0: 0a 74 65 73 74 20 64 6f 6d 2d 35 2e 33 20 7b 2d .test dom-5.3 {-
88c0: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
88d0: 6d 6d 61 6e 64 20 2d 20 6e 65 73 74 65 64 20 65 mmand - nested e
88e0: 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 xternal entities
88f0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 } -body {. se
8900: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
8910: 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 70 61 {. dom pa
8920: 72 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 rse -externalent
8930: 69 74 79 63 6f 6d 6d 61 6e 64 20 64 6f 6d 2d 35 itycommand dom-5
8940: 2e 33 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 .3 \.
8950: 20 7b 3c 21 44 4f 43 54 59 50 45 20 64 6f 63 20 {<!DOCTYPE doc
8960: 5b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [.
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 <!
8980: 45 4e 54 49 54 59 20 65 31 20 50 55 42 4c 49 43 ENTITY e1 PUBLIC
8990: 20 22 65 31 22 20 22 65 31 2e 78 6d 6c 22 3e 0a "e1" "e1.xml">.
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 5d 3e 0a 20 ]>.
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
89d0: 64 6f 63 3e 26 65 31 3b 3c 2f 64 6f 63 3e 7d 0a doc>&e1;</doc>}.
89e0: 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 20 20 6c } msg]. l
89f0: 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67 ist $result $msg
8a00: 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 73 74 .} -result [list
8a10: 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f 74 20 77 1 {error "not w
8a20: 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 6e 76 61 ell-formed (inva
8a30: 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 6e 20 65 lid token)" in e
8a40: 6e 74 69 74 79 20 22 65 31 2e 78 6d 6c 22 20 61 ntity "e1.xml" a
8a50: 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 63 74 t line 1 charact
8a60: 65 72 20 32 0a 22 3c 65 2c 20 3c 2d 2d 45 72 72 er 2."<e, <--Err
8a70: 6f 72 2d 2d 20 31 2f 3e 22 2c 20 72 65 66 65 72 or-- 1/>", refer
8a80: 65 6e 63 65 64 20 61 74 20 6c 69 6e 65 20 34 20 enced at line 4
8a90: 63 68 61 72 61 63 74 65 72 20 32 31 7d 5d 0a 0a character 21}]..
8aa0: 70 72 6f 63 20 64 6f 6d 2d 35 2e 34 20 7b 62 61 proc dom-5.4 {ba
8ab0: 73 65 20 73 79 73 74 65 6d 49 64 20 70 75 62 6c se systemId publ
8ac0: 69 63 49 64 7d 20 7b 0a 20 20 20 20 73 77 69 74 icId} {. swit
8ad0: 63 68 20 24 70 75 62 6c 69 63 49 64 20 7b 0a 20 ch $publicId {.
8ae0: 20 20 20 20 20 20 20 22 65 31 22 20 7b 0a 20 20 "e1" {.
8af0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61 set da
8b00: 74 61 20 22 3c 65 31 3e 26 65 32 3b 3c 2f 65 31 ta "<e1>&e2;</e1
8b10: 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 >". }.
8b20: 20 20 20 20 20 22 65 32 22 20 7b 0a 20 20 20 20 "e2" {.
8b30: 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data
8b40: 20 22 3c 65 2c 32 2f 3e 22 0a 20 20 20 20 20 20 "<e,2/>".
8b50: 20 20 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61 }. defa
8b60: 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ult {.
8b70: 20 20 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e error "unknown
8b80: 20 70 75 62 6c 69 63 20 49 44 22 0a 20 20 20 20 public ID".
8b90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 }. }.
8ba0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 73 74 return [list "st
8bb0: 72 69 6e 67 22 20 24 62 61 73 65 20 24 64 61 74 ring" $base $dat
8bc0: 61 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 35 2e a].}.test dom-5.
8bd0: 34 20 7b 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 4 {-externalenti
8be0: 74 79 63 6f 6d 6d 61 6e 64 20 2d 20 6e 65 73 74 tycommand - nest
8bf0: 65 64 20 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 ed external enti
8c00: 74 69 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 ties} -body {.
8c10: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 set result [ca
8c20: 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20 64 6f tch {. do
8c30: 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 m parse -externa
8c40: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 64 lentitycommand d
8c50: 6f 6d 2d 35 2e 34 20 5c 0a 20 20 20 20 20 20 20 om-5.4 \.
8c60: 20 20 20 20 20 7b 3c 21 44 4f 43 54 59 50 45 20 {<!DOCTYPE
8c70: 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 20 20 20 doc [.
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c90: 20 20 3c 21 45 4e 54 49 54 59 20 65 31 20 50 55 <!ENTITY e1 PU
8ca0: 42 4c 49 43 20 22 65 31 22 20 22 65 31 2e 78 6d BLIC "e1" "e1.xm
8cb0: 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 l">.
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8cd0: 3c 21 45 4e 54 49 54 59 20 65 32 20 50 55 42 4c <!ENTITY e2 PUBL
8ce0: 49 43 20 22 65 32 22 20 22 65 32 2e 78 6d 6c 22 IC "e2" "e2.xml"
8cf0: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >.
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 3e ]>
8d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8d20: 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f 64 6f 63 3e <doc>&e1;</doc>
8d30: 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 20 }. } msg].
8d40: 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d list $result $m
8d50: 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 sg.} -result [li
8d60: 73 74 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f 74 st 1 {error "not
8d70: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 6e well-formed (in
8d80: 76 61 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 6e valid token)" in
8d90: 20 65 6e 74 69 74 79 20 22 65 32 2e 78 6d 6c 22 entity "e2.xml"
8da0: 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 at line 1 chara
8db0: 63 74 65 72 20 32 0a 22 3c 65 2c 20 3c 2d 2d 45 cter 2."<e, <--E
8dc0: 72 72 6f 72 2d 2d 20 32 2f 3e 22 2c 20 72 65 66 rror-- 2/>", ref
8dd0: 65 72 65 6e 63 65 64 20 69 6e 20 65 6e 74 69 74 erenced in entit
8de0: 79 20 22 65 31 2e 78 6d 6c 22 20 61 74 20 6c 69 y "e1.xml" at li
8df0: 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 34 ne 1 character 4
8e00: 2c 20 72 65 66 65 72 65 6e 63 65 64 20 61 74 20 , referenced at
8e10: 6c 69 6e 65 20 35 20 63 68 61 72 61 63 74 65 72 line 5 character
8e20: 20 32 31 7d 5d 0a 0a 70 72 6f 63 20 64 6f 6d 2d 21}]..proc dom-
8e30: 35 2e 35 20 7b 62 61 73 65 20 73 79 73 74 65 6d 5.5 {base system
8e40: 49 64 20 70 75 62 6c 69 63 49 64 7d 20 7b 0a 20 Id publicId} {.
8e50: 20 20 20 73 77 69 74 63 68 20 24 70 75 62 6c 69 switch $publi
8e60: 63 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 65 cId {. "e
8e70: 31 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 1" {.
8e80: 20 73 65 74 20 64 61 74 61 20 22 3c 65 31 3e 26 set data "<e1>&
8e90: 65 32 3b 3c 2f 65 31 3e 22 0a 20 20 20 20 20 20 e2;</e1>".
8ea0: 20 20 7d 0a 20 20 20 20 20 20 20 20 22 65 32 22 }. "e2"
8eb0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {. s
8ec0: 65 74 20 64 61 74 61 20 22 3c 65 32 3e 26 65 33 et data "<e2>&e3
8ed0: 3b 3c 2f 65 32 3e 22 0a 20 20 20 20 20 20 20 20 ;</e2>".
8ee0: 7d 0a 20 20 20 20 20 20 20 20 22 65 33 22 20 7b }. "e3" {
8ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N
8f00: 6f 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 20 ot well-formed.
8f10: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 set d
8f20: 61 74 61 20 22 3c 65 2c 33 2f 3e 22 0a 20 20 20 ata "<e,3/>".
8f30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 }. d
8f40: 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 efault {.
8f50: 20 20 20 20 20 65 72 72 6f 72 20 22 75 6e 6b 6e error "unkn
8f60: 6f 77 6e 20 70 75 62 6c 69 63 20 49 44 22 0a 20 own public ID".
8f70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 }. }.
8f80: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
8f90: 22 73 74 72 69 6e 67 22 20 24 62 61 73 65 20 24 "string" $base $
8fa0: 64 61 74 61 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d data].}.test dom
8fb0: 2d 35 2e 35 20 7b 2d 65 78 74 65 72 6e 61 6c 65 -5.5 {-externale
8fc0: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 2d 20 6e ntitycommand - n
8fd0: 65 73 74 65 64 20 65 78 74 65 72 6e 61 6c 20 65 ested external e
8fe0: 6e 74 69 74 69 65 73 7d 20 2d 62 6f 64 79 20 7b ntities} -body {
8ff0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
9000: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20 [catch {.
9010: 20 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 dom parse -exte
9020: 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e rnalentitycomman
9030: 64 20 64 6f 6d 2d 35 2e 35 20 5c 0a 20 20 20 20 d dom-5.5 \.
9040: 20 20 20 20 20 20 20 20 7b 3c 21 44 4f 43 54 59 {<!DOCTY
9050: 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 PE doc [.
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9070: 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 31 <!ENTITY e1
9080: 20 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 31 PUBLIC "e1" "e1
9090: 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 .xml">.
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90b0: 20 20 20 3c 21 45 4e 54 49 54 59 20 65 32 20 50 <!ENTITY e2 P
90c0: 55 42 4c 49 43 20 22 65 32 22 20 22 65 32 2e 78 UBLIC "e2" "e2.x
90d0: 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ml">.
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90f0: 20 3c 21 45 4e 54 49 54 59 20 65 33 20 50 55 42 <!ENTITY e3 PUB
9100: 4c 49 43 20 22 65 33 22 20 22 65 33 2e 78 6d 6c LIC "e3" "e3.xml
9110: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ">.
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d ]
9130: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >.
9140: 20 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f 64 6f 63 <doc>&e1;</doc
9150: 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 >}. } msg].
9160: 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 list $result $
9170: 6d 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c msg.} -result [l
9180: 69 73 74 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f ist 1 {error "no
9190: 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 t well-formed (i
91a0: 6e 76 61 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 nvalid token)" i
91b0: 6e 20 65 6e 74 69 74 79 20 22 65 33 2e 78 6d 6c n entity "e3.xml
91c0: 22 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 " at line 1 char
91d0: 61 63 74 65 72 20 32 0a 22 3c 65 2c 20 3c 2d 2d acter 2."<e, <--
91e0: 45 72 72 6f 72 2d 2d 20 33 2f 3e 22 2c 20 72 65 Error-- 3/>", re
91f0: 66 65 72 65 6e 63 65 64 20 69 6e 20 65 6e 74 69 ferenced in enti
9200: 74 79 20 22 65 32 2e 78 6d 6c 22 20 61 74 20 6c ty "e2.xml" at l
9210: 69 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 ine 1 character
9220: 34 2c 20 72 65 66 65 72 65 6e 63 65 64 20 69 6e 4, referenced in
9230: 20 65 6e 74 69 74 79 20 22 65 31 2e 78 6d 6c 22 entity "e1.xml"
9240: 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 at line 1 chara
9250: 63 74 65 72 20 34 2c 20 72 65 66 65 72 65 6e 63 cter 4, referenc
9260: 65 64 20 61 74 20 6c 69 6e 65 20 36 20 63 68 61 ed at line 6 cha
9270: 72 61 63 74 65 72 20 32 31 7d 5d 0a 0a 70 72 6f racter 21}]..pro
9280: 63 20 64 6f 6d 2d 35 2e 36 20 7b 62 61 73 65 20 c dom-5.6 {base
9290: 73 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 systemId publicI
92a0: 64 7d 20 7b 0a 20 20 20 20 73 77 69 74 63 68 20 d} {. switch
92b0: 24 70 75 62 6c 69 63 49 64 20 7b 0a 20 20 20 20 $publicId {.
92c0: 20 20 20 20 22 65 31 22 20 7b 0a 20 20 20 20 20 "e1" {.
92d0: 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 20 set data
92e0: 5b 6f 70 65 6e 20 24 3a 3a 65 31 5d 0a 20 20 20 [open $::e1].
92f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 }. d
9300: 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 efault {.
9310: 20 20 20 20 20 65 72 72 6f 72 20 22 75 6e 6b 6e error "unkn
9320: 6f 77 6e 20 70 75 62 6c 69 63 20 49 44 22 0a 20 own public ID".
9330: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 }. }.
9340: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 6f 70 65 lappend ::ope
9350: 6e 43 68 61 6e 6e 65 6c 73 20 24 64 61 74 61 0a nChannels $data.
9360: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list
9370: 20 22 63 68 61 6e 6e 65 6c 22 20 24 62 61 73 65 "channel" $base
9380: 20 24 64 61 74 61 5d 0a 7d 0a 74 65 73 74 20 64 $data].}.test d
9390: 6f 6d 2d 35 2e 36 20 7b 2d 65 78 74 65 72 6e 61 om-5.6 {-externa
93a0: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 2d lentitycommand -
93b0: 20 6e 65 73 74 65 64 20 65 78 74 65 72 6e 61 6c nested external
93c0: 20 65 6e 74 69 74 69 65 73 7d 20 2d 73 65 74 75 entities} -setu
93d0: 70 20 7b 0a 20 20 20 20 73 65 74 20 65 31 20 5b p {. set e1 [
93e0: 6d 61 6b 65 46 69 6c 65 20 22 3c 65 2c 31 2f 3e makeFile "<e,1/>
93f0: 22 20 65 31 2e 78 6d 6c 5d 0a 20 20 20 20 73 65 " e1.xml]. se
9400: 74 20 6f 70 65 6e 43 68 61 6e 6e 65 6c 73 20 5b t openChannels [
9410: 6c 69 73 74 5d 0a 7d 20 2d 62 6f 64 79 20 7b 0a list].} -body {.
9420: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
9430: 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20 catch {.
9440: 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 dom parse -exter
9450: 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 nalentitycommand
9460: 20 64 6f 6d 2d 35 2e 36 20 5c 0a 20 20 20 20 20 dom-5.6 \.
9470: 20 20 20 20 20 20 20 7b 3c 21 44 4f 43 54 59 50 {<!DOCTYP
9480: 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 20 E doc [.
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94a0: 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 31 20 <!ENTITY e1
94b0: 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 31 2e PUBLIC "e1" "e1.
94c0: 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 xml">.
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94e0: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
94f0: 20 20 20 20 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f <doc>&e1;</
9500: 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 5d doc>}. } msg]
9510: 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 6c . list $resul
9520: 74 20 24 6d 73 67 0a 7d 20 2d 63 6c 65 61 6e 75 t $msg.} -cleanu
9530: 70 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 p {. foreach
9540: 63 68 61 6e 6e 65 6c 20 24 6f 70 65 6e 43 68 61 channel $openCha
9550: 6e 6e 65 6c 73 20 7b 63 6c 6f 73 65 20 24 63 68 nnels {close $ch
9560: 61 6e 6e 65 6c 7d 0a 20 20 20 20 72 65 6d 6f 76 annel}. remov
9570: 65 46 69 6c 65 20 65 31 2e 78 6d 6c 0a 7d 20 2d eFile e1.xml.} -
9580: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 31 20 7b result [list 1 {
9590: 65 72 72 6f 72 20 22 6e 6f 74 20 77 65 6c 6c 2d error "not well-
95a0: 66 6f 72 6d 65 64 20 28 69 6e 76 61 6c 69 64 20 formed (invalid
95b0: 74 6f 6b 65 6e 29 22 20 69 6e 20 65 6e 74 69 74 token)" in entit
95c0: 79 20 22 65 31 2e 78 6d 6c 22 20 61 74 20 6c 69 y "e1.xml" at li
95d0: 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 32 ne 1 character 2
95e0: 2c 20 72 65 66 65 72 65 6e 63 65 64 20 61 74 20 , referenced at
95f0: 6c 69 6e 65 20 34 20 63 68 61 72 61 63 74 65 72 line 4 character
9600: 20 32 31 7d 5d 0a 0a 70 72 6f 63 20 64 6f 6d 2d 21}]..proc dom-
9610: 35 2e 37 20 7b 62 61 73 65 20 73 79 73 74 65 6d 5.7 {base system
9620: 49 64 20 70 75 62 6c 69 63 49 64 7d 20 7b 0a 20 Id publicId} {.
9630: 20 20 20 73 77 69 74 63 68 20 24 70 75 62 6c 69 switch $publi
9640: 63 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 65 cId {. "e
9650: 31 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 1" {.
9660: 20 73 65 74 20 64 61 74 61 20 5b 6f 70 65 6e 20 set data [open
9670: 24 3a 3a 65 31 5d 0a 20 20 20 20 20 20 20 20 7d $::e1]. }
9680: 0a 20 20 20 20 20 20 20 20 22 65 32 22 20 7b 0a . "e2" {.
9690: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
96a0: 64 61 74 61 20 5b 6f 70 65 6e 20 24 3a 3a 65 32 data [open $::e2
96b0: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ]. }.
96c0: 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 default {.
96d0: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
96e0: 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 6c 69 63 20 "unknown public
96f0: 49 44 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 ID". }.
9700: 20 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 }. lappend
9710: 3a 3a 6f 70 65 6e 43 68 61 6e 6e 65 6c 73 20 24 ::openChannels $
9720: 64 61 74 61 0a 20 20 20 20 72 65 74 75 72 6e 20 data. return
9730: 5b 6c 69 73 74 20 22 63 68 61 6e 6e 65 6c 22 20 [list "channel"
9740: 24 62 61 73 65 20 24 64 61 74 61 5d 0a 7d 0a 74 $base $data].}.t
9750: 65 73 74 20 64 6f 6d 2d 35 2e 37 20 7b 2d 65 78 est dom-5.7 {-ex
9760: 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d ternalentitycomm
9770: 61 6e 64 20 2d 20 6e 65 73 74 65 64 20 65 78 74 and - nested ext
9780: 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 7d 20 ernal entities}
9790: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74 -setup {. set
97a0: 20 65 31 20 5b 6d 61 6b 65 46 69 6c 65 20 22 3c e1 [makeFile "<
97b0: 65 31 3e 26 65 32 3b 3c 2f 65 31 3e 22 20 65 31 e1>&e2;</e1>" e1
97c0: 2e 78 6d 6c 5d 0a 20 20 20 20 73 65 74 20 65 32 .xml]. set e2
97d0: 20 5b 6d 61 6b 65 46 69 6c 65 20 22 3c 65 2c 32 [makeFile "<e,2
97e0: 2f 3e 22 20 65 32 2e 78 6d 6c 5d 0a 20 20 20 20 />" e2.xml].
97f0: 73 65 74 20 6f 70 65 6e 43 68 61 6e 6e 65 6c 73 set openChannels
9800: 20 5b 6c 69 73 74 5d 0a 7d 20 2d 62 6f 64 79 20 [list].} -body
9810: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
9820: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 [catch {.
9830: 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 dom parse -ext
9840: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 ernalentitycomma
9850: 6e 64 20 64 6f 6d 2d 35 2e 37 20 5c 0a 20 20 20 nd dom-5.7 \.
9860: 20 20 20 20 20 20 20 20 20 7b 3c 21 44 4f 43 54 {<!DOCT
9870: 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 YPE doc [.
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9890: 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 <!ENTITY e
98a0: 31 20 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 1 PUBLIC "e1" "e
98b0: 31 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 1.xml">.
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98d0: 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 32 20 <!ENTITY e2
98e0: 50 55 42 4c 49 43 20 22 65 32 22 20 22 65 32 2e PUBLIC "e2" "e2.
98f0: 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 xml">.
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9910: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
9920: 20 20 20 20 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f <doc>&e1;</
9930: 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 5d doc>}. } msg]
9940: 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 6c . list $resul
9950: 74 20 24 6d 73 67 0a 7d 20 2d 63 6c 65 61 6e 75 t $msg.} -cleanu
9960: 70 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 p {. foreach
9970: 63 68 61 6e 6e 65 6c 20 24 6f 70 65 6e 43 68 61 channel $openCha
9980: 6e 6e 65 6c 73 20 7b 63 6c 6f 73 65 20 24 63 68 nnels {close $ch
9990: 61 6e 6e 65 6c 7d 0a 20 20 20 20 72 65 6d 6f 76 annel}. remov
99a0: 65 46 69 6c 65 20 65 31 2e 78 6d 6c 0a 20 20 20 eFile e1.xml.
99b0: 20 72 65 6d 6f 76 65 46 69 6c 65 20 65 32 2e 78 removeFile e2.x
99c0: 6d 6c 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 ml.} -result [li
99d0: 73 74 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f 74 st 1 {error "not
99e0: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 6e well-formed (in
99f0: 76 61 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 6e valid token)" in
9a00: 20 65 6e 74 69 74 79 20 22 65 32 2e 78 6d 6c 22 entity "e2.xml"
9a10: 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 at line 1 chara
9a20: 63 74 65 72 20 32 2c 20 72 65 66 65 72 65 6e 63 cter 2, referenc
9a30: 65 64 20 69 6e 20 65 6e 74 69 74 79 20 22 65 31 ed in entity "e1
9a40: 2e 78 6d 6c 22 20 61 74 20 6c 69 6e 65 20 31 20 .xml" at line 1
9a50: 63 68 61 72 61 63 74 65 72 20 34 2c 20 72 65 66 character 4, ref
9a60: 65 72 65 6e 63 65 64 20 61 74 20 6c 69 6e 65 20 erenced at line
9a70: 35 20 63 68 61 72 61 63 74 65 72 20 32 31 7d 5d 5 character 21}]
9a80: 0a 0a 70 72 6f 63 20 64 6f 6d 2d 35 2e 38 20 7b ..proc dom-5.8 {
9a90: 62 61 73 65 20 73 79 73 74 65 6d 49 64 20 70 75 base systemId pu
9aa0: 62 6c 69 63 49 64 7d 20 7b 0a 20 20 20 20 73 77 blicId} {. sw
9ab0: 69 74 63 68 20 24 70 75 62 6c 69 63 49 64 20 7b itch $publicId {
9ac0: 0a 20 20 20 20 20 20 20 20 22 65 31 22 20 7b 0a . "e1" {.
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
9ae0: 64 61 74 61 20 5b 6f 70 65 6e 20 24 3a 3a 65 31 data [open $::e1
9af0: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ]. }.
9b00: 20 20 20 20 22 65 32 22 20 7b 0a 20 20 20 20 20 "e2" {.
9b10: 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 20 set data
9b20: 5b 6f 70 65 6e 20 24 3a 3a 65 32 5d 0a 20 20 20 [open $::e2].
9b30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 }. "
9b40: 65 33 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 e3" {.
9b50: 20 20 73 65 74 20 64 61 74 61 20 5b 6f 70 65 6e set data [open
9b60: 20 24 3a 3a 65 33 5d 0a 20 20 20 20 20 20 20 20 $::e3].
9b70: 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c }. defaul
9b80: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t {.
9b90: 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 70 error "unknown p
9ba0: 75 62 6c 69 63 20 49 44 22 0a 20 20 20 20 20 20 ublic ID".
9bb0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6c 61 }. }. la
9bc0: 70 70 65 6e 64 20 3a 3a 6f 70 65 6e 43 68 61 6e ppend ::openChan
9bd0: 6e 65 6c 73 20 24 64 61 74 61 0a 20 20 20 20 72 nels $data. r
9be0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 63 68 61 eturn [list "cha
9bf0: 6e 6e 65 6c 22 20 24 62 61 73 65 20 24 64 61 74 nnel" $base $dat
9c00: 61 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 35 2e a].}.test dom-5.
9c10: 38 20 7b 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 8 {-externalenti
9c20: 74 79 63 6f 6d 6d 61 6e 64 20 2d 20 6e 65 73 74 tycommand - nest
9c30: 65 64 20 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 ed external enti
9c40: 74 69 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 ties} -setup {.
9c50: 20 20 20 73 65 74 20 65 31 20 5b 6d 61 6b 65 46 set e1 [makeF
9c60: 69 6c 65 20 22 3c 65 31 3e 26 65 32 3b 3c 2f 65 ile "<e1>&e2;</e
9c70: 31 3e 22 20 65 31 2e 78 6d 6c 5d 0a 20 20 20 20 1>" e1.xml].
9c80: 73 65 74 20 65 32 20 5b 6d 61 6b 65 46 69 6c 65 set e2 [makeFile
9c90: 20 22 3c 65 32 3e 26 65 33 3b 3c 2f 65 32 3e 22 "<e2>&e3;</e2>"
9ca0: 20 65 32 2e 78 6d 6c 5d 0a 20 20 20 20 73 65 74 e2.xml]. set
9cb0: 20 65 33 20 5b 6d 61 6b 65 46 69 6c 65 20 22 3c e3 [makeFile "<
9cc0: 65 2c 33 2f 3e 22 20 65 33 2e 78 6d 6c 5d 0a 20 e,3/>" e3.xml].
9cd0: 20 20 20 73 65 74 20 6f 70 65 6e 43 68 61 6e 6e set openChann
9ce0: 65 6c 73 20 5b 6c 69 73 74 5d 0a 7d 20 2d 62 6f els [list].} -bo
9cf0: 64 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 dy {. set res
9d00: 75 6c 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 ult [catch {.
9d10: 20 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 2d dom parse -
9d20: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
9d30: 6d 6d 61 6e 64 20 64 6f 6d 2d 35 2e 38 20 5c 0a mmand dom-5.8 \.
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 3c 21 44 {<!D
9d50: 4f 43 54 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 OCTYPE doc [.
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9d70: 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 <!ENTIT
9d80: 59 20 65 31 20 50 55 42 4c 49 43 20 22 65 31 22 Y e1 PUBLIC "e1"
9d90: 20 22 65 31 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 "e1.xml">.
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9db0: 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 <!ENTITY
9dc0: 65 32 20 50 55 42 4c 49 43 20 22 65 32 22 20 22 e2 PUBLIC "e2" "
9dd0: 65 32 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 e2.xml">.
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9df0: 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 33 <!ENTITY e3
9e00: 20 50 55 42 4c 49 43 20 22 65 33 22 20 22 65 33 PUBLIC "e3" "e3
9e10: 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 .xml">.
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e30: 20 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 ]>.
9e40: 20 20 20 20 20 20 3c 64 6f 63 3e 26 65 31 3b 3c <doc>&e1;<
9e50: 2f 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 /doc>}. } msg
9e60: 5d 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 ]. list $resu
9e70: 6c 74 20 24 6d 73 67 0a 7d 20 2d 63 6c 65 61 6e lt $msg.} -clean
9e80: 75 70 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 up {. foreach
9e90: 20 63 68 61 6e 6e 65 6c 20 24 6f 70 65 6e 43 68 channel $openCh
9ea0: 61 6e 6e 65 6c 73 20 7b 63 6c 6f 73 65 20 24 63 annels {close $c
9eb0: 68 61 6e 6e 65 6c 7d 0a 20 20 20 20 72 65 6d 6f hannel}. remo
9ec0: 76 65 46 69 6c 65 20 65 31 2e 78 6d 6c 0a 20 20 veFile e1.xml.
9ed0: 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 65 32 2e removeFile e2.
9ee0: 78 6d 6c 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 xml. removeFi
9ef0: 6c 65 20 65 33 2e 78 6d 6c 0a 7d 20 2d 72 65 73 le e3.xml.} -res
9f00: 75 6c 74 20 5b 6c 69 73 74 20 31 20 7b 65 72 72 ult [list 1 {err
9f10: 6f 72 20 22 6e 6f 74 20 77 65 6c 6c 2d 66 6f 72 or "not well-for
9f20: 6d 65 64 20 28 69 6e 76 61 6c 69 64 20 74 6f 6b med (invalid tok
9f30: 65 6e 29 22 20 69 6e 20 65 6e 74 69 74 79 20 22 en)" in entity "
9f40: 65 33 2e 78 6d 6c 22 20 61 74 20 6c 69 6e 65 20 e3.xml" at line
9f50: 31 20 63 68 61 72 61 63 74 65 72 20 32 2c 20 72 1 character 2, r
9f60: 65 66 65 72 65 6e 63 65 64 20 69 6e 20 65 6e 74 eferenced in ent
9f70: 69 74 79 20 22 65 32 2e 78 6d 6c 22 20 61 74 20 ity "e2.xml" at
9f80: 6c 69 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 line 1 character
9f90: 20 34 2c 20 72 65 66 65 72 65 6e 63 65 64 20 69 4, referenced i
9fa0: 6e 20 65 6e 74 69 74 79 20 22 65 31 2e 78 6d 6c n entity "e1.xml
9fb0: 22 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 " at line 1 char
9fc0: 61 63 74 65 72 20 34 2c 20 72 65 66 65 72 65 6e acter 4, referen
9fd0: 63 65 64 20 61 74 20 6c 69 6e 65 20 36 20 63 68 ced at line 6 ch
9fe0: 61 72 61 63 74 65 72 20 32 31 7d 5d 0a 0a 74 65 aracter 21}]..te
9ff0: 73 74 20 64 6f 6d 2d 35 2e 39 20 7b 57 72 6f 6e st dom-5.9 {Wron
a000: 67 20 6f 70 74 69 6f 6e 20 61 66 74 65 72 20 2d g option after -
a010: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
a020: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 mmand} -body {.
a030: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
a040: 61 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 65 20 atch {dom parse
a050: 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 -externalentityc
a060: 6f 6d 6d 61 6e 64 20 3a 3a 74 64 6f 6d 3a 3a 65 ommand ::tdom::e
a070: 78 74 52 65 66 48 61 6e 64 6c 65 72 20 5c 0a 20 xtRefHandler \.
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a090: 20 20 20 20 20 20 20 20 20 20 2d 75 73 65 46 6f -useFo
a0a0: 72 65 69 67 6e 44 54 44 20 66 6f 6f 7d 5d 0a 7d reignDTD foo}].}
a0b0: 20 2d 72 65 73 75 6c 74 20 31 0a 0a 74 65 73 74 -result 1..test
a0c0: 20 64 6f 6d 2d 36 2e 31 20 7b 75 73 65 20 69 6e dom-6.1 {use in
a0d0: 20 73 6c 61 76 65 20 69 6e 74 65 72 70 72 65 74 slave interpret
a0e0: 65 72 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 6c er} {. set sl
a0f0: 61 76 65 20 5b 69 6e 74 65 72 70 20 63 72 65 61 ave [interp crea
a100: 74 65 5d 0a 20 20 20 20 6c 6f 61 64 20 7b 7d 20 te]. load {}
a110: 74 64 6f 6d 20 24 73 6c 61 76 65 0a 20 20 20 20 tdom $slave.
a120: 69 6e 74 65 72 70 20 65 76 61 6c 20 24 73 6c 61 interp eval $sla
a130: 76 65 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d ve {. dom
a140: 20 70 61 72 73 65 20 3c 72 6f 6f 74 3e 66 6f 6f parse <root>foo
a150: 3c 2f 72 6f 6f 74 3e 20 64 6f 63 0a 20 20 20 20 </root> doc.
a160: 20 20 20 20 24 64 6f 63 20 64 6f 63 75 6d 65 6e $doc documen
a170: 74 45 6c 65 6d 65 6e 74 20 72 6f 6f 74 0a 20 20 tElement root.
a180: 20 20 7d 0a 20 20 20 20 69 6e 74 65 72 70 20 64 }. interp d
a190: 65 6c 65 74 65 20 24 73 6c 61 76 65 0a 7d 20 7b elete $slave.} {
a1a0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 36 2e 32 20 }..test dom-6.2
a1b0: 7b 75 73 65 20 69 6e 20 73 6c 61 76 65 20 69 6e {use in slave in
a1c0: 74 65 72 70 72 65 74 65 72 7d 20 7b 0a 20 20 20 terpreter} {.
a1d0: 20 73 65 74 20 73 6c 61 76 65 20 5b 69 6e 74 65 set slave [inte
a1e0: 72 70 20 63 72 65 61 74 65 5d 0a 20 20 20 20 6c rp create]. l
a1f0: 6f 61 64 20 7b 7d 20 74 64 6f 6d 20 24 73 6c 61 oad {} tdom $sla
a200: 76 65 0a 20 20 20 20 69 6e 74 65 72 70 20 65 76 ve. interp ev
a210: 61 6c 20 24 73 6c 61 76 65 20 7b 0a 20 20 20 20 al $slave {.
a220: 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d set doc [dom
a230: 20 70 61 72 73 65 20 3c 72 6f 6f 74 3e 66 6f 6f parse <root>foo
a240: 3c 2f 72 6f 6f 74 3e 5d 0a 20 20 20 20 20 20 20 </root>].
a250: 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 set root [$doc
a260: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
a270: 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e 74 65 72 . }. inter
a280: 70 20 64 65 6c 65 74 65 20 24 73 6c 61 76 65 0a p delete $slave.
a290: 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 } {}..test dom-7
a2a0: 2e 31 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b .1 {setNameCheck
a2b0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 } {. set resu
a2c0: 6c 74 20 5b 64 6f 6d 20 73 65 74 4e 61 6d 65 43 lt [dom setNameC
a2d0: 68 65 63 6b 5d 0a 20 20 20 20 6c 61 70 70 65 6e heck]. lappen
a2e0: 64 20 72 65 73 75 6c 74 20 5b 64 6f 6d 20 73 65 d result [dom se
a2f0: 74 4e 61 6d 65 43 68 65 63 6b 20 30 5d 0a 20 20 tNameCheck 0].
a300: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
a310: 20 5b 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 [dom setNameChe
a320: 63 6b 5d 0a 20 20 20 20 23 20 73 65 74 20 62 61 ck]. # set ba
a330: 63 6b 20 74 6f 20 64 65 66 61 75 6c 74 0a 20 20 ck to default.
a340: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
a350: 20 5b 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 [dom setNameChe
a360: 63 6b 20 31 5d 0a 20 20 20 20 73 65 74 20 72 65 ck 1]. set re
a370: 73 75 6c 74 0a 7d 20 7b 31 20 30 20 30 20 31 7d sult.} {1 0 0 1}
a380: 0a 0a 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 63 ..set doc [dom c
a390: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 72 6f reateDocument ro
a3a0: 6f 74 5d 0a 23 20 65 6e 73 75 72 65 2c 20 77 65 ot].# ensure, we
a3b0: 27 76 65 20 74 68 65 20 64 65 66 61 75 6c 74 0a 've the default.
a3c0: 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b dom setNameCheck
a3d0: 20 31 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 32 1..test dom-7.2
a3e0: 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b 7d 20 {setNameCheck}
a3f0: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
a400: 20 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 [catch {$doc cr
a410: 65 61 74 65 45 6c 65 6d 65 6e 74 20 22 69 6e 76 eateElement "inv
a420: 61 6c 69 64 20 6e 61 6d 65 22 7d 20 65 72 72 4d alid name"} errM
a430: 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 sg]. lappend
a440: 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d result $errMsg.}
a450: 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 74 61 67 {1 {Invalid tag
a460: 20 6e 61 6d 65 20 27 69 6e 76 61 6c 69 64 20 6e name 'invalid n
a470: 61 6d 65 27 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d ame'}}..test dom
a480: 2d 37 2e 33 20 7b 73 65 74 4e 61 6d 65 43 68 65 -7.3 {setNameChe
a490: 63 6b 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 ck} {. catch
a4a0: 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 6d {$doc createElem
a4b0: 65 6e 74 20 22 76 61 6c 69 64 3a 6e 61 6d 65 22 ent "valid:name"
a4c0: 7d 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f }.} {0}..test do
a4d0: 6d 2d 37 2e 34 20 7b 73 65 74 4e 61 6d 65 43 68 m-7.4 {setNameCh
a4e0: 65 63 6b 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 eck} {. catch
a4f0: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 {$doc createEle
a500: 6d 65 6e 74 20 22 76 61 6c 69 64 3a 3a 6e 61 6d ment "valid::nam
a510: 65 22 7d 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 e"}.} {0}..test
a520: 64 6f 6d 2d 37 2e 35 20 7b 73 65 74 4e 61 6d 65 dom-7.5 {setName
a530: 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 64 6f 6d Check} {. dom
a540: 20 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 30 0a setNameCheck 0.
a550: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
a560: 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 catch {$doc crea
a570: 74 65 45 6c 65 6d 65 6e 74 20 22 69 6e 76 61 6c teElement "inval
a580: 69 64 20 6e 61 6d 65 22 7d 20 65 72 72 4d 73 67 id name"} errMsg
a590: 5d 0a 20 20 20 20 23 20 73 65 74 20 62 61 63 6b ]. # set back
a5a0: 20 74 6f 20 64 65 66 61 75 6c 74 0a 20 20 20 20 to default.
a5b0: 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b dom setNameCheck
a5c0: 20 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 1. set resul
a5d0: 74 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f t.} {0}..test do
a5e0: 6d 2d 37 2e 36 20 7b 73 65 74 4e 61 6d 65 43 68 m-7.6 {setNameCh
a5f0: 65 63 6b 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 eck} {. set r
a600: 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 64 esult [catch {$d
a610: 6f 63 20 63 72 65 61 74 65 45 6c 65 6d 65 6e 74 oc createElement
a620: 4e 53 20 22 64 75 6d 6d 79 6e 73 22 20 22 69 6e NS "dummyns" "in
a630: 76 61 6c 69 64 20 6e 61 6d 65 22 7d 20 65 72 72 valid name"} err
a640: 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 Msg]. lappend
a650: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
a660: 7d 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 66 75 } {1 {Invalid fu
a670: 6c 6c 20 71 75 61 6c 69 66 69 65 64 20 74 61 67 ll qualified tag
a680: 20 6e 61 6d 65 20 27 69 6e 76 61 6c 69 64 20 6e name 'invalid n
a690: 61 6d 65 27 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d ame'}}..test dom
a6a0: 2d 37 2e 37 20 7b 73 65 74 4e 61 6d 65 43 68 65 -7.7 {setNameChe
a6b0: 63 6b 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 ck} {. catch
a6c0: 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 6d {$doc createElem
a6d0: 65 6e 74 4e 53 20 22 64 75 6d 6d 79 6e 73 22 20 entNS "dummyns"
a6e0: 22 76 61 6c 69 64 3a 6e 61 6d 65 22 7d 0a 7d 20 "valid:name"}.}
a6f0: 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 2e {0}..test dom-7.
a700: 38 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b 7d 8 {setNameCheck}
a710: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c {. set resul
a720: 74 20 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 63 t [catch {$doc c
a730: 72 65 61 74 65 45 6c 65 6d 65 6e 74 4e 53 20 22 reateElementNS "
a740: 64 75 6d 6d 79 6e 73 22 20 22 69 6e 76 61 6c 69 dummyns" "invali
a750: 64 3a 3a 6e 61 6d 65 22 7d 20 65 72 72 4d 73 67 d::name"} errMsg
a760: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
a770: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b sult $errMsg.} {
a780: 31 20 7b 49 6e 76 61 6c 69 64 20 66 75 6c 6c 20 1 {Invalid full
a790: 71 75 61 6c 69 66 69 65 64 20 74 61 67 20 6e 61 qualified tag na
a7a0: 6d 65 20 27 69 6e 76 61 6c 69 64 3a 3a 6e 61 6d me 'invalid::nam
a7b0: 65 27 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 e'}}..test dom-7
a7c0: 2e 39 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b .9 {setNameCheck
a7d0: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e } {. dom setN
a7e0: 61 6d 65 43 68 65 63 6b 20 30 0a 20 20 20 20 73 ameCheck 0. s
a7f0: 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 et result [catch
a800: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 {$doc createEle
a810: 6d 65 6e 74 4e 53 20 22 64 75 6d 6d 79 6e 73 22 mentNS "dummyns"
a820: 20 22 69 6e 76 61 6c 69 64 20 6e 61 6d 65 22 7d "invalid name"}
a830: 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 23 20 73 errMsg]. # s
a840: 65 74 20 62 61 63 6b 20 74 6f 20 64 65 66 61 75 et back to defau
a850: 6c 74 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 lt. dom setNa
a860: 6d 65 43 68 65 63 6b 20 31 0a 20 20 20 20 73 65 meCheck 1. se
a870: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 30 7d 0a 0a t result.} {0}..
a880: 74 65 73 74 20 64 6f 6d 2d 37 2e 31 30 20 7b 73 test dom-7.10 {s
a890: 65 74 54 65 78 74 43 68 65 63 6b 7d 20 7b 0a 20 etTextCheck} {.
a8a0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
a8b0: 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 74 atch {$doc creat
a8c0: 65 43 6f 6d 6d 65 6e 74 20 22 76 61 6c 69 64 20 eComment "valid
a8d0: 63 6f 6d 6d 65 6e 74 22 7d 5d 0a 20 20 20 20 6c comment"}]. l
a8e0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 append result [c
a8f0: 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 74 atch {$doc creat
a900: 65 43 6f 6d 6d 65 6e 74 20 22 69 6e 76 61 6c 69 eComment "invali
a910: 64 20 2d 2d 20 63 6f 6d 6d 65 6e 74 22 7d 5d 0a d -- comment"}].
a920: 20 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 dom setTextC
a930: 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 70 65 heck 0. lappe
a940: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 nd result [catch
a950: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 43 6f 6d {$doc createCom
a960: 6d 65 6e 74 20 22 69 6e 76 61 6c 69 64 20 2d 2d ment "invalid --
a970: 20 63 6f 6d 6d 65 6e 74 22 7d 5d 0a 20 20 20 20 comment"}].
a980: 64 6f 6d 20 73 65 74 54 65 78 74 43 68 65 63 6b dom setTextCheck
a990: 20 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 1. set resul
a9a0: 74 0a 7d 20 7b 30 20 31 20 30 7d 0a 0a 74 65 73 t.} {0 1 0}..tes
a9b0: 74 20 64 6f 6d 2d 37 2e 31 31 20 7b 73 65 74 54 t dom-7.11 {setT
a9c0: 65 78 74 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 extCheck} {.
a9d0: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 set result [catc
a9e0: 68 20 7b 24 64 6f 63 20 63 72 65 61 74 65 43 44 h {$doc createCD
a9f0: 41 54 41 53 65 63 74 69 6f 6e 20 22 3c 76 61 6c ATASection "<val
aa00: 69 64 2f 3e 22 7d 5d 0a 20 20 20 20 6c 61 70 70 id/>"}]. lapp
aa10: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 end result [catc
aa20: 68 20 7b 24 64 6f 63 20 63 72 65 61 74 65 43 44 h {$doc createCD
aa30: 41 54 41 53 65 63 74 69 6f 6e 20 22 3c 69 6e 76 ATASection "<inv
aa40: 61 6c 69 64 3e 5d 5d 3e 3c 2f 69 6e 76 61 6c 69 alid>]]></invali
aa50: 64 22 7d 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 d"}]. dom set
aa60: 54 65 78 74 43 68 65 63 6b 20 30 0a 20 20 20 20 TextCheck 0.
aa70: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [
aa80: 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 catch {$doc crea
aa90: 74 65 43 44 41 54 41 53 65 63 74 69 6f 6e 20 22 teCDATASection "
aaa0: 3c 69 6e 76 61 6c 69 64 3e 5d 5d 3e 3c 2f 69 6e <invalid>]]></in
aab0: 76 61 6c 69 64 22 7d 5d 0a 20 20 20 20 64 6f 6d valid"}]. dom
aac0: 20 73 65 74 54 65 78 74 43 68 65 63 6b 20 31 0a setTextCheck 1.
aad0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
aae0: 20 7b 30 20 31 20 30 7d 0a 0a 74 65 73 74 20 64 {0 1 0}..test d
aaf0: 6f 6d 2d 37 2e 31 32 20 7b 73 65 74 54 65 78 74 om-7.12 {setText
ab00: 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 73 65 74 Check} {. set
ab10: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
ab20: 24 64 6f 63 20 63 72 65 61 74 65 54 65 78 74 4e $doc createTextN
ab30: 6f 64 65 20 22 64 61 74 61 22 7d 5d 0a 20 20 20 ode "data"}].
ab40: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
ab50: 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 [catch {$doc cre
ab60: 61 74 65 54 65 78 74 4e 6f 64 65 20 22 6e 6f 74 ateTextNode "not
ab70: 20 58 4d 4c 20 5c 75 30 30 30 32 20 43 68 61 72 XML \u0002 Char
ab80: 20 64 61 74 61 22 7d 5d 0a 20 20 20 20 64 6f 6d data"}]. dom
ab90: 20 73 65 74 54 65 78 74 43 68 65 63 6b 20 30 0a setTextCheck 0.
aba0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
abb0: 6c 74 20 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 lt [catch {$doc
abc0: 63 72 65 61 74 65 54 65 78 74 4e 6f 64 65 20 22 createTextNode "
abd0: 6e 6f 74 20 58 4d 4c 20 5c 75 30 30 30 32 20 43 not XML \u0002 C
abe0: 68 61 72 20 64 61 74 61 22 7d 5d 0a 20 20 20 20 har data"}].
abf0: 64 6f 6d 20 73 65 74 54 65 78 74 43 68 65 63 6b dom setTextCheck
ac00: 20 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 1. set resul
ac10: 74 0a 7d 20 7b 30 20 31 20 30 7d 0a 0a 74 65 73 t.} {0 1 0}..tes
ac20: 74 20 64 6f 6d 2d 37 2e 31 33 20 7b 73 65 74 4e t dom-7.13 {setN
ac30: 61 6d 65 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 ameCheck} {.
ac40: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 set result [catc
ac50: 68 20 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 h {$doc createPr
ac60: 6f 63 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 ocessingInstruct
ac70: 69 6f 6e 20 22 74 61 72 67 65 74 22 20 22 64 61 ion "target" "da
ac80: 74 61 22 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e ta"}]. lappen
ac90: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 d result [catch
aca0: 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f 63 {$doc createProc
acb0: 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 6f essingInstructio
acc0: 6e 20 22 74 61 72 20 67 65 74 22 20 22 64 61 74 n "tar get" "dat
acd0: 61 22 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 a"}]. lappend
ace0: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
acf0: 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f 63 65 $doc createProce
ad00: 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 6f 6e ssingInstruction
ad10: 20 22 78 4d 6c 22 20 22 64 61 74 61 22 7d 5d 0a "xMl" "data"}].
ad20: 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d 65 43 dom setNameC
ad30: 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 70 65 heck 0. lappe
ad40: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 nd result [catch
ad50: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f {$doc createPro
ad60: 63 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 cessingInstructi
ad70: 6f 6e 20 22 74 61 72 20 67 65 74 22 20 22 64 61 on "tar get" "da
ad80: 74 61 22 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e ta"}]. lappen
ad90: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 d result [catch
ada0: 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f 63 {$doc createProc
adb0: 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 6f essingInstructio
adc0: 6e 20 22 78 4d 6c 22 20 22 64 61 74 61 22 7d 5d n "xMl" "data"}]
add0: 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d 65 . dom setName
ade0: 43 68 65 63 6b 20 31 0a 20 20 20 20 73 65 74 20 Check 1. set
adf0: 72 65 73 75 6c 74 0a 7d 20 7b 30 20 31 20 31 20 result.} {0 1 1
ae00: 30 20 30 7d 0a 0a 73 65 74 20 72 6f 6f 74 20 5b 0 0}..set root [
ae10: 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 $doc documentEle
ae20: 6d 65 6e 74 5d 0a 0a 74 65 73 74 20 64 6f 6d 2d ment]..test dom-
ae30: 37 2e 31 34 20 7b 73 65 74 4e 61 6d 65 43 68 65 7.14 {setNameChe
ae40: 63 6b 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 ck} {. set re
ae50: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 72 6f sult [catch {$ro
ae60: 6f 74 20 61 70 70 65 6e 64 46 72 6f 6d 4c 69 73 ot appendFromLis
ae70: 74 20 7b 22 61 20 62 22 20 7b 7d 20 7b 7d 7d 7d t {"a b" {} {}}}
ae80: 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 70 errMsg]. lap
ae90: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 pend result $err
aea0: 4d 73 67 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e Msg. dom setN
aeb0: 61 6d 65 43 68 65 63 6b 20 30 0a 20 20 20 20 6c ameCheck 0. l
aec0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 append result [c
aed0: 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 70 70 65 atch {$root appe
aee0: 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 22 61 20 62 ndFromList {"a b
aef0: 22 20 7b 7d 20 7b 7d 7d 7d 5d 0a 20 20 20 20 64 " {} {}}}]. d
af00: 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 om setNameCheck
af10: 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 1. set result
af20: 0a 7d 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 74 .} {1 {Invalid t
af30: 61 67 20 6e 61 6d 65 20 27 61 20 62 27 7d 20 30 ag name 'a b'} 0
af40: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 31 35 }..test dom-7.15
af50: 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b 7d 20 {setNameCheck}
af60: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
af70: 20 5b 63 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 [catch {$root a
af80: 70 70 65 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 61 ppendFromList {a
af90: 20 7b 61 74 74 31 20 22 61 74 74 31 20 76 61 6c {att1 "att1 val
afa0: 75 65 22 20 22 61 74 74 20 32 22 20 22 61 74 74 ue" "att 2" "att
afb0: 32 20 76 61 6c 75 65 22 7d 20 7b 7d 7d 7d 20 65 2 value"} {}}} e
afc0: 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 rrMsg]. lappe
afd0: 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 nd result $errMs
afe0: 67 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d g. dom setNam
aff0: 65 43 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 eCheck 0. lap
b000: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 pend result [cat
b010: 63 68 20 7b 24 72 6f 6f 74 20 61 70 70 65 6e 64 ch {$root append
b020: 46 72 6f 6d 4c 69 73 74 20 7b 61 20 7b 61 74 74 FromList {a {att
b030: 31 20 22 61 74 74 31 20 76 61 6c 75 65 22 20 22 1 "att1 value" "
b040: 61 74 74 20 32 22 20 22 61 74 74 32 20 76 61 6c att 2" "att2 val
b050: 75 65 22 7d 20 7b 7d 7d 7d 5d 0a 20 20 20 20 64 ue"} {}}}]. d
b060: 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 om setNameCheck
b070: 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 1. set result
b080: 0a 7d 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 61 .} {1 {Invalid a
b090: 74 74 72 69 62 75 74 65 20 6e 61 6d 65 20 27 61 ttribute name 'a
b0a0: 74 74 20 32 27 7d 20 30 7d 0a 0a 74 65 73 74 20 tt 2'} 0}..test
b0b0: 64 6f 6d 2d 37 2e 31 36 20 7b 73 65 74 54 65 78 dom-7.16 {setTex
b0c0: 74 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 73 65 tCheck} {. se
b0d0: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
b0e0: 7b 24 72 6f 6f 74 20 61 70 70 65 6e 64 46 72 6f {$root appendFro
b0f0: 6d 4c 69 73 74 20 7b 61 20 7b 61 74 74 31 20 22 mList {a {att1 "
b100: 61 74 74 31 20 76 61 6c 75 65 22 20 22 61 74 74 att1 value" "att
b110: 32 22 20 22 61 74 74 32 20 76 61 6c 75 65 20 5c 2" "att2 value \
b120: 75 30 30 30 32 22 7d 20 7b 7d 7d 7d 20 65 72 72 u0002"} {}}} err
b130: 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 Msg]. lappend
b140: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
b150: 20 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 dom setTextC
b160: 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 70 65 heck 0. lappe
b170: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 nd result [catch
b180: 20 7b 24 72 6f 6f 74 20 61 70 70 65 6e 64 46 72 {$root appendFr
b190: 6f 6d 4c 69 73 74 20 7b 61 20 7b 61 74 74 31 20 omList {a {att1
b1a0: 22 61 74 74 31 20 76 61 6c 75 65 22 20 22 61 74 "att1 value" "at
b1b0: 74 32 22 20 22 61 74 74 32 20 76 61 6c 75 65 20 t2" "att2 value
b1c0: 5c 75 30 30 30 32 22 7d 20 7b 7d 7d 7d 5d 0a 20 \u0002"} {}}}].
b1d0: 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 68 dom setTextCh
b1e0: 65 63 6b 20 31 0a 20 20 20 20 73 65 74 20 72 65 eck 1. set re
b1f0: 73 75 6c 74 0a 7d 20 5b 6c 69 73 74 20 31 20 22 sult.} [list 1 "
b200: 49 6e 76 61 6c 69 64 20 61 74 74 72 69 62 75 74 Invalid attribut
b210: 65 20 76 61 6c 75 65 20 27 61 74 74 32 20 76 61 e value 'att2 va
b220: 6c 75 65 20 5c 75 30 30 30 32 27 22 20 30 5d 0a lue \u0002'" 0].
b230: 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 31 37 20 7b .test dom-7.17 {
b240: 73 65 74 54 65 78 74 43 68 65 63 6b 7d 20 7b 0a setTextCheck} {.
b250: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
b260: 63 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 70 70 catch {$root app
b270: 65 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 5c 23 74 endFromList {\#t
b280: 65 78 74 20 22 66 6f 6f 20 5c 75 30 30 30 32 22 ext "foo \u0002"
b290: 7d 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c }} errMsg]. l
b2a0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65 append result $e
b2b0: 72 72 4d 73 67 0a 20 20 20 20 64 6f 6d 20 73 65 rrMsg. dom se
b2c0: 74 54 65 78 74 43 68 65 63 6b 20 30 0a 20 20 20 tTextCheck 0.
b2d0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
b2e0: 5b 63 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 70 [catch {$root ap
b2f0: 70 65 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 5c 23 pendFromList {\#
b300: 74 65 78 74 20 22 66 6f 6f 20 5c 75 30 30 30 32 text "foo \u0002
b310: 22 7d 7d 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 "}}]. dom set
b320: 54 65 78 74 43 68 65 63 6b 20 31 0a 20 20 20 20 TextCheck 1.
b330: 73 65 74 20 72 65 73 75 6c 74 20 20 20 20 0a 7d set result .}
b340: 20 5b 6c 69 73 74 20 31 20 22 49 6e 76 61 6c 69 [list 1 "Invali
b350: 64 20 74 65 78 74 20 76 61 6c 75 65 20 27 66 6f d text value 'fo
b360: 6f 20 5c 75 30 30 30 32 27 22 20 30 5d 0a 0a 24 o \u0002'" 0]..$
b370: 64 6f 63 20 64 65 6c 65 74 65 0a 0a 74 65 73 74 doc delete..test
b380: 20 64 6f 6d 2d 37 2e 31 38 20 7b 73 65 74 54 65 dom-7.18 {setTe
b390: 78 74 43 68 65 63 6b 20 61 6e 64 20 61 70 70 65 xtCheck and appe
b3a0: 6e 64 46 72 6f 6d 53 63 72 69 70 74 7d 20 7b 0a ndFromScript} {.
b3b0: 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d set doc [dom
b3c0: 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e createDocumentN
b3d0: 6f 64 65 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 ode]. dom set
b3e0: 54 65 78 74 43 68 65 63 6b 20 30 0a 20 20 20 20 TextCheck 0.
b3f0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e namespace eval n
b400: 6f 64 65 43 6d 64 73 20 7b 0a 20 20 20 20 20 20 odeCmds {.
b410: 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 dom createNode
b420: 43 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f 64 65 20 Cmd elementNode
b430: 64 6f 63 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 doc. dom
b440: 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 74 65 createNodeCmd te
b450: 78 74 4e 6f 64 65 20 74 0a 20 20 20 20 7d 0a 20 xtNode t. }.
b460: 20 20 20 24 64 6f 63 20 61 70 70 65 6e 64 46 72 $doc appendFr
b470: 6f 6d 53 63 72 69 70 74 20 7b 0a 20 20 20 20 20 omScript {.
b480: 20 20 20 6e 6f 64 65 43 6d 64 73 3a 3a 64 6f 63 nodeCmds::doc
b490: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e {. n
b4a0: 6f 64 65 43 6d 64 73 3a 3a 74 20 22 66 6f 6f 5c odeCmds::t "foo\
b4b0: 75 30 30 30 33 62 61 72 22 0a 20 20 20 20 20 20 u0003bar".
b4c0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 6f }. }. do
b4d0: 6d 20 73 65 74 54 65 78 74 43 68 65 63 6b 20 31 m setTextCheck 1
b4e0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
b4f0: 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 [$doc asXML -ind
b500: 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 ent none]. $d
b510: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
b520: 74 20 72 65 73 75 6c 74 0a 7d 20 22 3c 64 6f 63 t result.} "<doc
b530: 3e 66 6f 6f 5c 75 30 30 30 33 62 61 72 3c 2f 64 >foo\u0003bar</d
b540: 6f 63 3e 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 oc>"..test dom-7
b550: 2e 31 39 20 7b 73 65 74 54 65 78 74 43 68 65 63 .19 {setTextChec
b560: 6b 20 61 6e 64 20 61 70 70 65 6e 64 46 72 6f 6d k and appendFrom
b570: 53 63 72 69 70 74 20 2d 20 73 65 74 54 65 78 74 Script - setText
b580: 43 68 65 63 6b 20 73 74 61 74 65 20 61 74 20 63 Check state at c
b590: 72 65 61 74 65 20 74 69 6d 65 20 69 73 20 63 72 reate time is cr
b5a0: 75 63 69 61 6c 7d 20 7b 0a 20 20 20 20 73 65 74 ucial} {. set
b5b0: 20 64 6f 63 20 5b 64 6f 6d 20 63 72 65 61 74 65 doc [dom create
b5c0: 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d 0a 20 20 DocumentNode].
b5d0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c namespace eval
b5e0: 20 6e 6f 64 65 43 6d 64 73 20 7b 0a 20 20 20 20 nodeCmds {.
b5f0: 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f dom createNo
b600: 64 65 43 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f 64 deCmd elementNod
b610: 65 20 64 6f 63 0a 20 20 20 20 20 20 20 20 64 6f e doc. do
b620: 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 m createNodeCmd
b630: 74 65 78 74 4e 6f 64 65 20 74 0a 20 20 20 20 7d textNode t. }
b640: 0a 20 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 . dom setText
b650: 43 68 65 63 6b 20 30 0a 20 20 20 20 73 65 74 20 Check 0. set
b660: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 result [catch {$
b670: 64 6f 63 20 61 70 70 65 6e 64 46 72 6f 6d 53 63 doc appendFromSc
b680: 72 69 70 74 20 7b 0a 20 20 20 20 20 20 20 20 6e ript {. n
b690: 6f 64 65 43 6d 64 73 3a 3a 64 6f 63 20 7b 0a 20 odeCmds::doc {.
b6a0: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 43 nodeC
b6b0: 6d 64 73 3a 3a 74 20 22 66 6f 6f 5c 75 30 30 30 mds::t "foo\u000
b6c0: 33 62 61 72 22 0a 20 20 20 20 20 20 20 20 7d 0a 3bar". }.
b6d0: 20 20 20 20 7d 7d 20 65 72 72 4d 73 67 5d 0a 20 }} errMsg].
b6e0: 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 68 dom setTextCh
b6f0: 65 63 6b 20 31 0a 20 20 20 20 24 64 6f 63 20 64 eck 1. $doc d
b700: 65 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e elete. lappen
b710: 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 d result $errMsg
b720: 0a 7d 20 5b 6c 69 73 74 20 31 20 22 49 6e 76 61 .} [list 1 "Inva
b730: 6c 69 64 20 74 65 78 74 20 76 61 6c 75 65 20 27 lid text value '
b740: 66 6f 6f 5c 75 30 30 30 33 62 61 72 27 22 5d 0a foo\u0003bar'"].
b750: 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 31 39 20 7b .test dom-7.19 {
b760: 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 2f 20 63 setNameCheck / c
b770: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 7d 20 7b reateDocument} {
b780: 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d 65 . dom setName
b790: 43 68 65 63 6b 20 30 0a 20 20 20 20 64 6f 6d 20 Check 0. dom
b7a0: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 22 createDocument "
b7b0: 66 6f 6f 20 62 61 72 22 20 64 6f 63 0a 20 20 20 foo bar" doc.
b7c0: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f set result [$do
b7d0: 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 c asXML -indent
b7e0: 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 none]. $doc d
b7f0: 65 6c 65 74 65 0a 20 20 20 20 64 6f 6d 20 73 65 elete. dom se
b800: 74 4e 61 6d 65 43 68 65 63 6b 20 31 0a 20 20 20 tNameCheck 1.
b810: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c set result.} {<
b820: 66 6f 6f 20 62 61 72 2f 3e 7d 0a 20 20 20 20 0a foo bar/>}. .
b830: 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 31 20 7b 63 .test dom-8.1 {c
b840: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 reateDocumentNod
b850: 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 e} {. set res
b860: 75 6c 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 ult [catch {dom
b870: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f createDocumentNo
b880: 64 65 20 66 6f 6f 20 62 61 72 7d 5d 0a 7d 20 7b de foo bar}].} {
b890: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 32 1}..test dom-8.2
b8a0: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
b8b0: 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 Node} {. set
b8c0: 64 6f 63 4e 6f 64 65 20 5b 64 6f 6d 20 63 72 65 docNode [dom cre
b8d0: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d ateDocumentNode]
b8e0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
b8f0: 5b 24 64 6f 63 4e 6f 64 65 20 61 73 58 4d 4c 20 [$docNode asXML
b900: 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 -indent none].
b910: 20 20 24 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 $docNode delet
b920: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
b930: 0a 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d .} {}..test dom-
b940: 38 2e 33 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 8.3 {createDocum
b950: 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 64 entNode} {. d
b960: 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e om createDocumen
b970: 74 4e 6f 64 65 20 64 6f 63 4e 6f 64 65 0a 20 20 tNode docNode.
b980: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 set result [$d
b990: 6f 63 4e 6f 64 65 20 61 73 58 4d 4c 20 2d 69 6e ocNode asXML -in
b9a0: 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 dent none]. $
b9b0: 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 docNode delete.
b9c0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
b9d0: 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 34 {}..test dom-8.4
b9e0: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
b9f0: 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 Node} {. set
ba00: 64 6f 63 4e 6f 64 65 20 5b 64 6f 6d 20 63 72 65 docNode [dom cre
ba10: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d ateDocumentNode]
ba20: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
ba30: 5b 24 64 6f 63 4e 6f 64 65 20 6e 6f 64 65 54 79 [$docNode nodeTy
ba40: 70 65 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 pe]. lappend
ba50: 72 65 73 75 6c 74 20 5b 24 64 6f 63 4e 6f 64 65 result [$docNode
ba60: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
ba70: 5d 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 20 64 ]. $docNode d
ba80: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 elete. set re
ba90: 73 75 6c 74 0a 7d 20 7b 44 4f 43 55 4d 45 4e 54 sult.} {DOCUMENT
baa0: 5f 4e 4f 44 45 20 7b 7d 7d 0a 0a 74 65 73 74 20 _NODE {}}..test
bab0: 64 6f 6d 2d 38 2e 35 20 7b 63 72 65 61 74 65 44 dom-8.5 {createD
bac0: 6f 63 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 ocumentNode} {.
bad0: 20 20 20 73 65 74 20 64 6f 63 4e 6f 64 65 20 5b set docNode [
bae0: 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 dom createDocume
baf0: 6e 74 4e 6f 64 65 5d 0a 20 20 20 20 73 65 74 20 ntNode]. set
bb00: 6e 65 77 4e 6f 64 65 20 5b 24 64 6f 63 4e 6f 64 newNode [$docNod
bb10: 65 20 63 72 65 61 74 65 43 6f 6d 6d 65 6e 74 20 e createComment
bb20: 22 43 6f 6d 6d 65 6e 74 20 62 65 66 6f 72 65 20 "Comment before
bb30: 74 68 65 20 64 6f 63 75 6d 65 6e 74 20 6e 6f 64 the document nod
bb40: 65 22 5d 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 e"]. $docNode
bb50: 20 61 70 70 65 6e 64 43 68 69 6c 64 20 24 6e 65 appendChild $ne
bb60: 77 4e 6f 64 65 0a 20 20 20 20 73 65 74 20 72 65 wNode. set re
bb70: 73 75 6c 74 20 5b 5b 24 64 6f 63 4e 6f 64 65 20 sult [[$docNode
bb80: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
bb90: 20 6e 6f 64 65 54 79 70 65 5d 0a 20 20 20 20 73 nodeType]. s
bba0: 65 74 20 6e 65 77 4e 6f 64 65 20 5b 24 64 6f 63 et newNode [$doc
bbb0: 4e 6f 64 65 20 63 72 65 61 74 65 45 6c 65 6d 65 Node createEleme
bbc0: 6e 74 20 66 69 72 73 74 43 68 69 6c 64 5d 0a 20 nt firstChild].
bbd0: 20 20 20 24 64 6f 63 4e 6f 64 65 20 61 70 70 65 $docNode appe
bbe0: 6e 64 43 68 69 6c 64 20 24 6e 65 77 4e 6f 64 65 ndChild $newNode
bbf0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
bc00: 75 6c 74 20 5b 5b 24 64 6f 63 4e 6f 64 65 20 64 ult [[$docNode d
bc10: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 ocumentElement]
bc20: 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 73 65 nodeName]. se
bc30: 74 20 6e 65 77 4e 6f 64 65 20 5b 24 64 6f 63 4e t newNode [$docN
bc40: 6f 64 65 20 63 72 65 61 74 65 45 6c 65 6d 65 6e ode createElemen
bc50: 74 20 73 65 63 6f 6e 64 43 68 69 6c 64 5d 0a 20 t secondChild].
bc60: 20 20 20 24 64 6f 63 4e 6f 64 65 20 61 70 70 65 $docNode appe
bc70: 6e 64 43 68 69 6c 64 20 24 6e 65 77 4e 6f 64 65 ndChild $newNode
bc80: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
bc90: 75 6c 74 20 5b 5b 24 64 6f 63 4e 6f 64 65 20 64 ult [[$docNode d
bca0: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 ocumentElement]
bcb0: 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 nodeName]. $d
bcc0: 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 ocNode delete.
bcd0: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
bce0: 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 20 66 69 72 COMMENT_NODE fir
bcf0: 73 74 43 68 69 6c 64 20 66 69 72 73 74 43 68 69 stChild firstChi
bd00: 6c 64 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e ld}..test dom-8.
bd10: 36 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 6 {createDocumen
bd20: 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 73 65 74 tNode} {. set
bd30: 20 64 6f 63 4e 6f 64 65 20 5b 64 6f 6d 20 63 72 docNode [dom cr
bd40: 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 eateDocumentNode
bd50: 5d 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 ]. set doc [d
bd60: 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e om parse {<root>
bd70: 3c 63 68 69 6c 64 31 2f 3e 3c 63 68 69 6c 64 32 <child1/><child2
bd80: 2f 3e 73 6f 6d 65 20 74 65 78 74 3c 63 68 69 6c />some text<chil
bd90: 64 33 2f 3e 3c 2f 72 6f 6f 74 3e 7d 5d 0a 20 20 d3/></root>}].
bda0: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 set root [$doc
bdb0: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
bdc0: 5d 0a 20 20 20 20 73 65 74 20 6c 69 73 74 52 65 ]. set listRe
bdd0: 70 20 5b 24 72 6f 6f 74 20 61 73 4c 69 73 74 5d p [$root asList]
bde0: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 . $doc delete
bdf0: 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 20 61 70 . $docNode ap
be00: 70 65 6e 64 46 72 6f 6d 4c 69 73 74 20 24 6c 69 pendFromList $li
be10: 73 74 52 65 70 0a 20 20 20 20 73 65 74 20 72 65 stRep. set re
be20: 73 75 6c 74 20 5b 24 64 6f 63 4e 6f 64 65 20 61 sult [$docNode a
be30: 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e sXML -indent non
be40: 65 5d 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 20 e]. $docNode
be50: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 delete. set r
be60: 65 73 75 6c 74 0a 7d 20 7b 3c 72 6f 6f 74 3e 3c esult.} {<root><
be70: 63 68 69 6c 64 31 2f 3e 3c 63 68 69 6c 64 32 2f child1/><child2/
be80: 3e 73 6f 6d 65 20 74 65 78 74 3c 63 68 69 6c 64 >some text<child
be90: 33 2f 3e 3c 2f 72 6f 6f 74 3e 7d 0a 0a 74 65 73 3/></root>}..tes
bea0: 74 20 64 6f 6d 2d 38 2e 37 20 7b 63 72 65 61 74 t dom-8.7 {creat
beb0: 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b eDocumentNode} {
bec0: 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 44 . dom createD
bed0: 6f 63 75 6d 65 6e 74 4e 6f 64 65 20 64 6f 63 4e ocumentNode docN
bee0: 6f 64 65 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 ode. dom crea
bef0: 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 20 64 teDocumentNode d
bf00: 6f 63 4e 6f 64 65 0a 20 20 20 20 24 64 6f 63 4e ocNode. $docN
bf10: 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 20 20 73 ode delete. s
bf20: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 7d 20 22 et result "".} "
bf30: 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 38 20 "..test dom-8.8
bf40: 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e {createDocumentN
bf50: 6f 64 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 ode} {. dom c
bf60: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 reateDocumentNod
bf70: 65 20 2d 6a 73 6f 6e 54 79 70 65 20 41 52 52 41 e -jsonType ARRA
bf80: 59 20 64 6f 63 4e 6f 64 65 0a 20 20 20 20 73 65 Y docNode. se
bf90: 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 4e 6f t result [$docNo
bfa0: 64 65 20 6a 73 6f 6e 54 79 70 65 5d 0a 20 20 20 de jsonType].
bfb0: 20 24 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 $docNode delete
bfc0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
bfd0: 7d 20 41 52 52 41 59 0a 0a 74 65 73 74 20 64 6f } ARRAY..test do
bfe0: 6d 2d 38 2e 39 20 7b 63 72 65 61 74 65 44 6f 63 m-8.9 {createDoc
bff0: 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 umentNode} {.
c000: 20 73 65 74 20 64 6f 63 4e 6f 64 65 20 5b 64 6f set docNode [do
c010: 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 m createDocument
c020: 4e 6f 64 65 20 2d 6a 73 6f 6e 54 79 70 65 20 4e Node -jsonType N
c030: 55 4d 42 45 52 5d 0a 20 20 20 20 73 65 74 20 72 UMBER]. set r
c040: 65 73 75 6c 74 20 5b 24 64 6f 63 4e 6f 64 65 20 esult [$docNode
c050: 6a 73 6f 6e 54 79 70 65 5d 0a 20 20 20 20 24 64 jsonType]. $d
c060: 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 ocNode delete.
c070: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 4e set result.} N
c080: 55 4d 42 45 52 0a 0a 74 65 73 74 20 64 6f 6d 2d UMBER..test dom-
c090: 38 2e 31 30 20 7b 63 72 65 61 74 65 44 6f 63 75 8.10 {createDocu
c0a0: 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 mentNode} {.
c0b0: 63 61 74 63 68 20 7b 64 6f 6d 20 63 72 65 61 74 catch {dom creat
c0c0: 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 20 2d 66 eDocumentNode -f
c0d0: 6f 6f 20 4e 55 4c 4c 20 64 6f 63 4e 6f 64 65 7d oo NULL docNode}
c0e0: 20 65 72 72 4d 73 67 0a 20 20 20 20 73 65 74 20 errMsg. set
c0f0: 65 72 72 4d 73 67 0a 7d 20 7b 62 61 64 20 6f 70 errMsg.} {bad op
c100: 74 69 6f 6e 20 22 2d 66 6f 6f 22 3a 20 6d 75 73 tion "-foo": mus
c110: 74 20 62 65 20 2d 6a 73 6f 6e 54 79 70 65 7d 0a t be -jsonType}.
c120: 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 31 30 20 7b .test dom-8.10 {
c130: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f createDocumentNo
c140: 64 65 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 de} {. catch
c150: 7b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d {dom createDocum
c160: 65 6e 74 4e 6f 64 65 20 2d 66 6f 6f 20 4e 55 4c entNode -foo NUL
c170: 4c 20 64 6f 63 4e 6f 64 65 7d 20 65 72 72 4d 73 L docNode} errMs
c180: 67 0a 20 20 20 20 73 65 74 20 65 72 72 4d 73 67 g. set errMsg
c190: 0a 7d 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 .} {bad option "
c1a0: 2d 66 6f 6f 22 3a 20 6d 75 73 74 20 62 65 20 2d -foo": must be -
c1b0: 6a 73 6f 6e 54 79 70 65 7d 0a 0a 74 65 73 74 20 jsonType}..test
c1c0: 64 6f 6d 2d 38 2e 31 31 20 7b 63 72 65 61 74 65 dom-8.11 {create
c1d0: 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a DocumentNode} {.
c1e0: 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 63 catch {dom c
c1f0: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 reateDocumentNod
c200: 65 20 2d 6a 73 6f 6e 54 79 70 65 20 46 4f 4f 20 e -jsonType FOO
c210: 64 6f 63 4e 6f 64 65 7d 20 65 72 72 4d 73 67 0a docNode} errMsg.
c220: 20 20 20 20 73 65 74 20 65 72 72 4d 73 67 0a 7d set errMsg.}
c230: 20 7b 62 61 64 20 6a 73 6f 6e 54 79 70 65 20 22 {bad jsonType "
c240: 46 4f 4f 22 3a 20 6d 75 73 74 20 62 65 20 4e 4f FOO": must be NO
c250: 4e 45 2c 20 41 52 52 41 59 2c 20 4f 42 4a 45 43 NE, ARRAY, OBJEC
c260: 54 2c 20 4e 55 4c 4c 2c 20 54 52 55 45 2c 20 46 T, NULL, TRUE, F
c270: 41 4c 53 45 2c 20 53 54 52 49 4e 47 2c 20 6f 72 ALSE, STRING, or
c280: 20 4e 55 4d 42 45 52 7d 0a 0a 74 65 73 74 20 64 NUMBER}..test d
c290: 6f 6d 2d 39 2e 31 20 7b 73 65 74 4f 62 6a 65 63 om-9.1 {setObjec
c2a0: 74 43 6f 6d 6d 61 6e 64 73 7d 20 7b 0a 20 20 20 tCommands} {.
c2b0: 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f dom setObjectCo
c2c0: 6d 6d 61 6e 64 73 0a 7d 20 7b 61 75 74 6f 6d 61 mmands.} {automa
c2d0: 74 69 63 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 39 tic}..test dom-9
c2e0: 2e 32 20 7b 73 65 74 4f 62 6a 65 63 74 43 6f 6d .2 {setObjectCom
c2f0: 6d 61 6e 64 73 7d 20 7b 0a 20 20 20 20 64 6f 6d mands} {. dom
c300: 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e setObjectComman
c310: 64 73 20 61 75 74 6f 6d 61 74 69 63 0a 7d 20 7b ds automatic.} {
c320: 61 75 74 6f 6d 61 74 69 63 7d 0a 0a 74 65 73 74 automatic}..test
c330: 20 64 6f 6d 2d 39 2e 33 20 7b 73 65 74 4f 62 6a dom-9.3 {setObj
c340: 65 63 74 43 6f 6d 6d 61 6e 64 73 7d 20 7b 0a 20 ectCommands} {.
c350: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
c360: 61 74 63 68 20 7b 64 6f 6d 20 73 65 74 4f 62 6a atch {dom setObj
c370: 65 63 74 43 6f 6d 6d 61 6e 64 73 20 66 6f 6f 62 ectCommands foob
c380: 61 72 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 ar} errMsg].
c390: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 lappend result $
c3a0: 65 72 72 4d 73 67 0a 7d 20 7b 31 20 7b 62 61 64 errMsg.} {1 {bad
c3b0: 20 6d 6f 64 65 20 76 61 6c 75 65 20 22 66 6f 6f mode value "foo
c3c0: 62 61 72 22 3a 20 6d 75 73 74 20 62 65 20 61 75 bar": must be au
c3d0: 74 6f 6d 61 74 69 63 2c 20 63 6f 6d 6d 61 6e 64 tomatic, command
c3e0: 2c 20 6f 72 20 74 6f 6b 65 6e 7d 7d 0a 0a 74 65 , or token}}..te
c3f0: 73 74 20 64 6f 6d 2d 39 2e 34 20 7b 73 65 74 4f st dom-9.4 {setO
c400: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 7d 20 7b bjectCommands} {
c410: 0a 20 20 20 20 73 65 74 20 6e 72 4f 66 43 6d 64 . set nrOfCmd
c420: 73 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f s [llength [info
c430: 20 63 6f 6d 6d 61 6e 64 73 5d 5d 0a 20 20 20 20 commands]].
c440: 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d dom setObjectCom
c450: 6d 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 0a mands automatic.
c460: 20 20 20 20 73 65 74 20 64 6f 63 4e 6f 64 65 20 set docNode
c470: 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d [dom createDocum
c480: 65 6e 74 4e 6f 64 65 5d 0a 20 20 20 20 73 65 74 entNode]. set
c490: 20 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 24 result [expr {$
c4a0: 6e 72 4f 66 43 6d 64 73 20 2b 20 31 20 3d 3d 20 nrOfCmds + 1 ==
c4b0: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 [llength [info c
c4c0: 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a 20 20 20 20 ommands]]}].
c4d0: 24 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a $docNode delete.
c4e0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
c4f0: 6c 74 20 5b 65 78 70 72 20 7b 24 6e 72 4f 66 43 lt [expr {$nrOfC
c500: 6d 64 73 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 mds == [llength
c510: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d [info commands]]
c520: 7d 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 4f 62 }]. dom setOb
c530: 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 20 74 6f 6b jectCommands tok
c540: 65 6e 0a 20 20 20 20 73 65 74 20 64 6f 63 4e 6f en. set docNo
c550: 64 65 20 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f de [dom createDo
c560: 63 75 6d 65 6e 74 4e 6f 64 65 5d 0a 20 20 20 20 cumentNode].
c570: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [
c580: 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 73 20 expr {$nrOfCmds
c590: 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 == [llength [inf
c5a0: 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a 20 o commands]]}].
c5b0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul
c5c0: 74 20 5b 64 6f 6d 44 6f 63 20 24 64 6f 63 4e 6f t [domDoc $docNo
c5d0: 64 65 20 68 61 73 43 68 69 6c 64 4e 6f 64 65 73 de hasChildNodes
c5e0: 5d 0a 20 20 20 20 64 6f 6d 44 6f 63 20 24 64 6f ]. domDoc $do
c5f0: 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 20 cNode delete.
c600: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
c610: 5b 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 73 [expr {$nrOfCmds
c620: 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e == [llength [in
c630: 66 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a fo commands]]}].
c640: 20 20 20 20 23 20 73 77 69 74 63 68 20 62 61 63 # switch bac
c650: 6b 20 74 6f 20 64 65 66 61 75 6c 74 0a 20 20 20 k to default.
c660: 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f dom setObjectCo
c670: 6d 6d 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 mmands automatic
c680: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
c690: 7d 20 7b 31 20 31 20 31 20 30 20 31 7d 0a 0a 74 } {1 1 1 0 1}..t
c6a0: 65 73 74 20 64 6f 6d 2d 39 2e 35 20 7b 73 65 74 est dom-9.5 {set
c6b0: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 7d 20 ObjectCommands}
c6c0: 7b 0a 20 20 20 20 64 6f 6d 20 73 65 74 4f 62 6a {. dom setObj
c6d0: 65 63 74 43 6f 6d 6d 61 6e 64 73 20 74 6f 6b 65 ectCommands toke
c6e0: 6e 0a 20 20 20 20 73 65 74 20 6e 72 4f 66 43 6d n. set nrOfCm
c6f0: 64 73 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 ds [llength [inf
c700: 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 0a 20 20 20 o commands]].
c710: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
c720: 72 73 65 20 3c 72 6f 6f 74 3e 3c 63 68 69 6c 64 rse <root><child
c730: 31 2f 3e 3c 63 68 69 6c 64 32 2f 3e 3c 2f 72 6f 1/><child2/></ro
c740: 6f 74 3e 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f ot>]. set roo
c750: 74 20 5b 64 6f 6d 44 6f 63 20 24 64 6f 63 20 64 t [domDoc $doc d
c760: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a ocumentElement].
c770: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
c780: 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 73 20 expr {$nrOfCmds
c790: 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 == [llength [inf
c7a0: 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a 20 o commands]]}].
c7b0: 20 20 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 dom setObject
c7c0: 43 6f 6d 6d 61 6e 64 73 20 63 6f 6d 6d 61 6e 64 Commands command
c7d0: 0a 20 20 20 20 73 65 74 20 64 6f 63 43 6d 64 20 . set docCmd
c7e0: 5b 64 6f 6d 4e 6f 64 65 20 24 72 6f 6f 74 20 6f [domNode $root o
c7f0: 77 6e 65 72 44 6f 63 75 6d 65 6e 74 5d 0a 20 20 wnerDocument].
c800: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
c810: 20 5b 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 [expr {$nrOfCmd
c820: 73 20 2b 20 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 s + 1 == [llengt
c830: 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 h [info commands
c840: 5d 5d 7d 5d 0a 20 20 20 20 24 64 6f 63 43 6d 64 ]]}]. $docCmd
c850: 20 64 65 6c 65 74 65 0a 20 20 20 20 64 6f 6d 20 delete. dom
c860: 73 65 74 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 setObjectCommand
c870: 73 20 61 75 74 6f 6d 61 74 69 63 0a 20 20 20 20 s automatic.
c880: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 20 set result.} {1
c890: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 39 2e 36 1}..test dom-9.6
c8a0: 20 7b 6e 6f 64 65 20 74 6f 6b 65 6e 20 77 69 74 {node token wit
c8b0: 68 20 72 65 73 75 6c 74 20 76 61 72 20 61 72 67 h result var arg
c8c0: 75 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 64 6f 6d ument} {. dom
c8d0: 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e setObjectComman
c8e0: 64 73 20 74 6f 6b 65 6e 0a 20 20 20 20 73 65 74 ds token. set
c8f0: 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 doc [dom parse
c900: 3c 72 6f 6f 74 3e 3c 63 68 69 6c 64 31 2f 3e 3c <root><child1/><
c910: 63 68 69 6c 64 32 2f 3e 3c 2f 72 6f 6f 74 3e 5d child2/></root>]
c920: 0a 20 20 20 20 64 6f 6d 44 6f 63 20 24 64 6f 63 . domDoc $doc
c930: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
c940: 20 76 61 72 0a 20 20 20 20 64 6f 6d 4e 6f 64 65 var. domNode
c950: 20 24 76 61 72 20 66 69 72 73 74 43 68 69 6c 64 $var firstChild
c960: 20 76 61 72 0a 20 20 20 20 64 6f 6d 4e 6f 64 65 var. domNode
c970: 20 24 76 61 72 20 6e 65 78 74 53 69 62 6c 69 6e $var nextSiblin
c980: 67 20 76 61 72 0a 20 20 20 20 64 6f 6d 44 6f 63 g var. domDoc
c990: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
c9a0: 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f dom setObjectCo
c9b0: 6d 6d 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 mmands automatic
c9c0: 0a 7d 20 7b 61 75 74 6f 6d 61 74 69 63 7d 0a 0a .} {automatic}..
c9d0: 0a 74 65 73 74 20 64 6f 6d 2d 39 2e 37 20 7b 41 .test dom-9.7 {A
c9e0: 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 74 68 ttempt to use th
c9f0: 65 20 74 6f 6b 65 6e 20 74 6f 20 61 6e 20 61 6c e token to an al
ca00: 72 65 61 64 79 20 66 72 65 65 64 20 6e 6f 64 65 ready freed node
ca10: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 73 65 74 4f } {. dom setO
ca20: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 20 74 6f bjectCommands to
ca30: 6b 65 6e 0a 20 20 20 20 73 65 74 20 64 6f 63 20 ken. set doc
ca40: 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d [dom createDocum
ca50: 65 6e 74 20 6f 6e 65 5d 0a 20 20 20 20 73 65 74 ent one]. set
ca60: 20 74 6f 70 20 5b 64 6f 6d 44 6f 63 20 24 64 6f top [domDoc $do
ca70: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
ca80: 74 5d 0a 20 20 20 20 73 65 74 20 65 6c 65 6d 20 t]. set elem
ca90: 5b 64 6f 6d 44 6f 63 20 24 64 6f 63 20 63 72 65 [domDoc $doc cre
caa0: 61 74 65 45 6c 65 6d 65 6e 74 20 6f 6e 65 5d 0a ateElement one].
cab0: 20 20 20 20 64 6f 6d 4e 6f 64 65 20 24 65 6c 65 domNode $ele
cac0: 6d 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 m delete. set
cad0: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
cae0: 64 6f 6d 4e 6f 64 65 20 24 65 6c 65 6d 20 61 73 domNode $elem as
caf0: 4c 69 73 74 7d 20 65 72 72 4d 73 67 5d 0a 20 20 List} errMsg].
cb00: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
cb10: 20 24 65 72 72 4d 73 67 0a 20 20 20 20 64 6f 6d $errMsg. dom
cb20: 44 6f 63 20 24 64 6f 63 20 64 65 6c 65 74 65 0a Doc $doc delete.
cb30: 20 20 20 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 dom setObjec
cb40: 74 43 6f 6d 6d 61 6e 64 73 20 61 75 74 6f 6d 61 tCommands automa
cb50: 74 69 63 0a 20 20 20 20 73 65 74 20 72 65 73 75 tic. set resu
cb60: 6c 74 0a 7d 20 7b 31 20 7b 50 61 72 61 6d 65 74 lt.} {1 {Paramet
cb70: 65 72 20 22 22 20 69 73 20 6e 6f 74 20 61 20 64 er "" is not a d
cb80: 6f 6d 4e 6f 64 65 2e 7d 7d 0a 20 20 20 20 0a 63 omNode.}}. .c
cb90: 61 74 63 68 20 7b 6e 61 6d 65 73 70 61 63 65 20 atch {namespace
cba0: 64 65 6c 65 74 65 20 6e 6f 64 65 43 6d 64 73 7d delete nodeCmds}
cbb0: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c ..namespace eval
cbc0: 20 6e 6f 64 65 43 6d 64 73 20 7b 0a 20 20 20 20 nodeCmds {.
cbd0: 64 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d dom createNodeCm
cbe0: 64 20 65 6c 65 6d 65 6e 74 4e 6f 64 65 20 65 31 d elementNode e1
cbf0: 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 4e . dom createN
cc00: 6f 64 65 43 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f odeCmd elementNo
cc10: 64 65 20 65 32 0a 20 20 20 20 64 6f 6d 20 63 72 de e2. dom cr
cc20: 65 61 74 65 4e 6f 64 65 43 6d 64 20 63 6f 6d 6d eateNodeCmd comm
cc30: 65 6e 74 4e 6f 64 65 20 63 0a 20 20 20 20 64 6f entNode c. do
cc40: 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 m createNodeCmd
cc50: 74 65 78 74 4e 6f 64 65 20 20 20 20 74 0a 20 20 textNode t.
cc60: 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 dom createNode
cc70: 43 6d 64 20 63 64 61 74 61 4e 6f 64 65 20 20 20 Cmd cdataNode
cc80: 63 64 61 74 61 0a 20 20 20 20 64 6f 6d 20 63 72 cdata. dom cr
cc90: 65 61 74 65 4e 6f 64 65 43 6d 64 20 70 69 4e 6f eateNodeCmd piNo
cca0: 64 65 20 20 20 20 20 20 70 69 0a 20 20 20 20 64 de pi. d
ccb0: 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 om createNodeCmd
ccc0: 20 70 61 72 73 65 72 4e 6f 64 65 20 20 70 61 72 parserNode par
ccd0: 73 65 72 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 ser. dom crea
cce0: 74 65 4e 6f 64 65 43 6d 64 20 2d 74 61 67 4e 61 teNodeCmd -tagNa
ccf0: 6d 65 20 66 6f 6f 20 65 6c 65 6d 65 6e 74 4e 6f me foo elementNo
cd00: 64 65 20 62 61 72 0a 7d 0a 0a 74 65 73 74 20 64 de bar.}..test d
cd10: 6f 6d 2d 31 30 2e 31 20 7b 63 72 65 61 74 65 4e om-10.1 {createN
cd20: 6f 64 65 43 6d 64 7d 20 7b 0a 20 20 20 20 6c 6c odeCmd} {. ll
cd30: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d ength [info comm
cd40: 61 6e 64 73 20 6e 6f 64 65 43 6d 64 73 3a 3a 2a ands nodeCmds::*
cd50: 5d 0a 7d 20 7b 38 7d 0a 0a 6e 61 6d 65 73 70 61 ].} {8}..namespa
cd60: 63 65 20 65 76 61 6c 20 6e 6f 64 65 43 6d 64 73 ce eval nodeCmds
cd70: 20 7b 0a 20 20 20 20 72 65 6e 61 6d 65 20 65 31 {. rename e1
cd80: 20 7b 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 65 {}. rename e
cd90: 32 20 7b 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 2 {}. rename
cda0: 63 20 7b 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 c {}. rename
cdb0: 74 20 7b 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 t {}. rename
cdc0: 63 64 61 74 61 20 7b 7d 0a 20 20 20 20 72 65 6e cdata {}. ren
cdd0: 61 6d 65 20 70 69 20 7b 7d 0a 20 20 20 20 72 65 ame pi {}. re
cde0: 6e 61 6d 65 20 70 61 72 73 65 72 20 7b 7d 0a 20 name parser {}.
cdf0: 20 20 20 72 65 6e 61 6d 65 20 62 61 72 20 7b 7d rename bar {}
ce00: 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 30 2e .}..test dom-10.
ce10: 32 20 7b 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 2 {createNodeCmd
ce20: 7d 20 7b 0a 20 20 20 20 6c 6c 65 6e 67 74 68 20 } {. llength
ce30: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6e [info commands n
ce40: 6f 64 65 43 6d 64 73 3a 3a 2a 5d 0a 7d 20 7b 30 odeCmds::*].} {0
ce50: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 }..namespace eva
ce60: 6c 20 6e 6f 64 65 43 6d 64 73 20 7b 0a 20 20 20 l nodeCmds {.
ce70: 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 dom createNodeC
ce80: 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f 64 65 20 65 md elementNode e
ce90: 31 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 1. dom create
cea0: 4e 6f 64 65 43 6d 64 20 74 65 78 74 4e 6f 64 65 NodeCmd textNode
ceb0: 20 20 20 20 74 0a 7d 0a 0a 74 65 73 74 20 64 6f t.}..test do
cec0: 6d 2d 31 30 2e 33 20 7b 6e 6f 64 65 20 63 72 65 m-10.3 {node cre
ced0: 61 74 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 63 61 ating command ca
cee0: 6c 6c 65 64 20 6f 75 74 73 69 64 65 20 64 6f 6d lled outside dom
cef0: 4e 6f 64 65 20 63 6f 6e 74 65 78 74 7d 20 7b 0a Node context} {.
cf00: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
cf10: 63 61 74 63 68 20 7b 6e 6f 64 65 43 6d 64 73 3a catch {nodeCmds:
cf20: 3a 74 20 22 73 6f 6d 65 20 74 65 78 74 22 7d 20 :t "some text"}
cf30: 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 errMsg]. lapp
cf40: 65 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d end result $errM
cf50: 73 67 0a 7d 20 7b 31 20 7b 63 61 6c 6c 65 64 20 sg.} {1 {called
cf60: 6f 75 74 73 69 64 65 20 64 6f 6d 4e 6f 64 65 20 outside domNode
cf70: 63 6f 6e 74 65 78 74 7d 7d 0a 0a 74 65 73 74 20 context}}..test
cf80: 64 6f 6d 2d 31 30 2e 34 20 7b 6e 6f 64 65 20 63 dom-10.4 {node c
cf90: 72 65 61 74 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 reating command
cfa0: 63 61 6c 6c 65 64 20 6f 75 74 73 69 64 65 20 64 called outside d
cfb0: 6f 6d 4e 6f 64 65 20 63 6f 6e 74 65 78 74 7d 20 omNode context}
cfc0: 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 {. dom create
cfd0: 44 6f 63 75 6d 65 6e 74 20 64 6f 63 52 6f 6f 74 Document docRoot
cfe0: 20 64 6f 63 0a 20 20 20 20 24 64 6f 63 20 64 6f doc. $doc do
cff0: 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 20 72 6f cumentElement ro
d000: 6f 74 0a 20 20 20 20 24 72 6f 6f 74 20 61 70 70 ot. $root app
d010: 65 6e 64 46 72 6f 6d 53 63 72 69 70 74 20 7b 0a endFromScript {.
d020: 20 20 20 20 20 20 20 20 6e 6f 64 65 43 6d 64 73 nodeCmds
d030: 3a 3a 74 20 22 53 6f 6d 65 20 74 65 78 74 22 0a ::t "Some text".
d040: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 }. set re
d050: 73 75 6c 74 20 5b 6c 69 73 74 20 5b 24 64 6f 63 sult [list [$doc
d060: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
d070: 6f 6e 65 5d 5d 0a 20 20 20 20 24 64 6f 63 20 64 one]]. $doc d
d080: 65 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e elete. lappen
d090: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 d result [catch
d0a0: 7b 6e 6f 64 65 43 6d 64 73 3a 3a 74 20 22 53 6f {nodeCmds::t "So
d0b0: 6d 65 20 74 65 78 74 22 7d 20 65 72 72 4d 73 67 me text"} errMsg
d0c0: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
d0d0: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b sult $errMsg.} {
d0e0: 7b 3c 64 6f 63 52 6f 6f 74 3e 53 6f 6d 65 20 74 {<docRoot>Some t
d0f0: 65 78 74 3c 2f 64 6f 63 52 6f 6f 74 3e 7d 20 31 ext</docRoot>} 1
d100: 20 7b 63 61 6c 6c 65 64 20 6f 75 74 73 69 64 65 {called outside
d110: 20 64 6f 6d 4e 6f 64 65 20 63 6f 6e 74 65 78 74 domNode context
d120: 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 30 2e }}..test dom-10.
d130: 35 20 7b 6e 6f 64 65 20 63 72 65 61 74 69 6e 67 5 {node creating
d140: 20 63 6f 6d 6d 61 6e 64 20 63 61 6c 6c 65 64 20 command called
d150: 6f 75 74 73 69 64 65 20 64 6f 6d 4e 6f 64 65 20 outside domNode
d160: 63 6f 6e 74 65 78 74 7d 20 7b 0a 20 20 20 20 64 context} {. d
d170: 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e om createDocumen
d180: 74 20 64 6f 63 52 6f 6f 74 20 64 6f 63 0a 20 20 t docRoot doc.
d190: 20 20 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 $doc documentE
d1a0: 6c 65 6d 65 6e 74 20 72 6f 6f 74 0a 20 20 20 20 lement root.
d1b0: 24 72 6f 6f 74 20 61 70 70 65 6e 64 46 72 6f 6d $root appendFrom
d1c0: 53 63 72 69 70 74 20 7b 0a 20 20 20 20 20 20 20 Script {.
d1d0: 20 6e 6f 64 65 43 6d 64 73 3a 3a 65 31 20 7b 0a nodeCmds::e1 {.
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 node
d1f0: 43 6d 64 73 3a 3a 74 20 22 53 6f 6d 65 20 74 65 Cmds::t "Some te
d200: 78 74 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 xt". }.
d210: 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 75 }. set resu
d220: 6c 74 20 5b 6c 69 73 74 20 5b 24 64 6f 63 20 61 lt [list [$doc a
d230: 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e sXML -indent non
d240: 65 5d 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c e]]. $doc del
d250: 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 ete. lappend
d260: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 0a result [catch {.
d270: 20 20 20 20 20 20 20 20 6e 6f 64 65 43 6d 64 73 nodeCmds
d280: 3a 3a 65 31 20 7b 0a 20 20 20 20 20 20 20 20 20 ::e1 {.
d290: 20 20 20 6e 6f 64 65 43 6d 64 73 3a 3a 74 20 22 nodeCmds::t "
d2a0: 53 6f 6d 65 20 74 65 78 74 22 0a 20 20 20 20 20 Some text".
d2b0: 20 20 20 7d 7d 20 65 72 72 4d 73 67 5d 0a 20 20 }} errMsg].
d2c0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
d2d0: 20 24 65 72 72 4d 73 67 0a 7d 20 7b 7b 3c 64 6f $errMsg.} {{<do
d2e0: 63 52 6f 6f 74 3e 3c 65 31 3e 53 6f 6d 65 20 74 cRoot><e1>Some t
d2f0: 65 78 74 3c 2f 65 31 3e 3c 2f 64 6f 63 52 6f 6f ext</e1></docRoo
d300: 74 3e 7d 20 31 20 7b 63 61 6c 6c 65 64 20 6f 75 t>} 1 {called ou
d310: 74 73 69 64 65 20 64 6f 6d 4e 6f 64 65 20 63 6f tside domNode co
d320: 6e 74 65 78 74 7d 7d 0a 0a 6e 61 6d 65 73 70 61 ntext}}..namespa
d330: 63 65 20 65 76 61 6c 20 6e 6f 64 65 43 6d 64 73 ce eval nodeCmds
d340: 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 {. dom creat
d350: 65 4e 6f 64 65 43 6d 64 20 2d 74 61 67 4e 61 6d eNodeCmd -tagNam
d360: 65 20 66 6f 6f 20 65 6c 65 6d 65 6e 74 4e 6f 64 e foo elementNod
d370: 65 20 62 61 72 0a 7d 0a 74 65 73 74 20 64 6f 6d e bar.}.test dom
d380: 2d 31 30 2e 36 20 7b 63 72 65 61 74 65 4e 6f 64 -10.6 {createNod
d390: 65 43 6d 64 20 2d 20 6f 70 74 69 6f 6e 20 2d 74 eCmd - option -t
d3a0: 61 67 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 73 65 agName} {. se
d3b0: 74 20 64 6f 63 20 5b 64 6f 6d 20 63 72 65 61 74 t doc [dom creat
d3c0: 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d 0a 20 eDocumentNode].
d3d0: 20 20 20 24 64 6f 63 20 61 70 70 65 6e 64 46 72 $doc appendFr
d3e0: 6f 6d 53 63 72 69 70 74 20 7b 0a 20 20 20 20 20 omScript {.
d3f0: 20 20 20 6e 6f 64 65 43 6d 64 73 3a 3a 62 61 72 nodeCmds::bar
d400: 20 7b 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 {}. }. se
d410: 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 61 t result [$doc a
d420: 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e sXML -indent non
d430: 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 e]. $doc dele
d440: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c te. set resul
d450: 74 0a 7d 20 7b 3c 66 6f 6f 2f 3e 7d 0a 0a 6e 61 t.} {<foo/>}..na
d460: 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65 20 6e mespace delete n
d470: 6f 64 65 43 6d 64 73 0a 0a 74 65 73 74 20 64 6f odeCmds..test do
d480: 6d 2d 31 31 2e 31 20 7b 66 65 61 74 75 72 65 69 m-11.1 {featurei
d490: 6e 66 6f 20 2d 20 65 78 70 61 74 76 65 72 73 69 nfo - expatversi
d4a0: 6f 6e 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 on} -body {.
d4b0: 64 6f 6d 20 66 65 61 74 75 72 65 69 6e 66 6f 20 dom featureinfo
d4c0: 65 78 70 61 74 76 65 72 73 69 6f 6e 0a 7d 20 2d expatversion.} -
d4d0: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 match regexp -re
d4e0: 73 75 6c 74 20 7b 65 78 70 61 74 5f 2e 2a 7d 0a sult {expat_.*}.
d4f0: 0a 74 65 73 74 20 64 6f 6d 2d 31 31 2e 32 20 7b .test dom-11.2 {
d500: 66 65 61 74 75 72 65 69 6e 66 6f 20 2d 20 69 6e featureinfo - in
d510: 76 61 6c 69 64 20 61 72 67 7d 20 2d 62 6f 64 79 valid arg} -body
d520: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f {. catch {do
d530: 6d 20 66 65 61 74 75 72 65 69 6e 66 6f 20 66 6f m featureinfo fo
d540: 6f 7d 20 65 72 72 4d 73 67 0a 7d 20 2d 72 65 73 o} errMsg.} -res
d550: 75 6c 74 20 31 0a 0a 74 65 73 74 20 64 6f 6d 2d ult 1..test dom-
d560: 31 31 2e 33 20 7b 66 65 61 74 75 72 65 69 6e 66 11.3 {featureinf
d570: 6f 20 2d 20 65 78 70 61 74 6d 61 6a 6f 72 76 65 o - expatmajorve
d580: 72 73 69 6f 6e 7d 20 2d 62 6f 64 79 20 7b 0a 20 rsion} -body {.
d590: 20 20 20 64 6f 6d 20 66 65 61 74 75 72 65 69 6e dom featurein
d5a0: 66 6f 20 65 78 70 61 74 6d 61 6a 6f 72 76 65 72 fo expatmajorver
d5b0: 73 69 6f 6e 0a 7d 20 2d 6d 61 74 63 68 20 72 65 sion.} -match re
d5c0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 28 31 gexp -result {(1
d5d0: 7c 32 29 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 |2)}..test dom-1
d5e0: 31 2e 34 20 7b 66 65 61 74 75 72 65 69 6e 66 6f 1.4 {featureinfo
d5f0: 20 2d 20 64 74 64 7d 20 2d 62 6f 64 79 20 7b 0a - dtd} -body {.
d600: 20 20 20 20 64 6f 6d 20 66 65 61 74 75 72 65 69 dom featurei
d610: 6e 66 6f 20 64 74 64 0a 7d 20 2d 6d 61 74 63 68 nfo dtd.} -match
d620: 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 regexp -result
d630: 7b 28 30 7c 31 29 7d 0a 0a 74 65 73 74 20 64 6f {(0|1)}..test do
d640: 6d 2d 31 31 2e 35 20 7b 66 65 61 74 75 72 65 69 m-11.5 {featurei
d650: 6e 66 6f 20 2d 20 6a 73 6f 6e 6d 61 78 6e 65 73 nfo - jsonmaxnes
d660: 74 69 6e 67 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 ting} {. dom
d670: 66 65 61 74 75 72 65 69 6e 66 6f 20 6a 73 6f 6e featureinfo json
d680: 6d 61 78 6e 65 73 74 69 6e 67 0a 7d 20 32 30 30 maxnesting.} 200
d690: 30 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 31 2e 36 0..test dom-11.6
d6a0: 20 7b 66 65 61 74 75 72 65 69 6e 66 6f 20 2d 20 {featureinfo -
d6b0: 76 65 72 73 69 6f 6e 68 61 73 68 7d 20 7b 0a 20 versionhash} {.
d6c0: 20 20 20 72 65 67 65 78 70 20 7b 5e 5b 30 2d 39 regexp {^[0-9
d6d0: 61 2d 66 41 2d 46 5d 2b 24 7d 20 5b 64 6f 6d 20 a-fA-F]+$} [dom
d6e0: 66 65 61 74 75 72 65 69 6e 66 6f 20 76 65 72 73 featureinfo vers
d6f0: 69 6f 6e 68 61 73 68 5d 0a 7d 20 31 0a 0a 70 72 ionhash].} 1..pr
d700: 6f 63 20 3a 3a 64 6f 6d 3a 3a 64 6f 6d 50 61 72 oc ::dom::domPar
d710: 73 65 46 65 65 64 62 61 63 6b 20 7b 7d 20 7b 0a seFeedback {} {.
d720: 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 return -code
d730: 20 62 72 65 61 6b 0a 7d 0a 74 65 73 74 20 64 6f break.}.test do
d740: 6d 2d 31 32 2e 31 20 7b 2d 66 65 65 64 62 61 63 m-12.1 {-feedbac
d750: 6b 41 66 74 65 72 20 2d 2d 20 63 6d 64 20 72 65 kAfter -- cmd re
d760: 74 75 72 6e 73 20 54 43 4c 5f 42 52 45 41 4b 7d turns TCL_BREAK}
d770: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 64 6f 6d -body {. dom
d780: 20 70 61 72 73 65 20 2d 66 65 65 64 62 61 63 6b parse -feedback
d790: 41 66 74 65 72 20 31 20 7b 3c 64 6f 63 3e 3c 65 After 1 {<doc><e
d7a0: 31 2f 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 2f 64 1/><e1/><e1/></d
d7b0: 6f 63 3e 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 22 oc>}.} -result "
d7c0: 22 0a 0a 70 72 6f 63 20 3a 3a 64 6f 6d 3a 3a 64 "..proc ::dom::d
d7d0: 6f 6d 50 61 72 73 65 46 65 65 64 62 61 63 6b 20 omParseFeedback
d7e0: 7b 7d 20 7b 0a 20 20 20 20 65 72 72 6f 72 20 22 {} {. error "
d7f0: 45 72 72 6f 72 20 69 6e 20 66 65 65 64 62 61 63 Error in feedbac
d800: 6b 20 63 6d 64 2e 22 0a 7d 0a 74 65 73 74 20 64 k cmd.".}.test d
d810: 6f 6d 2d 31 32 2e 32 20 7b 2d 66 65 65 64 62 61 om-12.2 {-feedba
d820: 63 6b 41 66 74 65 72 20 2d 2d 20 63 6d 64 20 72 ckAfter -- cmd r
d830: 65 74 75 72 6e 73 20 54 43 4c 5f 45 52 52 4f 52 eturns TCL_ERROR
d840: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 } -body {. se
d850: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
d860: 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 70 61 {. dom pa
d870: 72 73 65 20 2d 66 65 65 64 62 61 63 6b 41 66 74 rse -feedbackAft
d880: 65 72 20 31 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e er 1 {<doc><e1/>
d890: 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e <e1/><e1/></doc>
d8a0: 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 20 }. } msg].
d8b0: 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d list $result $m
d8c0: 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 sg.} -result [li
d8d0: 73 74 20 31 20 22 45 72 72 6f 72 20 69 6e 20 66 st 1 "Error in f
d8e0: 65 65 64 62 61 63 6b 20 63 6d 64 2e 22 5d 0a 0a eedback cmd."]..
d8f0: 70 72 6f 63 20 3a 3a 64 6f 6d 3a 3a 64 6f 6d 50 proc ::dom::domP
d900: 61 72 73 65 46 65 65 64 62 61 63 6b 20 7b 7d 20 arseFeedback {}
d910: 7b 0a 20 20 20 20 23 20 55 70 64 61 74 65 20 70 {. # Update p
d920: 72 6f 67 65 73 73 20 64 69 61 6c 6f 67 2c 20 63 rogess dialog, c
d930: 68 65 63 6b 20 66 6f 72 20 63 61 6e 63 65 6c 20 heck for cancel
d940: 65 74 63 2e 0a 20 20 20 20 72 65 74 75 72 6e 0a etc.. return.
d950: 7d 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 33 20 }.test dom-12.3
d960: 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 7d {-feedbackAfter}
d970: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 -body {. set
d980: 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 doc [dom parse
d990: 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 -feedbackAfter 1
d9a0: 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e 3c 65 31 2f {<doc><e1/><e1/
d9b0: 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 ><e1/></doc>}].
d9c0: 20 20 20 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f $doc selectNo
d9d0: 64 65 73 20 63 6f 75 6e 74 28 2f 2f 2a 29 0a 7d des count(//*).}
d9e0: 20 2d 72 65 73 75 6c 74 20 34 0a 74 65 73 74 20 -result 4.test
d9f0: 64 6f 6d 2d 31 32 2e 34 20 7b 2d 66 65 65 64 62 dom-12.4 {-feedb
da00: 61 63 6b 41 66 74 65 72 20 61 6e 64 20 2d 63 68 ackAfter and -ch
da10: 61 6e 6e 65 6c 7d 20 2d 73 65 74 75 70 20 7b 0a annel} -setup {.
da20: 20 20 20 20 73 65 74 20 78 6d 6c 46 69 6c 65 20 set xmlFile
da30: 5b 6d 61 6b 65 46 69 6c 65 20 7b 3c 64 6f 63 3e [makeFile {<doc>
da40: 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c <e1/><e1/><e1/><
da50: 2f 64 6f 63 3e 7d 20 64 6f 6d 2e 78 6d 6c 5d 0a /doc>} dom.xml].
da60: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 } -body {. se
da70: 74 20 66 64 20 5b 6f 70 65 6e 20 24 78 6d 6c 46 t fd [open $xmlF
da80: 69 6c 65 5d 0a 20 20 20 20 73 65 74 20 64 6f 63 ile]. set doc
da90: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 63 68 61 [dom parse -cha
daa0: 6e 6e 65 6c 20 24 66 64 20 2d 66 65 65 64 62 61 nnel $fd -feedba
dab0: 63 6b 41 66 74 65 72 20 31 5d 0a 20 20 20 20 63 ckAfter 1]. c
dac0: 6c 6f 73 65 20 24 66 64 0a 20 20 20 20 24 64 6f lose $fd. $do
dad0: 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 63 6f c selectNodes co
dae0: 75 6e 74 28 2f 2f 2a 29 0a 7d 20 2d 63 6c 65 61 unt(//*).} -clea
daf0: 6e 75 70 20 7b 0a 20 20 20 20 72 65 6d 6f 76 65 nup {. remove
db00: 46 69 6c 65 20 64 6f 6d 2e 78 6d 6c 0a 7d 20 2d File dom.xml.} -
db10: 72 65 73 75 6c 74 20 34 0a 70 72 6f 63 20 65 78 result 4.proc ex
db20: 74 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 2e tRefResolver-12.
db30: 35 20 7b 62 61 73 65 20 73 79 73 74 65 6d 49 64 5 {base systemId
db40: 20 70 75 62 6c 69 63 49 64 7d 20 7b 0a 20 20 20 publicId} {.
db50: 20 73 77 69 74 63 68 20 24 70 75 62 6c 69 63 49 switch $publicI
db60: 64 20 7b 0a 20 20 20 20 20 20 20 20 22 61 22 20 d {. "a"
db70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 {. se
db80: 74 20 64 61 74 61 20 22 3c 65 31 2f 3e 22 0a 20 t data "<e1/>".
db90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
dba0: 20 22 62 22 20 7b 0a 20 20 20 20 20 20 20 20 20 "b" {.
dbb0: 20 20 20 73 65 74 20 64 61 74 61 20 22 3c 65 31 set data "<e1
dbc0: 2f 3e 3c 65 31 2f 3e 22 0a 20 20 20 20 20 20 20 /><e1/>".
dbd0: 20 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 }. defau
dbe0: 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 lt {.
dbf0: 20 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 error "unknown
dc00: 70 75 62 6c 69 63 20 49 44 22 0a 20 20 20 20 20 public ID".
dc10: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 }. }. r
dc20: 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 73 74 72 eturn [list "str
dc30: 69 6e 67 22 20 24 62 61 73 65 20 24 64 61 74 61 ing" $base $data
dc40: 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e ].}.test dom-12.
dc50: 35 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 5 {-feedbackAfte
dc60: 72 20 61 6e 64 20 65 78 74 65 72 6e 61 6c 20 65 r and external e
dc70: 6e 74 69 74 69 65 73 7d 20 2d 62 6f 64 79 20 7b ntities} -body {
dc80: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
dc90: 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 m parse -externa
dca0: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 lentitycommand e
dcb0: 78 74 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 xtRefResolver-12
dcc0: 2e 35 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 .5 \.
dcd0: 20 20 20 20 20 20 2d 66 65 65 64 62 61 63 6b 41 -feedbackA
dce0: 66 74 65 72 20 31 20 7b 0a 20 20 20 20 20 20 20 fter 1 {.
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 <!
dd00: 44 4f 43 54 59 50 45 20 64 6f 63 20 5b 0a 20 20 DOCTYPE doc [.
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dd30: 20 20 3c 21 45 4e 54 49 54 59 20 61 20 50 55 42 <!ENTITY a PUB
dd40: 4c 49 43 20 22 61 22 20 22 61 2e 78 6d 6c 22 3e LIC "a" "a.xml">
dd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dd70: 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 62 20 <!ENTITY b
dd80: 50 55 42 4c 49 43 20 22 62 22 20 22 62 2e 78 6d PUBLIC "b" "b.xm
dd90: 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 l">.
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ddb0: 20 20 20 20 20 20 20 20 5d 3e 0a 20 20 20 20 20 ]>.
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ddd0: 3c 64 6f 63 3e 26 61 3b 26 62 3b 3c 2f 64 6f 63 <doc>&a;&b;</doc
dde0: 3e 7d 5d 0a 20 20 20 20 24 64 6f 63 20 73 65 6c >}]. $doc sel
ddf0: 65 63 74 4e 6f 64 65 73 20 63 6f 75 6e 74 28 2f ectNodes count(/
de00: 2f 2a 29 0a 7d 20 2d 72 65 73 75 6c 74 20 34 0a /*).} -result 4.
de10: 0a 73 65 74 20 63 61 6e 63 65 6c 20 30 0a 70 72 .set cancel 0.pr
de20: 6f 63 20 65 78 74 52 65 66 52 65 73 6f 6c 76 65 oc extRefResolve
de30: 72 2d 31 32 2e 36 20 7b 62 61 73 65 20 73 79 73 r-12.6 {base sys
de40: 74 65 6d 49 64 20 70 75 62 6c 69 63 49 64 7d 20 temId publicId}
de50: 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 63 61 6e {. global can
de60: 63 65 6c 0a 20 20 20 20 73 77 69 74 63 68 20 24 cel. switch $
de70: 70 75 62 6c 69 63 49 64 20 7b 0a 20 20 20 20 20 publicId {.
de80: 20 20 20 22 61 22 20 7b 0a 20 20 20 20 20 20 20 "a" {.
de90: 20 20 20 20 20 73 65 74 20 63 61 6e 63 65 6c 20 set cancel
dea0: 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 1. se
deb0: 74 20 64 61 74 61 20 22 3c 65 31 2f 3e 3c 65 31 t data "<e1/><e1
dec0: 2f 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 />". }.
ded0: 20 20 20 20 20 20 22 62 22 20 7b 0a 20 20 20 20 "b" {.
dee0: 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data
def0: 20 22 3c 65 31 2f 3e 22 0a 20 20 20 20 20 20 20 "<e1/>".
df00: 20 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 }. defau
df10: 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 lt {.
df20: 20 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 error "unknown
df30: 70 75 62 6c 69 63 20 49 44 22 0a 20 20 20 20 20 public ID".
df40: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 }. }. r
df50: 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 73 74 72 eturn [list "str
df60: 69 6e 67 22 20 24 62 61 73 65 20 24 64 61 74 61 ing" $base $data
df70: 5d 0a 7d 0a 70 72 6f 63 20 3a 3a 64 6f 6d 3a 3a ].}.proc ::dom::
df80: 64 6f 6d 50 61 72 73 65 46 65 65 64 62 61 63 6b domParseFeedback
df90: 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c {} {. global
dfa0: 20 63 61 6e 63 65 6c 0a 20 20 20 20 69 66 20 7b cancel. if {
dfb0: 24 63 61 6e 63 65 6c 7d 20 7b 0a 20 20 20 20 20 $cancel} {.
dfc0: 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 return -code
dfd0: 62 72 65 61 6b 0a 20 20 20 20 7d 0a 7d 0a 74 65 break. }.}.te
dfe0: 73 74 20 64 6f 6d 2d 31 32 2e 36 20 7b 2d 66 65 st dom-12.6 {-fe
dff0: 65 64 62 61 63 6b 41 66 74 65 72 20 61 6e 64 20 edbackAfter and
e000: 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 external entitie
e010: 73 2c 20 77 69 74 68 20 63 61 6e 63 65 6c 7d 20 s, with cancel}
e020: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 64 6f 6d 20 -body {. dom
e030: 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 parse -externale
e040: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 74 ntitycommand ext
e050: 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 2e 36 RefResolver-12.6
e060: 20 5c 0a 20 20 20 20 20 20 20 20 2d 66 65 65 64 \. -feed
e070: 62 61 63 6b 41 66 74 65 72 20 31 20 7b 0a 20 20 backAfter 1 {.
e080: 20 20 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 <!DOCT
e090: 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 YPE doc [.
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0b0: 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 61 20 <!ENTITY a
e0c0: 50 55 42 4c 49 43 20 22 61 22 20 22 61 2e 78 6d PUBLIC "a" "a.xm
e0d0: 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 l">.
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
e0f0: 21 45 4e 54 49 54 59 20 62 20 50 55 42 4c 49 43 !ENTITY b PUBLIC
e100: 20 22 62 22 20 22 62 2e 78 6d 6c 22 3e 0a 20 20 "b" "b.xml">.
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e120: 20 20 20 20 20 20 20 20 5d 3e 0a 20 20 20 20 20 ]>.
e130: 20 20 20 20 20 20 20 3c 64 6f 63 3e 26 61 3b 26 <doc>&a;&
e140: 62 3b 3c 2f 64 6f 63 3e 7d 0a 7d 20 2d 72 65 73 b;</doc>}.} -res
e150: 75 6c 74 20 22 22 0a 70 72 6f 63 20 3a 3a 64 6f ult "".proc ::do
e160: 6d 3a 3a 64 6f 6d 50 61 72 73 65 46 65 65 64 62 m::domParseFeedb
e170: 61 63 6b 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f ack {} {. glo
e180: 62 61 6c 20 63 61 6e 63 65 6c 0a 20 20 20 20 69 bal cancel. i
e190: 66 20 7b 24 63 61 6e 63 65 6c 7d 20 7b 0a 20 20 f {$cancel} {.
e1a0: 20 20 20 20 20 20 65 72 72 6f 72 20 22 45 72 72 error "Err
e1b0: 6f 72 20 69 6e 20 66 65 65 64 62 61 63 6b 20 63 or in feedback c
e1c0: 6d 64 2e 22 0a 20 20 20 20 7d 0a 7d 0a 74 65 73 md.". }.}.tes
e1d0: 74 20 64 6f 6d 2d 31 32 2e 37 20 7b 2d 66 65 65 t dom-12.7 {-fee
e1e0: 64 62 61 63 6b 41 66 74 65 72 20 61 6e 64 20 65 dbackAfter and e
e1f0: 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 xternal entities
e200: 2c 20 77 69 74 68 20 65 72 72 6f 72 7d 20 2d 62 , with error} -b
e210: 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 ody {. set re
e220: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d sult [catch {dom
e230: 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 6c parse -external
e240: 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 entitycommand ex
e250: 74 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 2e tRefResolver-12.
e260: 36 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6 \.
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d -
e280: 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 20 feedbackAfter 1
e290: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e2b0: 20 3c 21 44 4f 43 54 59 50 45 20 64 6f 63 20 5b <!DOCTYPE doc [
e2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
e2f0: 21 45 4e 54 49 54 59 20 61 20 50 55 42 4c 49 43 !ENTITY a PUBLIC
e300: 20 22 61 22 20 22 61 2e 78 6d 6c 22 3e 0a 20 20 "a" "a.xml">.
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e330: 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 45 4e <!EN
e340: 54 49 54 59 20 62 20 50 55 42 4c 49 43 20 22 62 TITY b PUBLIC "b
e350: 22 20 22 62 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 " "b.xml">.
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e380: 20 20 20 20 20 20 20 20 5d 3e 0a 20 20 20 20 20 ]>.
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e3a0: 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 3e 26 <doc>&
e3b0: 61 3b 26 62 3b 3c 2f 64 6f 63 3e 7d 7d 20 6d 73 a;&b;</doc>}} ms
e3c0: 67 5d 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 g]. list $res
e3d0: 75 6c 74 20 24 6d 73 67 0a 7d 20 2d 72 65 73 75 ult $msg.} -resu
e3e0: 6c 74 20 5b 6c 69 73 74 20 31 20 22 45 72 72 6f lt [list 1 "Erro
e3f0: 72 20 69 6e 20 66 65 65 64 62 61 63 6b 20 63 6d r in feedback cm
e400: 64 2e 22 5d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 d."]..test dom-1
e410: 32 2e 38 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 2.8 {-feedbackAf
e420: 74 65 72 20 77 69 74 68 6f 75 74 20 2d 66 65 65 ter without -fee
e430: 64 62 61 63 6b 63 6d 64 7d 20 2d 73 65 74 75 70 dbackcmd} -setup
e440: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 72 65 {. catch {re
e450: 6e 61 6d 65 20 3a 3a 64 6f 6d 3a 3a 64 6f 6d 50 name ::dom::domP
e460: 61 72 73 65 46 65 65 64 62 61 63 6b 20 22 22 7d arseFeedback ""}
e470: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 .} -body {. s
e480: 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 et result [catch
e490: 20 7b 64 6f 6d 20 70 61 72 73 65 20 2d 66 65 65 {dom parse -fee
e4a0: 64 62 61 63 6b 41 66 74 65 72 20 31 30 30 20 3c dbackAfter 100 <
e4b0: 64 6f 63 2f 3e 7d 20 6d 73 67 5d 0a 20 20 20 20 doc/>} msg].
e4c0: 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 list $result $ms
e4d0: 67 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 7b g.} -result {1 {
e4e0: 49 66 20 2d 66 65 65 64 62 61 63 6b 41 66 74 65 If -feedbackAfte
e4f0: 72 20 69 73 20 75 73 65 64 2c 20 2d 66 65 65 64 r is used, -feed
e500: 62 61 63 6b 63 6d 64 20 6d 75 73 74 20 61 6c 73 backcmd must als
e510: 6f 20 62 65 20 75 73 65 64 2e 7d 7d 0a 0a 70 72 o be used.}}..pr
e520: 6f 63 20 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 oc feedbackcmd-1
e530: 32 2e 39 20 7b 7d 20 7b 0a 20 20 20 20 72 65 74 2.9 {} {. ret
e540: 75 72 6e 20 2d 63 6f 64 65 20 62 72 65 61 6b 0a urn -code break.
e550: 7d 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 39 20 }.test dom-12.9
e560: 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 {-feedbackAfter
e570: 77 69 74 68 20 2d 66 65 65 64 62 61 63 6b 63 6d with -feedbackcm
e580: 64 20 2d 2d 20 63 6d 64 20 72 65 74 75 72 6e 73 d -- cmd returns
e590: 20 54 43 4c 5f 42 52 45 41 4b 7d 20 2d 62 6f 64 TCL_BREAK} -bod
e5a0: 79 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 y {. dom pars
e5b0: 65 20 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 e -feedbackAfter
e5c0: 20 31 20 2d 66 65 65 64 62 61 63 6b 63 6d 64 20 1 -feedbackcmd
e5d0: 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 32 2e 39 feedbackcmd-12.9
e5e0: 20 5c 0a 20 20 20 20 20 20 20 20 7b 3c 64 6f 63 \. {<doc
e5f0: 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 65 31 2f 3e ><e1/><e1/><e1/>
e600: 3c 2f 64 6f 63 3e 7d 0a 7d 20 2d 72 65 73 75 6c </doc>}.} -resul
e610: 74 20 22 22 0a 0a 70 72 6f 63 20 66 65 65 64 62 t ""..proc feedb
e620: 61 63 6b 63 6d 64 2d 31 32 2e 31 30 20 7b 7d 20 ackcmd-12.10 {}
e630: 7b 0a 20 20 20 20 65 72 72 6f 72 20 22 45 72 72 {. error "Err
e640: 6f 72 20 69 6e 20 66 65 65 64 62 61 63 6b 20 63 or in feedback c
e650: 6d 64 2e 22 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d md.".}.test dom-
e660: 31 32 2e 31 30 20 7b 2d 66 65 65 64 62 61 63 6b 12.10 {-feedback
e670: 41 66 74 65 72 20 77 69 74 68 20 2d 66 65 65 64 After with -feed
e680: 62 61 63 6b 63 6d 64 20 2d 2d 20 63 6d 64 20 72 backcmd -- cmd r
e690: 65 74 75 72 6e 73 20 54 43 4c 5f 45 52 52 4f 52 eturns TCL_ERROR
e6a0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 } -body {. se
e6b0: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
e6c0: 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 70 61 {. dom pa
e6d0: 72 73 65 20 2d 66 65 65 64 62 61 63 6b 41 66 74 rse -feedbackAft
e6e0: 65 72 20 31 20 2d 66 65 65 64 62 61 63 6b 63 6d er 1 -feedbackcm
e6f0: 64 20 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 32 d feedbackcmd-12
e700: 2e 31 30 20 5c 0a 20 20 20 20 20 20 20 20 20 20 .10 \.
e710: 20 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e 3c 65 31 {<doc><e1/><e1
e720: 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e 7d 0a 20 /><e1/></doc>}.
e730: 20 20 20 7d 20 6d 73 67 5d 0a 20 20 20 20 6c 69 } msg]. li
e740: 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67 0a st $result $msg.
e750: 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 } -result [list
e760: 31 20 22 45 72 72 6f 72 20 69 6e 20 66 65 65 64 1 "Error in feed
e770: 62 61 63 6b 20 63 6d 64 2e 22 5d 0a 0a 70 72 6f back cmd."]..pro
e780: 63 20 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 32 c feedbackcmd-12
e790: 2e 31 31 20 7b 7d 20 7b 0a 20 20 20 20 23 20 55 .11 {} {. # U
e7a0: 70 64 61 74 65 20 70 72 6f 67 65 73 73 20 64 69 pdate progess di
e7b0: 61 6c 6f 67 2c 20 63 68 65 63 6b 20 66 6f 72 20 alog, check for
e7c0: 63 61 6e 63 65 6c 20 65 74 63 2e 0a 20 20 20 20 cancel etc..
e7d0: 72 65 74 75 72 6e 0a 7d 0a 74 65 73 74 20 64 6f return.}.test do
e7e0: 6d 2d 31 32 2e 31 31 20 7b 2d 66 65 65 64 62 61 m-12.11 {-feedba
e7f0: 63 6b 41 66 74 65 72 20 77 69 74 68 20 2d 66 65 ckAfter with -fe
e800: 65 64 62 61 63 6b 63 6d 64 7d 20 2d 62 6f 64 79 edbackcmd} -body
e810: 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b {. set doc [
e820: 64 6f 6d 20 70 61 72 73 65 20 2d 66 65 65 64 62 dom parse -feedb
e830: 61 63 6b 41 66 74 65 72 20 31 20 2d 66 65 65 64 ackAfter 1 -feed
e840: 62 61 63 6b 63 6d 64 20 66 65 65 64 62 61 63 6b backcmd feedback
e850: 63 6d 64 2d 31 32 2e 31 31 20 5c 0a 20 20 20 20 cmd-12.11 \.
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 3c 64 {<d
e870: 6f 63 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 65 31 oc><e1/><e1/><e1
e880: 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 24 /></doc>}]. $
e890: 64 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 doc selectNodes
e8a0: 63 6f 75 6e 74 28 2f 2f 2a 29 0a 7d 20 2d 72 65 count(//*).} -re
e8b0: 73 75 6c 74 20 34 0a 74 65 73 74 20 64 6f 6d 2d sult 4.test dom-
e8c0: 31 32 2e 31 32 20 7b 2d 66 65 65 64 62 61 63 6b 12.12 {-feedback
e8d0: 41 66 74 65 72 20 77 69 74 68 20 2d 66 65 65 64 After with -feed
e8e0: 62 61 63 6b 63 6d 64 20 61 6e 64 20 2d 63 68 61 backcmd and -cha
e8f0: 6e 6e 65 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 nnel} -setup {.
e900: 20 20 20 73 65 74 20 78 6d 6c 46 69 6c 65 20 5b set xmlFile [
e910: 6d 61 6b 65 46 69 6c 65 20 7b 3c 64 6f 63 3e 3c makeFile {<doc><
e920: 65 31 2f 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 2f e1/><e1/><e1/></
e930: 64 6f 63 3e 7d 20 64 6f 6d 2e 78 6d 6c 5d 0a 7d doc>} dom.xml].}
e940: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 74 -body {. set
e950: 20 66 64 20 5b 6f 70 65 6e 20 24 78 6d 6c 46 69 fd [open $xmlFi
e960: 6c 65 5d 0a 20 20 20 20 73 65 74 20 64 6f 63 20 le]. set doc
e970: 5b 64 6f 6d 20 70 61 72 73 65 20 2d 63 68 61 6e [dom parse -chan
e980: 6e 65 6c 20 24 66 64 20 2d 66 65 65 64 62 61 63 nel $fd -feedbac
e990: 6b 41 66 74 65 72 20 31 20 5c 0a 20 20 20 20 20 kAfter 1 \.
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 65 65 -fee
e9b0: 64 62 61 63 6b 63 6d 64 20 66 65 65 64 62 61 63 dbackcmd feedbac
e9c0: 6b 63 6d 64 2d 31 32 2e 31 31 5d 0a 20 20 20 20 kcmd-12.11].
e9d0: 63 6c 6f 73 65 20 24 66 64 0a 20 20 20 20 24 64 close $fd. $d
e9e0: 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 63 oc selectNodes c
e9f0: 6f 75 6e 74 28 2f 2f 2a 29 0a 7d 20 2d 63 6c 65 ount(//*).} -cle
ea00: 61 6e 75 70 20 7b 0a 20 20 20 20 72 65 6d 6f 76 anup {. remov
ea10: 65 46 69 6c 65 20 64 6f 6d 2e 78 6d 6c 0a 7d 20 eFile dom.xml.}
ea20: 2d 72 65 73 75 6c 74 20 34 0a 74 65 73 74 20 64 -result 4.test d
ea30: 6f 6d 2d 31 32 2e 31 33 20 7b 2d 66 65 65 64 62 om-12.13 {-feedb
ea40: 61 63 6b 41 66 74 65 72 20 77 69 74 68 20 2d 66 ackAfter with -f
ea50: 65 65 64 62 61 63 6b 63 6d 64 20 61 6e 64 20 65 eedbackcmd and e
ea60: 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 xternal entities
ea70: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 } -body {. se
ea80: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
ea90: 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 -externalentity
eaa0: 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 65 command extRefRe
eab0: 73 6f 6c 76 65 72 2d 31 32 2e 35 20 5c 0a 20 20 solver-12.5 \.
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d -
ead0: 66 65 65 64 62 61 63 6b 63 6d 64 20 66 65 65 64 feedbackcmd feed
eae0: 62 61 63 6b 63 6d 64 2d 31 32 2e 31 31 20 5c 0a backcmd-12.11 \.
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb00: 20 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 -feedbackAfter
eb10: 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 1 {.
eb20: 20 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 59 <!DOCTY
eb30: 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 PE doc [.
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 45 <!E
eb60: 4e 54 49 54 59 20 61 20 50 55 42 4c 49 43 20 22 NTITY a PUBLIC "
eb70: 61 22 20 22 61 2e 78 6d 6c 22 3e 0a 20 20 20 20 a" "a.xml">.
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eba0: 3c 21 45 4e 54 49 54 59 20 62 20 50 55 42 4c 49 <!ENTITY b PUBLI
ebb0: 43 20 22 62 22 20 22 62 2e 78 6d 6c 22 3e 0a 20 C "b" "b.xml">.
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ebe0: 20 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 ]>.
ebf0: 20 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 3e <doc>
ec00: 26 61 3b 26 62 3b 3c 2f 64 6f 63 3e 7d 5d 0a 20 &a;&b;</doc>}].
ec10: 20 20 20 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f $doc selectNo
ec20: 64 65 73 20 63 6f 75 6e 74 28 2f 2f 2a 29 0a 7d des count(//*).}
ec30: 20 2d 72 65 73 75 6c 74 20 34 0a 0a 73 65 74 20 -result 4..set
ec40: 63 61 6e 63 65 6c 20 30 0a 70 72 6f 63 20 66 65 cancel 0.proc fe
ec50: 65 64 62 61 63 6b 63 6d 64 2d 31 32 2e 31 34 20 edbackcmd-12.14
ec60: 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 {} {. global
ec70: 63 61 6e 63 65 6c 0a 20 20 20 20 69 66 20 7b 24 cancel. if {$
ec80: 63 61 6e 63 65 6c 7d 20 7b 0a 20 20 20 20 20 20 cancel} {.
ec90: 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 62 return -code b
eca0: 72 65 61 6b 0a 20 20 20 20 7d 0a 7d 0a 74 65 73 reak. }.}.tes
ecb0: 74 20 64 6f 6d 2d 31 32 2e 31 34 20 7b 2d 66 65 t dom-12.14 {-fe
ecc0: 65 64 62 61 63 6b 41 66 74 65 72 20 77 69 74 68 edbackAfter with
ecd0: 20 2d 66 65 65 64 62 61 63 6b 63 6d 64 20 61 6e -feedbackcmd an
ece0: 64 20 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 d external entit
ecf0: 69 65 73 2c 20 77 69 74 68 20 63 61 6e 63 65 6c ies, with cancel
ed00: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 64 6f } -body {. do
ed10: 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 m parse -externa
ed20: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 lentitycommand e
ed30: 78 74 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 xtRefResolver-12
ed40: 2e 36 20 5c 0a 20 20 20 20 20 20 20 20 2d 66 65 .6 \. -fe
ed50: 65 64 62 61 63 6b 63 6d 64 20 66 65 65 64 62 61 edbackcmd feedba
ed60: 63 6b 63 6d 64 2d 31 32 2e 31 34 20 5c 0a 20 20 ckcmd-12.14 \.
ed70: 20 20 20 20 20 20 2d 66 65 65 64 62 61 63 6b 41 -feedbackA
ed80: 66 74 65 72 20 31 20 7b 0a 20 20 20 20 20 20 20 fter 1 {.
ed90: 20 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 64 <!DOCTYPE d
eda0: 6f 63 20 5b 0a 20 20 20 20 20 20 20 20 20 20 20 oc [.
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
edc0: 3c 21 45 4e 54 49 54 59 20 61 20 50 55 42 4c 49 <!ENTITY a PUBLI
edd0: 43 20 22 61 22 20 22 61 2e 78 6d 6c 22 3e 0a 20 C "a" "a.xml">.
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
edf0: 20 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 <!ENTI
ee00: 54 59 20 62 20 50 55 42 4c 49 43 20 22 62 22 20 TY b PUBLIC "b"
ee10: 22 62 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 "b.xml">.
ee20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee30: 20 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 ]>.
ee40: 20 20 3c 64 6f 63 3e 26 61 3b 26 62 3b 3c 2f 64 <doc>&a;&b;</d
ee50: 6f 63 3e 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 22 oc>}.} -result "
ee60: 22 0a 73 65 74 20 63 61 6e 63 65 6c 20 30 0a 70 ".set cancel 0.p
ee70: 72 6f 63 20 66 65 65 64 62 61 63 6b 63 6d 64 2d roc feedbackcmd-
ee80: 31 32 2e 31 35 20 7b 7d 20 7b 0a 20 20 20 20 67 12.15 {} {. g
ee90: 6c 6f 62 61 6c 20 63 61 6e 63 65 6c 0a 20 20 20 lobal cancel.
eea0: 20 69 66 20 7b 24 63 61 6e 63 65 6c 7d 20 7b 0a if {$cancel} {.
eeb0: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 45 error "E
eec0: 72 72 6f 72 20 69 6e 20 66 65 65 64 62 61 63 6b rror in feedback
eed0: 20 63 6d 64 2e 22 0a 20 20 20 20 7d 0a 7d 0a 74 cmd.". }.}.t
eee0: 65 73 74 20 64 6f 6d 2d 31 32 2e 31 35 20 7b 2d est dom-12.15 {-
eef0: 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 77 69 feedbackAfter wi
ef00: 74 68 20 2d 66 65 65 64 62 61 63 6b 63 6d 64 20 th -feedbackcmd
ef10: 61 6e 64 20 65 78 74 65 72 6e 61 6c 20 65 6e 74 and external ent
ef20: 69 74 69 65 73 2c 20 77 69 74 68 20 65 72 72 6f ities, with erro
ef30: 72 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 r} -body {. s
ef40: 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 et result [catch
ef50: 20 7b 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 {dom parse -ext
ef60: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 ernalentitycomma
ef70: 6e 64 20 65 78 74 52 65 66 52 65 73 6f 6c 76 65 nd extRefResolve
ef80: 72 2d 31 32 2e 36 20 5c 0a 20 20 20 20 20 20 20 r-12.6 \.
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
efa0: 20 20 20 20 2d 66 65 65 64 62 61 63 6b 63 6d 64 -feedbackcmd
efb0: 20 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 32 2e feedbackcmd-12.
efc0: 31 35 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 15 \.
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
efe0: 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 -feedbackAfter 1
eff0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f010: 20 20 3c 21 44 4f 43 54 59 50 45 20 64 6f 63 20 <!DOCTYPE doc
f020: 5b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [.
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f050: 3c 21 45 4e 54 49 54 59 20 61 20 50 55 42 4c 49 <!ENTITY a PUBLI
f060: 43 20 22 61 22 20 22 61 2e 78 6d 6c 22 3e 0a 20 C "a" "a.xml">.
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 45 <!E
f0a0: 4e 54 49 54 59 20 62 20 50 55 42 4c 49 43 20 22 NTITY b PUBLIC "
f0b0: 62 22 20 22 62 2e 78 6d 6c 22 3e 0a 20 20 20 20 b" "b.xml">.
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0e0: 20 20 20 20 20 20 20 20 20 5d 3e 0a 20 20 20 20 ]>.
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f100: 20 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 3e <doc>
f110: 26 61 3b 26 62 3b 3c 2f 64 6f 63 3e 7d 7d 20 6d &a;&b;</doc>}} m
f120: 73 67 5d 0a 20 20 20 20 6c 69 73 74 20 24 72 65 sg]. list $re
f130: 73 75 6c 74 20 24 6d 73 67 0a 7d 20 2d 72 65 73 sult $msg.} -res
f140: 75 6c 74 20 5b 6c 69 73 74 20 31 20 22 45 72 72 ult [list 1 "Err
f150: 6f 72 20 69 6e 20 66 65 65 64 62 61 63 6b 20 63 or in feedback c
f160: 6d 64 2e 22 5d 0a 70 72 6f 63 20 66 65 65 64 62 md."].proc feedb
f170: 61 63 6b 63 6d 64 2d 31 32 2e 31 36 20 7b 7d 20 ackcmd-12.16 {}
f180: 7b 0a 20 20 20 20 69 6e 63 72 20 3a 3a 66 65 65 {. incr ::fee
f190: 64 62 61 63 6b 63 6d 64 2d 31 32 2e 31 36 0a 7d dbackcmd-12.16.}
f1a0: 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 31 36 20 .test dom-12.16
f1b0: 7b 2d 66 65 65 64 62 61 63 6b 63 6d 64 20 73 65 {-feedbackcmd se
f1c0: 74 74 69 6e 67 20 69 6e 74 65 72 70 20 72 65 73 tting interp res
f1d0: 75 6c 74 20 77 2f 20 69 6e 76 61 6c 69 64 20 58 ult w/ invalid X
f1e0: 4d 4c 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 ML} -body {.
f1f0: 73 65 74 20 3a 3a 66 65 65 64 62 61 63 6b 63 6d set ::feedbackcm
f200: 64 2d 31 32 2e 31 36 20 30 0a 20 20 20 20 73 65 d-12.16 0. se
f210: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
f220: 7b 64 6f 6d 20 70 61 72 73 65 20 2d 66 65 65 64 {dom parse -feed
f230: 62 61 63 6b 63 6d 64 20 66 65 65 64 62 61 63 6b backcmd feedback
f240: 63 6d 64 2d 31 32 2e 31 36 20 5c 0a 20 20 20 20 cmd-12.16 \.
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f260: 20 20 20 20 20 20 20 2d 66 65 65 64 62 61 63 6b -feedback
f270: 41 66 74 65 72 20 31 20 7b 3c 64 6f 63 3e 3c 65 After 1 {<doc><e
f280: 31 2f 3e 3c 65 31 2f 3e 3c 65 31 3e 3c 2f 64 6f 1/><e1/><e1></do
f290: 63 7d 7d 20 6d 73 67 5d 0a 20 20 20 20 6c 69 73 c}} msg]. lis
f2a0: 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67 0a 7d t $result $msg.}
f2b0: 20 2d 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 31 -result [list 1
f2c0: 20 7b 65 72 72 6f 72 20 22 75 6e 63 6c 6f 73 65 {error "unclose
f2d0: 64 20 74 6f 6b 65 6e 22 20 61 74 20 6c 69 6e 65 d token" at line
f2e0: 20 31 20 63 68 61 72 61 63 74 65 72 20 31 39 0a 1 character 19.
f2f0: 22 3c 64 6f 63 3e 3c 65 31 2f 3e 3c 65 31 2f 3e "<doc><e1/><e1/>
f300: 3c 65 31 3e 3c 20 3c 2d 2d 45 72 72 6f 72 2d 2d <e1>< <--Error--
f310: 20 2f 64 6f 63 22 7d 5d 0a 0a 23 20 63 6c 65 61 /doc"}]..# clea
f320: 6e 75 70 0a 3a 3a 74 63 6c 74 65 73 74 3a 3a 63 nup.::tcltest::c
f330: 6c 65 61 6e 75 70 54 65 73 74 73 0a 72 65 74 75 leanupTests.retu
f340: 72 6e 0a rn.