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 69 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 7d 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e e}"..test dom-1.
0350: 32 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 2 {createDocumen
0360: 74 20 77 69 74 68 20 72 6f 6f 74 20 6e 6f 64 65 t with root node
0370: 20 6e 61 6d 65 20 6e 6f 74 20 61 20 58 4d 4c 20 name not a XML
0380: 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 6c 69 73 74 Name} {. list
0390: 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 63 72 65 [catch {dom cre
03a0: 61 74 65 44 6f 63 75 6d 65 6e 74 20 22 31 72 6f ateDocument "1ro
03b0: 6f 74 22 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d ot"} msg] $msg.}
03c0: 20 22 31 20 7b 69 6e 76 61 6c 69 64 20 72 6f 6f "1 {invalid roo
03d0: 74 20 65 6c 65 6d 65 6e 74 20 6e 61 6d 65 7d 22 t element name}"
03e0: 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 33 20 7b ..test dom-1.3 {
03f0: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 2d createDocument -
0400: 20 72 6f 6f 74 20 6e 61 6d 65 20 75 73 2d 61 73 root name us-as
0410: 63 69 69 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 cii} {. dom c
0420: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 22 72 reateDocument "r
0430: 6f 6f 74 22 20 64 6f 63 20 0a 20 20 20 20 73 65 oot" doc . se
0440: 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 t root [$doc doc
0450: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 umentElement].
0460: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 set result [$r
0470: 6f 6f 74 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 oot nodeName].
0480: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
0490: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 22 set result.} "
04a0: 72 6f 6f 74 22 0a 0a 74 65 73 74 20 64 6f 6d 2d root"..test dom-
04b0: 31 2e 34 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 1.4 {createDocum
04c0: 65 6e 74 20 2d 20 72 6f 6f 74 20 6e 61 6d 65 20 ent - root name
04d0: 77 69 74 68 20 55 54 46 2d 38 20 63 68 61 72 73 with UTF-8 chars
04e0: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 } {. dom crea
04f0: 74 65 44 6f 63 75 6d 65 6e 74 20 22 5c 75 30 30 teDocument "\u00
0500: 63 34 5c 75 30 30 64 34 5c 75 30 30 64 63 22 20 c4\u00d4\u00dc"
0510: 64 6f 63 20 0a 20 20 20 20 73 65 74 20 72 6f 6f doc . set roo
0520: 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 t [$doc document
0530: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 Element]. set
0540: 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 6e result [$root n
0550: 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 6f odeName]. $do
0560: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 c delete. set
0570: 20 72 65 73 75 6c 74 0a 7d 20 22 5c 75 30 30 63 result.} "\u00c
0580: 34 5c 75 30 30 64 34 5c 75 30 30 64 63 22 0a 20 4\u00d4\u00dc".
0590: 20 20 20 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 35 .test dom-1.5
05a0: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
05b0: 20 77 69 74 68 20 46 51 20 72 6f 6f 74 20 6e 61 with FQ root na
05c0: 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 me} {. dom cr
05d0: 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 22 66 6f eateDocument "fo
05e0: 6f 3a 62 61 72 22 20 64 6f 63 0a 20 20 20 20 73 o:bar" doc. s
05f0: 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f et root [$doc do
0600: 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 cumentElement].
0610: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 set result [$
0620: 72 6f 6f 74 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 root nodeName].
0630: 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 $doc delete.
0640: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
0650: 22 66 6f 6f 3a 62 61 72 22 0a 0a 74 65 73 74 20 "foo:bar"..test
0660: 64 6f 6d 2d 31 2e 36 20 7b 63 72 65 61 74 65 44 dom-1.6 {createD
0670: 6f 63 75 6d 65 6e 74 20 77 69 74 68 20 77 72 6f ocument with wro
0680: 6e 67 20 23 20 6f 66 20 61 72 67 73 7d 20 7b 0a ng # of args} {.
0690: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 list [catch
06a0: 7b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d {dom createDocum
06b0: 65 6e 74 20 22 72 6f 6f 74 22 20 22 68 74 74 70 ent "root" "http
06c0: 3a 2f 66 6f 6f 3a 62 61 72 22 20 64 6f 63 7d 20 :/foo:bar" doc}
06d0: 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 22 31 20 7b msg] $msg.} "1 {
06e0: 77 72 6f 6e 67 20 5c 23 20 61 72 67 73 3a 20 73 wrong \# args: s
06f0: 68 6f 75 6c 64 20 62 65 20 5c 22 63 72 65 61 74 hould be \"creat
0700: 65 44 6f 63 75 6d 65 6e 74 20 64 6f 63 45 6c 65 eDocument docEle
0710: 6d 4e 61 6d 65 20 3f 6e 65 77 4f 62 6a 56 61 72 mName ?newObjVar
0720: 3f 5c 22 7d 22 0a 0a 74 65 73 74 20 64 6f 6d 2d ?\"}"..test dom-
0730: 31 2e 37 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 1.7 {createDocum
0740: 65 6e 74 4e 53 20 2d 20 63 68 65 63 6b 20 72 6f entNS - check ro
0750: 6f 74 20 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 73 ot name} {. s
0760: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 63 72 65 61 et doc [dom crea
0770: 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 22 68 74 teDocumentNS "ht
0780: 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 22 20 22 72 tp://foo.bar" "r
0790: 6f 6f 74 22 5d 0a 20 20 20 20 73 65 74 20 72 6f oot"]. set ro
07a0: 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e ot [$doc documen
07b0: 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 tElement]. se
07c0: 74 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 t result [$root
07d0: 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 nodeName]. $d
07e0: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
07f0: 74 20 72 65 73 75 6c 74 0a 7d 20 22 72 6f 6f 74 t result.} "root
0800: 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 38 20 "..test dom-1.8
0810: 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e {createDocumentN
0820: 53 20 2d 20 63 68 65 63 6b 20 74 68 65 20 4e 53 S - check the NS
0830: 20 6f 66 20 74 68 65 20 63 72 65 61 74 65 64 20 of the created
0840: 72 6f 6f 74 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 root} {. dom
0850: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 createDocumentNS
0860: 20 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 "http://foo.bar
0870: 22 20 22 72 6f 6f 74 22 20 64 6f 63 0a 20 20 20 " "root" doc.
0880: 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 set root [$doc
0890: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
08a0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
08b0: 5b 24 72 6f 6f 74 20 6e 61 6d 65 73 70 61 63 65 [$root namespace
08c0: 55 52 49 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 URI]. $doc de
08d0: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
08e0: 75 6c 74 0a 7d 20 22 68 74 74 70 3a 2f 2f 66 6f ult.} "http://fo
08f0: 6f 2e 62 61 72 22 20 20 20 20 0a 0a 74 65 73 74 o.bar" ..test
0900: 20 64 6f 6d 2d 31 2e 39 20 7b 63 72 65 61 74 65 dom-1.9 {create
0910: 44 6f 63 75 6d 65 6e 74 4e 53 20 77 69 74 68 20 DocumentNS with
0920: 72 6f 6f 74 20 6e 61 6d 65 20 6e 6f 74 20 61 20 root name not a
0930: 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 6c 69 NCName} {. li
0940: 73 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 63 st [catch {dom c
0950: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 reateDocumentNS
0960: 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 22 "http://foo.bar"
0970: 20 22 66 6f 6f 20 62 61 72 22 20 64 6f 63 7d 20 "foo bar" doc}
0980: 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 22 31 20 7b msg] $msg.} "1 {
0990: 69 6e 76 61 6c 69 64 20 6c 6f 63 61 6c 20 6e 61 invalid local na
09a0: 6d 65 7d 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 me}"..test dom-1
09b0: 2e 31 30 20 7b 63 72 65 61 74 65 44 6f 63 75 6d .10 {createDocum
09c0: 65 6e 74 4e 53 20 77 69 74 68 20 72 6f 6f 74 20 entNS with root
09d0: 6e 61 6d 65 20 6e 6f 74 20 61 20 4e 43 4e 61 6d name not a NCNam
09e0: 65 7d 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 e} {. list [c
09f0: 61 74 63 68 20 7b 64 6f 6d 20 63 72 65 61 74 65 atch {dom create
0a00: 44 6f 63 75 6d 65 6e 74 4e 53 20 22 68 74 74 70 DocumentNS "http
0a10: 3a 2f 2f 66 6f 6f 2e 62 61 72 22 20 22 61 3a 62 ://foo.bar" "a:b
0a20: 3a 63 22 20 64 6f 63 7d 20 6d 73 67 5d 20 24 6d :c" doc} msg] $m
0a30: 73 67 0a 7d 20 22 31 20 7b 69 6e 76 61 6c 69 64 sg.} "1 {invalid
0a40: 20 6c 6f 63 61 6c 20 6e 61 6d 65 7d 22 0a 0a 74 local name}"..t
0a50: 65 73 74 20 64 6f 6d 2d 31 2e 31 31 20 7b 63 72 est dom-1.11 {cr
0a60: 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 77 eateDocumentNS w
0a70: 69 74 68 20 72 6f 6f 74 20 6e 61 6d 65 20 6e 6f ith root name no
0a80: 74 20 61 20 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 t a NCName} {.
0a90: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 64 list [catch {d
0aa0: 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e om createDocumen
0ab0: 74 4e 53 20 22 68 74 74 70 3a 2f 2f 66 6f 6f 2e tNS "http://foo.
0ac0: 62 61 72 22 20 22 61 20 62 3a 62 22 20 64 6f 63 bar" "a b:b" doc
0ad0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 22 31 } msg] $msg.} "1
0ae0: 20 7b 69 6e 76 61 6c 69 64 20 70 72 65 66 69 78 {invalid prefix
0af0: 20 6e 61 6d 65 7d 22 0a 0a 74 65 73 74 20 64 6f name}"..test do
0b00: 6d 2d 31 2e 31 32 20 7b 63 72 65 61 74 65 44 6f m-1.12 {createDo
0b10: 63 75 6d 65 6e 74 4e 53 20 77 69 74 68 20 72 6f cumentNS with ro
0b20: 6f 74 20 6e 61 6d 65 20 6e 6f 74 20 61 20 4e 43 ot name not a NC
0b30: 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 6c 69 73 74 Name} {. list
0b40: 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 63 72 65 [catch {dom cre
0b50: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 22 68 ateDocumentNS "h
0b60: 74 74 70 3a 2f 2f 66 6f 6f 2e 62 61 72 22 20 22 ttp://foo.bar" "
0b70: 61 3a 61 20 62 22 20 64 6f 63 7d 20 6d 73 67 5d a:a b" doc} msg]
0b80: 20 24 6d 73 67 0a 7d 20 22 31 20 7b 69 6e 76 61 $msg.} "1 {inva
0b90: 6c 69 64 20 6c 6f 63 61 6c 20 6e 61 6d 65 7d 22 lid local name}"
0ba0: 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 33 20 ..test dom-1.13
0bb0: 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e {createDocumentN
0bc0: 53 20 2d 20 63 68 65 63 6b 20 72 6f 6f 74 20 6e S - check root n
0bd0: 61 6d 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 ame} {. set d
0be0: 6f 63 20 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f oc [dom createDo
0bf0: 63 75 6d 65 6e 74 4e 53 20 22 68 74 74 70 3a 2f cumentNS "http:/
0c00: 2f 66 6f 6f 2e 62 61 72 22 20 66 6f 6f 3a 72 6f /foo.bar" foo:ro
0c10: 6f 74 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 ot]. set root
0c20: 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 [$doc documentE
0c30: 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 lement]. set
0c40: 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 6e 6f result [$root no
0c50: 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 6f 63 deName]. $doc
0c60: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 delete. set
0c70: 72 65 73 75 6c 74 0a 7d 20 22 66 6f 6f 3a 72 6f result.} "foo:ro
0c80: 6f 74 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e ot"..test dom-1.
0c90: 31 34 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 14 {createDocume
0ca0: 6e 74 20 2d 20 72 65 6e 61 6d 65 20 74 68 65 20 nt - rename the
0cb0: 64 6f 63 20 63 6d 64 7d 20 7b 0a 20 20 20 20 73 doc cmd} {. s
0cc0: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 63 72 65 61 et doc [dom crea
0cd0: 74 65 44 6f 63 75 6d 65 6e 74 20 72 6f 6f 74 5d teDocument root]
0ce0: 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 63 . if {[info c
0cf0: 6f 6d 6d 61 6e 64 73 20 66 6f 6f 43 6d 64 5d 20 ommands fooCmd]
0d00: 3d 3d 20 22 66 6f 6f 43 6d 64 22 7d 20 7b 0a 20 == "fooCmd"} {.
0d10: 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66 6f rename fo
0d20: 6f 43 6d 64 20 7b 7d 0a 20 20 20 20 7d 0a 20 20 oCmd {}. }.
0d30: 20 20 72 65 6e 61 6d 65 20 24 64 6f 63 20 66 6f rename $doc fo
0d40: 6f 43 6d 64 0a 20 20 20 20 73 65 74 20 72 65 73 oCmd. set res
0d50: 75 6c 74 20 5b 5b 66 6f 6f 43 6d 64 20 64 6f 63 ult [[fooCmd doc
0d60: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 6e 6f umentElement] no
0d70: 64 65 4e 61 6d 65 5d 0a 20 20 20 20 66 6f 6f 43 deName]. fooC
0d80: 6d 64 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 md delete. se
0d90: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 72 6f 6f 74 t result.} {root
0da0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 35 }..test dom-1.15
0db0: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
0dc0: 20 2d 20 72 65 6e 61 6d 65 20 74 68 65 20 64 6f - rename the do
0dd0: 63 20 63 6d 64 7d 20 7b 0a 20 20 20 20 69 66 20 c cmd} {. if
0de0: 7b 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 {[info commands
0df0: 66 6f 6f 43 6d 64 5d 20 3d 3d 20 22 66 6f 6f 43 fooCmd] == "fooC
0e00: 6d 64 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 md"} {. r
0e10: 65 6e 61 6d 65 20 66 6f 6f 43 6d 64 20 7b 7d 0a ename fooCmd {}.
0e20: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 6e 72 }. set nr
0e30: 4f 66 43 6f 6d 6d 61 6e 64 73 20 5b 6c 6c 65 6e OfCommands [llen
0e40: 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e gth [info comman
0e50: 64 73 5d 5d 0a 20 20 20 20 73 65 74 20 64 6f 63 ds]]. set doc
0e60: 20 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 [dom createDocu
0e70: 6d 65 6e 74 20 72 6f 6f 74 5d 0a 20 20 20 20 72 ment root]. r
0e80: 65 6e 61 6d 65 20 24 64 6f 63 20 66 6f 6f 43 6d ename $doc fooCm
0e90: 64 0a 20 20 20 20 66 6f 6f 43 6d 64 20 64 65 6c d. fooCmd del
0ea0: 65 74 65 0a 20 20 20 20 65 78 70 72 20 7b 5b 6c ete. expr {[l
0eb0: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d length [info com
0ec0: 6d 61 6e 64 73 5d 5d 20 3d 3d 20 24 6e 72 4f 66 mands]] == $nrOf
0ed0: 43 6f 6d 6d 61 6e 64 73 7d 0a 7d 20 7b 31 7d 0a Commands}.} {1}.
0ee0: 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 31 36 20 7b .test dom-1.16 {
0ef0: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 createDocumentNS
0f00: 20 2d 20 65 6d 70 74 79 20 6e 61 6d 65 73 70 61 - empty namespa
0f10: 63 65 2c 20 6e 6f 20 70 72 65 66 69 78 7d 20 7b ce, no prefix} {
0f20: 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 44 . dom createD
0f30: 6f 63 75 6d 65 6e 74 4e 53 20 22 22 20 64 6f 63 ocumentNS "" doc
0f40: 20 64 6f 63 0a 20 20 20 20 73 65 74 20 72 65 73 doc. set res
0f50: 75 6c 74 20 5b 24 64 6f 63 20 61 73 58 4d 4c 20 ult [$doc asXML
0f60: 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 -indent none].
0f70: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
0f80: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
0f90: 3c 64 6f 63 2f 3e 7d 0a 0a 74 65 73 74 20 64 6f <doc/>}..test do
0fa0: 6d 2d 31 2e 31 37 20 7b 63 72 65 61 74 65 44 6f m-1.17 {createDo
0fb0: 63 75 6d 65 6e 74 4e 53 20 2d 20 20 6e 61 6d 65 cumentNS - name
0fc0: 73 70 61 63 65 2c 20 6e 6f 20 70 72 65 66 69 78 space, no prefix
0fd0: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 } {. dom crea
0fe0: 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 22 75 72 teDocumentNS "ur
0ff0: 69 22 20 64 6f 63 20 64 6f 63 0a 20 20 20 20 73 i" doc doc. s
1000: 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 et result [$doc
1010: 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f asXML -indent no
1020: 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c ne]. $doc del
1030: 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 ete. set resu
1040: 6c 74 0a 7d 20 7b 3c 64 6f 63 20 78 6d 6c 6e 73 lt.} {<doc xmlns
1050: 3d 22 75 72 69 22 2f 3e 7d 0a 0a 74 65 73 74 20 ="uri"/>}..test
1060: 64 6f 6d 2d 31 2e 31 38 20 7b 63 72 65 61 74 65 dom-1.18 {create
1070: 44 6f 63 75 6d 65 6e 74 4e 53 20 2d 20 20 6e 61 DocumentNS - na
1080: 6d 65 73 70 61 63 65 2c 20 6e 6f 20 70 72 65 66 mespace, no pref
1090: 69 78 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 72 ix} {. dom cr
10a0: 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 22 eateDocumentNS "
10b0: 75 72 69 22 20 64 6f 63 20 64 6f 63 0a 20 20 20 uri" doc doc.
10c0: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f set result [$do
10d0: 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 2d 6e c selectNodes -n
10e0: 61 6d 65 73 70 61 63 65 73 20 7b 6e 73 20 75 72 amespaces {ns ur
10f0: 69 7d 20 63 6f 75 6e 74 28 2f 6e 73 3a 64 6f 63 i} count(/ns:doc
1100: 29 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 )]. $doc dele
1110: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c te. set resul
1120: 74 0a 7d 20 31 0a 0a 74 65 73 74 20 64 6f 6d 2d t.} 1..test dom-
1130: 31 2e 31 39 20 7b 63 72 65 61 74 65 44 6f 63 75 1.19 {createDocu
1140: 6d 65 6e 74 4e 53 20 2d 20 6e 61 6d 65 73 70 61 mentNS - namespa
1150: 63 65 2c 20 70 72 65 66 69 78 7d 20 7b 0a 20 20 ce, prefix} {.
1160: 20 20 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 dom createDocu
1170: 6d 65 6e 74 4e 53 20 22 75 72 69 22 20 6e 31 3a mentNS "uri" n1:
1180: 64 6f 63 20 64 6f 63 0a 20 20 20 20 73 65 74 20 doc doc. set
1190: 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 73 65 6c result [$doc sel
11a0: 65 63 74 4e 6f 64 65 73 20 2d 6e 61 6d 65 73 70 ectNodes -namesp
11b0: 61 63 65 73 20 7b 6e 73 20 75 72 69 7d 20 63 6f aces {ns uri} co
11c0: 75 6e 74 28 2f 6e 73 3a 64 6f 63 29 5d 0a 20 20 unt(/ns:doc)].
11d0: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
11e0: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 31 set result.} 1
11f0: 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 2e 32 30 20 ..test dom-1.20
1200: 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e {createDocumentN
1210: 53 20 2d 20 65 6d 70 74 79 20 6e 61 6d 65 73 70 S - empty namesp
1220: 61 63 65 2c 20 70 72 65 66 69 78 7d 20 7b 0a 20 ace, prefix} {.
1230: 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 63 72 catch {dom cr
1240: 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 53 20 22 eateDocumentNS "
1250: 22 20 6e 31 3a 64 6f 63 20 64 6f 63 7d 20 65 72 " n1:doc doc} er
1260: 72 4d 73 67 0a 20 20 20 20 73 65 74 20 65 72 72 rMsg. set err
1270: 4d 73 67 0a 7d 20 7b 4d 69 73 73 69 6e 67 20 55 Msg.} {Missing U
1280: 52 49 20 69 6e 20 4e 61 6d 65 73 70 61 63 65 20 RI in Namespace
1290: 64 65 63 6c 61 72 61 74 69 6f 6e 7d 0a 0a 74 65 declaration}..te
12a0: 73 74 20 64 6f 6d 2d 32 2e 31 20 7b 44 6f 6e 27 st dom-2.1 {Don'
12b0: 74 20 71 75 61 73 68 20 77 68 69 74 65 20 73 70 t quash white sp
12c0: 61 63 65 20 61 74 20 73 74 61 72 74 20 6f 72 20 ace at start or
12d0: 65 6e 64 20 6f 66 20 6e 6f 6e 20 77 68 69 74 65 end of non white
12e0: 20 73 70 61 63 65 20 63 6f 6e 74 65 6e 74 7d 20 space content}
12f0: 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 {. set doc [d
1300: 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e om parse {<root>
1310: 0a 20 20 20 20 73 6f 6d 65 20 63 6f 6e 74 65 6e . some conten
1320: 74 0a 20 20 20 20 3c 2f 72 6f 6f 74 3e 7d 5d 0a t. </root>}].
1330: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 set root [$d
1340: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
1350: 6e 74 5d 0a 20 20 20 20 24 72 6f 6f 74 20 74 65 nt]. $root te
1360: 78 74 0a 7d 20 7b 0a 20 20 20 20 73 6f 6d 65 20 xt.} {. some
1370: 63 6f 6e 74 65 6e 74 0a 20 20 20 20 7d 0a 0a 74 content. }..t
1380: 65 73 74 20 64 6f 6d 2d 32 2e 32 20 7b 70 61 72 est dom-2.2 {par
1390: 73 65 20 64 6f 63 20 77 69 74 68 20 76 61 72 69 se doc with vari
13a0: 6f 75 73 20 72 65 2d 64 65 63 6c 61 72 61 74 69 ous re-declarati
13b0: 6f 6e 20 6f 66 20 61 20 70 72 65 66 69 78 7d 20 on of a prefix}
13c0: 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 {. set doc [d
13d0: 6f 6d 20 70 61 72 73 65 20 7b 3c 70 3a 61 20 78 om parse {<p:a x
13e0: 6d 6c 6e 73 3a 70 3d 22 75 72 69 31 22 3e 0a 20 mlns:p="uri1">.
13f0: 20 20 20 3c 70 3a 62 20 78 6d 6c 6e 73 3a 70 3d <p:b xmlns:p=
1400: 22 75 72 69 32 22 3e 0a 20 20 20 20 20 20 20 20 "uri2">.
1410: 3c 70 3a 63 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 <p:c xmlns:p="ur
1420: 69 31 22 2f 3e 0a 20 20 20 20 3c 2f 70 3a 62 3e i1"/>. </p:b>
1430: 0a 3c 2f 70 3a 61 3e 7d 5d 0a 20 20 20 20 73 65 .</p:a>}]. se
1440: 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 t root [$doc doc
1450: 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 umentElement].
1460: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 set result [$r
1470: 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 20 20 24 oot asXML]. $
1480: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 doc delete. s
1490: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c 70 3a et result.} {<p:
14a0: 61 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 69 31 22 a xmlns:p="uri1"
14b0: 3e 0a 20 20 20 20 3c 70 3a 62 20 78 6d 6c 6e 73 >. <p:b xmlns
14c0: 3a 70 3d 22 75 72 69 32 22 3e 0a 20 20 20 20 20 :p="uri2">.
14d0: 20 20 20 3c 70 3a 63 20 78 6d 6c 6e 73 3a 70 3d <p:c xmlns:p=
14e0: 22 75 72 69 31 22 2f 3e 0a 20 20 20 20 3c 2f 70 "uri1"/>. </p
14f0: 3a 62 3e 0a 3c 2f 70 3a 61 3e 0a 7d 0a 0a 74 65 :b>.</p:a>.}..te
1500: 73 74 20 64 6f 6d 2d 32 2e 33 20 7b 70 61 72 73 st dom-2.3 {pars
1510: 65 20 64 6f 63 20 77 69 74 68 20 64 65 66 61 75 e doc with defau
1520: 6c 74 20 4e 53 20 64 65 63 6c 61 72 61 74 69 6f lt NS declaratio
1530: 6e 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 n} {. set doc
1540: 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 61 20 [dom parse {<a
1550: 78 6d 6c 6e 73 3a 70 3d 22 75 72 69 22 3e 0a 20 xmlns:p="uri">.
1560: 20 20 20 3c 70 3a 62 2f 3e 0a 20 20 20 20 3c 70 <p:b/>. <p
1570: 3a 62 2f 3e 0a 3c 2f 61 3e 7d 5d 0a 20 20 20 20 :b/>.</a>}].
1580: 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 set root [$doc d
1590: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a ocumentElement].
15a0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
15b0: 24 72 6f 6f 74 20 61 73 58 4d 4c 5d 0a 20 20 20 $root asXML].
15c0: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
15d0: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c set result.} {<
15e0: 61 20 78 6d 6c 6e 73 3a 70 3d 22 75 72 69 22 3e a xmlns:p="uri">
15f0: 0a 20 20 20 20 3c 70 3a 62 2f 3e 0a 20 20 20 20 . <p:b/>.
1600: 3c 70 3a 62 2f 3e 0a 3c 2f 61 3e 0a 7d 0a 0a 74 <p:b/>.</a>.}..t
1610: 65 73 74 20 64 6f 6d 2d 32 2e 34 20 7b 70 61 72 est dom-2.4 {par
1620: 73 65 20 6d 65 74 68 6f 64 3a 20 73 79 6e 74 61 se method: synta
1630: 78 20 63 68 65 63 6b 7d 20 7b 0a 20 20 20 20 73 x check} {. s
1640: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
1650: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b e -keepEmpties {
1660: 3c 72 6f 6f 74 3e 0a 20 20 74 65 78 74 0a 20 20 <root>. text.
1670: 20 20 3c 2f 72 6f 6f 74 3e 7d 5d 0a 20 20 20 20 </root>}].
1680: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 set result [$doc
1690: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
16a0: 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 one]. $doc de
16b0: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
16c0: 75 6c 74 0a 7d 20 7b 3c 72 6f 6f 74 3e 0a 20 20 ult.} {<root>.
16d0: 74 65 78 74 0a 20 20 20 20 3c 2f 72 6f 6f 74 3e text. </root>
16e0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 35 20 }..test dom-2.5
16f0: 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 73 {parse method: s
1700: 79 6e 74 61 78 20 63 68 65 63 6b 7d 20 7b 0a 20 yntax check} {.
1710: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
1720: 70 61 72 73 65 20 2d 75 73 65 46 6f 72 65 69 67 parse -useForeig
1730: 6e 44 54 44 20 30 20 2d 6b 65 65 70 45 6d 70 74 nDTD 0 -keepEmpt
1740: 69 65 73 20 7b 3c 72 6f 6f 74 3e 0a 20 20 74 65 ies {<root>. te
1750: 78 74 0a 20 20 20 20 3c 2f 72 6f 6f 74 3e 7d 5d xt. </root>}]
1760: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
1770: 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 [$doc asXML -ind
1780: 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 ent none]. $d
1790: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
17a0: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 3c 72 6f 6f t result.} {<roo
17b0: 74 3e 0a 20 20 74 65 78 74 0a 20 20 20 20 3c 2f t>. text. </
17c0: 72 6f 6f 74 3e 7d 0a 0a 74 65 73 74 20 64 6f 6d root>}..test dom
17d0: 2d 32 2e 36 20 7b 70 61 72 73 65 20 6d 65 74 68 -2.6 {parse meth
17e0: 6f 64 3a 20 73 79 6e 74 61 78 20 63 68 65 63 6b od: syntax check
17f0: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 } -setup {. s
1800: 65 74 20 78 6d 6c 46 69 6c 65 20 5b 6d 61 6b 65 et xmlFile [make
1810: 46 69 6c 65 20 7b 3c 72 6f 6f 74 3e 20 20 20 20 File {<root>
1820: 3c 2f 72 6f 6f 74 3e 7d 20 64 6f 6d 2e 78 6d 6c </root>} dom.xml
1830: 5d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 ].} -body {.
1840: 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 78 6d set fd [open $xm
1850: 6c 46 69 6c 65 5d 0a 20 20 20 20 73 65 74 20 64 lFile]. set d
1860: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 63 oc [dom parse -c
1870: 68 61 6e 6e 65 6c 20 24 66 64 20 2d 6b 65 65 70 hannel $fd -keep
1880: 45 6d 70 74 69 65 73 5d 0a 20 20 20 20 63 6c 6f Empties]. clo
1890: 73 65 20 24 66 64 0a 20 20 20 20 73 65 74 20 72 se $fd. set r
18a0: 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 oot [$doc docume
18b0: 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 ntElement]. s
18c0: 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 et result [$root
18d0: 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e asXML -indent n
18e0: 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 one]. $doc de
18f0: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 lete. set res
1900: 75 6c 74 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b ult.} -cleanup {
1910: 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 . removeFile
1920: 64 6f 6d 2e 78 6d 6c 0a 7d 20 2d 72 65 73 75 6c dom.xml.} -resul
1930: 74 20 7b 3c 72 6f 6f 74 3e 20 20 20 20 3c 2f 72 t {<root> </r
1940: 6f 6f 74 3e 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d oot>}..test dom-
1950: 32 2e 37 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 2.7 {parse metho
1960: 64 3a 20 73 79 6e 74 61 78 20 63 68 65 63 6b 7d d: syntax check}
1970: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 -setup {. se
1980: 74 20 78 6d 6c 46 69 6c 65 20 5b 6d 61 6b 65 46 t xmlFile [makeF
1990: 69 6c 65 20 7b 3c 72 6f 6f 74 3e 20 20 20 20 3c ile {<root> <
19a0: 2f 72 6f 6f 74 3e 7d 20 64 6f 6d 2e 78 6d 6c 5d /root>} dom.xml]
19b0: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 .} -body {. c
19c0: 61 74 63 68 20 7b 75 6e 73 65 74 20 2d 6b 65 65 atch {unset -kee
19d0: 70 45 6d 70 74 69 65 73 7d 0a 20 20 20 20 73 65 pEmpties}. se
19e0: 74 20 66 64 20 5b 6f 70 65 6e 20 24 78 6d 6c 46 t fd [open $xmlF
19f0: 69 6c 65 5d 0a 20 20 20 20 73 65 74 20 64 6f 63 ile]. set doc
1a00: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 63 68 61 [dom parse -cha
1a10: 6e 6e 65 6c 20 24 66 64 20 2d 6b 65 65 70 45 6d nnel $fd -keepEm
1a20: 70 74 69 65 73 5d 0a 20 20 20 20 63 6c 6f 73 65 pties]. close
1a30: 20 24 66 64 0a 20 20 20 20 24 64 6f 63 20 64 65 $fd. $doc de
1a40: 6c 65 74 65 0a 20 20 20 20 69 6e 66 6f 20 65 78 lete. info ex
1a50: 69 73 74 73 20 2d 6b 65 65 70 45 6d 70 74 69 65 ists -keepEmptie
1a60: 73 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 s.} -cleanup {.
1a70: 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 64 6f removeFile do
1a80: 6d 2e 78 6d 6c 0a 7d 20 2d 72 65 73 75 6c 74 20 m.xml.} -result
1a90: 30 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 38 20 0..test dom-2.8
1aa0: 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 62 {parse method: b
1ab0: 6f 67 75 73 20 6f 70 74 69 6f 6e 7d 20 2d 62 6f ogus option} -bo
1ac0: 64 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 dy {. set res
1ad0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 65 74 20 ult [catch {set
1ae0: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d doc [dom parse -
1af0: 62 6f 67 75 73 4f 70 74 69 6f 6e 20 66 6f 6f 20 bogusOption foo
1b00: 3c 72 6f 6f 74 2f 3e 5d 7d 20 65 72 72 4d 73 67 <root/>]} errMsg
1b10: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
1b20: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 2d sult $errMsg.} -
1b30: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 match regexp -re
1b40: 73 75 6c 74 20 7b 31 20 7b 62 61 64 20 6f 70 74 sult {1 {bad opt
1b50: 69 6f 6e 20 22 2d 62 6f 67 75 73 4f 70 74 69 6f ion "-bogusOptio
1b60: 6e 22 3a 20 6d 75 73 74 20 62 65 20 2e 2a 7d 7d n": must be .*}}
1b70: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 39 20 7b ..test dom-2.9 {
1b80: 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 62 6f parse method: bo
1b90: 67 75 73 20 6f 70 74 69 6f 6e 7d 20 2d 73 65 74 gus option} -set
1ba0: 75 70 20 7b 0a 20 20 20 20 73 65 74 20 78 6d 6c up {. set xml
1bb0: 46 69 6c 65 20 5b 6d 61 6b 65 46 69 6c 65 20 7b File [makeFile {
1bc0: 3c 72 6f 6f 74 3e 20 20 20 20 3c 2f 72 6f 6f 74 <root> </root
1bd0: 3e 7d 20 64 6f 6d 2e 78 6d 6c 5d 0a 7d 20 2d 62 >} dom.xml].} -b
1be0: 6f 64 79 20 7b 0a 20 20 20 20 63 61 74 63 68 20 ody {. catch
1bf0: 7b 75 6e 73 65 74 20 2d 6b 65 65 70 45 6d 70 74 {unset -keepEmpt
1c00: 69 65 73 7d 0a 20 20 20 20 73 65 74 20 66 64 20 ies}. set fd
1c10: 5b 6f 70 65 6e 20 24 78 6d 6c 46 69 6c 65 5d 0a [open $xmlFile].
1c20: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
1c30: 63 61 74 63 68 20 7b 73 65 74 20 64 6f 63 20 5b catch {set doc [
1c40: 64 6f 6d 20 70 61 72 73 65 20 2d 63 68 61 6e 6e dom parse -chann
1c50: 65 6c 20 24 66 64 20 2d 62 6f 67 75 73 4f 70 74 el $fd -bogusOpt
1c60: 69 6f 6e 5d 7d 20 65 72 72 4d 73 67 5d 0a 20 20 ion]} errMsg].
1c70: 20 20 63 6c 6f 73 65 20 24 66 64 0a 20 20 20 20 close $fd.
1c80: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 lappend result $
1c90: 65 72 72 4d 73 67 0a 7d 20 2d 63 6c 65 61 6e 75 errMsg.} -cleanu
1ca0: 70 20 7b 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 p {. removeFi
1cb0: 6c 65 20 64 6f 6d 2e 78 6d 6c 0a 7d 20 2d 6d 61 le dom.xml.} -ma
1cc0: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 tch regexp -resu
1cd0: 6c 74 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f lt {1 {bad optio
1ce0: 6e 20 22 2d 62 6f 67 75 73 4f 70 74 69 6f 6e 22 n "-bogusOption"
1cf0: 3a 20 6d 75 73 74 20 62 65 20 2e 2a 7d 7d 0a 0a : must be .*}}..
1d00: 73 65 74 20 64 6f 6d 5f 64 74 64 20 22 0a 20 20 set dom_dtd ".
1d10: 20 20 3c 21 45 4c 45 4d 45 4e 54 20 72 6f 6f 74 <!ELEMENT root
1d20: 20 45 4d 50 54 59 3e 0a 20 20 20 20 3c 21 41 54 EMPTY>. <!AT
1d30: 54 4c 49 53 54 20 72 6f 6f 74 20 6c 61 6e 67 20 TLIST root lang
1d40: 43 44 41 54 41 20 23 46 49 58 45 44 20 5c 22 65 CDATA #FIXED \"e
1d50: 6e 5c 22 3e 22 0a 0a 70 72 6f 63 20 65 78 74 52 n\">"..proc extR
1d60: 65 66 52 65 73 6f 6c 76 65 72 20 7b 62 61 73 65 efResolver {base
1d70: 20 73 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 systemId public
1d80: 49 64 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c Id} {. global
1d90: 20 64 6f 6d 5f 64 74 64 0a 0a 20 20 20 20 69 66 dom_dtd.. if
1da0: 20 7b 24 70 75 62 6c 69 63 49 64 20 3d 3d 20 22 {$publicId == "
1db0: 44 4f 4d 43 4d 44 54 45 53 54 22 7d 20 7b 0a 20 DOMCMDTEST"} {.
1dc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l
1dd0: 69 73 74 20 73 74 72 69 6e 67 20 24 62 61 73 65 ist string $base
1de0: 20 24 64 6f 6d 5f 64 74 64 5d 0a 20 20 20 20 7d $dom_dtd]. }
1df0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 else {.
1e00: 72 65 74 75 72 6e 20 5b 3a 3a 74 44 4f 4d 3a 3a return [::tDOM::
1e10: 65 78 74 52 65 66 48 61 6e 64 6c 65 72 20 24 62 extRefHandler $b
1e20: 61 73 65 20 24 73 79 73 74 65 6d 49 64 20 24 70 ase $systemId $p
1e30: 75 62 6c 69 63 49 64 5d 0a 20 20 20 20 7d 0a 7d ublicId]. }.}
1e40: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 30 20 ..test dom-2.10
1e50: 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 2d {parse method: -
1e60: 70 61 72 61 6d 65 6e 74 69 74 79 70 61 72 73 69 paramentityparsi
1e70: 6e 67 20 64 65 66 61 75 6c 74 20 69 73 20 27 61 ng default is 'a
1e80: 6c 77 61 79 73 27 7d 20 7b 0a 20 20 20 20 73 65 lways'} {. se
1e90: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
1ea0: 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 -externalentity
1eb0: 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 65 command extRefRe
1ec0: 73 6f 6c 76 65 72 20 7b 0a 20 20 20 20 20 20 20 solver {.
1ed0: 20 3c 21 44 4f 43 54 59 50 45 20 72 6f 6f 74 20 <!DOCTYPE root
1ee0: 50 55 42 4c 49 43 20 22 44 4f 4d 43 4d 44 54 45 PUBLIC "DOMCMDTE
1ef0: 53 54 22 20 22 64 75 6d 6d 79 73 79 73 74 65 6d ST" "dummysystem
1f00: 49 44 22 3e 0a 20 20 20 20 20 20 20 20 3c 72 6f ID">. <ro
1f10: 6f 74 2f 3e 0a 20 20 20 20 7d 5d 0a 20 20 20 20 ot/>. }].
1f20: 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 set root [$doc d
1f30: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a ocumentElement].
1f40: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
1f50: 24 72 6f 6f 74 20 40 6c 61 6e 67 5d 0a 20 20 20 $root @lang].
1f60: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
1f70: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 65 set result.} {e
1f80: 6e 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 n}..test dom-2.1
1f90: 31 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 1 {parse method:
1fa0: 20 65 78 70 6c 69 63 69 74 20 2d 70 61 72 61 6d explicit -param
1fb0: 65 6e 74 69 74 79 70 61 72 73 69 6e 67 20 61 6c entityparsing al
1fc0: 77 61 79 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 ways} {. set
1fd0: 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d doc [dom parse -
1fe0: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
1ff0: 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 65 73 6f mmand extRefReso
2000: 6c 76 65 72 20 5c 0a 20 20 20 20 20 20 20 20 20 lver \.
2010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 70 -p
2020: 61 72 61 6d 65 6e 74 69 74 79 70 61 72 73 69 6e aramentityparsin
2030: 67 20 61 6c 77 61 79 73 20 7b 0a 20 20 20 20 20 g always {.
2040: 20 20 20 3c 21 44 4f 43 54 59 50 45 20 72 6f 6f <!DOCTYPE roo
2050: 74 20 50 55 42 4c 49 43 20 22 44 4f 4d 43 4d 44 t PUBLIC "DOMCMD
2060: 54 45 53 54 22 20 22 64 75 6d 6d 79 73 79 73 74 TEST" "dummysyst
2070: 65 6d 49 44 22 3e 0a 20 20 20 20 20 20 20 20 3c emID">. <
2080: 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d 5d 0a 20 20 root/>. }].
2090: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 set root [$doc
20a0: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
20b0: 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 ]. set result
20c0: 20 5b 24 72 6f 6f 74 20 40 6c 61 6e 67 5d 0a 20 [$root @lang].
20d0: 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 $doc delete.
20e0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
20f0: 7b 65 6e 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 {en}..test dom-2
2100: 2e 31 32 20 7b 70 61 72 73 65 20 6d 65 74 68 6f .12 {parse metho
2110: 64 3a 20 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 d: -paramentityp
2120: 61 72 73 69 6e 67 20 6e 65 76 65 72 7d 20 7b 0a arsing never} {.
2130: 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d set doc [dom
2140: 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 6c parse -external
2150: 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 entitycommand ex
2160: 74 52 65 66 52 65 73 6f 6c 76 65 72 20 5c 0a 20 tRefResolver \.
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2180: 20 20 20 20 20 20 2d 70 61 72 61 6d 65 6e 74 69 -paramenti
2190: 74 79 70 61 72 73 69 6e 67 20 6e 65 76 65 72 20 typarsing never
21a0: 7b 0a 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 {. <!DOCT
21b0: 59 50 45 20 72 6f 6f 74 20 50 55 42 4c 49 43 20 YPE root PUBLIC
21c0: 22 44 4f 4d 43 4d 44 54 45 53 54 22 20 22 64 75 "DOMCMDTEST" "du
21d0: 6d 6d 79 73 79 73 74 65 6d 49 44 22 3e 0a 20 20 mmysystemID">.
21e0: 20 20 20 20 20 20 3c 72 6f 6f 74 2f 3e 0a 20 20 <root/>.
21f0: 20 20 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f }]. set roo
2200: 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 t [$doc document
2210: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 Element]. set
2220: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
2230: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f set result [$roo
2240: 74 20 40 6c 61 6e 67 5d 7d 20 65 72 72 4d 73 67 t @lang]} errMsg
2250: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 ]. $doc delet
2260: 65 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 e. lappend re
2270: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 20 20 20 sult $errMsg.
2280: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 set result.} {1
2290: 20 7b 41 74 74 72 69 62 75 74 65 20 22 6c 61 6e {Attribute "lan
22a0: 67 22 20 6e 6f 74 20 66 6f 75 6e 64 21 7d 7d 0a g" not found!}}.
22b0: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 33 20 7b .test dom-2.13 {
22c0: 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 2d 70 parse method: -p
22d0: 61 72 61 6d 65 6e 74 69 74 79 70 61 72 73 69 6e aramentityparsin
22e0: 67 20 6e 6f 74 73 74 61 6e 64 61 6c 6f 6e 65 7d g notstandalone}
22f0: 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b {. set doc [
2300: 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 dom parse -exter
2310: 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 nalentitycommand
2320: 20 65 78 74 52 65 66 52 65 73 6f 6c 76 65 72 20 extRefResolver
2330: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
2340: 20 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d 65 -parame
2350: 6e 74 69 74 79 70 61 72 73 69 6e 67 20 6e 6f 74 ntityparsing not
2360: 73 74 61 6e 64 61 6c 6f 6e 65 20 7b 0a 20 20 20 standalone {.
2370: 20 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 72 <!DOCTYPE r
2380: 6f 6f 74 20 50 55 42 4c 49 43 20 22 44 4f 4d 43 oot PUBLIC "DOMC
2390: 4d 44 54 45 53 54 22 20 22 64 75 6d 6d 79 73 79 MDTEST" "dummysy
23a0: 73 74 65 6d 49 44 22 3e 0a 20 20 20 20 20 20 20 stemID">.
23b0: 20 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d 5d 0a <root/>. }].
23c0: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 set root [$d
23d0: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
23e0: 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 nt]. set resu
23f0: 6c 74 20 5b 24 72 6f 6f 74 20 40 6c 61 6e 67 5d lt [$root @lang]
2400: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 . $doc delete
2410: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
2420: 7d 20 7b 65 6e 7d 0a 0a 74 65 73 74 20 64 6f 6d } {en}..test dom
2430: 2d 32 2e 31 34 20 7b 70 61 72 73 65 20 6d 65 74 -2.14 {parse met
2440: 68 6f 64 3a 20 2d 70 61 72 61 6d 65 6e 74 69 74 hod: -paramentit
2450: 79 70 61 72 73 69 6e 67 20 6e 6f 74 73 74 61 6e yparsing notstan
2460: 64 61 6c 6f 6e 65 7d 20 7b 0a 20 20 20 20 73 65 dalone} {. se
2470: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
2480: 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 -externalentity
2490: 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 65 command extRefRe
24a0: 73 6f 6c 76 65 72 20 5c 0a 20 20 20 20 20 20 20 solver \.
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24c0: 2d 70 61 72 61 6d 65 6e 74 69 74 79 70 61 72 73 -paramentitypars
24d0: 69 6e 67 20 6e 6f 74 73 74 61 6e 64 61 6c 6f 6e ing notstandalon
24e0: 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 e \.
24f0: 20 20 20 20 20 20 20 20 20 20 20 7b 3c 3f 78 6d {<?xm
2500: 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 l version="1.0"
2510: 73 74 61 6e 64 61 6c 6f 6e 65 3d 22 79 65 73 22 standalone="yes"
2520: 3f 3e 0a 20 20 20 20 20 20 20 20 3c 21 44 4f 43 ?>. <!DOC
2530: 54 59 50 45 20 72 6f 6f 74 20 50 55 42 4c 49 43 TYPE root PUBLIC
2540: 20 22 44 4f 4d 43 4d 44 54 45 53 54 22 20 22 64 "DOMCMDTEST" "d
2550: 75 6d 6d 79 73 79 73 74 65 6d 49 44 22 3e 0a 20 ummysystemID">.
2560: 20 20 20 20 20 20 20 3c 72 6f 6f 74 2f 3e 0a 20 <root/>.
2570: 20 20 20 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f }]. set ro
2580: 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e ot [$doc documen
2590: 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 tElement]. se
25a0: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
25b0: 7b 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f {set result [$ro
25c0: 6f 74 20 40 6c 61 6e 67 5d 7d 20 65 72 72 4d 73 ot @lang]} errMs
25d0: 67 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 g]. $doc dele
25e0: 74 65 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 te. lappend r
25f0: 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 20 20 esult $errMsg.
2600: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
2610: 31 20 7b 41 74 74 72 69 62 75 74 65 20 22 6c 61 1 {Attribute "la
2620: 6e 67 22 20 6e 6f 74 20 66 6f 75 6e 64 21 7d 7d ng" not found!}}
2630: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 35 20 ..test dom-2.15
2640: 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 2d {parse method: -
2650: 70 61 72 61 6d 65 6e 74 69 74 79 70 61 72 73 69 paramentityparsi
2660: 6e 67 20 6e 6f 74 73 74 61 6e 64 61 6c 6f 6e 65 ng notstandalone
2670: 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 } {. set doc
2680: 5b 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 [dom parse -exte
2690: 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e rnalentitycomman
26a0: 64 20 65 78 74 52 65 66 52 65 73 6f 6c 76 65 72 d extRefResolver
26b0: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
26c0: 20 20 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d -param
26d0: 65 6e 74 69 74 79 70 61 72 73 69 6e 67 20 6e 6f entityparsing no
26e0: 74 73 74 61 6e 64 61 6c 6f 6e 65 20 5c 0a 20 20 tstandalone \.
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2700: 20 20 20 20 20 7b 3c 3f 78 6d 6c 20 76 65 72 73 {<?xml vers
2710: 69 6f 6e 3d 22 31 2e 30 22 20 73 74 61 6e 64 61 ion="1.0" standa
2720: 6c 6f 6e 65 3d 22 6e 6f 22 3f 3e 0a 20 20 20 20 lone="no"?>.
2730: 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 72 6f <!DOCTYPE ro
2740: 6f 74 20 50 55 42 4c 49 43 20 22 44 4f 4d 43 4d ot PUBLIC "DOMCM
2750: 44 54 45 53 54 22 20 22 64 75 6d 6d 79 73 79 73 DTEST" "dummysys
2760: 74 65 6d 49 44 22 3e 0a 20 20 20 20 20 20 20 20 temID">.
2770: 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d 5d 0a 20 <root/>. }].
2780: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f set root [$do
2790: 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e c documentElemen
27a0: 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c t]. set resul
27b0: 74 20 5b 24 72 6f 6f 74 20 40 6c 61 6e 67 5d 0a t [$root @lang].
27c0: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
27d0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
27e0: 20 7b 65 6e 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d {en}..test dom-
27f0: 32 2e 31 36 20 7b 70 61 72 73 65 20 6d 65 74 68 2.16 {parse meth
2800: 6f 64 3a 20 77 72 6f 6e 67 20 76 61 6c 75 65 20 od: wrong value
2810: 61 72 67 20 66 6f 72 20 2d 70 61 72 61 6d 65 6e arg for -paramen
2820: 74 69 74 79 70 61 72 73 69 6e 67 7d 20 7b 0a 20 tityparsing} {.
2830: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
2840: 61 74 63 68 20 7b 73 65 74 20 64 6f 63 20 5b 64 atch {set doc [d
2850: 6f 6d 20 70 61 72 73 65 20 2d 70 61 72 61 6d 65 om parse -parame
2860: 6e 74 69 74 79 70 61 72 73 69 6e 67 20 77 72 6f ntityparsing wro
2870: 6e 67 20 7b 0a 20 20 20 20 20 20 20 20 3c 72 6f ng {. <ro
2880: 6f 74 2f 3e 7d 5d 7d 20 65 72 72 4d 73 67 5d 0a ot/>}]} errMsg].
2890: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
28a0: 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b 31 20 lt $errMsg.} {1
28b0: 7b 62 61 64 20 76 61 6c 75 65 20 22 77 72 6f 6e {bad value "wron
28c0: 67 22 3a 20 6d 75 73 74 20 62 65 20 61 6c 77 61 g": must be alwa
28d0: 79 73 2c 20 6e 65 76 65 72 2c 20 6f 72 20 6e 6f ys, never, or no
28e0: 74 73 74 61 6e 64 61 6c 6f 6e 65 7d 7d 0a 0a 23 tstandalone}}..#
28f0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 The following i
2900: 73 20 73 79 6e 74 61 63 74 69 63 61 6c 6c 79 20 s syntactically
2910: 77 72 6f 6e 67 2e 20 49 74 27 73 20 75 73 65 64 wrong. It's used
2920: 2c 20 74 6f 20 74 65 73 74 20 74 68 65 0a 23 20 , to test the.#
2930: 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 20 error reporting
2940: 69 6e 20 65 78 74 65 72 6e 61 6c 20 44 54 44 73 in external DTDs
2950: 0a 73 65 74 20 64 6f 6d 5f 64 74 64 20 22 3c 21 .set dom_dtd "<!
2960: 41 54 54 4c 49 53 54 20 72 6f 6f 74 20 6c 61 6e ATTLIST root lan
2970: 67 20 23 46 49 58 45 44 20 5c 22 65 6e 5c 22 3e g #FIXED \"en\">
2980: 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 31 37 "..test dom-2.17
2990: 20 7b 70 61 72 73 65 20 6d 65 74 68 6f 64 3a 20 {parse method:
29a0: 74 65 73 74 20 72 65 70 6f 72 74 69 6e 67 20 6f test reporting o
29b0: 66 20 65 72 72 6f 72 20 69 6e 20 65 78 74 65 72 f error in exter
29c0: 6e 61 6c 20 73 75 62 73 65 74 7d 20 7b 0a 20 20 nal subset} {.
29d0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 set result [ca
29e0: 74 63 68 20 7b 73 65 74 20 64 6f 63 20 5b 64 6f tch {set doc [do
29f0: 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 m parse \.
2a00: 20 20 20 20 20 20 2d 65 78 74 65 72 6e 61 6c 65 -externale
2a10: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 74 ntitycommand ext
2a20: 52 65 66 52 65 73 6f 6c 76 65 72 20 7b 0a 20 20 RefResolver {.
2a30: 20 20 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 <!DOCTYPE
2a40: 72 6f 6f 74 20 50 55 42 4c 49 43 20 22 44 4f 4d root PUBLIC "DOM
2a50: 43 4d 44 54 45 53 54 22 20 22 64 75 6d 6d 79 73 CMDTEST" "dummys
2a60: 79 73 74 65 6d 49 44 22 3e 0a 20 20 20 20 20 20 ystemID">.
2a70: 20 20 3c 72 6f 6f 74 2f 3e 0a 20 20 20 20 7d 5d <root/>. }]
2a80: 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 } errMsg]. la
2a90: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65 72 ppend result $er
2aa0: 72 4d 73 67 0a 7d 20 7b 31 20 7b 65 72 72 6f 72 rMsg.} {1 {error
2ab0: 20 22 73 79 6e 74 61 78 20 65 72 72 6f 72 22 20 "syntax error"
2ac0: 69 6e 20 65 6e 74 69 74 79 20 22 64 75 6d 6d 79 in entity "dummy
2ad0: 73 79 73 74 65 6d 49 44 22 20 61 74 20 6c 69 6e systemID" at lin
2ae0: 65 20 31 20 63 68 61 72 61 63 74 65 72 20 32 30 e 1 character 20
2af0: 0a 22 3c 21 41 54 54 4c 49 53 54 20 72 6f 6f 74 ."<!ATTLIST root
2b00: 20 6c 61 6e 67 20 23 20 3c 2d 2d 45 72 72 6f 72 lang # <--Error
2b10: 2d 2d 20 46 49 58 45 44 20 22 65 6e 22 3e 22 2c -- FIXED "en">",
2b20: 20 72 65 66 65 72 65 6e 63 65 64 20 61 74 20 6c referenced at l
2b30: 69 6e 65 20 32 20 63 68 61 72 61 63 74 65 72 20 ine 2 character
2b40: 35 38 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 58}}..test dom-2
2b50: 2e 31 38 20 7b 70 61 72 73 65 20 64 6f 63 75 6d .18 {parse docum
2b60: 65 6e 74 20 77 69 74 68 20 6e 6f 64 65 73 20 62 ent with nodes b
2b70: 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 efore and after
2b80: 74 68 65 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d the documentElem
2b90: 65 6e 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 ent} {. set d
2ba0: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c oc [dom parse {<
2bb0: 21 2d 2d 20 46 69 72 73 74 20 63 6f 6d 6d 65 6e !-- First commen
2bc0: 74 20 2d 2d 3e 0a 3c 64 6f 63 3e 0a 20 20 3c 21 t -->.<doc>. <!
2bd0: 2d 2d 20 46 72 6f 6e 74 20 63 6f 6d 6d 65 6e 74 -- Front comment
2be0: 20 2d 2d 3e 0a 20 20 3c 69 6e 6e 65 72 2f 3e 0a -->. <inner/>.
2bf0: 20 20 3c 21 2d 2d 20 42 61 63 6b 20 63 6f 6d 6d <!-- Back comm
2c00: 65 6e 74 20 2d 2d 3e 0a 3c 2f 64 6f 63 3e 0a 3c ent -->.</doc>.<
2c10: 21 2d 2d 20 4c 61 73 74 20 63 6f 6d 6d 65 6e 74 !-- Last comment
2c20: 20 2d 2d 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 -->}]. set r
2c30: 65 73 75 6c 74 20 5b 24 64 6f 63 20 61 73 58 4d esult [$doc asXM
2c40: 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a L -indent none].
2c50: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
2c60: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
2c70: 20 7b 3c 21 2d 2d 20 46 69 72 73 74 20 63 6f 6d {<!-- First com
2c80: 6d 65 6e 74 20 2d 2d 3e 3c 64 6f 63 3e 3c 21 2d ment --><doc><!-
2c90: 2d 20 46 72 6f 6e 74 20 63 6f 6d 6d 65 6e 74 20 - Front comment
2ca0: 2d 2d 3e 3c 69 6e 6e 65 72 2f 3e 3c 21 2d 2d 20 --><inner/><!--
2cb0: 42 61 63 6b 20 63 6f 6d 6d 65 6e 74 20 2d 2d 3e Back comment -->
2cc0: 3c 2f 64 6f 63 3e 3c 21 2d 2d 20 4c 61 73 74 20 </doc><!-- Last
2cd0: 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 7d 0a 0a 74 65 comment -->}..te
2ce0: 73 74 20 64 6f 6d 2d 32 2e 31 39 20 7b 70 61 72 st dom-2.19 {par
2cf0: 73 65 20 64 6f 63 75 6d 65 6e 74 20 2d 20 72 65 se document - re
2d00: 6e 61 6d 65 20 64 6f 63 43 6d 64 7d 20 7b 0a 20 name docCmd} {.
2d10: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
2d20: 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e 66 6f 6f parse {<root>foo
2d30: 3c 63 68 69 6c 64 2f 3e 3c 2f 72 6f 6f 74 3e 7d <child/></root>}
2d40: 5d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 ]. if {[info
2d50: 63 6f 6d 6d 61 6e 64 73 20 66 6f 6f 43 6d 64 5d commands fooCmd]
2d60: 20 3d 3d 20 22 66 6f 6f 43 6d 64 22 7d 20 7b 0a == "fooCmd"} {.
2d70: 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66 rename f
2d80: 6f 6f 43 6d 64 20 7b 7d 0a 20 20 20 20 7d 0a 20 ooCmd {}. }.
2d90: 20 20 20 72 65 6e 61 6d 65 20 24 64 6f 63 20 66 rename $doc f
2da0: 6f 6f 43 6d 64 0a 20 20 20 20 73 65 74 20 72 65 ooCmd. set re
2db0: 73 75 6c 74 20 5b 66 6f 6f 43 6d 64 20 61 73 58 sult [fooCmd asX
2dc0: 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d ML -indent none]
2dd0: 0a 20 20 20 20 66 6f 6f 43 6d 64 20 64 65 6c 65 . fooCmd dele
2de0: 74 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c te. set resul
2df0: 74 0a 7d 20 7b 3c 72 6f 6f 74 3e 66 6f 6f 3c 63 t.} {<root>foo<c
2e00: 68 69 6c 64 2f 3e 3c 2f 72 6f 6f 74 3e 7d 0a 0a hild/></root>}..
2e10: 74 65 73 74 20 64 6f 6d 2d 32 2e 32 30 20 7b 70 test dom-2.20 {p
2e20: 61 72 73 65 20 2d 20 64 6f 63 20 77 69 74 68 20 arse - doc with
2e30: 69 6e 74 65 72 6e 61 6c 20 73 75 62 73 65 74 20 internal subset
2e40: 70 61 72 73 65 64 20 77 69 74 68 20 2d 6b 65 65 parsed with -kee
2e50: 70 45 6d 70 74 69 65 73 7d 20 7b 0a 20 20 20 20 pEmpties} {.
2e60: 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 set doc [dom par
2e70: 73 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 se -keepEmpties
2e80: 7b 0a 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 {. <!DOCT
2e90: 59 50 45 20 72 6f 6f 74 20 5b 0a 20 20 20 20 20 YPE root [.
2ea0: 20 20 20 20 20 20 3c 21 45 4c 45 4d 45 4e 54 20 <!ELEMENT
2eb0: 72 6f 6f 74 20 45 4d 50 54 59 3e 0a 20 20 20 20 root EMPTY>.
2ec0: 20 20 20 20 20 20 20 3c 21 2d 2d 20 43 6f 6d 6d <!-- Comm
2ed0: 65 6e 74 20 69 6e 73 69 64 65 20 74 68 65 20 44 ent inside the D
2ee0: 54 44 20 2d 2d 3e 0a 20 20 20 20 20 20 20 20 20 TD -->.
2ef0: 20 20 3c 3f 61 50 49 20 49 6e 73 69 64 65 20 74 <?aPI Inside t
2f00: 68 65 20 44 54 44 3f 3e 0a 20 20 20 20 20 20 20 he DTD?>.
2f10: 20 20 20 20 3c 21 41 54 54 4c 49 53 54 20 72 6f <!ATTLIST ro
2f20: 6f 74 20 6c 61 6e 67 20 43 44 41 54 41 20 23 46 ot lang CDATA #F
2f30: 49 58 45 44 20 22 65 6e 22 3e 0a 20 20 20 20 20 IXED "en">.
2f40: 20 20 20 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 ]>.
2f50: 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 24 64 <root/>}]. $d
2f60: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
2f70: 6e 74 20 72 6f 6f 74 0a 20 20 20 20 73 65 74 20 nt root. set
2f80: 72 65 73 75 6c 74 20 22 22 0a 20 20 20 20 66 6f result "". fo
2f90: 72 65 61 63 68 20 6e 6f 64 65 20 5b 24 72 6f 6f reach node [$roo
2fa0: 74 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 2f 6e t selectNodes /n
2fb0: 6f 64 65 28 29 5d 20 7b 0a 20 20 20 20 20 20 20 ode()] {.
2fc0: 20 73 77 69 74 63 68 20 5b 24 6e 6f 64 65 20 6e switch [$node n
2fd0: 6f 64 65 54 79 70 65 5d 20 7b 0a 20 20 20 20 20 odeType] {.
2fe0: 20 20 20 20 20 20 20 54 45 58 54 5f 4e 4f 44 45 TEXT_NODE
2ff0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
3000: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul
3010: 74 20 54 45 58 54 5f 4e 4f 44 45 0a 20 20 20 20 t TEXT_NODE.
3020: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp
3030: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 74 72 69 end result [stri
3040: 6e 67 20 6c 65 6e 67 74 68 20 5b 24 6e 6f 64 65 ng length [$node
3050: 20 76 61 6c 75 65 5d 5d 0a 20 20 20 20 20 20 20 value]].
3060: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
3070: 20 20 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 20 COMMENT_NODE
3080: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
3090: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
30a0: 20 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 0a 20 20 COMMENT_NODE.
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
30c0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 74 ppend result [st
30d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 24 6e 6f ring length [$no
30e0: 64 65 20 76 61 6c 75 65 5d 5d 0a 20 20 20 20 20 de value]].
30f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
3100: 20 20 20 20 20 50 52 4f 43 45 53 53 49 4e 47 5f PROCESSING_
3110: 49 4e 53 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 INSTRUCTION_NODE
3120: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
3130: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul
3140: 74 20 50 52 4f 43 45 53 53 49 4e 47 5f 49 4e 53 t PROCESSING_INS
3150: 54 52 55 43 54 49 4f 4e 5f 4e 4f 44 45 0a 20 20 TRUCTION_NODE.
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
3170: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 6e ppend result [$n
3180: 6f 64 65 20 74 61 72 67 65 74 5d 0a 20 20 20 20 ode target].
3190: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp
31a0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 6e 6f 64 end result [$nod
31b0: 65 20 64 61 74 61 5d 0a 20 20 20 20 20 20 20 20 e data].
31c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
31d0: 20 20 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 20 7b ELEMENT_NODE {
31e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31f0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
3200: 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 0a 20 20 20 ELEMENT_NODE.
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 lap
3220: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 6e 6f pend result [$no
3230: 64 65 20 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 de nodeName].
3240: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
3250: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b default {
3260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3270: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
3280: 5b 24 6e 6f 64 65 20 6e 6f 64 65 54 79 70 65 5d [$node nodeType]
3290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 . }.
32a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 }. }.
32b0: 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 $doc delete.
32c0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
32d0: 7b 45 4c 45 4d 45 4e 54 5f 4e 4f 44 45 20 72 6f {ELEMENT_NODE ro
32e0: 6f 74 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e ot}..test dom-2.
32f0: 32 31 20 7b 70 61 72 73 65 20 2d 20 65 6d 70 74 21 {parse - empt
3300: 79 20 43 44 41 54 41 20 73 65 63 74 69 6f 6e 7d y CDATA section}
3310: 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b {. set doc [
3320: 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 3e dom parse {<doc>
3330: 3c 21 5b 43 44 41 54 41 5b 5d 5d 3e 3c 2f 64 6f <![CDATA[]]></do
3340: 63 3e 7d 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f c>}]. set roo
3350: 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 t [$doc document
3360: 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 73 65 74 Element]. set
3370: 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 68 result [$root h
3380: 61 73 43 68 69 6c 64 4e 6f 64 65 73 5d 0a 20 20 asChildNodes].
3390: 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 $doc delete.
33a0: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
33b0: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 32 0}..test dom-2.2
33c0: 32 20 7b 70 61 72 73 65 20 2d 20 65 6d 70 74 79 2 {parse - empty
33d0: 20 63 6f 6d 6d 65 6e 74 20 73 65 63 74 69 6f 6e comment section
33e0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 } {. set doc
33f0: 5b 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 [dom parse {<doc
3400: 3e 3c 21 2d 2d 2d 2d 3e 3c 2f 64 6f 63 3e 7d 5d ><!----></doc>}]
3410: 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 . set root [$
3420: 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d doc documentElem
3430: 65 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 ent]. set res
3440: 75 6c 74 20 5b 24 72 6f 6f 74 20 68 61 73 43 68 ult [$root hasCh
3450: 69 6c 64 4e 6f 64 65 73 5d 0a 20 20 20 20 6c 61 ildNodes]. la
3460: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 5b 24 ppend result [[$
3470: 72 6f 6f 74 20 66 69 72 73 74 43 68 69 6c 64 5d root firstChild]
3480: 20 6e 6f 64 65 56 61 6c 75 65 5d 0a 20 20 20 20 nodeValue].
3490: 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 $doc delete.
34a0: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 20 set result.} {1
34b0: 7b 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e {}}..test dom-2.
34c0: 32 33 20 7b 70 61 72 73 65 20 2d 20 70 69 20 77 23 {parse - pi w
34d0: 69 74 68 6f 75 74 20 70 69 76 61 6c 75 65 7d 20 ithout pivalue}
34e0: 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 {. set doc [d
34f0: 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 3e 3c om parse {<doc><
3500: 3f 70 3f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 ?p?></doc>}].
3510: 20 73 65 74 20 70 69 20 5b 5b 24 64 6f 63 20 64 set pi [[$doc d
3520: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 ocumentElement]
3530: 66 69 72 73 74 43 68 69 6c 64 5d 0a 20 20 20 20 firstChild].
3540: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 set result [list
3550: 20 5b 24 70 69 20 6e 6f 64 65 4e 61 6d 65 5d 20 [$pi nodeName]
3560: 5b 24 70 69 20 6e 6f 64 65 56 61 6c 75 65 5d 20 [$pi nodeValue]
3570: 5b 24 70 69 20 74 61 72 67 65 74 5d 20 5b 24 70 [$pi target] [$p
3580: 69 20 64 61 74 61 5d 5d 0a 20 20 20 20 24 64 6f i data]]. $do
3590: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 c delete. set
35a0: 20 72 65 73 75 6c 74 0a 7d 20 7b 70 20 7b 7d 20 result.} {p {}
35b0: 70 20 7b 7d 7d 0a 0a 70 72 6f 63 20 32 2e 32 34 p {}}..proc 2.24
35c0: 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 65 72 {args} {. er
35d0: 72 6f 72 20 22 32 2e 32 34 20 65 78 74 65 72 6e ror "2.24 extern
35e0: 61 6c 20 65 6e 74 69 74 69 79 20 72 65 73 6f 6c al entitiy resol
35f0: 76 65 72 20 73 63 72 69 70 74 20 65 72 72 6f 72 ver script error
3600: 22 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e ".}..test dom-2.
3610: 32 34 20 7b 70 61 72 73 65 20 2d 20 73 63 72 69 24 {parse - scri
3620: 70 74 20 65 72 72 6f 72 20 69 6e 20 2d 65 78 74 pt error in -ext
3630: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 ernalentitycomma
3640: 6e 64 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 nd} {. set re
3650: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 sult [catch {.
3660: 20 20 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 dom parse
3670: 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 -externalentityc
3680: 6f 6d 6d 61 6e 64 20 32 2e 32 34 20 7b 0a 20 20 ommand 2.24 {.
3690: 20 20 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 <!DOCT
36a0: 59 50 45 20 72 6f 6f 74 20 53 59 53 54 45 4d 20 YPE root SYSTEM
36b0: 22 64 61 74 61 2f 64 6f 6d 43 6d 64 32 2e 64 74 "data/domCmd2.dt
36c0: 64 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 d">.
36d0: 3c 72 6f 6f 74 2f 3e 7d 7d 20 65 72 72 4d 73 67 <root/>}} errMsg
36e0: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
36f0: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b sult $errMsg.} {
3700: 31 20 7b 32 2e 32 34 20 65 78 74 65 72 6e 61 6c 1 {2.24 external
3710: 20 65 6e 74 69 74 69 79 20 72 65 73 6f 6c 76 65 entitiy resolve
3720: 72 20 73 63 72 69 70 74 20 65 72 72 6f 72 7d 7d r script error}}
3730: 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 32 35 20 ..test dom-2.25
3740: 7b 57 68 69 74 65 20 73 70 61 63 65 20 6f 75 74 {White space out
3750: 73 69 64 65 20 74 68 65 20 64 6f 63 75 6d 65 6e side the documen
3760: 74 20 65 6c 65 6d 65 6e 74 20 69 73 20 6d 61 72 t element is mar
3770: 6b 75 70 20 61 6e 64 20 69 67 6e 6f 72 65 64 2c kup and ignored,
3780: 20 65 76 65 6e 20 77 69 74 68 20 2d 6b 65 65 70 even with -keep
3790: 45 6d 70 74 69 65 73 7d 20 7b 0a 20 20 20 20 73 Empties} {. s
37a0: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
37b0: 65 20 2d 6b 65 65 70 45 6d 70 74 69 65 73 20 7b e -keepEmpties {
37c0: 0a 3c 21 2d 2d 20 46 69 72 73 74 20 63 6f 6d 6d .<!-- First comm
37d0: 65 6e 74 20 2d 2d 3e 0a 3c 64 6f 63 3e 0a 20 20 ent -->.<doc>.
37e0: 3c 21 2d 2d 20 46 72 6f 6e 74 20 63 6f 6d 6d 65 <!-- Front comme
37f0: 6e 74 20 2d 2d 3e 0a 20 20 3c 69 6e 6e 65 72 2f nt -->. <inner/
3800: 3e 0a 20 20 3c 21 2d 2d 20 42 61 63 6b 20 63 6f >. <!-- Back co
3810: 6d 6d 65 6e 74 20 2d 2d 3e 0a 3c 2f 64 6f 63 3e mment -->.</doc>
3820: 0a 3c 21 2d 2d 20 4c 61 73 74 20 63 6f 6d 6d 65 .<!-- Last comme
3830: 6e 74 20 2d 2d 3e 7d 5d 0a 20 20 20 20 73 65 74 nt -->}]. set
3840: 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 20 61 73 result [$doc as
3850: 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 XML -indent none
3860: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 ]. $doc delet
3870: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
3880: 0a 7d 20 7b 3c 21 2d 2d 20 46 69 72 73 74 20 63 .} {<!-- First c
3890: 6f 6d 6d 65 6e 74 20 2d 2d 3e 3c 64 6f 63 3e 0a omment --><doc>.
38a0: 20 20 3c 21 2d 2d 20 46 72 6f 6e 74 20 63 6f 6d <!-- Front com
38b0: 6d 65 6e 74 20 2d 2d 3e 0a 20 20 3c 69 6e 6e 65 ment -->. <inne
38c0: 72 2f 3e 0a 20 20 3c 21 2d 2d 20 42 61 63 6b 20 r/>. <!-- Back
38d0: 63 6f 6d 6d 65 6e 74 20 2d 2d 3e 0a 3c 2f 64 6f comment -->.</do
38e0: 63 3e 3c 21 2d 2d 20 4c 61 73 74 20 63 6f 6d 6d c><!-- Last comm
38f0: 65 6e 74 20 2d 2d 3e 7d 0a 0a 74 65 73 74 20 64 ent -->}..test d
3900: 6f 6d 2d 32 2e 32 36 20 7b 4e 6f 74 20 77 65 6c om-2.26 {Not wel
3910: 6c 2d 66 6f 72 6d 65 64 20 69 6e 70 75 74 7d 20 l-formed input}
3920: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d {. catch {dom
3930: 20 70 61 72 73 65 20 7b 3c 78 73 6c 3a 74 72 61 parse {<xsl:tra
3940: 6e 73 66 6f 72 6d 20 20 20 20 20 20 20 0a 20 20 nsform .
3950: 20 20 20 20 20 20 78 6d 6c 6e 73 3a 78 73 6c 3d xmlns:xsl=
3960: 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f "http://www.w3.o
3970: 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 6e rg/1999/XSL/Tran
3980: 73 66 6f 72 6d 20 20 20 20 20 20 20 20 0a 20 20 sform .
3990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
39a0: 20 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e <http://www.w3.
39b0: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 org/1999/XSL/Tra
39c0: 6e 73 66 6f 72 6d 3e 20 22 2f 3e 7d 7d 0a 7d 20 nsform> "/>}}.}
39d0: 31 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 32 37 1..test dom-2.27
39e0: 20 7b 70 61 72 73 65 20 2d 69 67 6e 6f 72 65 78 {parse -ignorex
39f0: 6d 6c 6e 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 mlns} {. set
3a00: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0a 20 20 result [list].
3a10: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
3a20: 61 72 73 65 20 7b 3c 64 6f 63 20 78 6d 6c 6e 73 arse {<doc xmlns
3a30: 3d 22 66 6f 6f 2e 62 61 72 22 3e 3c 63 68 69 6c ="foo.bar"><chil
3a40: 64 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 d/></doc>}].
3a50: 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 set root [$doc d
3a60: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a ocumentElement].
3a70: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
3a80: 6c 74 20 5b 24 72 6f 6f 74 20 6c 6f 63 61 6c 4e lt [$root localN
3a90: 61 6d 65 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 ame]. lappend
3aa0: 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 6e result [$root n
3ab0: 61 6d 65 73 70 61 63 65 55 52 49 5d 0a 20 20 20 amespaceURI].
3ac0: 20 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f set child [$roo
3ad0: 74 20 66 69 72 73 74 43 68 69 6c 64 5d 0a 20 20 t firstChild].
3ae0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
3af0: 20 5b 24 63 68 69 6c 64 20 6c 6f 63 61 6c 4e 61 [$child localNa
3b00: 6d 65 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 me]. lappend
3b10: 72 65 73 75 6c 74 20 5b 24 63 68 69 6c 64 20 6e result [$child n
3b20: 61 6d 65 73 70 61 63 65 55 52 49 5d 0a 20 20 20 amespaceURI].
3b30: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
3b40: 5b 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f 64 65 [$doc selectNode
3b50: 73 20 63 6f 75 6e 74 28 2f 64 6f 63 2f 63 68 69 s count(/doc/chi
3b60: 6c 64 29 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 ld)]. $doc de
3b70: 6c 65 74 65 0a 20 20 20 20 73 65 74 20 64 6f 63 lete. set doc
3b80: 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 69 67 6e [dom parse -ign
3b90: 6f 72 65 78 6d 6c 6e 73 20 7b 3c 64 6f 63 20 78 orexmlns {<doc x
3ba0: 6d 6c 6e 73 3d 22 66 6f 6f 2e 62 61 72 22 3e 3c mlns="foo.bar"><
3bb0: 63 68 69 6c 64 2f 3e 3c 2f 64 6f 63 3e 7d 5d 0a child/></doc>}].
3bc0: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 set root [$d
3bd0: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
3be0: 6e 74 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 nt]. lappend
3bf0: 72 65 73 75 6c 74 20 5b 24 72 6f 6f 74 20 6e 6f result [$root no
3c00: 64 65 4e 61 6d 65 5d 0a 20 20 20 20 6c 61 70 70 deName]. lapp
3c10: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f end result [$roo
3c20: 74 20 6e 61 6d 65 73 70 61 63 65 55 52 49 5d 0a t namespaceURI].
3c30: 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 5b 24 set child [$
3c40: 72 6f 6f 74 20 66 69 72 73 74 43 68 69 6c 64 5d root firstChild]
3c50: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
3c60: 75 6c 74 20 5b 24 63 68 69 6c 64 20 6e 6f 64 65 ult [$child node
3c70: 4e 61 6d 65 5d 0a 20 20 20 20 6c 61 70 70 65 6e Name]. lappen
3c80: 64 20 72 65 73 75 6c 74 20 5b 24 63 68 69 6c 64 d result [$child
3c90: 20 6e 61 6d 65 73 70 61 63 65 55 52 49 5d 0a 20 namespaceURI].
3ca0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul
3cb0: 74 20 5b 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f t [$doc selectNo
3cc0: 64 65 73 20 63 6f 75 6e 74 28 2f 64 6f 63 2f 63 des count(/doc/c
3cd0: 68 69 6c 64 29 5d 0a 20 20 20 20 24 64 6f 63 20 hild)]. $doc
3ce0: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 delete. set r
3cf0: 65 73 75 6c 74 0a 7d 20 7b 64 6f 63 20 66 6f 6f esult.} {doc foo
3d00: 2e 62 61 72 20 63 68 69 6c 64 20 66 6f 6f 2e 62 .bar child foo.b
3d10: 61 72 20 30 20 64 6f 63 20 7b 7d 20 63 68 69 6c ar 0 doc {} chil
3d20: 64 20 7b 7d 20 31 7d 0a 0a 74 65 73 74 20 64 6f d {} 1}..test do
3d30: 6d 2d 32 2e 32 38 20 7b 70 61 72 73 65 20 64 6f m-2.28 {parse do
3d40: 63 75 6d 65 6e 74 20 77 69 74 68 20 75 6e 64 65 cument with unde
3d50: 63 6c 61 72 65 64 20 78 6d 6c 20 70 72 65 66 69 clared xml prefi
3d60: 78 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b x} {. catch {
3d70: 64 6f 6d 20 70 61 72 73 65 20 7b 3c 64 6f 63 3e dom parse {<doc>
3d80: 3c 66 6f 6f 3a 65 2f 3e 3c 2f 64 6f 63 3e 7d 7d <foo:e/></doc>}}
3d90: 20 65 72 72 4d 73 67 0a 20 20 20 20 73 74 72 69 errMsg. stri
3da0: 6e 67 20 72 61 6e 67 65 20 24 65 72 72 4d 73 67 ng range $errMsg
3db0: 20 30 20 33 30 0a 7d 20 7b 4e 61 6d 65 73 70 61 0 30.} {Namespa
3dc0: 63 65 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 ce prefix is not
3dd0: 20 64 65 66 69 6e 65 64 7d 0a 0a 23 20 54 68 69 defined}..# Thi
3de0: 73 20 69 73 20 61 6e 20 65 78 70 61 74 20 62 75 s is an expat bu
3df0: 67 2e 20 49 66 20 58 4d 4c 5f 53 74 6f 70 50 61 g. If XML_StopPa
3e00: 72 73 65 72 20 69 73 20 63 61 6c 6c 65 64 20 69 rser is called i
3e10: 6e 20 74 68 65 0a 23 20 65 6c 65 6d 65 6e 74 73 n the.# elements
3e20: 74 61 72 74 68 61 6e 64 6c 65 72 20 66 75 6e 63 tarthandler func
3e30: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 64 6f 63 tion for the doc
3e40: 75 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 61 6e ument element an
3e50: 64 20 74 68 65 72 65 0a 23 20 69 73 6e 27 74 20 d there.# isn't
3e60: 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 69 6e anything else in
3e70: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 20 74 68 the document th
3e80: 61 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 an this document
3e90: 20 65 6c 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 23 element, then.#
3ea0: 20 74 68 65 20 58 4d 4c 5f 50 61 72 73 65 28 29 the XML_Parse()
3eb0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 64 6f 65 return code doe
3ec0: 73 6e 27 74 20 72 65 66 6c 65 63 74 73 20 74 68 sn't reflects th
3ed0: 69 73 2e 20 54 68 69 73 20 69 73 20 61 6e 20 65 is. This is an e
3ee0: 64 67 65 0a 23 20 63 61 73 65 2c 20 73 65 65 20 dge.# case, see
3ef0: 74 68 65 20 6e 65 78 74 20 74 65 73 74 20 62 65 the next test be
3f00: 6c 6f 77 2e 0a 74 65 73 74 20 64 6f 6d 2d 32 2e low..test dom-2.
3f10: 32 39 20 7b 70 61 72 73 65 20 6e 6f 74 20 77 65 29 {parse not we
3f20: 6c 6c 2d 66 6f 72 6d 65 64 20 64 6f 63 75 6d 65 ll-formed docume
3f30: 6e 74 20 77 69 74 68 20 75 6e 64 65 63 6c 61 72 nt with undeclar
3f40: 65 64 20 78 6d 6c 20 70 72 65 66 69 78 7d 20 7b ed xml prefix} {
3f50: 6b 6e 6f 77 6e 42 75 67 7d 20 7b 0a 20 20 20 20 knownBug} {.
3f60: 63 61 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 65 catch {dom parse
3f70: 20 7b 3c 66 6f 6f 3a 65 2f 3e 7d 7d 20 65 72 72 {<foo:e/>}} err
3f80: 4d 73 67 0a 20 20 20 20 73 74 72 69 6e 67 20 72 Msg. string r
3f90: 61 6e 67 65 20 24 65 72 72 4d 73 67 20 30 20 33 ange $errMsg 0 3
3fa0: 30 0a 7d 20 7b 4e 61 6d 65 73 70 61 63 65 20 70 0.} {Namespace p
3fb0: 72 65 66 69 78 20 69 73 20 6e 6f 74 20 64 65 66 refix is not def
3fc0: 69 6e 65 64 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d ined}..test dom-
3fd0: 32 2e 33 30 20 7b 70 61 72 73 65 20 64 6f 63 75 2.30 {parse docu
3fe0: 6d 65 6e 74 20 77 69 74 68 20 75 6e 64 65 63 6c ment with undecl
3ff0: 61 72 65 64 20 78 6d 6c 20 70 72 65 66 69 78 7d ared xml prefix}
4000: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f {. catch {do
4010: 6d 20 70 61 72 73 65 20 7b 3c 66 6f 6f 3a 65 3e m parse {<foo:e>
4020: 3c 61 2f 3e 3c 2f 66 6f 6f 3a 65 3e 7d 7d 20 65 <a/></foo:e>}} e
4030: 72 72 4d 73 67 0a 20 20 20 20 73 74 72 69 6e 67 rrMsg. string
4040: 20 72 61 6e 67 65 20 24 65 72 72 4d 73 67 20 30 range $errMsg 0
4050: 20 33 30 0a 7d 20 7b 4e 61 6d 65 73 70 61 63 65 30.} {Namespace
4060: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 64 prefix is not d
4070: 65 66 69 6e 65 64 7d 0a 0a 70 72 6f 63 20 64 6f efined}..proc do
4080: 6d 2d 32 2e 33 31 20 7b 62 61 73 65 20 73 79 73 m-2.31 {base sys
4090: 74 65 6d 49 64 20 70 75 62 6c 69 63 49 64 7d 20 temId publicId}
40a0: 7b 0a 20 20 20 20 73 77 69 74 63 68 20 24 70 75 {. switch $pu
40b0: 62 6c 69 63 49 64 20 7b 0a 20 20 20 20 20 20 20 blicId {.
40c0: 20 22 65 31 22 20 7b 0a 20 20 20 20 20 20 20 20 "e1" {.
40d0: 20 20 20 20 23 20 4e 6f 74 20 77 65 6c 6c 2d 66 # Not well-f
40e0: 6f 72 6d 65 64 0a 20 20 20 20 20 20 20 20 20 20 ormed.
40f0: 20 20 73 65 74 20 64 61 74 61 20 22 3c 66 6f 6f set data "<foo
4100: 3a 65 2f 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a :e/>". }.
4110: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default
4120: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 {. er
4130: 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 ror "unknown pub
4140: 6c 69 63 20 49 44 22 0a 20 20 20 20 20 20 20 20 lic ID".
4150: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 }. }. retu
4160: 72 6e 20 5b 6c 69 73 74 20 22 73 74 72 69 6e 67 rn [list "string
4170: 22 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a 7d " $base $data].}
4180: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 31 20 7b .test dom-2.31 {
4190: 70 61 72 73 65 20 64 6f 63 75 6d 65 6e 74 20 77 parse document w
41a0: 69 74 68 20 75 6e 64 65 63 6c 61 72 65 64 20 78 ith undeclared x
41b0: 6d 6c 20 70 72 65 66 69 78 7d 20 7b 0a 20 20 20 ml prefix} {.
41c0: 20 63 61 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 catch {dom pars
41d0: 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 e -externalentit
41e0: 79 63 6f 6d 6d 61 6e 64 20 64 6f 6d 2d 32 2e 33 ycommand dom-2.3
41f0: 31 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 1 \.
4200: 20 20 20 20 7b 3c 21 44 4f 43 54 59 50 45 20 64 {<!DOCTYPE d
4210: 6f 63 20 5b 3c 21 45 4e 54 49 54 59 20 65 31 20 oc [<!ENTITY e1
4220: 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 31 2e PUBLIC "e1" "e1.
4230: 78 6d 6c 22 3e 5d 3e 0a 20 20 20 20 20 20 20 20 xml">]>.
4240: 20 20 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 <doc
4250: 3e 26 65 31 3b 3c 2f 64 6f 63 3e 7d 0a 20 20 20 >&e1;</doc>}.
4260: 20 7d 20 65 72 72 4d 73 67 0a 20 20 20 20 73 74 } errMsg. st
4270: 72 69 6e 67 20 72 61 6e 67 65 20 24 65 72 72 4d ring range $errM
4280: 73 67 20 30 20 33 30 0a 7d 20 7b 4e 61 6d 65 73 sg 0 30.} {Names
4290: 70 61 63 65 20 70 72 65 66 69 78 20 69 73 20 6e pace prefix is n
42a0: 6f 74 20 64 65 66 69 6e 65 64 7d 0a 20 20 20 20 ot defined}.
42b0: 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 32 20 7b .test dom-2.32 {
42c0: 70 61 72 73 65 20 64 6f 63 75 6d 65 6e 74 20 77 parse document w
42d0: 69 74 68 20 75 6e 64 65 63 6c 61 72 65 64 20 78 ith undeclared x
42e0: 6d 6c 20 70 72 65 66 69 78 20 61 6e 64 20 2d 69 ml prefix and -i
42f0: 67 6e 6f 72 65 78 6d 6c 6e 73 7d 20 7b 0a 20 20 gnorexmlns} {.
4300: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
4310: 61 72 73 65 20 2d 69 67 6e 6f 72 65 78 6d 6c 6e arse -ignorexmln
4320: 73 20 7b 3c 66 6f 6f 3a 65 3e 3c 61 2f 3e 3c 2f s {<foo:e><a/></
4330: 66 6f 6f 3a 65 3e 7d 5d 0a 20 20 20 20 73 65 74 foo:e>}]. set
4340: 20 72 65 73 75 6c 74 20 5b 5b 24 64 6f 63 20 64 result [[$doc d
4350: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 ocumentElement]
4360: 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 nodeName]. $d
4370: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
4380: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 66 6f 6f 3a t result.} {foo:
4390: 65 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 2e 33 e}..test dom-2.3
43a0: 33 20 7b 65 6e 64 20 6f 66 20 6f 70 74 69 6f 6e 3 {end of option
43b0: 73 20 6f 70 74 69 6f 6e 7d 20 7b 0a 20 20 20 20 s option} {.
43c0: 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 set doc [dom par
43d0: 73 65 20 2d 6a 73 6f 6e 20 2d 2d 20 2d 30 2e 31 se -json -- -0.1
43e0: 32 33 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 23]. set resu
43f0: 6c 74 20 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d lt [$doc asXML -
4400: 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 indent none].
4410: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
4420: 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 2d 30 set result.} -0
4430: 2e 31 32 33 0a 0a 74 65 73 74 20 64 6f 6d 2d 32 .123..test dom-2
4440: 2e 33 34 20 7b 58 4d 4c 20 70 72 65 66 69 78 20 .34 {XML prefix
4450: 64 65 63 6c 61 72 61 74 69 6f 6e 20 77 69 74 68 declaration with
4460: 20 65 6d 70 74 79 20 6e 61 6d 65 73 70 61 63 65 empty namespace
4470: 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 } {. catch {d
4480: 6f 6d 20 70 61 72 73 65 20 7b 3c 66 6f 6f 3a 64 om parse {<foo:d
4490: 6f 63 20 78 6d 6c 6e 73 3a 66 6f 6f 3d 22 22 3e oc xmlns:foo="">
44a0: 3c 65 31 2f 3e 3c 2f 66 6f 6f 3a 64 6f 63 3e 7d <e1/></foo:doc>}
44b0: 7d 20 65 72 72 4d 73 67 0a 20 20 20 20 73 65 74 } errMsg. set
44c0: 20 65 72 72 4d 73 67 0a 7d 20 7b 4d 69 73 73 69 errMsg.} {Missi
44d0: 6e 67 20 55 52 49 20 69 6e 20 4e 61 6d 65 73 70 ng URI in Namesp
44e0: 61 63 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2c ace declaration,
44f0: 20 72 65 66 65 72 65 6e 63 65 64 20 61 74 20 6c referenced at l
4500: 69 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 ine 1 character
4510: 32 32 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 22}..test dom-3.
4520: 31 20 7b 69 73 4e 61 6d 65 7d 20 7b 0a 20 20 20 1 {isName} {.
4530: 20 64 6f 6d 20 69 73 4e 61 6d 65 20 22 3a 66 6f dom isName ":fo
4540: 6f 22 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 64 o".} {1}..test d
4550: 6f 6d 2d 33 2e 32 20 7b 69 73 4e 61 6d 65 7d 20 om-3.2 {isName}
4560: 7b 0a 20 20 20 20 64 6f 6d 20 69 73 4e 61 6d 65 {. dom isName
4570: 20 22 5f 66 6f 6f 22 0a 7d 20 7b 31 7d 0a 0a 74 "_foo".} {1}..t
4580: 65 73 74 20 64 6f 6d 2d 33 2e 33 20 7b 69 73 4e est dom-3.3 {isN
4590: 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 ame} {. dom i
45a0: 73 4e 61 6d 65 20 22 66 6f 6f 3a 62 61 72 3a 62 sName "foo:bar:b
45b0: 61 7a 22 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 az".} {1}..test
45c0: 64 6f 6d 2d 33 2e 34 20 7b 69 73 4e 61 6d 65 7d dom-3.4 {isName}
45d0: 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 4e 61 6d {. dom isNam
45e0: 65 20 22 2d 66 6f 6f 22 0a 7d 20 7b 30 7d 0a 0a e "-foo".} {0}..
45f0: 74 65 73 74 20 64 6f 6d 2d 33 2e 35 20 7b 69 73 test dom-3.5 {is
4600: 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 Name} {. dom
4610: 69 73 4e 61 6d 65 20 22 2e 66 6f 6f 22 0a 7d 20 isName ".foo".}
4620: 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e {0}..test dom-3.
4630: 36 20 7b 69 73 4e 61 6d 65 7d 20 7b 0a 20 20 20 6 {isName} {.
4640: 20 63 61 74 63 68 20 7b 64 6f 6d 20 69 73 4e 61 catch {dom isNa
4650: 6d 65 7d 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 me}.} {1}..test
4660: 64 6f 6d 2d 33 2e 37 20 7b 69 73 4e 61 6d 65 7d dom-3.7 {isName}
4670: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f {. catch {do
4680: 6d 20 69 73 4e 61 6d 65 20 66 6f 6f 20 62 61 72 m isName foo bar
4690: 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 68 65 20 66 }.} {1}..# The f
46a0: 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 61 63 74 ollowing charact
46b0: 65 72 20 63 6c 61 73 73 65 73 20 61 72 65 20 6f er classes are o
46c0: 75 74 20 6f 66 20 58 4d 4c 20 31 2e 30 20 53 65 ut of XML 1.0 Se
46d0: 63 6f 6e 64 20 45 64 69 74 69 6f 6e 20 72 65 63 cond Edition rec
46e0: 2c 0a 23 20 41 70 70 65 6e 64 69 78 20 42 20 28 ,.# Appendix B (
46f0: 77 68 69 63 68 20 69 73 20 66 6f 6c 6c 6f 77 69 which is followi
4700: 6e 67 20 74 68 65 20 55 6e 69 63 6f 64 65 20 73 ng the Unicode s
4710: 74 61 6e 64 61 72 64 29 2e 0a 0a 73 65 74 20 42 tandard)...set B
4720: 61 73 65 43 68 61 72 20 7b 0a 20 20 20 20 7b 30 aseChar {. {0
4730: 78 30 30 34 31 20 30 78 30 30 35 41 7d 20 7b 30 x0041 0x005A} {0
4740: 78 30 30 36 31 20 30 78 30 30 37 41 7d 20 7b 30 x0061 0x007A} {0
4750: 78 30 30 43 30 20 30 78 30 30 44 36 7d 0a 20 20 x00C0 0x00D6}.
4760: 20 20 7b 30 78 30 30 44 38 20 30 78 30 30 46 36 {0x00D8 0x00F6
4770: 7d 20 7b 30 78 30 30 46 38 20 30 78 30 30 46 46 } {0x00F8 0x00FF
4780: 7d 20 7b 30 78 30 31 30 30 20 30 78 30 31 33 31 } {0x0100 0x0131
4790: 7d 20 7b 30 78 30 31 33 34 20 30 78 30 31 33 45 } {0x0134 0x013E
47a0: 7d 0a 20 20 20 20 7b 30 78 30 31 34 31 20 30 78 }. {0x0141 0x
47b0: 30 31 34 38 7d 20 7b 30 78 30 31 34 41 20 30 78 0148} {0x014A 0x
47c0: 30 31 37 45 7d 20 7b 30 78 30 31 38 30 20 30 78 017E} {0x0180 0x
47d0: 30 31 43 33 7d 0a 20 20 20 20 7b 30 78 30 31 43 01C3}. {0x01C
47e0: 44 20 30 78 30 31 46 30 7d 20 7b 30 78 30 31 46 D 0x01F0} {0x01F
47f0: 34 20 30 78 30 31 46 35 7d 20 7b 30 78 30 31 46 4 0x01F5} {0x01F
4800: 41 20 30 78 30 32 31 37 7d 20 7b 30 78 30 32 35 A 0x0217} {0x025
4810: 30 20 30 78 30 32 41 38 7d 0a 20 20 20 20 7b 30 0 0x02A8}. {0
4820: 78 30 32 42 42 20 30 78 30 32 43 31 7d 20 30 78 x02BB 0x02C1} 0x
4830: 30 33 38 36 20 7b 30 78 30 33 38 38 20 30 78 30 0386 {0x0388 0x0
4840: 33 38 41 7d 20 30 78 30 33 38 43 0a 20 20 20 20 38A} 0x038C.
4850: 7b 30 78 30 33 38 45 20 30 78 30 33 41 31 7d 20 {0x038E 0x03A1}
4860: 7b 30 78 30 33 41 33 20 30 78 30 33 43 45 7d 20 {0x03A3 0x03CE}
4870: 7b 30 78 30 33 44 30 20 30 78 30 33 44 36 7d 20 {0x03D0 0x03D6}
4880: 30 78 30 33 44 41 20 30 78 30 33 44 43 0a 20 20 0x03DA 0x03DC.
4890: 20 20 30 78 30 33 44 45 20 30 78 30 33 45 30 20 0x03DE 0x03E0
48a0: 7b 30 78 30 33 45 32 20 30 78 30 33 46 33 7d 20 {0x03E2 0x03F3}
48b0: 7b 30 78 30 34 30 31 20 30 78 30 34 30 43 7d 0a {0x0401 0x040C}.
48c0: 20 20 20 20 7b 30 78 30 34 30 45 20 30 78 30 34 {0x040E 0x04
48d0: 34 46 7d 20 7b 30 78 30 34 35 31 20 30 78 30 34 4F} {0x0451 0x04
48e0: 35 43 7d 20 7b 30 78 30 34 35 45 20 30 78 30 34 5C} {0x045E 0x04
48f0: 38 31 7d 20 7b 30 78 30 34 39 30 20 30 78 30 34 81} {0x0490 0x04
4900: 43 34 7d 0a 20 20 20 20 7b 30 78 30 34 43 37 20 C4}. {0x04C7
4910: 30 78 30 34 43 38 7d 20 7b 30 78 30 34 43 42 20 0x04C8} {0x04CB
4920: 30 78 30 34 43 43 7d 20 7b 30 78 30 34 44 30 20 0x04CC} {0x04D0
4930: 30 78 30 34 45 42 7d 0a 20 20 20 20 7b 30 78 30 0x04EB}. {0x0
4940: 34 45 45 20 30 78 30 34 46 35 7d 20 7b 30 78 30 4EE 0x04F5} {0x0
4950: 34 46 38 20 30 78 30 34 46 39 7d 20 7b 30 78 30 4F8 0x04F9} {0x0
4960: 35 33 31 20 30 78 30 35 35 36 7d 20 30 78 30 35 531 0x0556} 0x05
4970: 35 39 0a 20 20 20 20 7b 30 78 30 35 36 31 20 30 59. {0x0561 0
4980: 78 30 35 38 36 7d 20 7b 30 78 30 35 44 30 20 30 x0586} {0x05D0 0
4990: 78 30 35 45 41 7d 20 7b 30 78 30 35 46 30 20 30 x05EA} {0x05F0 0
49a0: 78 30 35 46 32 7d 20 7b 30 78 30 36 32 31 20 30 x05F2} {0x0621 0
49b0: 78 30 36 33 41 7d 0a 20 20 20 20 7b 30 78 30 36 x063A}. {0x06
49c0: 34 31 20 30 78 30 36 34 41 7d 20 7b 30 78 30 36 41 0x064A} {0x06
49d0: 37 31 20 30 78 30 36 42 37 7d 20 7b 30 78 30 36 71 0x06B7} {0x06
49e0: 42 41 20 30 78 30 36 42 45 7d 0a 20 20 20 20 7b BA 0x06BE}. {
49f0: 30 78 30 36 43 30 20 30 78 30 36 43 45 7d 20 7b 0x06C0 0x06CE} {
4a00: 30 78 30 36 44 30 20 30 78 30 36 44 33 7d 20 30 0x06D0 0x06D3} 0
4a10: 78 30 36 44 35 20 7b 30 78 30 36 45 35 20 30 78 x06D5 {0x06E5 0x
4a20: 30 36 45 36 7d 0a 20 20 20 20 7b 30 78 30 39 30 06E6}. {0x090
4a30: 35 20 30 78 30 39 33 39 7d 20 30 78 30 39 33 44 5 0x0939} 0x093D
4a40: 20 7b 30 78 30 39 35 38 20 30 78 30 39 36 31 7d {0x0958 0x0961}
4a50: 20 7b 30 78 30 39 38 35 20 30 78 30 39 38 43 7d {0x0985 0x098C}
4a60: 0a 20 20 20 20 7b 30 78 30 39 38 46 20 30 78 30 . {0x098F 0x0
4a70: 39 39 30 7d 20 7b 30 78 30 39 39 33 20 30 78 30 990} {0x0993 0x0
4a80: 39 41 38 7d 20 7b 30 78 30 39 41 41 20 30 78 30 9A8} {0x09AA 0x0
4a90: 39 42 30 7d 20 30 78 30 39 42 32 0a 20 20 20 20 9B0} 0x09B2.
4aa0: 7b 30 78 30 39 42 36 20 30 78 30 39 42 39 7d 20 {0x09B6 0x09B9}
4ab0: 7b 30 78 30 39 44 43 20 30 78 30 39 44 44 7d 20 {0x09DC 0x09DD}
4ac0: 7b 30 78 30 39 44 46 20 30 78 30 39 45 31 7d 20 {0x09DF 0x09E1}
4ad0: 7b 30 78 30 39 46 30 20 30 78 30 39 46 31 7d 0a {0x09F0 0x09F1}.
4ae0: 20 20 20 20 7b 30 78 30 41 30 35 20 30 78 30 41 {0x0A05 0x0A
4af0: 30 41 7d 20 7b 30 78 30 41 30 46 20 30 78 30 41 0A} {0x0A0F 0x0A
4b00: 31 30 7d 20 7b 30 78 30 41 31 33 20 30 78 30 41 10} {0x0A13 0x0A
4b10: 32 38 7d 0a 20 20 20 20 7b 30 78 30 41 32 41 20 28}. {0x0A2A
4b20: 30 78 30 41 33 30 7d 20 7b 30 78 30 41 33 32 20 0x0A30} {0x0A32
4b30: 30 78 30 41 33 33 7d 20 7b 30 78 30 41 33 35 20 0x0A33} {0x0A35
4b40: 30 78 30 41 33 36 7d 20 7b 30 78 30 41 33 38 20 0x0A36} {0x0A38
4b50: 30 78 30 41 33 39 7d 0a 20 20 20 20 7b 30 78 30 0x0A39}. {0x0
4b60: 41 35 39 20 30 78 30 41 35 43 7d 20 30 78 30 41 A59 0x0A5C} 0x0A
4b70: 35 45 20 7b 30 78 30 41 37 32 20 30 78 30 41 37 5E {0x0A72 0x0A7
4b80: 34 7d 20 7b 30 78 30 41 38 35 20 30 78 30 41 38 4} {0x0A85 0x0A8
4b90: 42 7d 0a 20 20 20 20 30 78 30 41 38 44 20 7b 30 B}. 0x0A8D {0
4ba0: 78 30 41 38 46 20 30 78 30 41 39 31 7d 20 7b 30 x0A8F 0x0A91} {0
4bb0: 78 30 41 39 33 20 30 78 30 41 41 38 7d 20 7b 30 x0A93 0x0AA8} {0
4bc0: 78 30 41 41 41 20 30 78 30 41 42 30 7d 0a 20 20 x0AAA 0x0AB0}.
4bd0: 20 20 7b 30 78 30 41 42 32 20 30 78 30 41 42 33 {0x0AB2 0x0AB3
4be0: 7d 20 7b 30 78 30 41 42 35 20 30 78 30 41 42 39 } {0x0AB5 0x0AB9
4bf0: 7d 20 30 78 30 41 42 44 20 30 78 30 41 45 30 20 } 0x0ABD 0x0AE0
4c00: 7b 30 78 30 42 30 35 20 30 78 30 42 30 43 7d 0a {0x0B05 0x0B0C}.
4c10: 20 20 20 20 7b 30 78 30 42 30 46 20 30 78 30 42 {0x0B0F 0x0B
4c20: 31 30 7d 20 7b 30 78 30 42 31 33 20 30 78 30 42 10} {0x0B13 0x0B
4c30: 32 38 7d 20 7b 30 78 30 42 32 41 20 30 78 30 42 28} {0x0B2A 0x0B
4c40: 33 30 7d 0a 20 20 20 20 7b 30 78 30 42 33 32 20 30}. {0x0B32
4c50: 30 78 30 42 33 33 7d 20 7b 30 78 30 42 33 36 20 0x0B33} {0x0B36
4c60: 30 78 30 42 33 39 7d 20 30 78 30 42 33 44 20 7b 0x0B39} 0x0B3D {
4c70: 30 78 30 42 35 43 20 30 78 30 42 35 44 7d 0a 20 0x0B5C 0x0B5D}.
4c80: 20 20 20 7b 30 78 30 42 35 46 20 30 78 30 42 36 {0x0B5F 0x0B6
4c90: 31 7d 20 7b 30 78 30 42 38 35 20 30 78 30 42 38 1} {0x0B85 0x0B8
4ca0: 41 7d 20 7b 30 78 30 42 38 45 20 30 78 30 42 39 A} {0x0B8E 0x0B9
4cb0: 30 7d 20 7b 30 78 30 42 39 32 20 30 78 30 42 39 0} {0x0B92 0x0B9
4cc0: 35 7d 0a 20 20 20 20 7b 30 78 30 42 39 39 20 30 5}. {0x0B99 0
4cd0: 78 30 42 39 41 7d 20 30 78 30 42 39 43 20 7b 30 x0B9A} 0x0B9C {0
4ce0: 78 30 42 39 45 20 30 78 30 42 39 46 7d 20 7b 30 x0B9E 0x0B9F} {0
4cf0: 78 30 42 41 33 20 30 78 30 42 41 34 7d 0a 20 20 x0BA3 0x0BA4}.
4d00: 20 20 7b 30 78 30 42 41 38 20 30 78 30 42 41 41 {0x0BA8 0x0BAA
4d10: 7d 20 7b 30 78 30 42 41 45 20 30 78 30 42 42 35 } {0x0BAE 0x0BB5
4d20: 7d 20 7b 30 78 30 42 42 37 20 30 78 30 42 42 39 } {0x0BB7 0x0BB9
4d30: 7d 20 7b 30 78 30 43 30 35 20 30 78 30 43 30 43 } {0x0C05 0x0C0C
4d40: 7d 0a 20 20 20 20 7b 30 78 30 43 30 45 20 30 78 }. {0x0C0E 0x
4d50: 30 43 31 30 7d 20 7b 30 78 30 43 31 32 20 30 78 0C10} {0x0C12 0x
4d60: 30 43 32 38 7d 20 7b 30 78 30 43 32 41 20 30 78 0C28} {0x0C2A 0x
4d70: 30 43 33 33 7d 0a 20 20 20 20 7b 30 78 30 43 33 0C33}. {0x0C3
4d80: 35 20 30 78 30 43 33 39 7d 20 7b 30 78 30 43 36 5 0x0C39} {0x0C6
4d90: 30 20 30 78 30 43 36 31 7d 20 7b 30 78 30 43 38 0 0x0C61} {0x0C8
4da0: 35 20 30 78 30 43 38 43 7d 20 7b 30 78 30 43 38 5 0x0C8C} {0x0C8
4db0: 45 20 30 78 30 43 39 30 7d 0a 20 20 20 20 7b 30 E 0x0C90}. {0
4dc0: 78 30 43 39 32 20 30 78 30 43 41 38 7d 20 7b 30 x0C92 0x0CA8} {0
4dd0: 78 30 43 41 41 20 30 78 30 43 42 33 7d 20 7b 30 x0CAA 0x0CB3} {0
4de0: 78 30 43 42 35 20 30 78 30 43 42 39 7d 20 30 78 x0CB5 0x0CB9} 0x
4df0: 30 43 44 45 0a 20 20 20 20 7b 30 78 30 43 45 30 0CDE. {0x0CE0
4e00: 20 30 78 30 43 45 31 7d 20 7b 30 78 30 44 30 35 0x0CE1} {0x0D05
4e10: 20 30 78 30 44 30 43 7d 20 7b 30 78 30 44 30 45 0x0D0C} {0x0D0E
4e20: 20 30 78 30 44 31 30 7d 20 7b 30 78 30 44 31 32 0x0D10} {0x0D12
4e30: 20 30 78 30 44 32 38 7d 0a 20 20 20 20 7b 30 78 0x0D28}. {0x
4e40: 30 44 32 41 20 30 78 30 44 33 39 7d 20 7b 30 78 0D2A 0x0D39} {0x
4e50: 30 44 36 30 20 30 78 30 44 36 31 7d 20 7b 30 78 0D60 0x0D61} {0x
4e60: 30 45 30 31 20 30 78 30 45 32 45 7d 20 30 78 30 0E01 0x0E2E} 0x0
4e70: 45 33 30 0a 20 20 20 20 7b 30 78 30 45 33 32 20 E30. {0x0E32
4e80: 30 78 30 45 33 33 7d 20 7b 30 78 30 45 34 30 20 0x0E33} {0x0E40
4e90: 30 78 30 45 34 35 7d 20 7b 30 78 30 45 38 31 20 0x0E45} {0x0E81
4ea0: 30 78 30 45 38 32 7d 20 30 78 30 45 38 34 0a 20 0x0E82} 0x0E84.
4eb0: 20 20 20 7b 30 78 30 45 38 37 20 30 78 30 45 38 {0x0E87 0x0E8
4ec0: 38 7d 20 30 78 30 45 38 41 20 30 78 30 45 38 44 8} 0x0E8A 0x0E8D
4ed0: 20 7b 30 78 30 45 39 34 20 30 78 30 45 39 37 7d {0x0E94 0x0E97}
4ee0: 20 7b 30 78 30 45 39 39 20 30 78 30 45 39 46 7d {0x0E99 0x0E9F}
4ef0: 0a 20 20 20 20 7b 30 78 30 45 41 31 20 30 78 30 . {0x0EA1 0x0
4f00: 45 41 33 7d 20 30 78 30 45 41 35 20 30 78 30 45 EA3} 0x0EA5 0x0E
4f10: 41 37 20 7b 30 78 30 45 41 41 20 30 78 30 45 41 A7 {0x0EAA 0x0EA
4f20: 42 7d 0a 20 20 20 20 7b 30 78 30 45 41 44 20 30 B}. {0x0EAD 0
4f30: 78 30 45 41 45 7d 20 30 78 30 45 42 30 20 7b 30 x0EAE} 0x0EB0 {0
4f40: 78 30 45 42 32 20 30 78 30 45 42 33 7d 20 30 78 x0EB2 0x0EB3} 0x
4f50: 30 45 42 44 20 7b 30 78 30 45 43 30 20 30 78 30 0EBD {0x0EC0 0x0
4f60: 45 43 34 7d 0a 20 20 20 20 7b 30 78 30 46 34 30 EC4}. {0x0F40
4f70: 20 30 78 30 46 34 37 7d 20 7b 30 78 30 46 34 39 0x0F47} {0x0F49
4f80: 20 30 78 30 46 36 39 7d 20 7b 30 78 31 30 41 30 0x0F69} {0x10A0
4f90: 20 30 78 31 30 43 35 7d 0a 20 20 20 20 7b 30 78 0x10C5}. {0x
4fa0: 31 30 44 30 20 30 78 31 30 46 36 7d 20 30 78 31 10D0 0x10F6} 0x1
4fb0: 31 30 30 20 7b 30 78 31 31 30 32 20 30 78 31 31 100 {0x1102 0x11
4fc0: 30 33 7d 20 7b 30 78 31 31 30 35 20 30 78 31 31 03} {0x1105 0x11
4fd0: 30 37 7d 20 30 78 31 31 30 39 0a 20 20 20 20 7b 07} 0x1109. {
4fe0: 30 78 31 31 30 42 20 30 78 31 31 30 43 7d 20 7b 0x110B 0x110C} {
4ff0: 30 78 31 31 30 45 20 30 78 31 31 31 32 7d 20 30 0x110E 0x1112} 0
5000: 78 31 31 33 43 20 30 78 31 31 33 45 20 30 78 31 x113C 0x113E 0x1
5010: 31 34 30 0a 20 20 20 20 30 78 31 31 34 43 20 30 140. 0x114C 0
5020: 78 31 31 34 45 20 30 78 31 31 35 30 20 7b 30 78 x114E 0x1150 {0x
5030: 31 31 35 34 20 30 78 31 31 35 35 7d 20 30 78 31 1154 0x1155} 0x1
5040: 31 35 39 20 7b 30 78 31 31 35 46 20 30 78 31 31 159 {0x115F 0x11
5050: 36 31 7d 0a 20 20 20 20 30 78 31 31 36 33 20 30 61}. 0x1163 0
5060: 78 31 31 36 35 20 30 78 31 31 36 37 20 30 78 31 x1165 0x1167 0x1
5070: 31 36 39 20 7b 30 78 31 31 36 44 20 30 78 31 31 169 {0x116D 0x11
5080: 36 45 7d 0a 20 20 20 20 7b 30 78 31 31 37 32 20 6E}. {0x1172
5090: 30 78 31 31 37 33 7d 20 30 78 31 31 37 35 20 30 0x1173} 0x1175 0
50a0: 78 31 31 39 45 20 30 78 31 31 41 38 20 30 78 31 x119E 0x11A8 0x1
50b0: 31 41 42 20 7b 30 78 31 31 41 45 20 30 78 31 31 1AB {0x11AE 0x11
50c0: 41 46 7d 0a 20 20 20 20 7b 30 78 31 31 42 37 20 AF}. {0x11B7
50d0: 30 78 31 31 42 38 7d 20 30 78 31 31 42 41 20 7b 0x11B8} 0x11BA {
50e0: 30 78 31 31 42 43 20 30 78 31 31 43 32 7d 20 30 0x11BC 0x11C2} 0
50f0: 78 31 31 45 42 20 30 78 31 31 46 30 0a 20 20 20 x11EB 0x11F0.
5100: 20 30 78 31 31 46 39 20 7b 30 78 31 45 30 30 20 0x11F9 {0x1E00
5110: 30 78 31 45 39 42 7d 20 7b 30 78 31 45 41 30 20 0x1E9B} {0x1EA0
5120: 30 78 31 45 46 39 7d 20 7b 30 78 31 46 30 30 20 0x1EF9} {0x1F00
5130: 30 78 31 46 31 35 7d 0a 20 20 20 20 7b 30 78 31 0x1F15}. {0x1
5140: 46 31 38 20 30 78 31 46 31 44 7d 20 7b 30 78 31 F18 0x1F1D} {0x1
5150: 46 32 30 20 30 78 31 46 34 35 7d 20 7b 30 78 31 F20 0x1F45} {0x1
5160: 46 34 38 20 30 78 31 46 34 44 7d 20 7b 30 78 31 F48 0x1F4D} {0x1
5170: 46 35 30 20 30 78 31 46 35 37 7d 0a 20 20 20 20 F50 0x1F57}.
5180: 30 78 31 46 35 39 20 30 78 31 46 35 42 20 30 78 0x1F59 0x1F5B 0x
5190: 31 46 35 44 20 7b 30 78 31 46 35 46 20 30 78 31 1F5D {0x1F5F 0x1
51a0: 46 37 44 7d 20 7b 30 78 31 46 38 30 20 30 78 31 F7D} {0x1F80 0x1
51b0: 46 42 34 7d 0a 20 20 20 20 7b 30 78 31 46 42 36 FB4}. {0x1FB6
51c0: 20 30 78 31 46 42 43 7d 20 30 78 31 46 42 45 20 0x1FBC} 0x1FBE
51d0: 7b 30 78 31 46 43 32 20 30 78 31 46 43 34 7d 20 {0x1FC2 0x1FC4}
51e0: 7b 30 78 31 46 43 36 20 30 78 31 46 43 43 7d 0a {0x1FC6 0x1FCC}.
51f0: 20 20 20 20 7b 30 78 31 46 44 30 20 30 78 31 46 {0x1FD0 0x1F
5200: 44 33 7d 20 7b 30 78 31 46 44 36 20 30 78 31 46 D3} {0x1FD6 0x1F
5210: 44 42 7d 20 7b 30 78 31 46 45 30 20 30 78 31 46 DB} {0x1FE0 0x1F
5220: 45 43 7d 20 7b 30 78 31 46 46 32 20 30 78 31 46 EC} {0x1FF2 0x1F
5230: 46 34 7d 0a 20 20 20 20 7b 30 78 31 46 46 36 20 F4}. {0x1FF6
5240: 30 78 31 46 46 43 7d 20 30 78 32 31 32 36 20 7b 0x1FFC} 0x2126 {
5250: 30 78 32 31 32 41 20 30 78 32 31 32 42 7d 20 30 0x212A 0x212B} 0
5260: 78 32 31 32 45 0a 20 20 20 20 7b 30 78 32 31 38 x212E. {0x218
5270: 30 20 30 78 32 31 38 32 7d 20 7b 30 78 33 30 34 0 0x2182} {0x304
5280: 31 20 30 78 33 30 39 34 7d 20 7b 30 78 33 30 41 1 0x3094} {0x30A
5290: 31 20 30 78 33 30 46 41 7d 20 7b 30 78 33 31 30 1 0x30FA} {0x310
52a0: 35 20 30 78 33 31 32 43 7d 0a 20 20 20 20 7b 30 5 0x312C}. {0
52b0: 78 41 43 30 30 20 30 78 44 37 41 33 7d 0a 7d 0a xAC00 0xD7A3}.}.
52c0: 0a 73 65 74 20 49 64 65 6f 67 72 61 70 68 69 63 .set Ideographic
52d0: 20 7b 0a 20 20 20 20 7b 30 78 34 45 30 30 20 30 {. {0x4E00 0
52e0: 78 39 46 41 35 7d 20 30 78 33 30 30 37 20 7b 30 x9FA5} 0x3007 {0
52f0: 78 33 30 32 31 20 30 78 33 30 32 39 7d 0a 7d 0a x3021 0x3029}.}.
5300: 0a 73 65 74 20 43 6f 6d 62 69 6e 69 6e 67 43 68 .set CombiningCh
5310: 61 72 20 7b 0a 20 20 20 20 7b 30 78 30 33 30 30 ar {. {0x0300
5320: 20 30 78 30 33 34 35 7d 20 7b 30 78 30 33 36 30 0x0345} {0x0360
5330: 20 30 78 30 33 36 31 7d 20 7b 30 78 30 34 38 33 0x0361} {0x0483
5340: 20 30 78 30 34 38 36 7d 20 7b 30 78 30 35 39 31 0x0486} {0x0591
5350: 20 30 78 30 35 41 31 7d 0a 20 20 20 20 7b 30 78 0x05A1}. {0x
5360: 30 35 41 33 20 30 78 30 35 42 39 7d 20 7b 30 78 05A3 0x05B9} {0x
5370: 30 35 42 42 20 30 78 30 35 42 44 7d 20 30 78 30 05BB 0x05BD} 0x0
5380: 35 42 46 20 7b 30 78 30 35 43 31 20 30 78 30 35 5BF {0x05C1 0x05
5390: 43 32 7d 0a 20 20 20 20 30 78 30 35 43 34 20 7b C2}. 0x05C4 {
53a0: 30 78 30 36 34 42 20 30 78 30 36 35 32 7d 20 30 0x064B 0x0652} 0
53b0: 78 30 36 37 30 20 7b 30 78 30 36 44 36 20 30 78 x0670 {0x06D6 0x
53c0: 30 36 44 43 7d 20 7b 30 78 30 36 44 44 20 30 78 06DC} {0x06DD 0x
53d0: 30 36 44 46 7d 0a 20 20 20 20 7b 30 78 30 36 45 06DF}. {0x06E
53e0: 30 20 30 78 30 36 45 34 7d 20 7b 30 78 30 36 45 0 0x06E4} {0x06E
53f0: 37 20 30 78 30 36 45 38 7d 20 7b 30 78 30 36 45 7 0x06E8} {0x06E
5400: 41 20 30 78 30 36 45 44 7d 0a 20 20 20 20 7b 30 A 0x06ED}. {0
5410: 78 30 39 30 31 20 30 78 30 39 30 33 7d 20 30 78 x0901 0x0903} 0x
5420: 30 39 33 43 20 7b 30 78 30 39 33 45 20 30 78 30 093C {0x093E 0x0
5430: 39 34 43 7d 20 30 78 30 39 34 44 20 7b 30 78 30 94C} 0x094D {0x0
5440: 39 35 31 20 30 78 30 39 35 34 7d 0a 20 20 20 20 951 0x0954}.
5450: 7b 30 78 30 39 36 32 20 30 78 30 39 36 33 7d 20 {0x0962 0x0963}
5460: 7b 30 78 30 39 38 31 20 30 78 30 39 38 33 7d 20 {0x0981 0x0983}
5470: 30 78 30 39 42 43 20 30 78 30 39 42 45 20 30 78 0x09BC 0x09BE 0x
5480: 30 39 42 46 0a 20 20 20 20 7b 30 78 30 39 43 30 09BF. {0x09C0
5490: 20 30 78 30 39 43 34 7d 20 7b 30 78 30 39 43 37 0x09C4} {0x09C7
54a0: 20 30 78 30 39 43 38 7d 20 7b 30 78 30 39 43 42 0x09C8} {0x09CB
54b0: 20 30 78 30 39 43 44 7d 20 30 78 30 39 44 37 0a 0x09CD} 0x09D7.
54c0: 20 20 20 20 7b 30 78 30 39 45 32 20 30 78 30 39 {0x09E2 0x09
54d0: 45 33 7d 20 30 78 30 41 30 32 20 30 78 30 41 33 E3} 0x0A02 0x0A3
54e0: 43 20 30 78 30 41 33 45 20 30 78 30 41 33 46 20 C 0x0A3E 0x0A3F
54f0: 7b 30 78 30 41 34 30 20 30 78 30 41 34 32 7d 0a {0x0A40 0x0A42}.
5500: 20 20 20 20 7b 30 78 30 41 34 37 20 30 78 30 41 {0x0A47 0x0A
5510: 34 38 7d 20 7b 30 78 30 41 34 42 20 30 78 30 41 48} {0x0A4B 0x0A
5520: 34 44 7d 20 7b 30 78 30 41 37 30 20 30 78 30 41 4D} {0x0A70 0x0A
5530: 37 31 7d 0a 20 20 20 20 7b 30 78 30 41 38 31 20 71}. {0x0A81
5540: 30 78 30 41 38 33 7d 20 30 78 30 41 42 43 20 7b 0x0A83} 0x0ABC {
5550: 30 78 30 41 42 45 20 30 78 30 41 43 35 7d 20 7b 0x0ABE 0x0AC5} {
5560: 30 78 30 41 43 37 20 30 78 30 41 43 39 7d 0a 20 0x0AC7 0x0AC9}.
5570: 20 20 20 7b 30 78 30 41 43 42 20 30 78 30 41 43 {0x0ACB 0x0AC
5580: 44 7d 20 7b 30 78 30 42 30 31 20 30 78 30 42 30 D} {0x0B01 0x0B0
5590: 33 7d 20 30 78 30 42 33 43 20 7b 30 78 30 42 33 3} 0x0B3C {0x0B3
55a0: 45 20 30 78 30 42 34 33 7d 0a 20 20 20 20 7b 30 E 0x0B43}. {0
55b0: 78 30 42 34 37 20 30 78 30 42 34 38 7d 20 7b 30 x0B47 0x0B48} {0
55c0: 78 30 42 34 42 20 30 78 30 42 34 44 7d 20 7b 30 x0B4B 0x0B4D} {0
55d0: 78 30 42 35 36 20 30 78 30 42 35 37 7d 20 7b 30 x0B56 0x0B57} {0
55e0: 78 30 42 38 32 20 30 78 30 42 38 33 7d 0a 20 20 x0B82 0x0B83}.
55f0: 20 20 7b 30 78 30 42 42 45 20 30 78 30 42 43 32 {0x0BBE 0x0BC2
5600: 7d 20 7b 30 78 30 42 43 36 20 30 78 30 42 43 38 } {0x0BC6 0x0BC8
5610: 7d 20 7b 30 78 30 42 43 41 20 30 78 30 42 43 44 } {0x0BCA 0x0BCD
5620: 7d 20 30 78 30 42 44 37 0a 20 20 20 20 7b 30 78 } 0x0BD7. {0x
5630: 30 43 30 31 20 30 78 30 43 30 33 7d 20 7b 30 78 0C01 0x0C03} {0x
5640: 30 43 33 45 20 30 78 30 43 34 34 7d 20 7b 30 78 0C3E 0x0C44} {0x
5650: 30 43 34 36 20 30 78 30 43 34 38 7d 20 7b 30 78 0C46 0x0C48} {0x
5660: 30 43 34 41 20 30 78 30 43 34 44 7d 0a 20 20 20 0C4A 0x0C4D}.
5670: 20 7b 30 78 30 43 35 35 20 30 78 30 43 35 36 7d {0x0C55 0x0C56}
5680: 20 7b 30 78 30 43 38 32 20 30 78 30 43 38 33 7d {0x0C82 0x0C83}
5690: 20 7b 30 78 30 43 42 45 20 30 78 30 43 43 34 7d {0x0CBE 0x0CC4}
56a0: 0a 20 20 20 20 7b 30 78 30 43 43 36 20 30 78 30 . {0x0CC6 0x0
56b0: 43 43 38 7d 20 7b 30 78 30 43 43 41 20 30 78 30 CC8} {0x0CCA 0x0
56c0: 43 43 44 7d 20 7b 30 78 30 43 44 35 20 30 78 30 CCD} {0x0CD5 0x0
56d0: 43 44 36 7d 20 7b 30 78 30 44 30 32 20 30 78 30 CD6} {0x0D02 0x0
56e0: 44 30 33 7d 0a 20 20 20 20 7b 30 78 30 44 33 45 D03}. {0x0D3E
56f0: 20 30 78 30 44 34 33 7d 20 7b 30 78 30 44 34 36 0x0D43} {0x0D46
5700: 20 30 78 30 44 34 38 7d 20 7b 30 78 30 44 34 41 0x0D48} {0x0D4A
5710: 20 30 78 30 44 34 44 7d 20 30 78 30 44 35 37 0a 0x0D4D} 0x0D57.
5720: 20 20 20 20 30 78 30 45 33 31 20 7b 30 78 30 45 0x0E31 {0x0E
5730: 33 34 20 30 78 30 45 33 41 7d 20 7b 30 78 30 45 34 0x0E3A} {0x0E
5740: 34 37 20 30 78 30 45 34 45 7d 20 30 78 30 45 42 47 0x0E4E} 0x0EB
5750: 31 20 7b 30 78 30 45 42 34 20 30 78 30 45 42 39 1 {0x0EB4 0x0EB9
5760: 7d 0a 20 20 20 20 7b 30 78 30 45 42 42 20 30 78 }. {0x0EBB 0x
5770: 30 45 42 43 7d 20 7b 30 78 30 45 43 38 20 30 78 0EBC} {0x0EC8 0x
5780: 30 45 43 44 7d 20 7b 30 78 30 46 31 38 20 30 78 0ECD} {0x0F18 0x
5790: 30 46 31 39 7d 20 30 78 30 46 33 35 0a 20 20 20 0F19} 0x0F35.
57a0: 20 30 78 30 46 33 37 20 30 78 30 46 33 39 20 30 0x0F37 0x0F39 0
57b0: 78 30 46 33 45 20 30 78 30 46 33 46 20 7b 30 78 x0F3E 0x0F3F {0x
57c0: 30 46 37 31 20 30 78 30 46 38 34 7d 20 7b 30 78 0F71 0x0F84} {0x
57d0: 30 46 38 36 20 30 78 30 46 38 42 7d 0a 20 20 20 0F86 0x0F8B}.
57e0: 20 7b 30 78 30 46 39 30 20 30 78 30 46 39 35 7d {0x0F90 0x0F95}
57f0: 20 30 78 30 46 39 37 20 7b 30 78 30 46 39 39 20 0x0F97 {0x0F99
5800: 30 78 30 46 41 44 7d 20 7b 30 78 30 46 42 31 20 0x0FAD} {0x0FB1
5810: 30 78 30 46 42 37 7d 0a 20 20 20 20 30 78 30 46 0x0FB7}. 0x0F
5820: 42 39 20 7b 30 78 32 30 44 30 20 30 78 32 30 44 B9 {0x20D0 0x20D
5830: 43 7d 20 30 78 32 30 45 31 20 7b 30 78 33 30 32 C} 0x20E1 {0x302
5840: 41 20 30 78 33 30 32 46 7d 20 30 78 33 30 39 39 A 0x302F} 0x3099
5850: 20 30 78 33 30 39 41 0a 7d 0a 0a 73 65 74 20 44 0x309A.}..set D
5860: 69 67 69 74 20 7b 0a 20 20 20 20 7b 30 78 30 30 igit {. {0x00
5870: 33 30 20 30 78 30 30 33 39 7d 20 7b 30 78 30 36 30 0x0039} {0x06
5880: 36 30 20 30 78 30 36 36 39 7d 20 7b 30 78 30 36 60 0x0669} {0x06
5890: 46 30 20 30 78 30 36 46 39 7d 20 7b 30 78 30 39 F0 0x06F9} {0x09
58a0: 36 36 20 30 78 30 39 36 46 7d 0a 20 20 20 20 7b 66 0x096F}. {
58b0: 30 78 30 39 45 36 20 30 78 30 39 45 46 7d 20 7b 0x09E6 0x09EF} {
58c0: 30 78 30 41 36 36 20 30 78 30 41 36 46 7d 20 7b 0x0A66 0x0A6F} {
58d0: 30 78 30 41 45 36 20 30 78 30 41 45 46 7d 0a 20 0x0AE6 0x0AEF}.
58e0: 20 20 20 7b 30 78 30 42 36 36 20 30 78 30 42 36 {0x0B66 0x0B6
58f0: 46 7d 20 7b 30 78 30 42 45 37 20 30 78 30 42 45 F} {0x0BE7 0x0BE
5900: 46 7d 20 7b 30 78 30 43 36 36 20 30 78 30 43 36 F} {0x0C66 0x0C6
5910: 46 7d 20 7b 30 78 30 43 45 36 20 30 78 30 43 45 F} {0x0CE6 0x0CE
5920: 46 7d 0a 20 20 20 20 7b 30 78 30 44 36 36 20 30 F}. {0x0D66 0
5930: 78 30 44 36 46 7d 20 7b 30 78 30 45 35 30 20 30 x0D6F} {0x0E50 0
5940: 78 30 45 35 39 7d 20 7b 30 78 30 45 44 30 20 30 x0E59} {0x0ED0 0
5950: 78 30 45 44 39 7d 0a 20 20 20 20 7b 30 78 30 46 x0ED9}. {0x0F
5960: 32 30 20 30 78 30 46 32 39 7d 0a 7d 0a 0a 73 65 20 0x0F29}.}..se
5970: 74 20 45 78 74 65 6e 64 65 72 20 7b 0a 20 20 20 t Extender {.
5980: 20 30 78 30 30 42 37 20 30 78 30 32 44 30 20 30 0x00B7 0x02D0 0
5990: 78 30 32 44 31 20 30 78 30 33 38 37 20 30 78 30 x02D1 0x0387 0x0
59a0: 36 34 30 20 30 78 30 45 34 36 20 30 78 30 45 43 640 0x0E46 0x0EC
59b0: 36 20 30 78 33 30 30 35 0a 20 20 20 20 7b 30 78 6 0x3005. {0x
59c0: 33 30 33 31 20 30 78 33 30 33 35 7d 20 7b 30 78 3031 0x3035} {0x
59d0: 33 30 39 44 20 30 78 33 30 39 45 7d 20 7b 30 78 309D 0x309E} {0x
59e0: 33 30 46 43 20 30 78 33 30 46 45 7d 0a 7d 0a 0a 30FC 0x30FE}.}..
59f0: 70 72 6f 63 20 73 6f 72 74 43 6d 64 20 7b 61 20 proc sortCmd {a
5a00: 62 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 69 b} {. if {[li
5a10: 6e 64 65 78 20 24 61 20 30 5d 20 3e 20 5b 6c 69 ndex $a 0] > [li
5a20: 6e 64 65 78 20 24 62 20 30 5d 7d 20 7b 0a 20 20 ndex $b 0]} {.
5a30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 0a 20 return 1.
5a40: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 } else {.
5a50: 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0a 20 20 return -1.
5a60: 20 20 7d 0a 7d 0a 0a 23 20 20 69 66 20 7b 24 74 }.}..# if {$t
5a70: 63 6c 5f 76 65 72 73 69 6f 6e 20 3c 20 38 2e 34 cl_version < 8.4
5a80: 7d 20 7b 0a 23 20 20 20 20 20 20 73 65 74 20 6e } {.# set n
5a90: 61 6d 65 53 74 61 72 74 43 68 61 72 73 20 5b 6c ameStartChars [l
5aa0: 73 6f 72 74 20 2d 63 6f 6d 6d 61 6e 64 20 73 6f sort -command so
5ab0: 72 74 43 6d 64 20 5c 0a 23 20 20 20 20 20 20 20 rtCmd \.#
5ac0: 20 20 20 20 20 20 20 5b 63 6f 6e 63 61 74 20 24 [concat $
5ad0: 42 61 73 65 43 68 61 72 20 24 49 64 65 6f 67 72 BaseChar $Ideogr
5ae0: 61 70 68 69 63 20 30 78 30 30 35 46 20 30 78 30 aphic 0x005F 0x0
5af0: 30 33 41 5d 5d 0a 23 20 20 7d 20 65 6c 73 65 20 03A]].# } else
5b00: 7b 0a 23 20 20 20 20 20 20 73 65 74 20 6e 61 6d {.# set nam
5b10: 65 53 74 61 72 74 43 68 61 72 73 20 5b 6c 73 6f eStartChars [lso
5b20: 72 74 20 2d 69 6e 74 65 67 65 72 20 2d 69 6e 64 rt -integer -ind
5b30: 65 78 20 30 20 5c 0a 23 20 20 20 20 20 20 20 20 ex 0 \.#
5b40: 20 20 20 20 20 20 5b 63 6f 6e 63 61 74 20 24 42 [concat $B
5b50: 61 73 65 43 68 61 72 20 24 49 64 65 6f 67 72 61 aseChar $Ideogra
5b60: 70 68 69 63 20 30 78 30 30 35 46 20 30 78 30 30 phic 0x005F 0x00
5b70: 33 41 5d 5d 0a 23 20 20 7d 0a 0a 73 65 74 20 6e 3A]].# }..set n
5b80: 61 6d 65 53 74 61 72 74 43 68 61 72 73 20 5b 6c ameStartChars [l
5b90: 73 6f 72 74 20 2d 63 6f 6d 6d 61 6e 64 20 73 6f sort -command so
5ba0: 72 74 43 6d 64 20 5c 0a 20 20 20 20 20 20 20 20 rtCmd \.
5bb0: 5b 63 6f 6e 63 61 74 20 24 42 61 73 65 43 68 61 [concat $BaseCha
5bc0: 72 20 24 49 64 65 6f 67 72 61 70 68 69 63 20 30 r $Ideographic 0
5bd0: 78 30 30 35 46 20 30 78 30 30 33 41 5d 5d 0a 0a x005F 0x003A]]..
5be0: 23 20 41 70 70 65 6e 64 20 73 74 6f 70 20 63 68 # Append stop ch
5bf0: 61 72 20 6e 65 65 64 65 64 20 62 79 20 74 68 65 ar needed by the
5c00: 20 74 65 73 74 20 63 6f 64 65 20 74 6f 20 77 6f test code to wo
5c10: 72 6b 20 70 72 6f 70 65 72 6c 79 2e 0a 6c 61 70 rk properly..lap
5c20: 70 65 6e 64 20 6e 61 6d 65 53 74 61 72 74 43 68 pend nameStartCh
5c30: 61 72 73 20 30 78 31 30 30 30 30 0a 0a 74 65 73 ars 0x10000..tes
5c40: 74 20 64 6f 6d 2d 33 2e 38 20 7b 69 73 4e 61 6d t dom-3.8 {isNam
5c50: 65 7d 20 7b 6c 6f 6e 67 52 75 6e 6e 69 6e 67 20 e} {longRunning
5c60: 26 26 20 6e 65 65 64 5f 69 31 38 6e 7d 20 7b 0a && need_i18n} {.
5c70: 20 20 20 20 73 65 74 20 69 6e 64 20 30 0a 20 20 set ind 0.
5c80: 20 20 73 65 74 20 6e 72 20 30 0a 20 20 20 20 77 set nr 0. w
5c90: 68 69 6c 65 20 7b 24 6e 72 20 3c 20 36 35 35 33 hile {$nr < 6553
5ca0: 36 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 6} {. set
5cb0: 20 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 range [lindex $
5cc0: 6e 61 6d 65 53 74 61 72 74 43 68 61 72 73 20 24 nameStartChars $
5cd0: 69 6e 64 5d 0a 20 20 20 20 20 20 20 20 69 6e 63 ind]. inc
5ce0: 72 20 69 6e 64 0a 20 20 20 20 20 20 20 20 69 66 r ind. if
5cf0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 61 6e 67 {[llength $rang
5d00: 65 5d 20 3d 3d 20 32 7d 20 7b 0a 20 20 20 20 20 e] == 2} {.
5d10: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b foreach {
5d20: 6d 69 6e 20 6d 61 78 7d 20 24 72 61 6e 67 65 20 min max} $range
5d30: 62 72 65 61 6b 0a 20 20 20 20 20 20 20 20 7d 20 break. }
5d40: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 else {.
5d50: 20 20 20 73 65 74 20 6d 69 6e 20 24 72 61 6e 67 set min $rang
5d60: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 e. se
5d70: 74 20 6d 61 78 20 24 72 61 6e 67 65 0a 20 20 20 t max $range.
5d80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77 }. w
5d90: 68 69 6c 65 20 7b 24 6e 72 20 3c 20 24 6d 69 6e hile {$nr < $min
5da0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 } {.
5db0: 69 66 20 7b 5b 64 6f 6d 20 69 73 4e 61 6d 65 20 if {[dom isName
5dc0: 5b 73 75 62 73 74 20 5c 5c 75 5b 66 6f 72 6d 61 [subst \\u[forma
5dd0: 74 20 22 25 30 34 78 22 20 24 6e 72 5d 5d 5d 20 t "%04x" $nr]]]
5de0: 21 3d 20 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 != 0} {.
5df0: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 77 error "w
5e00: 72 6f 6e 67 20 27 69 73 4e 61 6d 65 27 20 72 65 rong 'isName' re
5e10: 73 75 6c 74 20 66 6f 72 20 6e 61 6d 65 20 73 74 sult for name st
5e20: 61 72 74 20 63 68 61 72 20 23 78 5b 66 6f 72 6d art char #x[form
5e30: 61 74 20 22 25 30 34 78 22 20 24 6e 72 5d 20 2d at "%04x" $nr] -
5e40: 20 73 68 6f 75 6c 64 20 62 65 20 69 6c 6c 65 67 should be illeg
5e50: 61 6c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 al".
5e60: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e }. in
5e70: 63 72 20 6e 72 0a 20 20 20 20 20 20 20 20 7d 0a cr nr. }.
5e80: 20 20 20 20 20 20 20 20 69 66 20 7b 24 6e 72 20 if {$nr
5e90: 3d 3d 20 30 78 31 30 30 30 30 7d 20 7b 62 72 65 == 0x10000} {bre
5ea0: 61 6b 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c ak}. whil
5eb0: 65 20 7b 24 6e 72 20 3c 3d 20 24 6d 61 78 7d 20 e {$nr <= $max}
5ec0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 {. if
5ed0: 20 7b 5b 64 6f 6d 20 69 73 4e 61 6d 65 20 5b 73 {[dom isName [s
5ee0: 75 62 73 74 20 5c 5c 75 5b 66 6f 72 6d 61 74 20 ubst \\u[format
5ef0: 22 25 30 34 78 22 20 24 6e 72 5d 5d 5d 20 21 3d "%04x" $nr]]] !=
5f00: 20 31 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 1} {.
5f10: 20 20 20 20 20 20 65 72 72 6f 72 20 22 77 72 6f error "wro
5f20: 6e 67 20 27 69 73 4e 61 6d 65 27 20 72 65 73 75 ng 'isName' resu
5f30: 6c 74 20 66 6f 72 20 6e 61 6d 65 20 73 74 61 72 lt for name star
5f40: 74 20 63 68 61 72 20 23 78 5b 66 6f 72 6d 61 74 t char #x[format
5f50: 20 22 25 30 34 78 22 20 24 6e 72 5d 20 2d 20 73 "%04x" $nr] - s
5f60: 68 6f 75 6c 64 20 62 65 20 6c 65 67 61 6c 22 0a hould be legal".
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
5f80: 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e incr n
5f90: 72 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 r. }.
5fa0: 7d 0a 20 20 20 20 73 65 74 20 6e 72 0a 7d 20 7b }. set nr.} {
5fb0: 36 35 35 33 36 7d 0a 0a 73 65 74 20 6e 61 6d 65 65536}..set name
5fc0: 43 68 61 72 73 20 5b 6c 73 6f 72 74 20 2d 63 6f Chars [lsort -co
5fd0: 6d 6d 61 6e 64 20 73 6f 72 74 43 6d 64 20 5c 0a mmand sortCmd \.
5fe0: 20 20 20 20 20 20 20 20 5b 63 6f 6e 63 61 74 20 [concat
5ff0: 24 42 61 73 65 43 68 61 72 20 24 49 64 65 6f 67 $BaseChar $Ideog
6000: 72 61 70 68 69 63 20 24 44 69 67 69 74 20 30 78 raphic $Digit 0x
6010: 30 30 32 45 20 30 78 30 30 32 44 20 30 78 30 30 002E 0x002D 0x00
6020: 35 46 20 30 78 30 30 33 41 20 5c 0a 20 20 20 20 5F 0x003A \.
6030: 20 20 20 20 20 20 20 20 20 20 20 20 24 43 6f 6d $Com
6040: 62 69 6e 69 6e 67 43 68 61 72 20 24 45 78 74 65 biningChar $Exte
6050: 6e 64 65 72 5d 5d 0a 0a 23 20 41 70 70 65 6e 64 nder]]..# Append
6060: 20 73 74 6f 70 20 63 68 61 72 20 6e 65 65 64 65 stop char neede
6070: 64 20 62 79 20 74 68 65 20 74 65 73 74 20 63 6f d by the test co
6080: 64 65 20 74 6f 20 77 6f 72 6b 20 70 72 6f 70 65 de to work prope
6090: 72 6c 79 2e 0a 6c 61 70 70 65 6e 64 20 6e 61 6d rly..lappend nam
60a0: 65 43 68 61 72 73 20 30 78 31 30 30 30 30 0a 0a eChars 0x10000..
60b0: 74 65 73 74 20 64 6f 6d 2d 33 2e 39 20 7b 69 73 test dom-3.9 {is
60c0: 4e 61 6d 65 7d 20 7b 6c 6f 6e 67 52 75 6e 6e 69 Name} {longRunni
60d0: 6e 67 20 26 26 20 6e 65 65 64 5f 69 31 38 6e 7d ng && need_i18n}
60e0: 20 7b 0a 20 20 20 20 73 65 74 20 69 6e 64 20 30 {. set ind 0
60f0: 0a 20 20 20 20 73 65 74 20 6e 72 20 30 0a 20 20 . set nr 0.
6100: 20 20 77 68 69 6c 65 20 7b 24 6e 72 20 3c 20 36 while {$nr < 6
6110: 35 35 33 36 7d 20 7b 0a 20 20 20 20 20 20 20 20 5536} {.
6120: 73 65 74 20 72 61 6e 67 65 20 5b 6c 69 6e 64 65 set range [linde
6130: 78 20 24 6e 61 6d 65 43 68 61 72 73 20 24 69 6e x $nameChars $in
6140: 64 5d 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 d]. incr
6150: 69 6e 64 0a 20 20 20 20 20 20 20 20 69 66 20 7b ind. if {
6160: 5b 6c 6c 65 6e 67 74 68 20 24 72 61 6e 67 65 5d [llength $range]
6170: 20 3d 3d 20 32 7d 20 7b 0a 20 20 20 20 20 20 20 == 2} {.
6180: 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b 6d 69 foreach {mi
6190: 6e 20 6d 61 78 7d 20 24 72 61 6e 67 65 20 62 72 n max} $range br
61a0: 65 61 6b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c eak. } el
61b0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 se {.
61c0: 20 73 65 74 20 6d 69 6e 20 24 72 61 6e 67 65 0a set min $range.
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
61e0: 6d 61 78 20 24 72 61 6e 67 65 0a 20 20 20 20 20 max $range.
61f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77 68 69 }. whi
6200: 6c 65 20 7b 24 6e 72 20 3c 20 24 6d 69 6e 7d 20 le {$nr < $min}
6210: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 {. if
6220: 20 7b 5b 64 6f 6d 20 69 73 4e 61 6d 65 20 61 5b {[dom isName a[
6230: 73 75 62 73 74 20 5c 5c 75 5b 66 6f 72 6d 61 74 subst \\u[format
6240: 20 22 25 30 34 78 22 20 24 6e 72 5d 5d 5d 20 21 "%04x" $nr]]] !
6250: 3d 20 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 = 0} {.
6260: 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 77 72 error "wr
6270: 6f 6e 67 20 27 69 73 4e 61 6d 65 27 20 72 65 73 ong 'isName' res
6280: 75 6c 74 20 66 6f 72 20 6e 61 6d 65 20 63 68 61 ult for name cha
6290: 72 20 23 78 5b 66 6f 72 6d 61 74 20 22 25 30 34 r #x[format "%04
62a0: 78 22 20 24 6e 72 5d 20 2d 20 73 68 6f 75 6c 64 x" $nr] - should
62b0: 20 62 65 20 69 6c 6c 65 67 61 6c 22 0a 20 20 20 be illegal".
62c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
62d0: 20 20 20 20 20 20 20 69 6e 63 72 20 6e 72 0a 20 incr nr.
62e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
62f0: 20 69 66 20 7b 24 6e 72 20 3d 3d 20 30 78 31 30 if {$nr == 0x10
6300: 30 30 30 7d 20 7b 62 72 65 61 6b 7d 0a 20 20 20 000} {break}.
6310: 20 20 20 20 20 77 68 69 6c 65 20 7b 24 6e 72 20 while {$nr
6320: 3c 3d 20 24 6d 61 78 7d 20 7b 0a 20 20 20 20 20 <= $max} {.
6330: 20 20 20 20 20 20 20 69 66 20 7b 5b 64 6f 6d 20 if {[dom
6340: 69 73 4e 61 6d 65 20 61 5b 73 75 62 73 74 20 5c isName a[subst \
6350: 5c 75 5b 66 6f 72 6d 61 74 20 22 25 30 34 78 22 \u[format "%04x"
6360: 20 24 6e 72 5d 5d 5d 20 21 3d 20 31 7d 20 7b 0a $nr]]] != 1} {.
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6380: 65 72 72 6f 72 20 22 77 72 6f 6e 67 20 27 69 73 error "wrong 'is
6390: 4e 61 6d 65 27 20 72 65 73 75 6c 74 20 66 6f 72 Name' result for
63a0: 20 6e 61 6d 65 20 63 68 61 72 20 23 78 5b 66 6f name char #x[fo
63b0: 72 6d 61 74 20 22 25 30 34 78 22 20 24 6e 72 5d rmat "%04x" $nr]
63c0: 20 2d 20 73 68 6f 75 6c 64 20 62 65 20 6c 65 67 - should be leg
63d0: 61 6c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 al".
63e0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e }. in
63f0: 63 72 20 6e 72 0a 20 20 20 20 20 20 20 20 7d 0a cr nr. }.
6400: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 6e 72 }. set nr
6410: 0a 7d 20 7b 36 35 35 33 36 7d 0a 0a 0a 74 65 73 .} {65536}...tes
6420: 74 20 64 6f 6d 2d 33 2e 31 30 20 7b 69 73 4e 43 t dom-3.10 {isNC
6430: 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 Name} {. dom
6440: 69 73 4e 43 4e 61 6d 65 20 22 3a 66 6f 6f 22 0a isNCName ":foo".
6450: 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d } {0}..test dom-
6460: 33 2e 31 31 20 7b 69 73 4e 43 4e 61 6d 65 7d 20 3.11 {isNCName}
6470: 7b 0a 20 20 20 20 64 6f 6d 20 69 73 4e 43 4e 61 {. dom isNCNa
6480: 6d 65 20 22 5f 66 6f 6f 22 0a 7d 20 7b 31 7d 0a me "_foo".} {1}.
6490: 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 32 20 7b .test dom-3.12 {
64a0: 69 73 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 isNCName} {.
64b0: 64 6f 6d 20 69 73 4e 43 4e 61 6d 65 20 22 66 6f dom isNCName "fo
64c0: 6f 3a 62 61 72 3a 62 61 7a 22 0a 7d 20 7b 30 7d o:bar:baz".} {0}
64d0: 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 33 20 ..test dom-3.13
64e0: 7b 69 73 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 {isNCName} {.
64f0: 20 64 6f 6d 20 69 73 4e 43 4e 61 6d 65 20 22 2d dom isNCName "-
6500: 66 6f 6f 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 foo".} {0}..test
6510: 20 64 6f 6d 2d 33 2e 31 34 20 7b 69 73 4e 43 4e dom-3.14 {isNCN
6520: 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 ame} {. dom i
6530: 73 4e 43 4e 61 6d 65 20 22 2e 66 6f 6f 22 0a 7d sNCName ".foo".}
6540: 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 {0}..test dom-3
6550: 2e 31 35 20 7b 69 73 4e 43 4e 61 6d 65 7d 20 7b .15 {isNCName} {
6560: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 . catch {dom
6570: 69 73 4e 43 4e 61 6d 65 7d 0a 7d 20 7b 31 7d 0a isNCName}.} {1}.
6580: 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 31 36 20 7b .test dom-3.16 {
6590: 69 73 4e 43 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 isNCName} {.
65a0: 63 61 74 63 68 20 7b 64 6f 6d 20 69 73 4e 43 4e catch {dom isNCN
65b0: 61 6d 65 20 66 6f 6f 20 62 61 72 7d 0a 7d 20 7b ame foo bar}.} {
65c0: 31 7d 0a 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 1}...test dom-3.
65d0: 31 37 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 17 {isQName} {.
65e0: 20 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 22 dom isQName "
65f0: 3a 66 6f 6f 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 :foo".} {0}..tes
6600: 74 20 64 6f 6d 2d 33 2e 31 38 20 7b 69 73 51 4e t dom-3.18 {isQN
6610: 61 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 ame} {. dom i
6620: 73 51 4e 61 6d 65 20 22 5f 66 6f 6f 22 0a 7d 20 sQName "_foo".}
6630: 7b 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e {1}..test dom-3.
6640: 31 39 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 19 {isQName} {.
6650: 20 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 22 dom isQName "
6660: 66 6f 6f 3a 62 61 72 3a 62 61 7a 22 0a 7d 20 7b foo:bar:baz".} {
6670: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 0}..test dom-3.2
6680: 30 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 0 {isQName} {.
6690: 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 22 2d dom isQName "-
66a0: 66 6f 6f 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 foo".} {0}..test
66b0: 20 64 6f 6d 2d 33 2e 32 31 20 7b 69 73 51 4e 61 dom-3.21 {isQNa
66c0: 6d 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 me} {. dom is
66d0: 51 4e 61 6d 65 20 22 2e 66 6f 6f 22 0a 7d 20 7b QName ".foo".} {
66e0: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 0}..test dom-3.2
66f0: 32 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 2 {isQName} {.
6700: 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 20 22 66 dom isQName "f
6710: 6f 6f 3a 62 61 72 22 0a 7d 20 7b 31 7d 0a 0a 74 oo:bar".} {1}..t
6720: 65 73 74 20 64 6f 6d 2d 33 2e 32 33 20 7b 69 73 est dom-3.23 {is
6730: 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 63 61 74 QName} {. cat
6740: 63 68 20 7b 64 6f 6d 20 69 73 51 4e 61 6d 65 7d ch {dom isQName}
6750: 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 64 6f 6d .} {1}..test dom
6760: 2d 33 2e 32 34 20 7b 69 73 51 4e 61 6d 65 7d 20 -3.24 {isQName}
6770: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d {. catch {dom
6780: 20 69 73 51 4e 61 6d 65 20 66 6f 6f 20 62 61 72 isQName foo bar
6790: 7d 0a 7d 20 7b 31 7d 0a 0a 74 65 73 74 20 64 6f }.} {1}..test do
67a0: 6d 2d 33 2e 32 35 20 7b 69 73 51 4e 61 6d 65 7d m-3.25 {isQName}
67b0: 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 51 4e 61 {. dom isQNa
67c0: 6d 65 20 22 66 6f 6f 20 62 61 72 22 0a 7d 20 7b me "foo bar".} {
67d0: 30 7d 0a 20 20 20 20 0a 74 65 73 74 20 64 6f 6d 0}. .test dom
67e0: 2d 33 2e 32 36 20 7b 69 73 51 4e 61 6d 65 7d 20 -3.26 {isQName}
67f0: 7b 0a 20 20 20 20 64 6f 6d 20 69 73 51 4e 61 6d {. dom isQNam
6800: 65 20 22 77 6f 6f 7a 62 69 7a 3a 22 0a 7d 20 7b e "woozbiz:".} {
6810: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 0}..test dom-3.2
6820: 36 2e 31 20 7b 69 73 51 4e 61 6d 65 7d 20 7b 0a 6.1 {isQName} {.
6830: 20 20 20 20 20 64 6f 6d 20 69 73 51 4e 61 6d 65 dom isQName
6840: 20 66 6f 6f 3a 31 0a 7d 20 7b 30 7d 0a 0a 74 65 foo:1.} {0}..te
6850: 73 74 20 64 6f 6d 2d 33 2e 32 36 2e 32 20 7b 69 st dom-3.26.2 {i
6860: 73 51 4e 61 6d 65 7d 20 7b 0a 20 20 20 20 20 64 sQName} {. d
6870: 6f 6d 20 69 73 51 4e 61 6d 65 20 31 3a 66 6f 6f om isQName 1:foo
6880: 0a 7d 20 7b 30 7d 0a 0a 73 65 74 20 58 4d 4c 43 .} {0}..set XMLC
6890: 68 61 72 73 20 7b 0a 20 20 20 20 30 78 39 20 30 hars {. 0x9 0
68a0: 78 41 20 30 78 44 20 7b 30 78 32 30 20 30 78 44 xA 0xD {0x20 0xD
68b0: 37 46 46 7d 20 7b 30 78 45 30 30 30 20 30 78 46 7FF} {0xE000 0xF
68c0: 46 46 44 7d 20 7b 30 78 31 30 30 30 30 20 30 78 FFD} {0x10000 0x
68d0: 31 30 46 46 46 46 7d 0a 7d 0a 0a 74 65 73 74 20 10FFFF}.}..test
68e0: 64 6f 6d 2d 33 2e 32 37 20 7b 69 73 43 68 61 72 dom-3.27 {isChar
68f0: 44 61 74 61 7d 20 7b 6c 6f 6e 67 52 75 6e 6e 69 Data} {longRunni
6900: 6e 67 20 26 26 20 6e 65 65 64 5f 69 31 38 6e 7d ng && need_i18n}
6910: 20 7b 0a 20 20 20 20 73 65 74 20 69 6e 64 20 30 {. set ind 0
6920: 0a 20 20 20 20 73 65 74 20 6e 72 20 31 0a 20 20 . set nr 1.
6930: 20 20 77 68 69 6c 65 20 7b 24 6e 72 20 3c 20 36 while {$nr < 6
6940: 35 35 33 36 7d 20 7b 0a 20 20 20 20 20 20 20 20 5536} {.
6950: 73 65 74 20 72 61 6e 67 65 20 5b 6c 69 6e 64 65 set range [linde
6960: 78 20 24 58 4d 4c 43 68 61 72 73 20 24 69 6e 64 x $XMLChars $ind
6970: 5d 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 69 ]. incr i
6980: 6e 64 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b nd. if {[
6990: 6c 6c 65 6e 67 74 68 20 24 72 61 6e 67 65 5d 20 llength $range]
69a0: 3d 3d 20 32 7d 20 7b 0a 20 20 20 20 20 20 20 20 == 2} {.
69b0: 20 20 20 20 66 6f 72 65 61 63 68 20 7b 6d 69 6e foreach {min
69c0: 20 6d 61 78 7d 20 24 72 61 6e 67 65 20 62 72 65 max} $range bre
69d0: 61 6b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 ak. } els
69e0: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e {.
69f0: 73 65 74 20 6d 69 6e 20 24 72 61 6e 67 65 0a 20 set min $range.
6a00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d set m
6a10: 61 78 20 24 72 61 6e 67 65 0a 20 20 20 20 20 20 ax $range.
6a20: 20 20 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c }. whil
6a30: 65 20 7b 24 6e 72 20 3c 20 24 6d 69 6e 7d 20 7b e {$nr < $min} {
6a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
6a50: 7b 5b 64 6f 6d 20 69 73 43 68 61 72 44 61 74 61 {[dom isCharData
6a60: 20 22 61 5b 73 75 62 73 74 20 5c 5c 75 5b 66 6f "a[subst \\u[fo
6a70: 72 6d 61 74 20 22 25 30 34 78 22 20 24 6e 72 5d rmat "%04x" $nr]
6a80: 5d 62 22 5d 20 21 3d 20 30 7d 20 7b 0a 20 20 20 ]b"] != 0} {.
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
6aa0: 6f 72 20 22 77 72 6f 6e 67 20 27 69 73 43 68 61 or "wrong 'isCha
6ab0: 72 44 61 74 61 27 20 72 65 73 75 6c 74 20 66 6f rData' result fo
6ac0: 72 20 63 68 61 72 20 23 78 5b 66 6f 72 6d 61 74 r char #x[format
6ad0: 20 22 25 30 34 78 22 20 24 6e 72 5d 20 2d 20 73 "%04x" $nr] - s
6ae0: 68 6f 75 6c 64 20 62 65 20 69 6c 6c 65 67 61 6c hould be illegal
6af0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ". }.
6b00: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 incr
6b10: 20 6e 72 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 nr. }.
6b20: 20 20 20 20 20 20 69 66 20 7b 24 6e 72 20 3d 3d if {$nr ==
6b30: 20 30 78 31 30 30 30 30 7d 20 7b 62 72 65 61 6b 0x10000} {break
6b40: 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 }. while
6b50: 7b 24 6e 72 20 3c 3d 20 24 6d 61 78 7d 20 7b 0a {$nr <= $max} {.
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
6b70: 5b 64 6f 6d 20 69 73 43 68 61 72 44 61 74 61 20 [dom isCharData
6b80: 22 61 5b 73 75 62 73 74 20 5c 5c 75 5b 66 6f 72 "a[subst \\u[for
6b90: 6d 61 74 20 22 25 30 34 78 22 20 24 6e 72 5d 5d mat "%04x" $nr]]
6ba0: 62 22 5d 20 21 3d 20 31 7d 20 7b 0a 20 20 20 20 b"] != 1} {.
6bb0: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
6bc0: 72 20 22 77 72 6f 6e 67 20 27 69 73 43 68 61 72 r "wrong 'isChar
6bd0: 44 61 74 61 27 20 72 65 73 75 6c 74 20 66 6f 72 Data' result for
6be0: 20 63 68 61 72 20 23 78 5b 66 6f 72 6d 61 74 20 char #x[format
6bf0: 22 25 30 34 78 22 20 24 6e 72 5d 20 2d 20 73 68 "%04x" $nr] - sh
6c00: 6f 75 6c 64 20 62 65 20 6c 65 67 61 6c 22 0a 20 ould be legal".
6c10: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 }.
6c20: 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e 72 incr nr
6c30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d . }. }
6c40: 0a 20 20 20 20 73 65 74 20 6e 72 0a 7d 20 7b 36 . set nr.} {6
6c50: 35 35 33 36 7d 0a 0a 0a 74 65 73 74 20 64 6f 6d 5536}...test dom
6c60: 2d 33 2e 32 38 20 7b 69 73 50 49 4e 61 6d 65 7d -3.28 {isPIName}
6c70: 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 50 49 4e {. dom isPIN
6c80: 61 6d 65 20 22 74 61 72 67 65 74 22 0a 7d 20 7b ame "target".} {
6c90: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 32 1}..test dom-3.2
6ca0: 39 20 7b 69 73 50 49 4e 61 6d 65 7d 20 7b 0a 20 9 {isPIName} {.
6cb0: 20 20 20 64 6f 6d 20 69 73 50 49 4e 61 6d 65 20 dom isPIName
6cc0: 22 66 6f 6f 3a 74 61 72 67 65 74 22 0a 7d 20 7b "foo:target".} {
6cd0: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 1}..test dom-3.3
6ce0: 30 20 7b 69 73 50 49 4e 61 6d 65 7d 20 7b 0a 20 0 {isPIName} {.
6cf0: 20 20 20 64 6f 6d 20 69 73 50 49 4e 61 6d 65 20 dom isPIName
6d00: 22 58 6d 6c 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 "Xml".} {0}..tes
6d10: 74 20 64 6f 6d 2d 33 2e 33 31 20 7b 69 73 43 6f t dom-3.31 {isCo
6d20: 6d 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 64 6f 6d mment} {. dom
6d30: 20 69 73 43 6f 6d 6d 65 6e 74 20 22 73 6f 6d 65 isComment "some
6d40: 20 63 6f 6d 6d 65 6e 74 22 0a 7d 20 7b 31 7d 0a comment".} {1}.
6d50: 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 32 20 7b .test dom-3.32 {
6d60: 69 73 43 6f 6d 6d 65 6e 74 7d 20 7b 0a 20 20 20 isComment} {.
6d70: 20 64 6f 6d 20 69 73 43 6f 6d 6d 65 6e 74 20 22 dom isComment "
6d80: 73 6f 6d 65 20 69 6e 76 61 6c 69 64 20 2d 2d 20 some invalid --
6d90: 63 6f 6d 6d 65 6e 74 22 0a 7d 20 7b 30 7d 0a 0a comment".} {0}..
6da0: 74 65 73 74 20 64 6f 6d 2d 33 2e 33 33 20 7b 69 test dom-3.33 {i
6db0: 73 43 6f 6d 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 sComment} {.
6dc0: 64 6f 6d 20 69 73 43 6f 6d 6d 65 6e 74 20 22 73 dom isComment "s
6dd0: 6f 6d 65 20 69 6e 76 61 6c 69 64 20 63 6f 6d 6d ome invalid comm
6de0: 65 6e 74 2d 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 ent-".} {0}..tes
6df0: 74 20 64 6f 6d 2d 33 2e 33 34 20 7b 69 73 43 44 t dom-3.34 {isCD
6e00: 41 54 41 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 ATA} {. dom i
6e10: 73 43 44 41 54 41 20 22 3c 76 61 6c 69 64 3e 73 sCDATA "<valid>s
6e20: 6f 6d 65 20 5d 5d 20 43 44 41 54 41 20 3c 2f 76 ome ]] CDATA </v
6e30: 61 6c 69 64 3e 22 0a 7d 20 7b 31 7d 0a 0a 74 65 alid>".} {1}..te
6e40: 73 74 20 64 6f 6d 2d 33 2e 33 35 20 7b 69 73 43 st dom-3.35 {isC
6e50: 44 41 54 41 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 DATA} {. dom
6e60: 69 73 43 44 41 54 41 20 22 3c 69 6e 76 61 6c 69 isCDATA "<invali
6e70: 64 3e 73 6f 6d 65 20 5d 5d 3e 20 43 44 41 54 41 d>some ]]> CDATA
6e80: 20 3c 2f 69 6e 76 61 6c 69 64 3e 22 0a 7d 20 7b </invalid>".} {
6e90: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 0}..test dom-3.3
6ea0: 36 20 7b 69 73 43 44 41 54 41 7d 20 7b 0a 20 20 6 {isCDATA} {.
6eb0: 20 20 64 6f 6d 20 69 73 43 44 41 54 41 20 22 69 dom isCDATA "i
6ec0: 6e 76 61 6c 69 64 3a 20 5d 5d 3e 22 0a 7d 20 7b nvalid: ]]>".} {
6ed0: 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 0}..test dom-3.3
6ee0: 37 20 7b 69 73 43 44 41 54 41 7d 20 7b 0a 20 20 7 {isCDATA} {.
6ef0: 20 20 64 6f 6d 20 69 73 43 44 41 54 41 20 22 76 dom isCDATA "v
6f00: 61 6c 69 64 3a 20 5d 5d 3e 20 22 0a 7d 20 7b 30 alid: ]]> ".} {0
6f10: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 33 38 }..test dom-3.38
6f20: 20 7b 69 73 43 44 41 54 41 7d 20 7b 6e 65 65 64 {isCDATA} {need
6f30: 5f 69 31 38 6e 7d 20 7b 0a 20 20 20 20 64 6f 6d _i18n} {. dom
6f40: 20 69 73 43 44 41 54 41 20 22 5c 75 64 37 66 61 isCDATA "\ud7fa
6f50: 5c 75 64 37 66 62 5c 75 64 37 66 63 5c 75 64 37 \ud7fb\ud7fc\ud7
6f60: 66 64 5c 75 64 37 66 65 5c 75 64 37 66 66 5d 5d fd\ud7fe\ud7ff]]
6f70: 3e 22 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 >".} {0}..test d
6f80: 6f 6d 2d 33 2e 33 39 20 7b 69 73 50 49 56 61 6c om-3.39 {isPIVal
6f90: 75 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 69 73 ue} {. dom is
6fa0: 50 49 56 61 6c 75 65 20 22 73 6f 6d 65 20 70 72 PIValue "some pr
6fb0: 6f 63 65 73 73 69 6e 67 20 69 6e 73 74 72 75 63 ocessing instruc
6fc0: 74 69 6f 6e 20 64 61 74 61 22 0a 7d 20 7b 31 7d tion data".} {1}
6fd0: 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e 34 30 20 ..test dom-3.40
6fe0: 7b 69 73 50 49 56 61 6c 75 65 7d 20 7b 0a 20 20 {isPIValue} {.
6ff0: 20 20 64 6f 6d 20 69 73 50 49 56 61 6c 75 65 20 dom isPIValue
7000: 22 73 6f 6d 65 20 69 6e 76 61 6c 69 64 20 3f 3e "some invalid ?>
7010: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 6e 73 74 processing inst
7020: 72 75 63 74 69 6f 6e 20 64 61 74 61 22 0a 7d 20 ruction data".}
7030: 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 33 2e {0}..test dom-3.
7040: 34 31 20 7b 69 73 50 49 56 61 6c 75 65 7d 20 7b 41 {isPIValue} {
7050: 0a 20 20 20 20 64 6f 6d 20 69 73 50 49 56 61 6c . dom isPIVal
7060: 75 65 20 22 73 6f 6d 65 20 69 6e 76 61 6c 69 64 ue "some invalid
7070: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 6e 73 74 processing inst
7080: 72 75 63 74 69 6f 6e 20 64 61 74 61 3f 3e 22 0a ruction data?>".
7090: 7d 20 7b 30 7d 0a 0a 0a 74 65 73 74 20 64 6f 6d } {0}...test dom
70a0: 2d 34 2e 31 20 7b 2d 75 73 65 46 6f 72 65 69 67 -4.1 {-useForeig
70b0: 6e 44 54 44 20 30 7d 20 7b 0a 20 20 20 20 73 65 nDTD 0} {. se
70c0: 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 t doc [dom parse
70d0: 20 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 44 20 -useForeignDTD
70e0: 30 20 7b 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 0 {<root/>}].
70f0: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 7d 20 7b $doc delete.} {
7100: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 34 2e 32 20 }..test dom-4.2
7110: 7b 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 44 20 {-useForeignDTD
7120: 31 20 77 69 74 68 20 64 6f 63 75 6d 65 6e 74 20 1 with document
7130: 77 69 74 68 20 69 6e 74 65 72 6e 61 6c 20 73 75 with internal su
7140: 62 73 65 74 7d 20 7b 6e 65 65 64 5f 75 72 69 7d bset} {need_uri}
7150: 20 7b 0a 20 20 20 20 73 65 74 20 62 61 73 65 55 {. set baseU
7160: 52 49 20 66 69 6c 65 3a 2f 2f 5b 66 69 6c 65 20 RI file://[file
7170: 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b 66 69 6c 65 join [pwd] [file
7180: 20 64 69 72 20 5b 69 6e 66 6f 20 73 63 72 69 70 dir [info scrip
7190: 74 5d 5d 20 64 6f 6d 2e 74 65 73 74 5d 0a 20 20 t]] dom.test].
71a0: 20 20 73 65 74 20 3a 3a 74 44 4f 4d 3a 3a 75 73 set ::tDOM::us
71b0: 65 46 6f 72 65 69 67 6e 44 54 44 20 22 64 61 74 eForeignDTD "dat
71c0: 61 2f 64 6f 6d 43 6d 64 31 2e 64 74 64 22 0a 20 a/domCmd1.dtd".
71d0: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
71e0: 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 20 20 parse \.
71f0: 20 20 20 20 2d 75 73 65 46 6f 72 65 69 67 6e 44 -useForeignD
7200: 54 44 20 31 20 5c 0a 20 20 20 20 20 20 20 20 20 TD 1 \.
7210: 20 20 20 2d 62 61 73 65 75 72 6c 20 24 62 61 73 -baseurl $bas
7220: 65 55 52 49 20 5c 0a 20 20 20 20 20 20 20 20 20 eURI \.
7230: 20 20 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 -externalenti
7240: 74 79 63 6f 6d 6d 61 6e 64 20 3a 3a 74 44 4f 4d tycommand ::tDOM
7250: 3a 3a 65 78 74 52 65 66 48 61 6e 64 6c 65 72 20 ::extRefHandler
7260: 7b 0a 3c 21 44 4f 43 54 59 50 45 20 72 6f 6f 74 {.<!DOCTYPE root
7270: 20 5b 0a 20 20 20 20 3c 21 41 54 54 4c 49 53 54 [. <!ATTLIST
7280: 20 72 6f 6f 74 20 66 69 78 65 64 20 43 44 41 54 root fixed CDAT
7290: 41 20 23 46 49 58 45 44 20 22 74 6f 54 68 61 74 A #FIXED "toThat
72a0: 22 3e 0a 5d 3e 0a 3c 72 6f 6f 74 2f 3e 7d 5d 0a ">.]>.<root/>}].
72b0: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 set root [$d
72c0: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
72d0: 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 nt]. set resu
72e0: 6c 74 20 5b 24 72 6f 6f 74 20 40 66 69 78 65 64 lt [$root @fixed
72f0: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 ]. $doc delet
7300: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
7310: 0a 7d 20 7b 74 6f 54 68 61 74 7d 0a 0a 74 65 73 .} {toThat}..tes
7320: 74 20 64 6f 6d 2d 34 2e 33 20 7b 2d 75 73 65 46 t dom-4.3 {-useF
7330: 6f 72 65 69 67 6e 44 54 44 20 31 20 77 69 74 68 oreignDTD 1 with
7340: 20 64 6f 63 75 6d 65 6e 74 20 77 69 74 68 20 69 document with i
7350: 6e 74 65 72 6e 61 6c 20 73 75 62 73 65 74 7d 20 nternal subset}
7360: 7b 6e 65 65 64 5f 75 72 69 7d 20 7b 0a 20 20 20 {need_uri} {.
7370: 20 73 65 74 20 62 61 73 65 55 52 49 20 66 69 6c set baseURI fil
7380: 65 3a 2f 2f 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b e://[file join [
7390: 70 77 64 5d 20 5b 66 69 6c 65 20 64 69 72 20 5b pwd] [file dir [
73a0: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 64 6f info script]] do
73b0: 6d 2e 74 65 73 74 5d 0a 20 20 20 20 73 65 74 20 m.test]. set
73c0: 3a 3a 74 44 4f 4d 3a 3a 75 73 65 46 6f 72 65 69 ::tDOM::useForei
73d0: 67 6e 44 54 44 20 22 64 61 74 61 2f 64 6f 6d 43 gnDTD "data/domC
73e0: 6d 64 31 2e 64 74 64 22 0a 20 20 20 20 73 65 74 md1.dtd". set
73f0: 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 doc [dom parse
7400: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 75 \. -u
7410: 73 65 46 6f 72 65 69 67 6e 44 54 44 20 31 20 5c seForeignDTD 1 \
7420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 62 61 . -ba
7430: 73 65 75 72 6c 20 24 62 61 73 65 55 52 49 20 5c seurl $baseURI \
7440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 65 78 . -ex
7450: 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d ternalentitycomm
7460: 61 6e 64 20 3a 3a 74 44 4f 4d 3a 3a 65 78 74 52 and ::tDOM::extR
7470: 65 66 48 61 6e 64 6c 65 72 20 7b 0a 3c 21 44 4f efHandler {.<!DO
7480: 43 54 59 50 45 20 72 6f 6f 74 20 5b 0a 20 20 20 CTYPE root [.
7490: 20 3c 21 41 54 54 4c 49 53 54 20 72 6f 6f 74 20 <!ATTLIST root
74a0: 66 69 78 65 64 32 20 43 44 41 54 41 20 23 46 49 fixed2 CDATA #FI
74b0: 58 45 44 20 22 74 6f 54 68 61 74 22 3e 0a 5d 3e XED "toThat">.]>
74c0: 0a 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 .<root/>}]. s
74d0: 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f et root [$doc do
74e0: 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 cumentElement].
74f0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 set result [$
7500: 72 6f 6f 74 20 40 66 69 78 65 64 5d 0a 20 20 20 root @fixed].
7510: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
7520: 5b 24 72 6f 6f 74 20 40 66 69 78 65 64 32 5d 0a [$root @fixed2].
7530: 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 0a $doc delete.
7540: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
7550: 20 7b 74 6f 54 68 69 73 20 74 6f 54 68 61 74 7d {toThis toThat}
7560: 0a 0a 74 65 73 74 20 64 6f 6d 2d 34 2e 34 20 7b ..test dom-4.4 {
7570: 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 44 20 31 -useForeignDTD 1
7580: 20 77 69 74 68 20 64 6f 63 75 6d 65 6e 74 20 77 with document w
7590: 69 74 68 6f 75 74 20 64 6f 63 75 6d 65 6e 74 20 ithout document
75a0: 64 65 63 6c 61 72 61 74 69 6f 6e 7d 20 7b 6e 65 declaration} {ne
75b0: 65 64 5f 75 72 69 7d 20 7b 0a 20 20 20 20 73 65 ed_uri} {. se
75c0: 74 20 62 61 73 65 55 52 49 20 66 69 6c 65 3a 2f t baseURI file:/
75d0: 2f 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 /[file join [pwd
75e0: 5d 20 5b 66 69 6c 65 20 64 69 72 20 5b 69 6e 66 ] [file dir [inf
75f0: 6f 20 73 63 72 69 70 74 5d 5d 20 64 6f 6d 2e 74 o script]] dom.t
7600: 65 73 74 5d 0a 20 20 20 20 73 65 74 20 3a 3a 74 est]. set ::t
7610: 44 4f 4d 3a 3a 75 73 65 46 6f 72 65 69 67 6e 44 DOM::useForeignD
7620: 54 44 20 22 64 61 74 61 2f 64 6f 6d 43 6d 64 31 TD "data/domCmd1
7630: 2e 64 74 64 22 0a 20 20 20 20 73 65 74 20 64 6f .dtd". set do
7640: 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 5c 0a 20 c [dom parse \.
7650: 20 20 20 20 20 20 20 20 20 20 20 2d 75 73 65 46 -useF
7660: 6f 72 65 69 67 6e 44 54 44 20 31 20 5c 0a 20 20 oreignDTD 1 \.
7670: 20 20 20 20 20 20 20 20 20 20 2d 62 61 73 65 75 -baseu
7680: 72 6c 20 24 62 61 73 65 55 52 49 20 5c 0a 20 20 rl $baseURI \.
7690: 20 20 20 20 20 20 20 20 20 20 2d 65 78 74 65 72 -exter
76a0: 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 nalentitycommand
76b0: 20 3a 3a 74 44 4f 4d 3a 3a 65 78 74 52 65 66 48 ::tDOM::extRefH
76c0: 61 6e 64 6c 65 72 20 3c 72 6f 6f 74 2f 3e 5d 0a andler <root/>].
76d0: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 set root [$d
76e0: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
76f0: 6e 74 5d 0a 20 20 20 20 73 65 74 20 72 65 73 75 nt]. set resu
7700: 6c 74 20 5b 24 72 6f 6f 74 20 40 66 69 78 65 64 lt [$root @fixed
7710: 5d 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 ]. $doc delet
7720: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
7730: 0a 7d 20 7b 74 6f 54 68 69 73 7d 0a 0a 74 65 73 .} {toThis}..tes
7740: 74 20 64 6f 6d 2d 34 2e 35 20 7b 2d 75 73 65 46 t dom-4.5 {-useF
7750: 6f 72 65 69 67 6e 44 54 44 20 31 20 64 6f 65 73 oreignDTD 1 does
7760: 20 6e 6f 74 20 6f 76 65 72 77 72 69 74 65 20 61 not overwrite a
7770: 20 67 69 76 65 6e 20 65 78 74 65 72 6e 61 6c 20 given external
7780: 73 75 62 73 65 74 7d 20 7b 6e 65 65 64 5f 75 72 subset} {need_ur
7790: 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 62 61 73 i} {. set bas
77a0: 65 55 52 49 20 66 69 6c 65 3a 2f 2f 5b 66 69 6c eURI file://[fil
77b0: 65 20 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b 66 69 e join [pwd] [fi
77c0: 6c 65 20 64 69 72 20 5b 69 6e 66 6f 20 73 63 72 le dir [info scr
77d0: 69 70 74 5d 5d 20 64 6f 6d 2e 74 65 73 74 5d 0a ipt]] dom.test].
77e0: 20 20 20 20 73 65 74 20 3a 3a 74 44 4f 4d 3a 3a set ::tDOM::
77f0: 75 73 65 46 6f 72 65 69 67 6e 44 54 44 20 22 64 useForeignDTD "d
7800: 61 74 61 2f 64 6f 6d 43 6d 64 31 2e 64 74 64 22 ata/domCmd1.dtd"
7810: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
7820: 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 m parse \.
7830: 20 20 20 20 20 20 2d 75 73 65 46 6f 72 65 69 67 -useForeig
7840: 6e 44 54 44 20 31 20 5c 0a 20 20 20 20 20 20 20 nDTD 1 \.
7850: 20 20 20 20 20 2d 62 61 73 65 75 72 6c 20 24 62 -baseurl $b
7860: 61 73 65 55 52 49 20 5c 0a 20 20 20 20 20 20 20 aseURI \.
7870: 20 20 20 20 20 2d 65 78 74 65 72 6e 61 6c 65 6e -externalen
7880: 74 69 74 79 63 6f 6d 6d 61 6e 64 20 3a 3a 74 44 titycommand ::tD
7890: 4f 4d 3a 3a 65 78 74 52 65 66 48 61 6e 64 6c 65 OM::extRefHandle
78a0: 72 20 7b 0a 3c 21 44 4f 43 54 59 50 45 20 72 6f r {.<!DOCTYPE ro
78b0: 6f 74 20 53 59 53 54 45 4d 20 22 64 61 74 61 2f ot SYSTEM "data/
78c0: 64 6f 6d 43 6d 64 32 2e 64 74 64 22 3e 0a 3c 72 domCmd2.dtd">.<r
78d0: 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 20 oot/>}]. set
78e0: 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 6d root [$doc docum
78f0: 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 20 entElement].
7900: 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f 6f set result [$roo
7910: 74 20 40 66 69 78 65 64 5d 0a 20 20 20 20 24 64 t @fixed]. $d
7920: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
7930: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 74 6f 54 68 t result.} {toTh
7940: 61 74 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 34 2e at}..test dom-4.
7950: 36 20 7b 2d 75 73 65 46 6f 72 65 69 67 6e 44 54 6 {-useForeignDT
7960: 44 20 77 69 74 68 20 6e 6f 6e 62 6f 6f 6c 65 61 D with nonboolea
7970: 6e 20 61 72 67 7d 20 7b 6e 65 65 64 5f 75 72 69 n arg} {need_uri
7980: 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 } {. set resu
7990: 6c 74 20 5b 63 61 74 63 68 20 7b 73 65 74 20 64 lt [catch {set d
79a0: 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 2d 75 oc [dom parse -u
79b0: 73 65 46 6f 72 65 69 67 6e 44 54 44 20 66 6f 6f seForeignDTD foo
79c0: 20 3c 72 6f 6f 74 2f 3e 5d 7d 20 65 72 72 4d 73 <root/>]} errMs
79d0: 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 g]. lappend r
79e0: 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 esult $errMsg.}
79f0: 7b 31 20 7b 65 78 70 65 63 74 65 64 20 62 6f 6f {1 {expected boo
7a00: 6c 65 61 6e 20 76 61 6c 75 65 20 62 75 74 20 67 lean value but g
7a10: 6f 74 20 22 66 6f 6f 22 7d 7d 0a 0a 74 65 73 74 ot "foo"}}..test
7a20: 20 64 6f 6d 2d 35 2e 31 20 7b 64 6f 63 75 6d 65 dom-5.1 {docume
7a30: 6e 74 20 77 69 74 68 20 65 78 74 65 72 6e 61 6c nt with external
7a40: 20 73 75 62 73 65 74 7d 20 7b 6e 65 65 64 5f 75 subset} {need_u
7a50: 72 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 62 61 ri} {. set ba
7a60: 73 65 55 52 49 20 66 69 6c 65 3a 2f 2f 5b 66 69 seURI file://[fi
7a70: 6c 65 20 6a 6f 69 6e 20 5b 70 77 64 5d 20 5b 66 le join [pwd] [f
7a80: 69 6c 65 20 64 69 72 20 5b 69 6e 66 6f 20 73 63 ile dir [info sc
7a90: 72 69 70 74 5d 5d 20 64 6f 6d 2e 74 65 73 74 5d ript]] dom.test]
7aa0: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
7ab0: 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 m parse \.
7ac0: 20 20 20 20 20 20 2d 62 61 73 65 75 72 6c 20 24 -baseurl $
7ad0: 62 61 73 65 55 52 49 20 5c 0a 20 20 20 20 20 20 baseURI \.
7ae0: 20 20 20 20 20 20 2d 65 78 74 65 72 6e 61 6c 65 -externale
7af0: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 3a 3a 74 ntitycommand ::t
7b00: 44 4f 4d 3a 3a 65 78 74 52 65 66 48 61 6e 64 6c DOM::extRefHandl
7b10: 65 72 20 7b 0a 3c 21 44 4f 43 54 59 50 45 20 72 er {.<!DOCTYPE r
7b20: 6f 6f 74 20 53 59 53 54 45 4d 20 22 64 61 74 61 oot SYSTEM "data
7b30: 2f 64 6f 6d 43 6d 64 32 2e 64 74 64 22 3e 0a 3c /domCmd2.dtd">.<
7b40: 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 20 73 65 74 root/>}]. set
7b50: 20 72 6f 6f 74 20 5b 24 64 6f 63 20 64 6f 63 75 root [$doc docu
7b60: 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a 20 20 20 mentElement].
7b70: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 72 6f set result [$ro
7b80: 6f 74 20 40 66 69 78 65 64 5d 0a 20 20 20 20 24 ot @fixed]. $
7b90: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 doc delete. s
7ba0: 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 74 6f 54 et result.} {toT
7bb0: 68 61 74 7d 0a 0a 70 72 6f 63 20 64 6f 6d 2d 35 hat}..proc dom-5
7bc0: 2e 32 20 7b 6d 79 70 61 72 6d 20 62 61 73 65 20 .2 {myparm base
7bd0: 73 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 systemId publicI
7be0: 64 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 64 d} {. set ::d
7bf0: 6f 6d 2d 35 5f 32 20 24 6d 79 70 61 72 6d 0a 20 om-5_2 $myparm.
7c00: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
7c10: 73 74 72 69 6e 67 20 64 75 6d 6d 79 20 22 22 5d string dummy ""]
7c20: 0a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 35 2e 32 .}..test dom-5.2
7c30: 20 7b 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 {-externalentit
7c40: 79 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 20 20 20 20 ycommand} {.
7c50: 73 65 74 20 3a 3a 64 6f 6d 2d 35 5f 32 20 22 22 set ::dom-5_2 ""
7c60: 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f . set doc [do
7c70: 6d 20 70 61 72 73 65 20 5c 0a 20 20 20 20 20 20 m parse \.
7c80: 20 20 20 20 20 20 20 20 20 20 20 2d 62 61 73 65 -base
7c90: 75 72 6c 20 22 64 75 6d 6d 79 22 20 5c 0a 20 20 url "dummy" \.
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d -
7cb0: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
7cc0: 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 64 6f 6d 2d mmand [list dom-
7cd0: 35 2e 32 20 74 68 69 73 44 6f 63 5d 20 7b 0a 20 5.2 thisDoc] {.
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7cf0: 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 72 6f <!DOCTYPE ro
7d00: 6f 74 20 53 59 53 54 45 4d 20 22 22 3e 0a 20 20 ot SYSTEM "">.
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d20: 20 20 20 3c 72 6f 6f 74 2f 3e 7d 5d 0a 20 20 20 <root/>}].
7d30: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
7d40: 20 73 65 74 20 3a 3a 64 6f 6d 2d 35 5f 32 0a 7d set ::dom-5_2.}
7d50: 20 7b 74 68 69 73 44 6f 63 7d 0a 0a 70 72 6f 63 {thisDoc}..proc
7d60: 20 64 6f 6d 2d 35 2e 33 20 7b 62 61 73 65 20 73 dom-5.3 {base s
7d70: 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 64 ystemId publicId
7d80: 7d 20 7b 0a 20 20 20 20 73 77 69 74 63 68 20 24 } {. switch $
7d90: 70 75 62 6c 69 63 49 64 20 7b 0a 20 20 20 20 20 publicId {.
7da0: 20 20 20 22 65 31 22 20 7b 0a 20 20 20 20 20 20 "e1" {.
7db0: 20 20 20 20 20 20 23 20 4e 6f 74 20 77 65 6c 6c # Not well
7dc0: 2d 66 6f 72 6d 65 64 0a 20 20 20 20 20 20 20 20 -formed.
7dd0: 20 20 20 20 73 65 74 20 64 61 74 61 20 22 3c 65 set data "<e
7de0: 2c 31 2f 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a ,1/>". }.
7df0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default
7e00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 {. er
7e10: 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 ror "unknown pub
7e20: 6c 69 63 20 49 44 22 0a 20 20 20 20 20 20 20 20 lic ID".
7e30: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 }. }. retu
7e40: 72 6e 20 5b 6c 69 73 74 20 22 73 74 72 69 6e 67 rn [list "string
7e50: 22 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a 7d " $base $data].}
7e60: 0a 74 65 73 74 20 64 6f 6d 2d 35 2e 33 20 7b 2d .test dom-5.3 {-
7e70: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
7e80: 6d 6d 61 6e 64 20 2d 20 6e 65 73 74 65 64 20 65 mmand - nested e
7e90: 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 xternal entities
7ea0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 65 } -body {. se
7eb0: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
7ec0: 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 70 61 {. dom pa
7ed0: 72 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 rse -externalent
7ee0: 69 74 79 63 6f 6d 6d 61 6e 64 20 64 6f 6d 2d 35 itycommand dom-5
7ef0: 2e 33 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 .3 \.
7f00: 20 7b 3c 21 44 4f 43 54 59 50 45 20 64 6f 63 20 {<!DOCTYPE doc
7f10: 5b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [.
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 <!
7f30: 45 4e 54 49 54 59 20 65 31 20 50 55 42 4c 49 43 ENTITY e1 PUBLIC
7f40: 20 22 65 31 22 20 22 65 31 2e 78 6d 6c 22 3e 0a "e1" "e1.xml">.
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 5d 3e 0a 20 ]>.
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
7f80: 64 6f 63 3e 26 65 31 3b 3c 2f 64 6f 63 3e 7d 0a doc>&e1;</doc>}.
7f90: 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 20 20 6c } msg]. l
7fa0: 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d 73 67 ist $result $msg
7fb0: 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 73 74 .} -result [list
7fc0: 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f 74 20 77 1 {error "not w
7fd0: 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 6e 76 61 ell-formed (inva
7fe0: 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 6e 20 65 lid token)" in e
7ff0: 6e 74 69 74 79 20 22 65 31 2e 78 6d 6c 22 20 61 ntity "e1.xml" a
8000: 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 63 74 t line 1 charact
8010: 65 72 20 32 0a 22 3c 65 2c 20 3c 2d 2d 45 72 72 er 2."<e, <--Err
8020: 6f 72 2d 2d 20 31 2f 3e 22 2c 20 72 65 66 65 72 or-- 1/>", refer
8030: 65 6e 63 65 64 20 61 74 20 6c 69 6e 65 20 34 20 enced at line 4
8040: 63 68 61 72 61 63 74 65 72 20 32 31 7d 5d 0a 0a character 21}]..
8050: 70 72 6f 63 20 64 6f 6d 2d 35 2e 34 20 7b 62 61 proc dom-5.4 {ba
8060: 73 65 20 73 79 73 74 65 6d 49 64 20 70 75 62 6c se systemId publ
8070: 69 63 49 64 7d 20 7b 0a 20 20 20 20 73 77 69 74 icId} {. swit
8080: 63 68 20 24 70 75 62 6c 69 63 49 64 20 7b 0a 20 ch $publicId {.
8090: 20 20 20 20 20 20 20 22 65 31 22 20 7b 0a 20 20 "e1" {.
80a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61 set da
80b0: 74 61 20 22 3c 65 31 3e 26 65 32 3b 3c 2f 65 31 ta "<e1>&e2;</e1
80c0: 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 >". }.
80d0: 20 20 20 20 20 22 65 32 22 20 7b 0a 20 20 20 20 "e2" {.
80e0: 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data
80f0: 20 22 3c 65 2c 32 2f 3e 22 0a 20 20 20 20 20 20 "<e,2/>".
8100: 20 20 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61 }. defa
8110: 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ult {.
8120: 20 20 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e error "unknown
8130: 20 70 75 62 6c 69 63 20 49 44 22 0a 20 20 20 20 public ID".
8140: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 }. }.
8150: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 73 74 return [list "st
8160: 72 69 6e 67 22 20 24 62 61 73 65 20 24 64 61 74 ring" $base $dat
8170: 61 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 35 2e a].}.test dom-5.
8180: 34 20 7b 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 4 {-externalenti
8190: 74 79 63 6f 6d 6d 61 6e 64 20 2d 20 6e 65 73 74 tycommand - nest
81a0: 65 64 20 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 ed external enti
81b0: 74 69 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 ties} -body {.
81c0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 set result [ca
81d0: 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20 64 6f tch {. do
81e0: 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 m parse -externa
81f0: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 64 lentitycommand d
8200: 6f 6d 2d 35 2e 34 20 5c 0a 20 20 20 20 20 20 20 om-5.4 \.
8210: 20 20 20 20 20 7b 3c 21 44 4f 43 54 59 50 45 20 {<!DOCTYPE
8220: 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 20 20 20 doc [.
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8240: 20 20 3c 21 45 4e 54 49 54 59 20 65 31 20 50 55 <!ENTITY e1 PU
8250: 42 4c 49 43 20 22 65 31 22 20 22 65 31 2e 78 6d BLIC "e1" "e1.xm
8260: 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 l">.
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8280: 3c 21 45 4e 54 49 54 59 20 65 32 20 50 55 42 4c <!ENTITY e2 PUBL
8290: 49 43 20 22 65 32 22 20 22 65 32 2e 78 6d 6c 22 IC "e2" "e2.xml"
82a0: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >.
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 3e ]>
82c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
82d0: 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f 64 6f 63 3e <doc>&e1;</doc>
82e0: 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 20 }. } msg].
82f0: 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d list $result $m
8300: 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 sg.} -result [li
8310: 73 74 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f 74 st 1 {error "not
8320: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 6e well-formed (in
8330: 76 61 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 6e valid token)" in
8340: 20 65 6e 74 69 74 79 20 22 65 32 2e 78 6d 6c 22 entity "e2.xml"
8350: 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 at line 1 chara
8360: 63 74 65 72 20 32 0a 22 3c 65 2c 20 3c 2d 2d 45 cter 2."<e, <--E
8370: 72 72 6f 72 2d 2d 20 32 2f 3e 22 2c 20 72 65 66 rror-- 2/>", ref
8380: 65 72 65 6e 63 65 64 20 69 6e 20 65 6e 74 69 74 erenced in entit
8390: 79 20 22 65 31 2e 78 6d 6c 22 20 61 74 20 6c 69 y "e1.xml" at li
83a0: 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 34 ne 1 character 4
83b0: 2c 20 72 65 66 65 72 65 6e 63 65 64 20 61 74 20 , referenced at
83c0: 6c 69 6e 65 20 35 20 63 68 61 72 61 63 74 65 72 line 5 character
83d0: 20 32 31 7d 5d 0a 0a 70 72 6f 63 20 64 6f 6d 2d 21}]..proc dom-
83e0: 35 2e 35 20 7b 62 61 73 65 20 73 79 73 74 65 6d 5.5 {base system
83f0: 49 64 20 70 75 62 6c 69 63 49 64 7d 20 7b 0a 20 Id publicId} {.
8400: 20 20 20 73 77 69 74 63 68 20 24 70 75 62 6c 69 switch $publi
8410: 63 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 65 cId {. "e
8420: 31 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 1" {.
8430: 20 73 65 74 20 64 61 74 61 20 22 3c 65 31 3e 26 set data "<e1>&
8440: 65 32 3b 3c 2f 65 31 3e 22 0a 20 20 20 20 20 20 e2;</e1>".
8450: 20 20 7d 0a 20 20 20 20 20 20 20 20 22 65 32 22 }. "e2"
8460: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {. s
8470: 65 74 20 64 61 74 61 20 22 3c 65 32 3e 26 65 33 et data "<e2>&e3
8480: 3b 3c 2f 65 32 3e 22 0a 20 20 20 20 20 20 20 20 ;</e2>".
8490: 7d 0a 20 20 20 20 20 20 20 20 22 65 33 22 20 7b }. "e3" {
84a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N
84b0: 6f 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 20 ot well-formed.
84c0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 set d
84d0: 61 74 61 20 22 3c 65 2c 33 2f 3e 22 0a 20 20 20 ata "<e,3/>".
84e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 }. d
84f0: 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 efault {.
8500: 20 20 20 20 20 65 72 72 6f 72 20 22 75 6e 6b 6e error "unkn
8510: 6f 77 6e 20 70 75 62 6c 69 63 20 49 44 22 0a 20 own public ID".
8520: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 }. }.
8530: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
8540: 22 73 74 72 69 6e 67 22 20 24 62 61 73 65 20 24 "string" $base $
8550: 64 61 74 61 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d data].}.test dom
8560: 2d 35 2e 35 20 7b 2d 65 78 74 65 72 6e 61 6c 65 -5.5 {-externale
8570: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 2d 20 6e ntitycommand - n
8580: 65 73 74 65 64 20 65 78 74 65 72 6e 61 6c 20 65 ested external e
8590: 6e 74 69 74 69 65 73 7d 20 2d 62 6f 64 79 20 7b ntities} -body {
85a0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
85b0: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20 [catch {.
85c0: 20 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 dom parse -exte
85d0: 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e rnalentitycomman
85e0: 64 20 64 6f 6d 2d 35 2e 35 20 5c 0a 20 20 20 20 d dom-5.5 \.
85f0: 20 20 20 20 20 20 20 20 7b 3c 21 44 4f 43 54 59 {<!DOCTY
8600: 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 PE doc [.
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8620: 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 31 <!ENTITY e1
8630: 20 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 31 PUBLIC "e1" "e1
8640: 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 .xml">.
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8660: 20 20 20 3c 21 45 4e 54 49 54 59 20 65 32 20 50 <!ENTITY e2 P
8670: 55 42 4c 49 43 20 22 65 32 22 20 22 65 32 2e 78 UBLIC "e2" "e2.x
8680: 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ml">.
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
86a0: 20 3c 21 45 4e 54 49 54 59 20 65 33 20 50 55 42 <!ENTITY e3 PUB
86b0: 4c 49 43 20 22 65 33 22 20 22 65 33 2e 78 6d 6c LIC "e3" "e3.xml
86c0: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ">.
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d ]
86e0: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >.
86f0: 20 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f 64 6f 63 <doc>&e1;</doc
8700: 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 0a 20 20 >}. } msg].
8710: 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 list $result $
8720: 6d 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c msg.} -result [l
8730: 69 73 74 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f ist 1 {error "no
8740: 74 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 t well-formed (i
8750: 6e 76 61 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 nvalid token)" i
8760: 6e 20 65 6e 74 69 74 79 20 22 65 33 2e 78 6d 6c n entity "e3.xml
8770: 22 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 " at line 1 char
8780: 61 63 74 65 72 20 32 0a 22 3c 65 2c 20 3c 2d 2d acter 2."<e, <--
8790: 45 72 72 6f 72 2d 2d 20 33 2f 3e 22 2c 20 72 65 Error-- 3/>", re
87a0: 66 65 72 65 6e 63 65 64 20 69 6e 20 65 6e 74 69 ferenced in enti
87b0: 74 79 20 22 65 32 2e 78 6d 6c 22 20 61 74 20 6c ty "e2.xml" at l
87c0: 69 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 ine 1 character
87d0: 34 2c 20 72 65 66 65 72 65 6e 63 65 64 20 69 6e 4, referenced in
87e0: 20 65 6e 74 69 74 79 20 22 65 31 2e 78 6d 6c 22 entity "e1.xml"
87f0: 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 at line 1 chara
8800: 63 74 65 72 20 34 2c 20 72 65 66 65 72 65 6e 63 cter 4, referenc
8810: 65 64 20 61 74 20 6c 69 6e 65 20 36 20 63 68 61 ed at line 6 cha
8820: 72 61 63 74 65 72 20 32 31 7d 5d 0a 0a 70 72 6f racter 21}]..pro
8830: 63 20 64 6f 6d 2d 35 2e 36 20 7b 62 61 73 65 20 c dom-5.6 {base
8840: 73 79 73 74 65 6d 49 64 20 70 75 62 6c 69 63 49 systemId publicI
8850: 64 7d 20 7b 0a 20 20 20 20 73 77 69 74 63 68 20 d} {. switch
8860: 24 70 75 62 6c 69 63 49 64 20 7b 0a 20 20 20 20 $publicId {.
8870: 20 20 20 20 22 65 31 22 20 7b 0a 20 20 20 20 20 "e1" {.
8880: 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 20 set data
8890: 5b 6f 70 65 6e 20 24 3a 3a 65 31 5d 0a 20 20 20 [open $::e1].
88a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 }. d
88b0: 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 efault {.
88c0: 20 20 20 20 20 65 72 72 6f 72 20 22 75 6e 6b 6e error "unkn
88d0: 6f 77 6e 20 70 75 62 6c 69 63 20 49 44 22 0a 20 own public ID".
88e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 }. }.
88f0: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 6f 70 65 lappend ::ope
8900: 6e 43 68 61 6e 6e 65 6c 73 20 24 64 61 74 61 0a nChannels $data.
8910: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list
8920: 20 22 63 68 61 6e 6e 65 6c 22 20 24 62 61 73 65 "channel" $base
8930: 20 24 64 61 74 61 5d 0a 7d 0a 74 65 73 74 20 64 $data].}.test d
8940: 6f 6d 2d 35 2e 36 20 7b 2d 65 78 74 65 72 6e 61 om-5.6 {-externa
8950: 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 2d lentitycommand -
8960: 20 6e 65 73 74 65 64 20 65 78 74 65 72 6e 61 6c nested external
8970: 20 65 6e 74 69 74 69 65 73 7d 20 2d 73 65 74 75 entities} -setu
8980: 70 20 7b 0a 20 20 20 20 73 65 74 20 65 31 20 5b p {. set e1 [
8990: 6d 61 6b 65 46 69 6c 65 20 22 3c 65 2c 31 2f 3e makeFile "<e,1/>
89a0: 22 20 65 31 2e 78 6d 6c 5d 0a 20 20 20 20 73 65 " e1.xml]. se
89b0: 74 20 6f 70 65 6e 43 68 61 6e 6e 65 6c 73 20 5b t openChannels [
89c0: 6c 69 73 74 5d 0a 7d 20 2d 62 6f 64 79 20 7b 0a list].} -body {.
89d0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
89e0: 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20 catch {.
89f0: 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 72 dom parse -exter
8a00: 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 nalentitycommand
8a10: 20 64 6f 6d 2d 35 2e 36 20 5c 0a 20 20 20 20 20 dom-5.6 \.
8a20: 20 20 20 20 20 20 20 7b 3c 21 44 4f 43 54 59 50 {<!DOCTYP
8a30: 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 20 E doc [.
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a50: 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 31 20 <!ENTITY e1
8a60: 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 31 2e PUBLIC "e1" "e1.
8a70: 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 xml">.
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a90: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
8aa0: 20 20 20 20 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f <doc>&e1;</
8ab0: 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 5d doc>}. } msg]
8ac0: 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 6c . list $resul
8ad0: 74 20 24 6d 73 67 0a 7d 20 2d 63 6c 65 61 6e 75 t $msg.} -cleanu
8ae0: 70 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 p {. foreach
8af0: 63 68 61 6e 6e 65 6c 20 24 6f 70 65 6e 43 68 61 channel $openCha
8b00: 6e 6e 65 6c 73 20 7b 63 6c 6f 73 65 20 24 63 68 nnels {close $ch
8b10: 61 6e 6e 65 6c 7d 0a 20 20 20 20 72 65 6d 6f 76 annel}. remov
8b20: 65 46 69 6c 65 20 65 31 2e 78 6d 6c 0a 7d 20 2d eFile e1.xml.} -
8b30: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 31 20 7b result [list 1 {
8b40: 65 72 72 6f 72 20 22 6e 6f 74 20 77 65 6c 6c 2d error "not well-
8b50: 66 6f 72 6d 65 64 20 28 69 6e 76 61 6c 69 64 20 formed (invalid
8b60: 74 6f 6b 65 6e 29 22 20 69 6e 20 65 6e 74 69 74 token)" in entit
8b70: 79 20 22 65 31 2e 78 6d 6c 22 20 61 74 20 6c 69 y "e1.xml" at li
8b80: 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 20 32 ne 1 character 2
8b90: 2c 20 72 65 66 65 72 65 6e 63 65 64 20 61 74 20 , referenced at
8ba0: 6c 69 6e 65 20 34 20 63 68 61 72 61 63 74 65 72 line 4 character
8bb0: 20 32 31 7d 5d 0a 0a 70 72 6f 63 20 64 6f 6d 2d 21}]..proc dom-
8bc0: 35 2e 37 20 7b 62 61 73 65 20 73 79 73 74 65 6d 5.7 {base system
8bd0: 49 64 20 70 75 62 6c 69 63 49 64 7d 20 7b 0a 20 Id publicId} {.
8be0: 20 20 20 73 77 69 74 63 68 20 24 70 75 62 6c 69 switch $publi
8bf0: 63 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 65 cId {. "e
8c00: 31 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 1" {.
8c10: 20 73 65 74 20 64 61 74 61 20 5b 6f 70 65 6e 20 set data [open
8c20: 24 3a 3a 65 31 5d 0a 20 20 20 20 20 20 20 20 7d $::e1]. }
8c30: 0a 20 20 20 20 20 20 20 20 22 65 32 22 20 7b 0a . "e2" {.
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
8c50: 64 61 74 61 20 5b 6f 70 65 6e 20 24 3a 3a 65 32 data [open $::e2
8c60: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ]. }.
8c70: 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 default {.
8c80: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
8c90: 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 6c 69 63 20 "unknown public
8ca0: 49 44 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 ID". }.
8cb0: 20 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 }. lappend
8cc0: 3a 3a 6f 70 65 6e 43 68 61 6e 6e 65 6c 73 20 24 ::openChannels $
8cd0: 64 61 74 61 0a 20 20 20 20 72 65 74 75 72 6e 20 data. return
8ce0: 5b 6c 69 73 74 20 22 63 68 61 6e 6e 65 6c 22 20 [list "channel"
8cf0: 24 62 61 73 65 20 24 64 61 74 61 5d 0a 7d 0a 74 $base $data].}.t
8d00: 65 73 74 20 64 6f 6d 2d 35 2e 37 20 7b 2d 65 78 est dom-5.7 {-ex
8d10: 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d ternalentitycomm
8d20: 61 6e 64 20 2d 20 6e 65 73 74 65 64 20 65 78 74 and - nested ext
8d30: 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 7d 20 ernal entities}
8d40: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74 -setup {. set
8d50: 20 65 31 20 5b 6d 61 6b 65 46 69 6c 65 20 22 3c e1 [makeFile "<
8d60: 65 31 3e 26 65 32 3b 3c 2f 65 31 3e 22 20 65 31 e1>&e2;</e1>" e1
8d70: 2e 78 6d 6c 5d 0a 20 20 20 20 73 65 74 20 65 32 .xml]. set e2
8d80: 20 5b 6d 61 6b 65 46 69 6c 65 20 22 3c 65 2c 32 [makeFile "<e,2
8d90: 2f 3e 22 20 65 32 2e 78 6d 6c 5d 0a 20 20 20 20 />" e2.xml].
8da0: 73 65 74 20 6f 70 65 6e 43 68 61 6e 6e 65 6c 73 set openChannels
8db0: 20 5b 6c 69 73 74 5d 0a 7d 20 2d 62 6f 64 79 20 [list].} -body
8dc0: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
8dd0: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 [catch {.
8de0: 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 dom parse -ext
8df0: 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 ernalentitycomma
8e00: 6e 64 20 64 6f 6d 2d 35 2e 37 20 5c 0a 20 20 20 nd dom-5.7 \.
8e10: 20 20 20 20 20 20 20 20 20 7b 3c 21 44 4f 43 54 {<!DOCT
8e20: 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 YPE doc [.
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e40: 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 <!ENTITY e
8e50: 31 20 50 55 42 4c 49 43 20 22 65 31 22 20 22 65 1 PUBLIC "e1" "e
8e60: 31 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 1.xml">.
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e80: 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 32 20 <!ENTITY e2
8e90: 50 55 42 4c 49 43 20 22 65 32 22 20 22 65 32 2e PUBLIC "e2" "e2.
8ea0: 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 xml">.
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ec0: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
8ed0: 20 20 20 20 20 3c 64 6f 63 3e 26 65 31 3b 3c 2f <doc>&e1;</
8ee0: 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 5d doc>}. } msg]
8ef0: 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 6c . list $resul
8f00: 74 20 24 6d 73 67 0a 7d 20 2d 63 6c 65 61 6e 75 t $msg.} -cleanu
8f10: 70 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 p {. foreach
8f20: 63 68 61 6e 6e 65 6c 20 24 6f 70 65 6e 43 68 61 channel $openCha
8f30: 6e 6e 65 6c 73 20 7b 63 6c 6f 73 65 20 24 63 68 nnels {close $ch
8f40: 61 6e 6e 65 6c 7d 0a 20 20 20 20 72 65 6d 6f 76 annel}. remov
8f50: 65 46 69 6c 65 20 65 31 2e 78 6d 6c 0a 20 20 20 eFile e1.xml.
8f60: 20 72 65 6d 6f 76 65 46 69 6c 65 20 65 32 2e 78 removeFile e2.x
8f70: 6d 6c 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 ml.} -result [li
8f80: 73 74 20 31 20 7b 65 72 72 6f 72 20 22 6e 6f 74 st 1 {error "not
8f90: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 28 69 6e well-formed (in
8fa0: 76 61 6c 69 64 20 74 6f 6b 65 6e 29 22 20 69 6e valid token)" in
8fb0: 20 65 6e 74 69 74 79 20 22 65 32 2e 78 6d 6c 22 entity "e2.xml"
8fc0: 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 61 at line 1 chara
8fd0: 63 74 65 72 20 32 2c 20 72 65 66 65 72 65 6e 63 cter 2, referenc
8fe0: 65 64 20 69 6e 20 65 6e 74 69 74 79 20 22 65 31 ed in entity "e1
8ff0: 2e 78 6d 6c 22 20 61 74 20 6c 69 6e 65 20 31 20 .xml" at line 1
9000: 63 68 61 72 61 63 74 65 72 20 34 2c 20 72 65 66 character 4, ref
9010: 65 72 65 6e 63 65 64 20 61 74 20 6c 69 6e 65 20 erenced at line
9020: 35 20 63 68 61 72 61 63 74 65 72 20 32 31 7d 5d 5 character 21}]
9030: 0a 0a 70 72 6f 63 20 64 6f 6d 2d 35 2e 38 20 7b ..proc dom-5.8 {
9040: 62 61 73 65 20 73 79 73 74 65 6d 49 64 20 70 75 base systemId pu
9050: 62 6c 69 63 49 64 7d 20 7b 0a 20 20 20 20 73 77 blicId} {. sw
9060: 69 74 63 68 20 24 70 75 62 6c 69 63 49 64 20 7b itch $publicId {
9070: 0a 20 20 20 20 20 20 20 20 22 65 31 22 20 7b 0a . "e1" {.
9080: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
9090: 64 61 74 61 20 5b 6f 70 65 6e 20 24 3a 3a 65 31 data [open $::e1
90a0: 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ]. }.
90b0: 20 20 20 20 22 65 32 22 20 7b 0a 20 20 20 20 20 "e2" {.
90c0: 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 20 set data
90d0: 5b 6f 70 65 6e 20 24 3a 3a 65 32 5d 0a 20 20 20 [open $::e2].
90e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 }. "
90f0: 65 33 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 e3" {.
9100: 20 20 73 65 74 20 64 61 74 61 20 5b 6f 70 65 6e set data [open
9110: 20 24 3a 3a 65 33 5d 0a 20 20 20 20 20 20 20 20 $::e3].
9120: 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c }. defaul
9130: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t {.
9140: 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 70 error "unknown p
9150: 75 62 6c 69 63 20 49 44 22 0a 20 20 20 20 20 20 ublic ID".
9160: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6c 61 }. }. la
9170: 70 70 65 6e 64 20 3a 3a 6f 70 65 6e 43 68 61 6e ppend ::openChan
9180: 6e 65 6c 73 20 24 64 61 74 61 0a 20 20 20 20 72 nels $data. r
9190: 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 63 68 61 eturn [list "cha
91a0: 6e 6e 65 6c 22 20 24 62 61 73 65 20 24 64 61 74 nnel" $base $dat
91b0: 61 5d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 35 2e a].}.test dom-5.
91c0: 38 20 7b 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 8 {-externalenti
91d0: 74 79 63 6f 6d 6d 61 6e 64 20 2d 20 6e 65 73 74 tycommand - nest
91e0: 65 64 20 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 ed external enti
91f0: 74 69 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 ties} -setup {.
9200: 20 20 20 73 65 74 20 65 31 20 5b 6d 61 6b 65 46 set e1 [makeF
9210: 69 6c 65 20 22 3c 65 31 3e 26 65 32 3b 3c 2f 65 ile "<e1>&e2;</e
9220: 31 3e 22 20 65 31 2e 78 6d 6c 5d 0a 20 20 20 20 1>" e1.xml].
9230: 73 65 74 20 65 32 20 5b 6d 61 6b 65 46 69 6c 65 set e2 [makeFile
9240: 20 22 3c 65 32 3e 26 65 33 3b 3c 2f 65 32 3e 22 "<e2>&e3;</e2>"
9250: 20 65 32 2e 78 6d 6c 5d 0a 20 20 20 20 73 65 74 e2.xml]. set
9260: 20 65 33 20 5b 6d 61 6b 65 46 69 6c 65 20 22 3c e3 [makeFile "<
9270: 65 2c 33 2f 3e 22 20 65 33 2e 78 6d 6c 5d 0a 20 e,3/>" e3.xml].
9280: 20 20 20 73 65 74 20 6f 70 65 6e 43 68 61 6e 6e set openChann
9290: 65 6c 73 20 5b 6c 69 73 74 5d 0a 7d 20 2d 62 6f els [list].} -bo
92a0: 64 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 dy {. set res
92b0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 ult [catch {.
92c0: 20 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 2d dom parse -
92d0: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
92e0: 6d 6d 61 6e 64 20 64 6f 6d 2d 35 2e 38 20 5c 0a mmand dom-5.8 \.
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 3c 21 44 {<!D
9300: 4f 43 54 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 OCTYPE doc [.
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9320: 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 <!ENTIT
9330: 59 20 65 31 20 50 55 42 4c 49 43 20 22 65 31 22 Y e1 PUBLIC "e1"
9340: 20 22 65 31 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 "e1.xml">.
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9360: 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 <!ENTITY
9370: 65 32 20 50 55 42 4c 49 43 20 22 65 32 22 20 22 e2 PUBLIC "e2" "
9380: 65 32 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 e2.xml">.
9390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93a0: 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 65 33 <!ENTITY e3
93b0: 20 50 55 42 4c 49 43 20 22 65 33 22 20 22 65 33 PUBLIC "e3" "e3
93c0: 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 .xml">.
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93e0: 20 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 ]>.
93f0: 20 20 20 20 20 20 3c 64 6f 63 3e 26 65 31 3b 3c <doc>&e1;<
9400: 2f 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d 73 67 /doc>}. } msg
9410: 5d 0a 20 20 20 20 6c 69 73 74 20 24 72 65 73 75 ]. list $resu
9420: 6c 74 20 24 6d 73 67 0a 7d 20 2d 63 6c 65 61 6e lt $msg.} -clean
9430: 75 70 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 up {. foreach
9440: 20 63 68 61 6e 6e 65 6c 20 24 6f 70 65 6e 43 68 channel $openCh
9450: 61 6e 6e 65 6c 73 20 7b 63 6c 6f 73 65 20 24 63 annels {close $c
9460: 68 61 6e 6e 65 6c 7d 0a 20 20 20 20 72 65 6d 6f hannel}. remo
9470: 76 65 46 69 6c 65 20 65 31 2e 78 6d 6c 0a 20 20 veFile e1.xml.
9480: 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 65 32 2e removeFile e2.
9490: 78 6d 6c 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 xml. removeFi
94a0: 6c 65 20 65 33 2e 78 6d 6c 0a 7d 20 2d 72 65 73 le e3.xml.} -res
94b0: 75 6c 74 20 5b 6c 69 73 74 20 31 20 7b 65 72 72 ult [list 1 {err
94c0: 6f 72 20 22 6e 6f 74 20 77 65 6c 6c 2d 66 6f 72 or "not well-for
94d0: 6d 65 64 20 28 69 6e 76 61 6c 69 64 20 74 6f 6b med (invalid tok
94e0: 65 6e 29 22 20 69 6e 20 65 6e 74 69 74 79 20 22 en)" in entity "
94f0: 65 33 2e 78 6d 6c 22 20 61 74 20 6c 69 6e 65 20 e3.xml" at line
9500: 31 20 63 68 61 72 61 63 74 65 72 20 32 2c 20 72 1 character 2, r
9510: 65 66 65 72 65 6e 63 65 64 20 69 6e 20 65 6e 74 eferenced in ent
9520: 69 74 79 20 22 65 32 2e 78 6d 6c 22 20 61 74 20 ity "e2.xml" at
9530: 6c 69 6e 65 20 31 20 63 68 61 72 61 63 74 65 72 line 1 character
9540: 20 34 2c 20 72 65 66 65 72 65 6e 63 65 64 20 69 4, referenced i
9550: 6e 20 65 6e 74 69 74 79 20 22 65 31 2e 78 6d 6c n entity "e1.xml
9560: 22 20 61 74 20 6c 69 6e 65 20 31 20 63 68 61 72 " at line 1 char
9570: 61 63 74 65 72 20 34 2c 20 72 65 66 65 72 65 6e acter 4, referen
9580: 63 65 64 20 61 74 20 6c 69 6e 65 20 36 20 63 68 ced at line 6 ch
9590: 61 72 61 63 74 65 72 20 32 31 7d 5d 0a 0a 74 65 aracter 21}]..te
95a0: 73 74 20 64 6f 6d 2d 35 2e 39 20 7b 57 72 6f 6e st dom-5.9 {Wron
95b0: 67 20 6f 70 74 69 6f 6e 20 61 66 74 65 72 20 2d g option after -
95c0: 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 6f externalentityco
95d0: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 mmand} -body {.
95e0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
95f0: 61 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 65 20 atch {dom parse
9600: 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 -externalentityc
9610: 6f 6d 6d 61 6e 64 20 3a 3a 74 44 4f 4d 3a 3a 65 ommand ::tDOM::e
9620: 78 74 52 65 66 48 61 6e 64 6c 65 72 20 5c 0a 20 xtRefHandler \.
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9640: 20 20 20 20 20 20 20 20 20 20 2d 75 73 65 46 6f -useFo
9650: 72 65 69 67 6e 44 54 44 20 66 6f 6f 7d 5d 0a 7d reignDTD foo}].}
9660: 20 2d 72 65 73 75 6c 74 20 31 0a 0a 74 65 73 74 -result 1..test
9670: 20 64 6f 6d 2d 36 2e 31 20 7b 75 73 65 20 69 6e dom-6.1 {use in
9680: 20 73 6c 61 76 65 20 69 6e 74 65 72 70 72 65 74 slave interpret
9690: 65 72 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 6c er} {. set sl
96a0: 61 76 65 20 5b 69 6e 74 65 72 70 20 63 72 65 61 ave [interp crea
96b0: 74 65 5d 0a 20 20 20 20 6c 6f 61 64 20 7b 7d 20 te]. load {}
96c0: 74 64 6f 6d 20 24 73 6c 61 76 65 0a 20 20 20 20 tdom $slave.
96d0: 69 6e 74 65 72 70 20 65 76 61 6c 20 24 73 6c 61 interp eval $sla
96e0: 76 65 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 6d ve {. dom
96f0: 20 70 61 72 73 65 20 3c 72 6f 6f 74 3e 66 6f 6f parse <root>foo
9700: 3c 2f 72 6f 6f 74 3e 20 64 6f 63 0a 20 20 20 20 </root> doc.
9710: 20 20 20 20 24 64 6f 63 20 64 6f 63 75 6d 65 6e $doc documen
9720: 74 45 6c 65 6d 65 6e 74 20 72 6f 6f 74 0a 20 20 tElement root.
9730: 20 20 7d 0a 20 20 20 20 69 6e 74 65 72 70 20 64 }. interp d
9740: 65 6c 65 74 65 20 24 73 6c 61 76 65 0a 7d 20 7b elete $slave.} {
9750: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 36 2e 32 20 }..test dom-6.2
9760: 7b 75 73 65 20 69 6e 20 73 6c 61 76 65 20 69 6e {use in slave in
9770: 74 65 72 70 72 65 74 65 72 7d 20 7b 0a 20 20 20 terpreter} {.
9780: 20 73 65 74 20 73 6c 61 76 65 20 5b 69 6e 74 65 set slave [inte
9790: 72 70 20 63 72 65 61 74 65 5d 0a 20 20 20 20 6c rp create]. l
97a0: 6f 61 64 20 7b 7d 20 74 64 6f 6d 20 24 73 6c 61 oad {} tdom $sla
97b0: 76 65 0a 20 20 20 20 69 6e 74 65 72 70 20 65 76 ve. interp ev
97c0: 61 6c 20 24 73 6c 61 76 65 20 7b 0a 20 20 20 20 al $slave {.
97d0: 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d set doc [dom
97e0: 20 70 61 72 73 65 20 3c 72 6f 6f 74 3e 66 6f 6f parse <root>foo
97f0: 3c 2f 72 6f 6f 74 3e 5d 0a 20 20 20 20 20 20 20 </root>].
9800: 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 20 set root [$doc
9810: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
9820: 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e 74 65 72 . }. inter
9830: 70 20 64 65 6c 65 74 65 20 24 73 6c 61 76 65 0a p delete $slave.
9840: 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 } {}..test dom-7
9850: 2e 31 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b .1 {setNameCheck
9860: 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 } {. set resu
9870: 6c 74 20 5b 64 6f 6d 20 73 65 74 4e 61 6d 65 43 lt [dom setNameC
9880: 68 65 63 6b 5d 0a 20 20 20 20 6c 61 70 70 65 6e heck]. lappen
9890: 64 20 72 65 73 75 6c 74 20 5b 64 6f 6d 20 73 65 d result [dom se
98a0: 74 4e 61 6d 65 43 68 65 63 6b 20 30 5d 0a 20 20 tNameCheck 0].
98b0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
98c0: 20 5b 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 [dom setNameChe
98d0: 63 6b 5d 0a 20 20 20 20 23 20 73 65 74 20 62 61 ck]. # set ba
98e0: 63 6b 20 74 6f 20 64 65 66 61 75 6c 74 0a 20 20 ck to default.
98f0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
9900: 20 5b 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 [dom setNameChe
9910: 63 6b 20 31 5d 0a 20 20 20 20 73 65 74 20 72 65 ck 1]. set re
9920: 73 75 6c 74 0a 7d 20 7b 31 20 30 20 30 20 31 7d sult.} {1 0 0 1}
9930: 0a 0a 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 63 ..set doc [dom c
9940: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 72 6f reateDocument ro
9950: 6f 74 5d 0a 23 20 65 6e 73 75 72 65 2c 20 77 65 ot].# ensure, we
9960: 27 76 65 20 74 68 65 20 64 65 66 61 75 6c 74 0a 've the default.
9970: 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b dom setNameCheck
9980: 20 31 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 32 1..test dom-7.2
9990: 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b 7d 20 {setNameCheck}
99a0: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
99b0: 20 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 [catch {$doc cr
99c0: 65 61 74 65 45 6c 65 6d 65 6e 74 20 22 69 6e 76 eateElement "inv
99d0: 61 6c 69 64 20 6e 61 6d 65 22 7d 20 65 72 72 4d alid name"} errM
99e0: 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 sg]. lappend
99f0: 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d result $errMsg.}
9a00: 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 74 61 67 {1 {Invalid tag
9a10: 20 6e 61 6d 65 20 27 69 6e 76 61 6c 69 64 20 6e name 'invalid n
9a20: 61 6d 65 27 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d ame'}}..test dom
9a30: 2d 37 2e 33 20 7b 73 65 74 4e 61 6d 65 43 68 65 -7.3 {setNameChe
9a40: 63 6b 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 ck} {. catch
9a50: 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 6d {$doc createElem
9a60: 65 6e 74 20 22 76 61 6c 69 64 3a 6e 61 6d 65 22 ent "valid:name"
9a70: 7d 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f }.} {0}..test do
9a80: 6d 2d 37 2e 34 20 7b 73 65 74 4e 61 6d 65 43 68 m-7.4 {setNameCh
9a90: 65 63 6b 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 eck} {. catch
9aa0: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 {$doc createEle
9ab0: 6d 65 6e 74 20 22 76 61 6c 69 64 3a 3a 6e 61 6d ment "valid::nam
9ac0: 65 22 7d 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 e"}.} {0}..test
9ad0: 64 6f 6d 2d 37 2e 35 20 7b 73 65 74 4e 61 6d 65 dom-7.5 {setName
9ae0: 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 64 6f 6d Check} {. dom
9af0: 20 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 30 0a setNameCheck 0.
9b00: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
9b10: 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 catch {$doc crea
9b20: 74 65 45 6c 65 6d 65 6e 74 20 22 69 6e 76 61 6c teElement "inval
9b30: 69 64 20 6e 61 6d 65 22 7d 20 65 72 72 4d 73 67 id name"} errMsg
9b40: 5d 0a 20 20 20 20 23 20 73 65 74 20 62 61 63 6b ]. # set back
9b50: 20 74 6f 20 64 65 66 61 75 6c 74 0a 20 20 20 20 to default.
9b60: 64 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b dom setNameCheck
9b70: 20 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 1. set resul
9b80: 74 0a 7d 20 7b 30 7d 0a 0a 74 65 73 74 20 64 6f t.} {0}..test do
9b90: 6d 2d 37 2e 36 20 7b 73 65 74 4e 61 6d 65 43 68 m-7.6 {setNameCh
9ba0: 65 63 6b 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 eck} {. set r
9bb0: 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 64 esult [catch {$d
9bc0: 6f 63 20 63 72 65 61 74 65 45 6c 65 6d 65 6e 74 oc createElement
9bd0: 4e 53 20 22 64 75 6d 6d 79 6e 73 22 20 22 69 6e NS "dummyns" "in
9be0: 76 61 6c 69 64 20 6e 61 6d 65 22 7d 20 65 72 72 valid name"} err
9bf0: 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 Msg]. lappend
9c00: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
9c10: 7d 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 66 75 } {1 {Invalid fu
9c20: 6c 6c 20 71 75 61 6c 69 66 69 65 64 20 74 61 67 ll qualified tag
9c30: 20 6e 61 6d 65 20 27 69 6e 76 61 6c 69 64 20 6e name 'invalid n
9c40: 61 6d 65 27 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d ame'}}..test dom
9c50: 2d 37 2e 37 20 7b 73 65 74 4e 61 6d 65 43 68 65 -7.7 {setNameChe
9c60: 63 6b 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 ck} {. catch
9c70: 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 6d {$doc createElem
9c80: 65 6e 74 4e 53 20 22 64 75 6d 6d 79 6e 73 22 20 entNS "dummyns"
9c90: 22 76 61 6c 69 64 3a 6e 61 6d 65 22 7d 0a 7d 20 "valid:name"}.}
9ca0: 7b 30 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 2e {0}..test dom-7.
9cb0: 38 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b 7d 8 {setNameCheck}
9cc0: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c {. set resul
9cd0: 74 20 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 63 t [catch {$doc c
9ce0: 72 65 61 74 65 45 6c 65 6d 65 6e 74 4e 53 20 22 reateElementNS "
9cf0: 64 75 6d 6d 79 6e 73 22 20 22 69 6e 76 61 6c 69 dummyns" "invali
9d00: 64 3a 3a 6e 61 6d 65 22 7d 20 65 72 72 4d 73 67 d::name"} errMsg
9d10: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 ]. lappend re
9d20: 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 7b sult $errMsg.} {
9d30: 31 20 7b 49 6e 76 61 6c 69 64 20 66 75 6c 6c 20 1 {Invalid full
9d40: 71 75 61 6c 69 66 69 65 64 20 74 61 67 20 6e 61 qualified tag na
9d50: 6d 65 20 27 69 6e 76 61 6c 69 64 3a 3a 6e 61 6d me 'invalid::nam
9d60: 65 27 7d 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 e'}}..test dom-7
9d70: 2e 39 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b .9 {setNameCheck
9d80: 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e } {. dom setN
9d90: 61 6d 65 43 68 65 63 6b 20 30 0a 20 20 20 20 73 ameCheck 0. s
9da0: 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 et result [catch
9db0: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 45 6c 65 {$doc createEle
9dc0: 6d 65 6e 74 4e 53 20 22 64 75 6d 6d 79 6e 73 22 mentNS "dummyns"
9dd0: 20 22 69 6e 76 61 6c 69 64 20 6e 61 6d 65 22 7d "invalid name"}
9de0: 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 23 20 73 errMsg]. # s
9df0: 65 74 20 62 61 63 6b 20 74 6f 20 64 65 66 61 75 et back to defau
9e00: 6c 74 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 lt. dom setNa
9e10: 6d 65 43 68 65 63 6b 20 31 0a 20 20 20 20 73 65 meCheck 1. se
9e20: 74 20 72 65 73 75 6c 74 0a 7d 20 7b 30 7d 0a 0a t result.} {0}..
9e30: 74 65 73 74 20 64 6f 6d 2d 37 2e 31 30 20 7b 73 test dom-7.10 {s
9e40: 65 74 54 65 78 74 43 68 65 63 6b 7d 20 7b 0a 20 etTextCheck} {.
9e50: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
9e60: 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 74 atch {$doc creat
9e70: 65 43 6f 6d 6d 65 6e 74 20 22 76 61 6c 69 64 20 eComment "valid
9e80: 63 6f 6d 6d 65 6e 74 22 7d 5d 0a 20 20 20 20 6c comment"}]. l
9e90: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 append result [c
9ea0: 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 74 atch {$doc creat
9eb0: 65 43 6f 6d 6d 65 6e 74 20 22 69 6e 76 61 6c 69 eComment "invali
9ec0: 64 20 2d 2d 20 63 6f 6d 6d 65 6e 74 22 7d 5d 0a d -- comment"}].
9ed0: 20 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 dom setTextC
9ee0: 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 70 65 heck 0. lappe
9ef0: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 nd result [catch
9f00: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 43 6f 6d {$doc createCom
9f10: 6d 65 6e 74 20 22 69 6e 76 61 6c 69 64 20 2d 2d ment "invalid --
9f20: 20 63 6f 6d 6d 65 6e 74 22 7d 5d 0a 20 20 20 20 comment"}].
9f30: 64 6f 6d 20 73 65 74 54 65 78 74 43 68 65 63 6b dom setTextCheck
9f40: 20 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 1. set resul
9f50: 74 0a 7d 20 7b 30 20 31 20 30 7d 0a 0a 74 65 73 t.} {0 1 0}..tes
9f60: 74 20 64 6f 6d 2d 37 2e 31 31 20 7b 73 65 74 54 t dom-7.11 {setT
9f70: 65 78 74 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 extCheck} {.
9f80: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 set result [catc
9f90: 68 20 7b 24 64 6f 63 20 63 72 65 61 74 65 43 44 h {$doc createCD
9fa0: 41 54 41 53 65 63 74 69 6f 6e 20 22 3c 76 61 6c ATASection "<val
9fb0: 69 64 2f 3e 22 7d 5d 0a 20 20 20 20 6c 61 70 70 id/>"}]. lapp
9fc0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 end result [catc
9fd0: 68 20 7b 24 64 6f 63 20 63 72 65 61 74 65 43 44 h {$doc createCD
9fe0: 41 54 41 53 65 63 74 69 6f 6e 20 22 3c 69 6e 76 ATASection "<inv
9ff0: 61 6c 69 64 3e 5d 5d 3e 3c 2f 69 6e 76 61 6c 69 alid>]]></invali
a000: 64 22 7d 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 d"}]. dom set
a010: 54 65 78 74 43 68 65 63 6b 20 30 0a 20 20 20 20 TextCheck 0.
a020: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [
a030: 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 61 catch {$doc crea
a040: 74 65 43 44 41 54 41 53 65 63 74 69 6f 6e 20 22 teCDATASection "
a050: 3c 69 6e 76 61 6c 69 64 3e 5d 5d 3e 3c 2f 69 6e <invalid>]]></in
a060: 76 61 6c 69 64 22 7d 5d 0a 20 20 20 20 64 6f 6d valid"}]. dom
a070: 20 73 65 74 54 65 78 74 43 68 65 63 6b 20 31 0a setTextCheck 1.
a080: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d set result.}
a090: 20 7b 30 20 31 20 30 7d 0a 0a 74 65 73 74 20 64 {0 1 0}..test d
a0a0: 6f 6d 2d 37 2e 31 32 20 7b 73 65 74 54 65 78 74 om-7.12 {setText
a0b0: 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 73 65 74 Check} {. set
a0c0: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
a0d0: 24 64 6f 63 20 63 72 65 61 74 65 54 65 78 74 4e $doc createTextN
a0e0: 6f 64 65 20 22 64 61 74 61 22 7d 5d 0a 20 20 20 ode "data"}].
a0f0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
a100: 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 63 72 65 [catch {$doc cre
a110: 61 74 65 54 65 78 74 4e 6f 64 65 20 22 6e 6f 74 ateTextNode "not
a120: 20 58 4d 4c 20 5c 75 30 30 30 32 20 43 68 61 72 XML \u0002 Char
a130: 20 64 61 74 61 22 7d 5d 0a 20 20 20 20 64 6f 6d data"}]. dom
a140: 20 73 65 74 54 65 78 74 43 68 65 63 6b 20 30 0a setTextCheck 0.
a150: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
a160: 6c 74 20 5b 63 61 74 63 68 20 7b 24 64 6f 63 20 lt [catch {$doc
a170: 63 72 65 61 74 65 54 65 78 74 4e 6f 64 65 20 22 createTextNode "
a180: 6e 6f 74 20 58 4d 4c 20 5c 75 30 30 30 32 20 43 not XML \u0002 C
a190: 68 61 72 20 64 61 74 61 22 7d 5d 0a 20 20 20 20 har data"}].
a1a0: 64 6f 6d 20 73 65 74 54 65 78 74 43 68 65 63 6b dom setTextCheck
a1b0: 20 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 1. set resul
a1c0: 74 0a 7d 20 7b 30 20 31 20 30 7d 0a 0a 74 65 73 t.} {0 1 0}..tes
a1d0: 74 20 64 6f 6d 2d 37 2e 31 33 20 7b 73 65 74 4e t dom-7.13 {setN
a1e0: 61 6d 65 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 ameCheck} {.
a1f0: 73 65 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 set result [catc
a200: 68 20 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 h {$doc createPr
a210: 6f 63 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 ocessingInstruct
a220: 69 6f 6e 20 22 74 61 72 67 65 74 22 20 22 64 61 ion "target" "da
a230: 74 61 22 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e ta"}]. lappen
a240: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 d result [catch
a250: 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f 63 {$doc createProc
a260: 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 6f essingInstructio
a270: 6e 20 22 74 61 72 20 67 65 74 22 20 22 64 61 74 n "tar get" "dat
a280: 61 22 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 a"}]. lappend
a290: 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b result [catch {
a2a0: 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f 63 65 $doc createProce
a2b0: 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 6f 6e ssingInstruction
a2c0: 20 22 78 4d 6c 22 20 22 64 61 74 61 22 7d 5d 0a "xMl" "data"}].
a2d0: 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d 65 43 dom setNameC
a2e0: 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 70 65 heck 0. lappe
a2f0: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 nd result [catch
a300: 20 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f {$doc createPro
a310: 63 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 cessingInstructi
a320: 6f 6e 20 22 74 61 72 20 67 65 74 22 20 22 64 61 on "tar get" "da
a330: 74 61 22 7d 5d 0a 20 20 20 20 6c 61 70 70 65 6e ta"}]. lappen
a340: 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 d result [catch
a350: 7b 24 64 6f 63 20 63 72 65 61 74 65 50 72 6f 63 {$doc createProc
a360: 65 73 73 69 6e 67 49 6e 73 74 72 75 63 74 69 6f essingInstructio
a370: 6e 20 22 78 4d 6c 22 20 22 64 61 74 61 22 7d 5d n "xMl" "data"}]
a380: 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d 65 . dom setName
a390: 43 68 65 63 6b 20 31 0a 20 20 20 20 73 65 74 20 Check 1. set
a3a0: 72 65 73 75 6c 74 0a 7d 20 7b 30 20 31 20 31 20 result.} {0 1 1
a3b0: 30 20 30 7d 0a 0a 73 65 74 20 72 6f 6f 74 20 5b 0 0}..set root [
a3c0: 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 $doc documentEle
a3d0: 6d 65 6e 74 5d 0a 0a 74 65 73 74 20 64 6f 6d 2d ment]..test dom-
a3e0: 37 2e 31 34 20 7b 73 65 74 4e 61 6d 65 43 68 65 7.14 {setNameChe
a3f0: 63 6b 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 ck} {. set re
a400: 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 72 6f sult [catch {$ro
a410: 6f 74 20 61 70 70 65 6e 64 46 72 6f 6d 4c 69 73 ot appendFromLis
a420: 74 20 7b 22 61 20 62 22 20 7b 7d 20 7b 7d 7d 7d t {"a b" {} {}}}
a430: 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 70 errMsg]. lap
a440: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 pend result $err
a450: 4d 73 67 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e Msg. dom setN
a460: 61 6d 65 43 68 65 63 6b 20 30 0a 20 20 20 20 6c ameCheck 0. l
a470: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 append result [c
a480: 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 70 70 65 atch {$root appe
a490: 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 22 61 20 62 ndFromList {"a b
a4a0: 22 20 7b 7d 20 7b 7d 7d 7d 5d 0a 20 20 20 20 64 " {} {}}}]. d
a4b0: 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 om setNameCheck
a4c0: 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 1. set result
a4d0: 0a 7d 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 74 .} {1 {Invalid t
a4e0: 61 67 20 6e 61 6d 65 20 27 61 20 62 27 7d 20 30 ag name 'a b'} 0
a4f0: 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 31 35 }..test dom-7.15
a500: 20 7b 73 65 74 4e 61 6d 65 43 68 65 63 6b 7d 20 {setNameCheck}
a510: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 {. set result
a520: 20 5b 63 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 [catch {$root a
a530: 70 70 65 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 61 ppendFromList {a
a540: 20 7b 61 74 74 31 20 22 61 74 74 31 20 76 61 6c {att1 "att1 val
a550: 75 65 22 20 22 61 74 74 20 32 22 20 22 61 74 74 ue" "att 2" "att
a560: 32 20 76 61 6c 75 65 22 7d 20 7b 7d 7d 7d 20 65 2 value"} {}}} e
a570: 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 rrMsg]. lappe
a580: 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 nd result $errMs
a590: 67 0a 20 20 20 20 64 6f 6d 20 73 65 74 4e 61 6d g. dom setNam
a5a0: 65 43 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 eCheck 0. lap
a5b0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 pend result [cat
a5c0: 63 68 20 7b 24 72 6f 6f 74 20 61 70 70 65 6e 64 ch {$root append
a5d0: 46 72 6f 6d 4c 69 73 74 20 7b 61 20 7b 61 74 74 FromList {a {att
a5e0: 31 20 22 61 74 74 31 20 76 61 6c 75 65 22 20 22 1 "att1 value" "
a5f0: 61 74 74 20 32 22 20 22 61 74 74 32 20 76 61 6c att 2" "att2 val
a600: 75 65 22 7d 20 7b 7d 7d 7d 5d 0a 20 20 20 20 64 ue"} {}}}]. d
a610: 6f 6d 20 73 65 74 4e 61 6d 65 43 68 65 63 6b 20 om setNameCheck
a620: 31 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 1. set result
a630: 0a 7d 20 7b 31 20 7b 49 6e 76 61 6c 69 64 20 61 .} {1 {Invalid a
a640: 74 74 72 69 62 75 74 65 20 6e 61 6d 65 20 27 61 ttribute name 'a
a650: 74 74 20 32 27 7d 20 30 7d 0a 0a 74 65 73 74 20 tt 2'} 0}..test
a660: 64 6f 6d 2d 37 2e 31 36 20 7b 73 65 74 54 65 78 dom-7.16 {setTex
a670: 74 43 68 65 63 6b 7d 20 7b 0a 20 20 20 20 73 65 tCheck} {. se
a680: 74 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 t result [catch
a690: 7b 24 72 6f 6f 74 20 61 70 70 65 6e 64 46 72 6f {$root appendFro
a6a0: 6d 4c 69 73 74 20 7b 61 20 7b 61 74 74 31 20 22 mList {a {att1 "
a6b0: 61 74 74 31 20 76 61 6c 75 65 22 20 22 61 74 74 att1 value" "att
a6c0: 32 22 20 22 61 74 74 32 20 76 61 6c 75 65 20 5c 2" "att2 value \
a6d0: 75 30 30 30 32 22 7d 20 7b 7d 7d 7d 20 65 72 72 u0002"} {}}} err
a6e0: 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 Msg]. lappend
a6f0: 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a result $errMsg.
a700: 20 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 dom setTextC
a710: 68 65 63 6b 20 30 0a 20 20 20 20 6c 61 70 70 65 heck 0. lappe
a720: 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 nd result [catch
a730: 20 7b 24 72 6f 6f 74 20 61 70 70 65 6e 64 46 72 {$root appendFr
a740: 6f 6d 4c 69 73 74 20 7b 61 20 7b 61 74 74 31 20 omList {a {att1
a750: 22 61 74 74 31 20 76 61 6c 75 65 22 20 22 61 74 "att1 value" "at
a760: 74 32 22 20 22 61 74 74 32 20 76 61 6c 75 65 20 t2" "att2 value
a770: 5c 75 30 30 30 32 22 7d 20 7b 7d 7d 7d 5d 0a 20 \u0002"} {}}}].
a780: 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 68 dom setTextCh
a790: 65 63 6b 20 31 0a 20 20 20 20 73 65 74 20 72 65 eck 1. set re
a7a0: 73 75 6c 74 0a 7d 20 5b 6c 69 73 74 20 31 20 22 sult.} [list 1 "
a7b0: 49 6e 76 61 6c 69 64 20 61 74 74 72 69 62 75 74 Invalid attribut
a7c0: 65 20 76 61 6c 75 65 20 27 61 74 74 32 20 76 61 e value 'att2 va
a7d0: 6c 75 65 20 5c 75 30 30 30 32 27 22 20 30 5d 0a lue \u0002'" 0].
a7e0: 0a 74 65 73 74 20 64 6f 6d 2d 37 2e 31 37 20 7b .test dom-7.17 {
a7f0: 73 65 74 54 65 78 74 43 68 65 63 6b 7d 20 7b 0a setTextCheck} {.
a800: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
a810: 63 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 70 70 catch {$root app
a820: 65 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 5c 23 74 endFromList {\#t
a830: 65 78 74 20 22 66 6f 6f 20 5c 75 30 30 30 32 22 ext "foo \u0002"
a840: 7d 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 6c }} errMsg]. l
a850: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 65 append result $e
a860: 72 72 4d 73 67 0a 20 20 20 20 64 6f 6d 20 73 65 rrMsg. dom se
a870: 74 54 65 78 74 43 68 65 63 6b 20 30 0a 20 20 20 tTextCheck 0.
a880: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
a890: 5b 63 61 74 63 68 20 7b 24 72 6f 6f 74 20 61 70 [catch {$root ap
a8a0: 70 65 6e 64 46 72 6f 6d 4c 69 73 74 20 7b 5c 23 pendFromList {\#
a8b0: 74 65 78 74 20 22 66 6f 6f 20 5c 75 30 30 30 32 text "foo \u0002
a8c0: 22 7d 7d 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 "}}]. dom set
a8d0: 54 65 78 74 43 68 65 63 6b 20 31 0a 20 20 20 20 TextCheck 1.
a8e0: 73 65 74 20 72 65 73 75 6c 74 20 20 20 20 0a 7d set result .}
a8f0: 20 5b 6c 69 73 74 20 31 20 22 49 6e 76 61 6c 69 [list 1 "Invali
a900: 64 20 74 65 78 74 20 76 61 6c 75 65 20 27 66 6f d text value 'fo
a910: 6f 20 5c 75 30 30 30 32 27 22 20 30 5d 0a 0a 24 o \u0002'" 0]..$
a920: 64 6f 63 20 64 65 6c 65 74 65 0a 0a 74 65 73 74 doc delete..test
a930: 20 64 6f 6d 2d 37 2e 31 38 20 7b 73 65 74 54 65 dom-7.18 {setTe
a940: 78 74 43 68 65 63 6b 20 61 6e 64 20 61 70 70 65 xtCheck and appe
a950: 6e 64 46 72 6f 6d 53 63 72 69 70 74 7d 20 7b 0a ndFromScript} {.
a960: 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d set doc [dom
a970: 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e createDocumentN
a980: 6f 64 65 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 ode]. dom set
a990: 54 65 78 74 43 68 65 63 6b 20 30 0a 20 20 20 20 TextCheck 0.
a9a0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e namespace eval n
a9b0: 6f 64 65 43 6d 64 73 20 7b 0a 20 20 20 20 20 20 odeCmds {.
a9c0: 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 dom createNode
a9d0: 43 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f 64 65 20 Cmd elementNode
a9e0: 64 6f 63 0a 20 20 20 20 20 20 20 20 64 6f 6d 20 doc. dom
a9f0: 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 74 65 createNodeCmd te
aa00: 78 74 4e 6f 64 65 20 74 0a 20 20 20 20 7d 0a 20 xtNode t. }.
aa10: 20 20 20 24 64 6f 63 20 61 70 70 65 6e 64 46 72 $doc appendFr
aa20: 6f 6d 53 63 72 69 70 74 20 7b 0a 20 20 20 20 20 omScript {.
aa30: 20 20 20 6e 6f 64 65 43 6d 64 73 3a 3a 64 6f 63 nodeCmds::doc
aa40: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e {. n
aa50: 6f 64 65 43 6d 64 73 3a 3a 74 20 22 66 6f 6f 5c odeCmds::t "foo\
aa60: 75 30 30 30 33 62 61 72 22 0a 20 20 20 20 20 20 u0003bar".
aa70: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 6f }. }. do
aa80: 6d 20 73 65 74 54 65 78 74 43 68 65 63 6b 20 31 m setTextCheck 1
aa90: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
aaa0: 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 [$doc asXML -ind
aab0: 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 ent none]. $d
aac0: 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 oc delete. se
aad0: 74 20 72 65 73 75 6c 74 0a 7d 20 22 3c 64 6f 63 t result.} "<doc
aae0: 3e 66 6f 6f 5c 75 30 30 30 33 62 61 72 3c 2f 64 >foo\u0003bar</d
aaf0: 6f 63 3e 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 37 oc>"..test dom-7
ab00: 2e 31 39 20 7b 73 65 74 54 65 78 74 43 68 65 63 .19 {setTextChec
ab10: 6b 20 61 6e 64 20 61 70 70 65 6e 64 46 72 6f 6d k and appendFrom
ab20: 53 63 72 69 70 74 20 2d 20 73 65 74 54 65 78 74 Script - setText
ab30: 43 68 65 63 6b 20 73 74 61 74 65 20 61 74 20 63 Check state at c
ab40: 72 65 61 74 65 20 74 69 6d 65 20 69 73 20 63 72 reate time is cr
ab50: 75 63 69 61 6c 7d 20 7b 0a 20 20 20 20 73 65 74 ucial} {. set
ab60: 20 64 6f 63 20 5b 64 6f 6d 20 63 72 65 61 74 65 doc [dom create
ab70: 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d 0a 20 20 DocumentNode].
ab80: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c namespace eval
ab90: 20 6e 6f 64 65 43 6d 64 73 20 7b 0a 20 20 20 20 nodeCmds {.
aba0: 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f dom createNo
abb0: 64 65 43 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f 64 deCmd elementNod
abc0: 65 20 64 6f 63 0a 20 20 20 20 20 20 20 20 64 6f e doc. do
abd0: 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 m createNodeCmd
abe0: 74 65 78 74 4e 6f 64 65 20 74 0a 20 20 20 20 7d textNode t. }
abf0: 0a 20 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 . dom setText
ac00: 43 68 65 63 6b 20 30 0a 20 20 20 20 73 65 74 20 Check 0. set
ac10: 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 result [catch {$
ac20: 64 6f 63 20 61 70 70 65 6e 64 46 72 6f 6d 53 63 doc appendFromSc
ac30: 72 69 70 74 20 7b 0a 20 20 20 20 20 20 20 20 6e ript {. n
ac40: 6f 64 65 43 6d 64 73 3a 3a 64 6f 63 20 7b 0a 20 odeCmds::doc {.
ac50: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 43 nodeC
ac60: 6d 64 73 3a 3a 74 20 22 66 6f 6f 5c 75 30 30 30 mds::t "foo\u000
ac70: 33 62 61 72 22 0a 20 20 20 20 20 20 20 20 7d 0a 3bar". }.
ac80: 20 20 20 20 7d 7d 20 65 72 72 4d 73 67 5d 0a 20 }} errMsg].
ac90: 20 20 20 64 6f 6d 20 73 65 74 54 65 78 74 43 68 dom setTextCh
aca0: 65 63 6b 20 31 0a 20 20 20 20 24 64 6f 63 20 64 eck 1. $doc d
acb0: 65 6c 65 74 65 0a 20 20 20 20 6c 61 70 70 65 6e elete. lappen
acc0: 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 67 d result $errMsg
acd0: 0a 7d 20 5b 6c 69 73 74 20 31 20 22 49 6e 76 61 .} [list 1 "Inva
ace0: 6c 69 64 20 74 65 78 74 20 76 61 6c 75 65 20 27 lid text value '
acf0: 66 6f 6f 5c 75 30 30 30 33 62 61 72 27 22 5d 0a foo\u0003bar'"].
ad00: 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 31 20 7b 63 .test dom-8.1 {c
ad10: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 reateDocumentNod
ad20: 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 e} {. set res
ad30: 75 6c 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 ult [catch {dom
ad40: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f createDocumentNo
ad50: 64 65 20 66 6f 6f 20 62 61 72 7d 5d 0a 7d 20 7b de foo bar}].} {
ad60: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 32 1}..test dom-8.2
ad70: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
ad80: 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 Node} {. set
ad90: 64 6f 63 4e 6f 64 65 20 5b 64 6f 6d 20 63 72 65 docNode [dom cre
ada0: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d ateDocumentNode]
adb0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
adc0: 5b 24 64 6f 63 4e 6f 64 65 20 61 73 58 4d 4c 20 [$docNode asXML
add0: 2d 69 6e 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 -indent none].
ade0: 20 20 24 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 $docNode delet
adf0: 65 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 e. set result
ae00: 0a 7d 20 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d .} {}..test dom-
ae10: 38 2e 33 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 8.3 {createDocum
ae20: 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 64 entNode} {. d
ae30: 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e om createDocumen
ae40: 74 4e 6f 64 65 20 64 6f 63 4e 6f 64 65 0a 20 20 tNode docNode.
ae50: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 64 set result [$d
ae60: 6f 63 4e 6f 64 65 20 61 73 58 4d 4c 20 2d 69 6e ocNode asXML -in
ae70: 64 65 6e 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 dent none]. $
ae80: 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 docNode delete.
ae90: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 set result.}
aea0: 7b 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 34 {}..test dom-8.4
aeb0: 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 {createDocument
aec0: 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 73 65 74 20 Node} {. set
aed0: 64 6f 63 4e 6f 64 65 20 5b 64 6f 6d 20 63 72 65 docNode [dom cre
aee0: 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 5d ateDocumentNode]
aef0: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 . set result
af00: 5b 24 64 6f 63 4e 6f 64 65 20 6e 6f 64 65 54 79 [$docNode nodeTy
af10: 70 65 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 pe]. lappend
af20: 72 65 73 75 6c 74 20 5b 24 64 6f 63 4e 6f 64 65 result [$docNode
af30: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
af40: 5d 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 20 64 ]. $docNode d
af50: 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 65 elete. set re
af60: 73 75 6c 74 0a 7d 20 7b 44 4f 43 55 4d 45 4e 54 sult.} {DOCUMENT
af70: 5f 4e 4f 44 45 20 7b 7d 7d 0a 0a 74 65 73 74 20 _NODE {}}..test
af80: 64 6f 6d 2d 38 2e 35 20 7b 63 72 65 61 74 65 44 dom-8.5 {createD
af90: 6f 63 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 ocumentNode} {.
afa0: 20 20 20 73 65 74 20 64 6f 63 4e 6f 64 65 20 5b set docNode [
afb0: 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 dom createDocume
afc0: 6e 74 4e 6f 64 65 5d 0a 20 20 20 20 73 65 74 20 ntNode]. set
afd0: 6e 65 77 4e 6f 64 65 20 5b 24 64 6f 63 4e 6f 64 newNode [$docNod
afe0: 65 20 63 72 65 61 74 65 43 6f 6d 6d 65 6e 74 20 e createComment
aff0: 22 43 6f 6d 6d 65 6e 74 20 62 65 66 6f 72 65 20 "Comment before
b000: 74 68 65 20 64 6f 63 75 6d 65 6e 74 20 6e 6f 64 the document nod
b010: 65 22 5d 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 e"]. $docNode
b020: 20 61 70 70 65 6e 64 43 68 69 6c 64 20 24 6e 65 appendChild $ne
b030: 77 4e 6f 64 65 0a 20 20 20 20 73 65 74 20 72 65 wNode. set re
b040: 73 75 6c 74 20 5b 5b 24 64 6f 63 4e 6f 64 65 20 sult [[$docNode
b050: 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d documentElement]
b060: 20 6e 6f 64 65 54 79 70 65 5d 0a 20 20 20 20 73 nodeType]. s
b070: 65 74 20 6e 65 77 4e 6f 64 65 20 5b 24 64 6f 63 et newNode [$doc
b080: 4e 6f 64 65 20 63 72 65 61 74 65 45 6c 65 6d 65 Node createEleme
b090: 6e 74 20 66 69 72 73 74 43 68 69 6c 64 5d 0a 20 nt firstChild].
b0a0: 20 20 20 24 64 6f 63 4e 6f 64 65 20 61 70 70 65 $docNode appe
b0b0: 6e 64 43 68 69 6c 64 20 24 6e 65 77 4e 6f 64 65 ndChild $newNode
b0c0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
b0d0: 75 6c 74 20 5b 5b 24 64 6f 63 4e 6f 64 65 20 64 ult [[$docNode d
b0e0: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 ocumentElement]
b0f0: 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 73 65 nodeName]. se
b100: 74 20 6e 65 77 4e 6f 64 65 20 5b 24 64 6f 63 4e t newNode [$docN
b110: 6f 64 65 20 63 72 65 61 74 65 45 6c 65 6d 65 6e ode createElemen
b120: 74 20 73 65 63 6f 6e 64 43 68 69 6c 64 5d 0a 20 t secondChild].
b130: 20 20 20 24 64 6f 63 4e 6f 64 65 20 61 70 70 65 $docNode appe
b140: 6e 64 43 68 69 6c 64 20 24 6e 65 77 4e 6f 64 65 ndChild $newNode
b150: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
b160: 75 6c 74 20 5b 5b 24 64 6f 63 4e 6f 64 65 20 64 ult [[$docNode d
b170: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 20 ocumentElement]
b180: 6e 6f 64 65 4e 61 6d 65 5d 0a 20 20 20 20 24 64 nodeName]. $d
b190: 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 ocNode delete.
b1a0: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b set result.} {
b1b0: 43 4f 4d 4d 45 4e 54 5f 4e 4f 44 45 20 66 69 72 COMMENT_NODE fir
b1c0: 73 74 43 68 69 6c 64 20 66 69 72 73 74 43 68 69 stChild firstChi
b1d0: 6c 64 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e ld}..test dom-8.
b1e0: 36 20 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 6 {createDocumen
b1f0: 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 73 65 74 tNode} {. set
b200: 20 64 6f 63 4e 6f 64 65 20 5b 64 6f 6d 20 63 72 docNode [dom cr
b210: 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 eateDocumentNode
b220: 5d 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b 64 ]. set doc [d
b230: 6f 6d 20 70 61 72 73 65 20 7b 3c 72 6f 6f 74 3e om parse {<root>
b240: 3c 63 68 69 6c 64 31 2f 3e 3c 63 68 69 6c 64 32 <child1/><child2
b250: 2f 3e 73 6f 6d 65 20 74 65 78 74 3c 63 68 69 6c />some text<chil
b260: 64 33 2f 3e 3c 2f 72 6f 6f 74 3e 7d 5d 0a 20 20 d3/></root>}].
b270: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 64 6f 63 set root [$doc
b280: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
b290: 5d 0a 20 20 20 20 73 65 74 20 6c 69 73 74 52 65 ]. set listRe
b2a0: 70 20 5b 24 72 6f 6f 74 20 61 73 4c 69 73 74 5d p [$root asList]
b2b0: 0a 20 20 20 20 24 64 6f 63 20 64 65 6c 65 74 65 . $doc delete
b2c0: 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 20 61 70 . $docNode ap
b2d0: 70 65 6e 64 46 72 6f 6d 4c 69 73 74 20 24 6c 69 pendFromList $li
b2e0: 73 74 52 65 70 0a 20 20 20 20 73 65 74 20 72 65 stRep. set re
b2f0: 73 75 6c 74 20 5b 24 64 6f 63 4e 6f 64 65 20 61 sult [$docNode a
b300: 73 58 4d 4c 20 2d 69 6e 64 65 6e 74 20 6e 6f 6e sXML -indent non
b310: 65 5d 0a 20 20 20 20 24 64 6f 63 4e 6f 64 65 20 e]. $docNode
b320: 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 72 delete. set r
b330: 65 73 75 6c 74 0a 7d 20 7b 3c 72 6f 6f 74 3e 3c esult.} {<root><
b340: 63 68 69 6c 64 31 2f 3e 3c 63 68 69 6c 64 32 2f child1/><child2/
b350: 3e 73 6f 6d 65 20 74 65 78 74 3c 63 68 69 6c 64 >some text<child
b360: 33 2f 3e 3c 2f 72 6f 6f 74 3e 7d 0a 0a 74 65 73 3/></root>}..tes
b370: 74 20 64 6f 6d 2d 38 2e 37 20 7b 63 72 65 61 74 t dom-8.7 {creat
b380: 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b eDocumentNode} {
b390: 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 44 . dom createD
b3a0: 6f 63 75 6d 65 6e 74 4e 6f 64 65 20 64 6f 63 4e ocumentNode docN
b3b0: 6f 64 65 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 ode. dom crea
b3c0: 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 20 64 teDocumentNode d
b3d0: 6f 63 4e 6f 64 65 0a 20 20 20 20 24 64 6f 63 4e ocNode. $docN
b3e0: 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 20 20 73 ode delete. s
b3f0: 65 74 20 72 65 73 75 6c 74 20 22 22 0a 7d 20 22 et result "".} "
b400: 22 0a 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 38 20 "..test dom-8.8
b410: 7b 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e {createDocumentN
b420: 6f 64 65 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 ode} {. dom c
b430: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 reateDocumentNod
b440: 65 20 2d 6a 73 6f 6e 54 79 70 65 20 41 52 52 41 e -jsonType ARRA
b450: 59 20 64 6f 63 4e 6f 64 65 0a 20 20 20 20 73 65 Y docNode. se
b460: 74 20 72 65 73 75 6c 74 20 5b 24 64 6f 63 4e 6f t result [$docNo
b470: 64 65 20 6a 73 6f 6e 54 79 70 65 5d 0a 20 20 20 de jsonType].
b480: 20 24 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 $docNode delete
b490: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
b4a0: 7d 20 41 52 52 41 59 0a 0a 74 65 73 74 20 64 6f } ARRAY..test do
b4b0: 6d 2d 38 2e 39 20 7b 63 72 65 61 74 65 44 6f 63 m-8.9 {createDoc
b4c0: 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 umentNode} {.
b4d0: 20 73 65 74 20 64 6f 63 4e 6f 64 65 20 5b 64 6f set docNode [do
b4e0: 6d 20 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 m createDocument
b4f0: 4e 6f 64 65 20 2d 6a 73 6f 6e 54 79 70 65 20 4e Node -jsonType N
b500: 55 4d 42 45 52 5d 0a 20 20 20 20 73 65 74 20 72 UMBER]. set r
b510: 65 73 75 6c 74 20 5b 24 64 6f 63 4e 6f 64 65 20 esult [$docNode
b520: 6a 73 6f 6e 54 79 70 65 5d 0a 20 20 20 20 24 64 jsonType]. $d
b530: 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 ocNode delete.
b540: 20 20 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 4e set result.} N
b550: 55 4d 42 45 52 0a 0a 74 65 73 74 20 64 6f 6d 2d UMBER..test dom-
b560: 38 2e 31 30 20 7b 63 72 65 61 74 65 44 6f 63 75 8.10 {createDocu
b570: 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a 20 20 20 20 mentNode} {.
b580: 63 61 74 63 68 20 7b 64 6f 6d 20 63 72 65 61 74 catch {dom creat
b590: 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 20 2d 66 eDocumentNode -f
b5a0: 6f 6f 20 4e 55 4c 4c 20 64 6f 63 4e 6f 64 65 7d oo NULL docNode}
b5b0: 20 65 72 72 4d 73 67 0a 20 20 20 20 73 65 74 20 errMsg. set
b5c0: 65 72 72 4d 73 67 0a 7d 20 7b 62 61 64 20 6f 70 errMsg.} {bad op
b5d0: 74 69 6f 6e 20 22 2d 66 6f 6f 22 3a 20 6d 75 73 tion "-foo": mus
b5e0: 74 20 62 65 20 2d 6a 73 6f 6e 54 79 70 65 7d 0a t be -jsonType}.
b5f0: 0a 74 65 73 74 20 64 6f 6d 2d 38 2e 31 30 20 7b .test dom-8.10 {
b600: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f createDocumentNo
b610: 64 65 7d 20 7b 0a 20 20 20 20 63 61 74 63 68 20 de} {. catch
b620: 7b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d {dom createDocum
b630: 65 6e 74 4e 6f 64 65 20 2d 66 6f 6f 20 4e 55 4c entNode -foo NUL
b640: 4c 20 64 6f 63 4e 6f 64 65 7d 20 65 72 72 4d 73 L docNode} errMs
b650: 67 0a 20 20 20 20 73 65 74 20 65 72 72 4d 73 67 g. set errMsg
b660: 0a 7d 20 7b 62 61 64 20 6f 70 74 69 6f 6e 20 22 .} {bad option "
b670: 2d 66 6f 6f 22 3a 20 6d 75 73 74 20 62 65 20 2d -foo": must be -
b680: 6a 73 6f 6e 54 79 70 65 7d 0a 0a 74 65 73 74 20 jsonType}..test
b690: 64 6f 6d 2d 38 2e 31 31 20 7b 63 72 65 61 74 65 dom-8.11 {create
b6a0: 44 6f 63 75 6d 65 6e 74 4e 6f 64 65 7d 20 7b 0a DocumentNode} {.
b6b0: 20 20 20 20 63 61 74 63 68 20 7b 64 6f 6d 20 63 catch {dom c
b6c0: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f 64 reateDocumentNod
b6d0: 65 20 2d 6a 73 6f 6e 54 79 70 65 20 46 4f 4f 20 e -jsonType FOO
b6e0: 64 6f 63 4e 6f 64 65 7d 20 65 72 72 4d 73 67 0a docNode} errMsg.
b6f0: 20 20 20 20 73 65 74 20 65 72 72 4d 73 67 0a 7d set errMsg.}
b700: 20 7b 62 61 64 20 6a 73 6f 6e 54 79 70 65 20 22 {bad jsonType "
b710: 46 4f 4f 22 3a 20 6d 75 73 74 20 62 65 20 4e 4f FOO": must be NO
b720: 4e 45 2c 20 41 52 52 41 59 2c 20 4f 42 4a 45 43 NE, ARRAY, OBJEC
b730: 54 2c 20 4e 55 4c 4c 2c 20 54 52 55 45 2c 20 46 T, NULL, TRUE, F
b740: 41 4c 53 45 2c 20 53 54 52 49 4e 47 2c 20 6f 72 ALSE, STRING, or
b750: 20 4e 55 4d 42 45 52 7d 0a 0a 74 65 73 74 20 64 NUMBER}..test d
b760: 6f 6d 2d 39 2e 31 20 7b 73 65 74 4f 62 6a 65 63 om-9.1 {setObjec
b770: 74 43 6f 6d 6d 61 6e 64 73 7d 20 7b 0a 20 20 20 tCommands} {.
b780: 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f dom setObjectCo
b790: 6d 6d 61 6e 64 73 0a 7d 20 7b 61 75 74 6f 6d 61 mmands.} {automa
b7a0: 74 69 63 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 39 tic}..test dom-9
b7b0: 2e 32 20 7b 73 65 74 4f 62 6a 65 63 74 43 6f 6d .2 {setObjectCom
b7c0: 6d 61 6e 64 73 7d 20 7b 0a 20 20 20 20 64 6f 6d mands} {. dom
b7d0: 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e setObjectComman
b7e0: 64 73 20 61 75 74 6f 6d 61 74 69 63 0a 7d 20 7b ds automatic.} {
b7f0: 61 75 74 6f 6d 61 74 69 63 7d 0a 0a 74 65 73 74 automatic}..test
b800: 20 64 6f 6d 2d 39 2e 33 20 7b 73 65 74 4f 62 6a dom-9.3 {setObj
b810: 65 63 74 43 6f 6d 6d 61 6e 64 73 7d 20 7b 0a 20 ectCommands} {.
b820: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 63 set result [c
b830: 61 74 63 68 20 7b 64 6f 6d 20 73 65 74 4f 62 6a atch {dom setObj
b840: 65 63 74 43 6f 6d 6d 61 6e 64 73 20 66 6f 6f 62 ectCommands foob
b850: 61 72 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 20 ar} errMsg].
b860: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 lappend result $
b870: 65 72 72 4d 73 67 0a 7d 20 7b 31 20 7b 62 61 64 errMsg.} {1 {bad
b880: 20 6d 6f 64 65 20 76 61 6c 75 65 20 22 66 6f 6f mode value "foo
b890: 62 61 72 22 3a 20 6d 75 73 74 20 62 65 20 61 75 bar": must be au
b8a0: 74 6f 6d 61 74 69 63 2c 20 63 6f 6d 6d 61 6e 64 tomatic, command
b8b0: 2c 20 6f 72 20 74 6f 6b 65 6e 7d 7d 0a 0a 74 65 , or token}}..te
b8c0: 73 74 20 64 6f 6d 2d 39 2e 34 20 7b 73 65 74 4f st dom-9.4 {setO
b8d0: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 7d 20 7b bjectCommands} {
b8e0: 0a 20 20 20 20 73 65 74 20 6e 72 4f 66 43 6d 64 . set nrOfCmd
b8f0: 73 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f s [llength [info
b900: 20 63 6f 6d 6d 61 6e 64 73 5d 5d 0a 20 20 20 20 commands]].
b910: 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d dom setObjectCom
b920: 6d 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 0a mands automatic.
b930: 20 20 20 20 73 65 74 20 64 6f 63 4e 6f 64 65 20 set docNode
b940: 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f 63 75 6d [dom createDocum
b950: 65 6e 74 4e 6f 64 65 5d 0a 20 20 20 20 73 65 74 entNode]. set
b960: 20 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 24 result [expr {$
b970: 6e 72 4f 66 43 6d 64 73 20 2b 20 31 20 3d 3d 20 nrOfCmds + 1 ==
b980: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 [llength [info c
b990: 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a 20 20 20 20 ommands]]}].
b9a0: 24 64 6f 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a $docNode delete.
b9b0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu
b9c0: 6c 74 20 5b 65 78 70 72 20 7b 24 6e 72 4f 66 43 lt [expr {$nrOfC
b9d0: 6d 64 73 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 mds == [llength
b9e0: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d [info commands]]
b9f0: 7d 5d 0a 20 20 20 20 64 6f 6d 20 73 65 74 4f 62 }]. dom setOb
ba00: 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 20 74 6f 6b jectCommands tok
ba10: 65 6e 0a 20 20 20 20 73 65 74 20 64 6f 63 4e 6f en. set docNo
ba20: 64 65 20 5b 64 6f 6d 20 63 72 65 61 74 65 44 6f de [dom createDo
ba30: 63 75 6d 65 6e 74 4e 6f 64 65 5d 0a 20 20 20 20 cumentNode].
ba40: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [
ba50: 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 73 20 expr {$nrOfCmds
ba60: 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 == [llength [inf
ba70: 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a 20 o commands]]}].
ba80: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul
ba90: 74 20 5b 64 6f 6d 44 6f 63 20 24 64 6f 63 4e 6f t [domDoc $docNo
baa0: 64 65 20 68 61 73 43 68 69 6c 64 4e 6f 64 65 73 de hasChildNodes
bab0: 5d 0a 20 20 20 20 64 6f 6d 44 6f 63 20 24 64 6f ]. domDoc $do
bac0: 63 4e 6f 64 65 20 64 65 6c 65 74 65 0a 20 20 20 cNode delete.
bad0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
bae0: 5b 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 73 [expr {$nrOfCmds
baf0: 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e == [llength [in
bb00: 66 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a fo commands]]}].
bb10: 20 20 20 20 23 20 73 77 69 74 63 68 20 62 61 63 # switch bac
bb20: 6b 20 74 6f 20 64 65 66 61 75 6c 74 0a 20 20 20 k to default.
bb30: 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f dom setObjectCo
bb40: 6d 6d 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 mmands automatic
bb50: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 0a . set result.
bb60: 7d 20 7b 31 20 31 20 31 20 30 20 31 7d 0a 0a 74 } {1 1 1 0 1}..t
bb70: 65 73 74 20 64 6f 6d 2d 39 2e 35 20 7b 73 65 74 est dom-9.5 {set
bb80: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 73 7d 20 ObjectCommands}
bb90: 7b 0a 20 20 20 20 64 6f 6d 20 73 65 74 4f 62 6a {. dom setObj
bba0: 65 63 74 43 6f 6d 6d 61 6e 64 73 20 74 6f 6b 65 ectCommands toke
bbb0: 6e 0a 20 20 20 20 73 65 74 20 6e 72 4f 66 43 6d n. set nrOfCm
bbc0: 64 73 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 ds [llength [inf
bbd0: 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 0a 20 20 20 o commands]].
bbe0: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
bbf0: 72 73 65 20 3c 72 6f 6f 74 3e 3c 63 68 69 6c 64 rse <root><child
bc00: 31 2f 3e 3c 63 68 69 6c 64 32 2f 3e 3c 2f 72 6f 1/><child2/></ro
bc10: 6f 74 3e 5d 0a 20 20 20 20 73 65 74 20 72 6f 6f ot>]. set roo
bc20: 74 20 5b 64 6f 6d 44 6f 63 20 24 64 6f 63 20 64 t [domDoc $doc d
bc30: 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 5d 0a ocumentElement].
bc40: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
bc50: 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 73 20 expr {$nrOfCmds
bc60: 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 == [llength [inf
bc70: 6f 20 63 6f 6d 6d 61 6e 64 73 5d 5d 7d 5d 0a 20 o commands]]}].
bc80: 20 20 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 dom setObject
bc90: 43 6f 6d 6d 61 6e 64 73 20 63 6f 6d 6d 61 6e 64 Commands command
bca0: 0a 20 20 20 20 73 65 74 20 64 6f 63 43 6d 64 20 . set docCmd
bcb0: 5b 64 6f 6d 4e 6f 64 65 20 24 72 6f 6f 74 20 6f [domNode $root o
bcc0: 77 6e 65 72 44 6f 63 75 6d 65 6e 74 5d 0a 20 20 wnerDocument].
bcd0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
bce0: 20 5b 65 78 70 72 20 7b 24 6e 72 4f 66 43 6d 64 [expr {$nrOfCmd
bcf0: 73 20 2b 20 31 20 3d 3d 20 5b 6c 6c 65 6e 67 74 s + 1 == [llengt
bd00: 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 h [info commands
bd10: 5d 5d 7d 5d 0a 20 20 20 20 24 64 6f 63 43 6d 64 ]]}]. $docCmd
bd20: 20 64 65 6c 65 74 65 0a 20 20 20 20 64 6f 6d 20 delete. dom
bd30: 73 65 74 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 setObjectCommand
bd40: 73 20 61 75 74 6f 6d 61 74 69 63 0a 20 20 20 20 s automatic.
bd50: 73 65 74 20 72 65 73 75 6c 74 0a 7d 20 7b 31 20 set result.} {1
bd60: 31 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 39 2e 36 1}..test dom-9.6
bd70: 20 7b 6e 6f 64 65 20 74 6f 6b 65 6e 20 77 69 74 {node token wit
bd80: 68 20 72 65 73 75 6c 74 20 76 61 72 20 61 72 67 h result var arg
bd90: 75 6d 65 6e 74 7d 20 7b 0a 20 20 20 20 64 6f 6d ument} {. dom
bda0: 20 73 65 74 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e setObjectComman
bdb0: 64 73 20 74 6f 6b 65 6e 0a 20 20 20 20 73 65 74 ds token. set
bdc0: 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 65 20 doc [dom parse
bdd0: 3c 72 6f 6f 74 3e 3c 63 68 69 6c 64 31 2f 3e 3c <root><child1/><
bde0: 63 68 69 6c 64 32 2f 3e 3c 2f 72 6f 6f 74 3e 5d child2/></root>]
bdf0: 0a 20 20 20 20 64 6f 6d 44 6f 63 20 24 64 6f 63 . domDoc $doc
be00: 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 documentElement
be10: 20 76 61 72 0a 20 20 20 20 64 6f 6d 4e 6f 64 65 var. domNode
be20: 20 24 76 61 72 20 66 69 72 73 74 43 68 69 6c 64 $var firstChild
be30: 20 76 61 72 0a 20 20 20 20 64 6f 6d 4e 6f 64 65 var. domNode
be40: 20 24 76 61 72 20 6e 65 78 74 53 69 62 6c 69 6e $var nextSiblin
be50: 67 20 76 61 72 0a 20 20 20 20 64 6f 6d 44 6f 63 g var. domDoc
be60: 20 24 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 $doc delete.
be70: 20 64 6f 6d 20 73 65 74 4f 62 6a 65 63 74 43 6f dom setObjectCo
be80: 6d 6d 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 mmands automatic
be90: 0a 7d 20 7b 61 75 74 6f 6d 61 74 69 63 7d 0a 20 .} {automatic}.
bea0: 20 20 20 0a 63 61 74 63 68 20 7b 6e 61 6d 65 73 .catch {names
beb0: 70 61 63 65 20 64 65 6c 65 74 65 20 6e 6f 64 65 pace delete node
bec0: 43 6d 64 73 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 Cmds}..namespace
bed0: 20 65 76 61 6c 20 6e 6f 64 65 43 6d 64 73 20 7b eval nodeCmds {
bee0: 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 4e . dom createN
bef0: 6f 64 65 43 6d 64 20 65 6c 65 6d 65 6e 74 4e 6f odeCmd elementNo
bf00: 64 65 20 65 31 0a 20 20 20 20 64 6f 6d 20 63 72 de e1. dom cr
bf10: 65 61 74 65 4e 6f 64 65 43 6d 64 20 65 6c 65 6d eateNodeCmd elem
bf20: 65 6e 74 4e 6f 64 65 20 65 32 0a 20 20 20 20 64 entNode e2. d
bf30: 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 om createNodeCmd
bf40: 20 63 6f 6d 6d 65 6e 74 4e 6f 64 65 20 63 0a 20 commentNode c.
bf50: 20 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f 64 dom createNod
bf60: 65 43 6d 64 20 74 65 78 74 4e 6f 64 65 20 20 20 eCmd textNode
bf70: 20 74 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 t. dom creat
bf80: 65 4e 6f 64 65 43 6d 64 20 63 64 61 74 61 4e 6f eNodeCmd cdataNo
bf90: 64 65 20 20 20 63 64 61 74 61 0a 20 20 20 20 64 de cdata. d
bfa0: 6f 6d 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 om createNodeCmd
bfb0: 20 70 69 4e 6f 64 65 20 20 20 20 20 20 70 69 0a piNode pi.
bfc0: 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 4e 6f dom createNo
bfd0: 64 65 43 6d 64 20 70 61 72 73 65 72 4e 6f 64 65 deCmd parserNode
bfe0: 20 20 70 61 72 73 65 72 0a 20 20 20 20 64 6f 6d parser. dom
bff0: 20 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 2d createNodeCmd -
c000: 74 61 67 4e 61 6d 65 20 66 6f 6f 20 65 6c 65 6d tagName foo elem
c010: 65 6e 74 4e 6f 64 65 20 62 61 72 0a 7d 0a 0a 74 entNode bar.}..t
c020: 65 73 74 20 64 6f 6d 2d 31 30 2e 31 20 7b 63 72 est dom-10.1 {cr
c030: 65 61 74 65 4e 6f 64 65 43 6d 64 7d 20 7b 0a 20 eateNodeCmd} {.
c040: 20 20 20 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f llength [info
c050: 20 63 6f 6d 6d 61 6e 64 73 20 6e 6f 64 65 43 6d commands nodeCm
c060: 64 73 3a 3a 2a 5d 0a 7d 20 7b 38 7d 0a 0a 6e 61 ds::*].} {8}..na
c070: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 6f 64 mespace eval nod
c080: 65 43 6d 64 73 20 7b 0a 20 20 20 20 72 65 6e 61 eCmds {. rena
c090: 6d 65 20 65 31 20 7b 7d 0a 20 20 20 20 72 65 6e me e1 {}. ren
c0a0: 61 6d 65 20 65 32 20 7b 7d 0a 20 20 20 20 72 65 ame e2 {}. re
c0b0: 6e 61 6d 65 20 63 20 7b 7d 0a 20 20 20 20 72 65 name c {}. re
c0c0: 6e 61 6d 65 20 74 20 7b 7d 0a 20 20 20 20 72 65 name t {}. re
c0d0: 6e 61 6d 65 20 63 64 61 74 61 20 7b 7d 0a 20 20 name cdata {}.
c0e0: 20 20 72 65 6e 61 6d 65 20 70 69 20 7b 7d 0a 20 rename pi {}.
c0f0: 20 20 20 72 65 6e 61 6d 65 20 70 61 72 73 65 72 rename parser
c100: 20 7b 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 62 {}. rename b
c110: 61 72 20 7b 7d 0a 7d 0a 0a 74 65 73 74 20 64 6f ar {}.}..test do
c120: 6d 2d 31 30 2e 32 20 7b 63 72 65 61 74 65 4e 6f m-10.2 {createNo
c130: 64 65 43 6d 64 7d 20 7b 0a 20 20 20 20 6c 6c 65 deCmd} {. lle
c140: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma
c150: 6e 64 73 20 6e 6f 64 65 43 6d 64 73 3a 3a 2a 5d nds nodeCmds::*]
c160: 0a 7d 20 7b 30 7d 0a 0a 6e 61 6d 65 73 70 61 63 .} {0}..namespac
c170: 65 20 65 76 61 6c 20 6e 6f 64 65 43 6d 64 73 20 e eval nodeCmds
c180: 7b 0a 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 {. dom create
c190: 4e 6f 64 65 43 6d 64 20 65 6c 65 6d 65 6e 74 4e NodeCmd elementN
c1a0: 6f 64 65 20 65 31 0a 20 20 20 20 64 6f 6d 20 63 ode e1. dom c
c1b0: 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 74 65 78 reateNodeCmd tex
c1c0: 74 4e 6f 64 65 20 20 20 20 74 0a 7d 0a 0a 74 65 tNode t.}..te
c1d0: 73 74 20 64 6f 6d 2d 31 30 2e 33 20 7b 6e 6f 64 st dom-10.3 {nod
c1e0: 65 20 63 72 65 61 74 69 6e 67 20 63 6f 6d 6d 61 e creating comma
c1f0: 6e 64 20 63 61 6c 6c 65 64 20 6f 75 74 73 69 64 nd called outsid
c200: 65 20 64 6f 6d 4e 6f 64 65 20 63 6f 6e 74 65 78 e domNode contex
c210: 74 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 t} {. set res
c220: 75 6c 74 20 5b 63 61 74 63 68 20 7b 6e 6f 64 65 ult [catch {node
c230: 43 6d 64 73 3a 3a 74 20 22 73 6f 6d 65 20 74 65 Cmds::t "some te
c240: 78 74 22 7d 20 65 72 72 4d 73 67 5d 0a 20 20 20 xt"} errMsg].
c250: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result
c260: 24 65 72 72 4d 73 67 0a 7d 20 7b 31 20 7b 63 61 $errMsg.} {1 {ca
c270: 6c 6c 65 64 20 6f 75 74 73 69 64 65 20 64 6f 6d lled outside dom
c280: 4e 6f 64 65 20 63 6f 6e 74 65 78 74 7d 7d 0a 0a Node context}}..
c290: 74 65 73 74 20 64 6f 6d 2d 31 30 2e 34 20 7b 6e test dom-10.4 {n
c2a0: 6f 64 65 20 63 72 65 61 74 69 6e 67 20 63 6f 6d ode creating com
c2b0: 6d 61 6e 64 20 63 61 6c 6c 65 64 20 6f 75 74 73 mand called outs
c2c0: 69 64 65 20 64 6f 6d 4e 6f 64 65 20 63 6f 6e 74 ide domNode cont
c2d0: 65 78 74 7d 20 7b 0a 20 20 20 20 64 6f 6d 20 63 ext} {. dom c
c2e0: 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 20 64 6f reateDocument do
c2f0: 63 52 6f 6f 74 20 64 6f 63 0a 20 20 20 20 24 64 cRoot doc. $d
c300: 6f 63 20 64 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 oc documentEleme
c310: 6e 74 20 72 6f 6f 74 0a 20 20 20 20 24 72 6f 6f nt root. $roo
c320: 74 20 61 70 70 65 6e 64 46 72 6f 6d 53 63 72 69 t appendFromScri
c330: 70 74 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f 64 pt {. nod
c340: 65 43 6d 64 73 3a 3a 74 20 22 53 6f 6d 65 20 74 eCmds::t "Some t
c350: 65 78 74 22 0a 20 20 20 20 7d 0a 20 20 20 20 73 ext". }. s
c360: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 et result [list
c370: 5b 24 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 [$doc asXML -ind
c380: 65 6e 74 20 6e 6f 6e 65 5d 5d 0a 20 20 20 20 24 ent none]]. $
c390: 64 6f 63 20 64 65 6c 65 74 65 0a 20 20 20 20 6c doc delete. l
c3a0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 append result [c
c3b0: 61 74 63 68 20 7b 6e 6f 64 65 43 6d 64 73 3a 3a atch {nodeCmds::
c3c0: 74 20 22 53 6f 6d 65 20 74 65 78 74 22 7d 20 65 t "Some text"} e
c3d0: 72 72 4d 73 67 5d 0a 20 20 20 20 6c 61 70 70 65 rrMsg]. lappe
c3e0: 6e 64 20 72 65 73 75 6c 74 20 24 65 72 72 4d 73 nd result $errMs
c3f0: 67 0a 7d 20 7b 7b 3c 64 6f 63 52 6f 6f 74 3e 53 g.} {{<docRoot>S
c400: 6f 6d 65 20 74 65 78 74 3c 2f 64 6f 63 52 6f 6f ome text</docRoo
c410: 74 3e 7d 20 31 20 7b 63 61 6c 6c 65 64 20 6f 75 t>} 1 {called ou
c420: 74 73 69 64 65 20 64 6f 6d 4e 6f 64 65 20 63 6f tside domNode co
c430: 6e 74 65 78 74 7d 7d 0a 0a 74 65 73 74 20 64 6f ntext}}..test do
c440: 6d 2d 31 30 2e 35 20 7b 6e 6f 64 65 20 63 72 65 m-10.5 {node cre
c450: 61 74 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 63 61 ating command ca
c460: 6c 6c 65 64 20 6f 75 74 73 69 64 65 20 64 6f 6d lled outside dom
c470: 4e 6f 64 65 20 63 6f 6e 74 65 78 74 7d 20 7b 0a Node context} {.
c480: 20 20 20 20 64 6f 6d 20 63 72 65 61 74 65 44 6f dom createDo
c490: 63 75 6d 65 6e 74 20 64 6f 63 52 6f 6f 74 20 64 cument docRoot d
c4a0: 6f 63 0a 20 20 20 20 24 64 6f 63 20 64 6f 63 75 oc. $doc docu
c4b0: 6d 65 6e 74 45 6c 65 6d 65 6e 74 20 72 6f 6f 74 mentElement root
c4c0: 0a 20 20 20 20 24 72 6f 6f 74 20 61 70 70 65 6e . $root appen
c4d0: 64 46 72 6f 6d 53 63 72 69 70 74 20 7b 0a 20 20 dFromScript {.
c4e0: 20 20 20 20 20 20 6e 6f 64 65 43 6d 64 73 3a 3a nodeCmds::
c4f0: 65 31 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 e1 {.
c500: 20 6e 6f 64 65 43 6d 64 73 3a 3a 74 20 22 53 6f nodeCmds::t "So
c510: 6d 65 20 74 65 78 74 22 0a 20 20 20 20 20 20 20 me text".
c520: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 }. }. set
c530: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b 24 result [list [$
c540: 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e doc asXML -inden
c550: 74 20 6e 6f 6e 65 5d 5d 0a 20 20 20 20 24 64 6f t none]]. $do
c560: 63 20 64 65 6c 65 74 65 0a 20 20 20 20 6c 61 70 c delete. lap
c570: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 pend result [cat
c580: 63 68 20 7b 0a 20 20 20 20 20 20 20 20 6e 6f 64 ch {. nod
c590: 65 43 6d 64 73 3a 3a 65 31 20 7b 0a 20 20 20 20 eCmds::e1 {.
c5a0: 20 20 20 20 20 20 20 20 6e 6f 64 65 43 6d 64 73 nodeCmds
c5b0: 3a 3a 74 20 22 53 6f 6d 65 20 74 65 78 74 22 0a ::t "Some text".
c5c0: 20 20 20 20 20 20 20 20 7d 7d 20 65 72 72 4d 73 }} errMs
c5d0: 67 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 g]. lappend r
c5e0: 65 73 75 6c 74 20 24 65 72 72 4d 73 67 0a 7d 20 esult $errMsg.}
c5f0: 7b 7b 3c 64 6f 63 52 6f 6f 74 3e 3c 65 31 3e 53 {{<docRoot><e1>S
c600: 6f 6d 65 20 74 65 78 74 3c 2f 65 31 3e 3c 2f 64 ome text</e1></d
c610: 6f 63 52 6f 6f 74 3e 7d 20 31 20 7b 63 61 6c 6c ocRoot>} 1 {call
c620: 65 64 20 6f 75 74 73 69 64 65 20 64 6f 6d 4e 6f ed outside domNo
c630: 64 65 20 63 6f 6e 74 65 78 74 7d 7d 0a 0a 6e 61 de context}}..na
c640: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 6e 6f 64 mespace eval nod
c650: 65 43 6d 64 73 20 7b 0a 20 20 20 20 64 6f 6d 20 eCmds {. dom
c660: 63 72 65 61 74 65 4e 6f 64 65 43 6d 64 20 2d 74 createNodeCmd -t
c670: 61 67 4e 61 6d 65 20 66 6f 6f 20 65 6c 65 6d 65 agName foo eleme
c680: 6e 74 4e 6f 64 65 20 62 61 72 0a 7d 0a 74 65 73 ntNode bar.}.tes
c690: 74 20 64 6f 6d 2d 31 30 2e 36 20 7b 63 72 65 61 t dom-10.6 {crea
c6a0: 74 65 4e 6f 64 65 43 6d 64 20 2d 20 6f 70 74 69 teNodeCmd - opti
c6b0: 6f 6e 20 2d 74 61 67 4e 61 6d 65 7d 20 7b 0a 20 on -tagName} {.
c6c0: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
c6d0: 63 72 65 61 74 65 44 6f 63 75 6d 65 6e 74 4e 6f createDocumentNo
c6e0: 64 65 5d 0a 20 20 20 20 24 64 6f 63 20 61 70 70 de]. $doc app
c6f0: 65 6e 64 46 72 6f 6d 53 63 72 69 70 74 20 7b 0a endFromScript {.
c700: 20 20 20 20 20 20 20 20 6e 6f 64 65 43 6d 64 73 nodeCmds
c710: 3a 3a 62 61 72 20 7b 7d 0a 20 20 20 20 7d 0a 20 ::bar {}. }.
c720: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 24 set result [$
c730: 64 6f 63 20 61 73 58 4d 4c 20 2d 69 6e 64 65 6e doc asXML -inden
c740: 74 20 6e 6f 6e 65 5d 0a 20 20 20 20 24 64 6f 63 t none]. $doc
c750: 20 64 65 6c 65 74 65 0a 20 20 20 20 73 65 74 20 delete. set
c760: 72 65 73 75 6c 74 0a 7d 20 7b 3c 66 6f 6f 2f 3e result.} {<foo/>
c770: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 64 65 6c }..namespace del
c780: 65 74 65 20 6e 6f 64 65 43 6d 64 73 0a 0a 74 65 ete nodeCmds..te
c790: 73 74 20 64 6f 6d 2d 31 31 2e 31 20 7b 66 65 61 st dom-11.1 {fea
c7a0: 74 75 72 65 69 6e 66 6f 20 2d 20 65 78 70 61 74 tureinfo - expat
c7b0: 76 65 72 73 69 6f 6e 7d 20 2d 62 6f 64 79 20 7b version} -body {
c7c0: 0a 20 20 20 20 64 6f 6d 20 66 65 61 74 75 72 65 . dom feature
c7d0: 69 6e 66 6f 20 65 78 70 61 74 76 65 72 73 69 6f info expatversio
c7e0: 6e 0a 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 n.} -match regex
c7f0: 70 20 2d 72 65 73 75 6c 74 20 7b 65 78 70 61 74 p -result {expat
c800: 5f 2e 2a 7d 0a 0a 74 65 73 74 20 64 6f 6d 2d 31 _.*}..test dom-1
c810: 31 2e 32 20 7b 66 65 61 74 75 72 65 69 6e 66 6f 1.2 {featureinfo
c820: 20 2d 20 69 6e 76 61 6c 69 64 20 61 72 67 7d 20 - invalid arg}
c830: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 61 74 63 -body {. catc
c840: 68 20 7b 64 6f 6d 20 66 65 61 74 75 72 65 69 6e h {dom featurein
c850: 66 6f 20 66 6f 6f 7d 20 65 72 72 4d 73 67 0a 7d fo foo} errMsg.}
c860: 20 2d 72 65 73 75 6c 74 20 31 0a 0a 74 65 73 74 -result 1..test
c870: 20 64 6f 6d 2d 31 31 2e 33 20 7b 66 65 61 74 75 dom-11.3 {featu
c880: 72 65 69 6e 66 6f 20 2d 20 65 78 70 61 74 6d 61 reinfo - expatma
c890: 6a 6f 72 76 65 72 73 69 6f 6e 7d 20 2d 62 6f 64 jorversion} -bod
c8a0: 79 20 7b 0a 20 20 20 20 64 6f 6d 20 66 65 61 74 y {. dom feat
c8b0: 75 72 65 69 6e 66 6f 20 65 78 70 61 74 6d 61 6a ureinfo expatmaj
c8c0: 6f 72 76 65 72 73 69 6f 6e 0a 7d 20 2d 6d 61 74 orversion.} -mat
c8d0: 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c ch regexp -resul
c8e0: 74 20 7b 28 31 7c 32 29 7d 0a 0a 74 65 73 74 20 t {(1|2)}..test
c8f0: 64 6f 6d 2d 31 31 2e 34 20 7b 66 65 61 74 75 72 dom-11.4 {featur
c900: 65 69 6e 66 6f 20 2d 20 64 74 64 7d 20 2d 62 6f einfo - dtd} -bo
c910: 64 79 20 7b 0a 20 20 20 20 64 6f 6d 20 66 65 61 dy {. dom fea
c920: 74 75 72 65 69 6e 66 6f 20 64 74 64 0a 7d 20 2d tureinfo dtd.} -
c930: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 match regexp -re
c940: 73 75 6c 74 20 7b 28 30 7c 31 29 7d 0a 0a 74 65 sult {(0|1)}..te
c950: 73 74 20 64 6f 6d 2d 31 31 2e 35 20 7b 66 65 61 st dom-11.5 {fea
c960: 74 75 72 65 69 6e 66 6f 20 2d 20 6a 73 6f 6e 6d tureinfo - jsonm
c970: 61 78 6e 65 73 74 69 6e 67 7d 20 7b 0a 20 20 20 axnesting} {.
c980: 20 64 6f 6d 20 66 65 61 74 75 72 65 69 6e 66 6f dom featureinfo
c990: 20 6a 73 6f 6e 6d 61 78 6e 65 73 74 69 6e 67 0a jsonmaxnesting.
c9a0: 7d 20 32 30 30 30 0a 0a 70 72 6f 63 20 3a 3a 64 } 2000..proc ::d
c9b0: 6f 6d 3a 3a 64 6f 6d 50 61 72 73 65 46 65 65 64 om::domParseFeed
c9c0: 62 61 63 6b 20 7b 7d 20 7b 0a 20 20 20 20 72 65 back {} {. re
c9d0: 74 75 72 6e 20 2d 63 6f 64 65 20 62 72 65 61 6b turn -code break
c9e0: 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 31 .}.test dom-12.1
c9f0: 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 {-feedbackAfter
ca00: 20 2d 2d 20 63 6d 64 20 72 65 74 75 72 6e 73 20 -- cmd returns
ca10: 54 43 4c 5f 42 52 45 41 4b 7d 20 2d 62 6f 64 79 TCL_BREAK} -body
ca20: 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 {. dom parse
ca30: 20 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 -feedbackAfter
ca40: 31 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e 3c 65 31 1 {<doc><e1/><e1
ca50: 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e 7d 0a 7d /><e1/></doc>}.}
ca60: 20 2d 72 65 73 75 6c 74 20 22 22 0a 0a 70 72 6f -result ""..pro
ca70: 63 20 3a 3a 64 6f 6d 3a 3a 64 6f 6d 50 61 72 73 c ::dom::domPars
ca80: 65 46 65 65 64 62 61 63 6b 20 7b 7d 20 7b 0a 20 eFeedback {} {.
ca90: 20 20 20 65 72 72 6f 72 20 22 45 72 72 6f 72 20 error "Error
caa0: 69 6e 20 66 65 65 64 62 61 63 6b 20 63 6d 64 2e in feedback cmd.
cab0: 22 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e ".}.test dom-12.
cac0: 32 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 2 {-feedbackAfte
cad0: 72 20 2d 2d 20 63 6d 64 20 72 65 74 75 72 6e 73 r -- cmd returns
cae0: 20 54 43 4c 5f 45 52 52 4f 52 7d 20 2d 62 6f 64 TCL_ERROR} -bod
caf0: 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 y {. set resu
cb00: 6c 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 lt [catch {.
cb10: 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 66 dom parse -f
cb20: 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 20 7b eedbackAfter 1 {
cb30: 3c 64 6f 63 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c <doc><e1/><e1/><
cb40: 65 31 2f 3e 3c 2f 64 6f 63 3e 7d 0a 20 20 20 20 e1/></doc>}.
cb50: 7d 20 6d 73 67 5d 0a 20 20 20 20 6c 69 73 74 20 } msg]. list
cb60: 24 72 65 73 75 6c 74 20 24 6d 73 67 0a 7d 20 2d $result $msg.} -
cb70: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 31 20 22 result [list 1 "
cb80: 45 72 72 6f 72 20 69 6e 20 66 65 65 64 62 61 63 Error in feedbac
cb90: 6b 20 63 6d 64 2e 22 5d 0a 0a 70 72 6f 63 20 3a k cmd."]..proc :
cba0: 3a 64 6f 6d 3a 3a 64 6f 6d 50 61 72 73 65 46 65 :dom::domParseFe
cbb0: 65 64 62 61 63 6b 20 7b 7d 20 7b 0a 20 20 20 20 edback {} {.
cbc0: 23 20 55 70 64 61 74 65 20 70 72 6f 67 65 73 73 # Update progess
cbd0: 20 64 69 61 6c 6f 67 2c 20 63 68 65 63 6b 20 66 dialog, check f
cbe0: 6f 72 20 63 61 6e 63 65 6c 20 65 74 63 2e 0a 20 or cancel etc..
cbf0: 20 20 20 72 65 74 75 72 6e 0a 7d 0a 74 65 73 74 return.}.test
cc00: 20 64 6f 6d 2d 31 32 2e 33 20 7b 2d 66 65 65 64 dom-12.3 {-feed
cc10: 62 61 63 6b 41 66 74 65 72 7d 20 2d 62 6f 64 79 backAfter} -body
cc20: 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 5b {. set doc [
cc30: 64 6f 6d 20 70 61 72 73 65 20 2d 66 65 65 64 62 dom parse -feedb
cc40: 61 63 6b 41 66 74 65 72 20 31 20 7b 3c 64 6f 63 ackAfter 1 {<doc
cc50: 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 65 31 2f 3e ><e1/><e1/><e1/>
cc60: 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 24 64 6f </doc>}]. $do
cc70: 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 63 6f c selectNodes co
cc80: 75 6e 74 28 2f 2f 2a 29 0a 7d 20 2d 72 65 73 75 unt(//*).} -resu
cc90: 6c 74 20 34 0a 74 65 73 74 20 64 6f 6d 2d 31 32 lt 4.test dom-12
cca0: 2e 34 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 .4 {-feedbackAft
ccb0: 65 72 20 61 6e 64 20 2d 63 68 61 6e 6e 65 6c 7d er and -channel}
ccc0: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 -setup {. se
ccd0: 74 20 78 6d 6c 46 69 6c 65 20 5b 6d 61 6b 65 46 t xmlFile [makeF
cce0: 69 6c 65 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e 3c ile {<doc><e1/><
ccf0: 65 31 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e 7d e1/><e1/></doc>}
cd00: 20 64 6f 6d 2e 78 6d 6c 5d 0a 7d 20 2d 62 6f 64 dom.xml].} -bod
cd10: 79 20 7b 0a 20 20 20 20 73 65 74 20 66 64 20 5b y {. set fd [
cd20: 6f 70 65 6e 20 24 78 6d 6c 46 69 6c 65 5d 0a 20 open $xmlFile].
cd30: 20 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 set doc [dom
cd40: 70 61 72 73 65 20 2d 63 68 61 6e 6e 65 6c 20 24 parse -channel $
cd50: 66 64 20 2d 66 65 65 64 62 61 63 6b 41 66 74 65 fd -feedbackAfte
cd60: 72 20 31 5d 0a 20 20 20 20 63 6c 6f 73 65 20 24 r 1]. close $
cd70: 66 64 0a 20 20 20 20 24 64 6f 63 20 73 65 6c 65 fd. $doc sele
cd80: 63 74 4e 6f 64 65 73 20 63 6f 75 6e 74 28 2f 2f ctNodes count(//
cd90: 2a 29 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a *).} -cleanup {.
cda0: 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 64 removeFile d
cdb0: 6f 6d 2e 78 6d 6c 0a 7d 20 2d 72 65 73 75 6c 74 om.xml.} -result
cdc0: 20 34 0a 70 72 6f 63 20 65 78 74 52 65 66 52 65 4.proc extRefRe
cdd0: 73 6f 6c 76 65 72 2d 31 32 2e 35 20 7b 62 61 73 solver-12.5 {bas
cde0: 65 20 73 79 73 74 65 6d 49 64 20 70 75 62 6c 69 e systemId publi
cdf0: 63 49 64 7d 20 7b 0a 20 20 20 20 73 77 69 74 63 cId} {. switc
ce00: 68 20 24 70 75 62 6c 69 63 49 64 20 7b 0a 20 20 h $publicId {.
ce10: 20 20 20 20 20 20 22 61 22 20 7b 0a 20 20 20 20 "a" {.
ce20: 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data
ce30: 20 22 3c 65 31 2f 3e 22 0a 20 20 20 20 20 20 20 "<e1/>".
ce40: 20 7d 0a 20 20 20 20 20 20 20 20 22 62 22 20 7b }. "b" {
ce50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set
ce60: 20 64 61 74 61 20 22 3c 65 31 2f 3e 3c 65 31 2f data "<e1/><e1/
ce70: 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 >". }.
ce80: 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 default {.
ce90: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
cea0: 20 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 6c 69 63 "unknown public
ceb0: 20 49 44 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 ID". }.
cec0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 }. return
ced0: 5b 6c 69 73 74 20 22 73 74 72 69 6e 67 22 20 24 [list "string" $
cee0: 62 61 73 65 20 24 64 61 74 61 5d 0a 7d 0a 74 65 base $data].}.te
cef0: 73 74 20 64 6f 6d 2d 31 32 2e 35 20 7b 2d 66 65 st dom-12.5 {-fe
cf00: 65 64 62 61 63 6b 41 66 74 65 72 20 61 6e 64 20 edbackAfter and
cf10: 65 78 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 external entitie
cf20: 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 73 s} -body {. s
cf30: 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 72 73 et doc [dom pars
cf40: 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 e -externalentit
cf50: 79 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 ycommand extRefR
cf60: 65 73 6f 6c 76 65 72 2d 31 32 2e 35 20 5c 0a 20 esolver-12.5 \.
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cf80: 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 -feedbackAfter 1
cf90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
cfa0: 20 20 20 20 20 20 20 20 3c 21 44 4f 43 54 59 50 <!DOCTYP
cfb0: 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 20 20 20 E doc [.
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 45 4e <!EN
cfe0: 54 49 54 59 20 61 20 50 55 42 4c 49 43 20 22 61 TITY a PUBLIC "a
cff0: 22 20 22 61 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 " "a.xml">.
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
d020: 21 45 4e 54 49 54 59 20 62 20 50 55 42 4c 49 43 !ENTITY b PUBLIC
d030: 20 22 62 22 20 22 62 2e 78 6d 6c 22 3e 0a 20 20 "b" "b.xml">.
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d060: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
d070: 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 3e 26 <doc>&
d080: 61 3b 26 62 3b 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 a;&b;</doc>}].
d090: 20 20 24 64 6f 63 20 73 65 6c 65 63 74 4e 6f 64 $doc selectNod
d0a0: 65 73 20 63 6f 75 6e 74 28 2f 2f 2a 29 0a 7d 20 es count(//*).}
d0b0: 2d 72 65 73 75 6c 74 20 34 0a 0a 73 65 74 20 63 -result 4..set c
d0c0: 61 6e 63 65 6c 20 30 0a 70 72 6f 63 20 65 78 74 ancel 0.proc ext
d0d0: 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 2e 36 RefResolver-12.6
d0e0: 20 7b 62 61 73 65 20 73 79 73 74 65 6d 49 64 20 {base systemId
d0f0: 70 75 62 6c 69 63 49 64 7d 20 7b 0a 20 20 20 20 publicId} {.
d100: 67 6c 6f 62 61 6c 20 63 61 6e 63 65 6c 0a 20 20 global cancel.
d110: 20 20 73 77 69 74 63 68 20 24 70 75 62 6c 69 63 switch $public
d120: 49 64 20 7b 0a 20 20 20 20 20 20 20 20 22 61 22 Id {. "a"
d130: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {. s
d140: 65 74 20 63 61 6e 63 65 6c 20 31 0a 20 20 20 20 et cancel 1.
d150: 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data
d160: 20 22 3c 65 31 2f 3e 3c 65 31 2f 3e 22 0a 20 20 "<e1/><e1/>".
d170: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
d180: 22 62 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 "b" {.
d190: 20 20 73 65 74 20 64 61 74 61 20 22 3c 65 31 2f set data "<e1/
d1a0: 3e 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 >". }.
d1b0: 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 default {.
d1c0: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
d1d0: 20 22 75 6e 6b 6e 6f 77 6e 20 70 75 62 6c 69 63 "unknown public
d1e0: 20 49 44 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 ID". }.
d1f0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 }. return
d200: 5b 6c 69 73 74 20 22 73 74 72 69 6e 67 22 20 24 [list "string" $
d210: 62 61 73 65 20 24 64 61 74 61 5d 0a 7d 0a 70 72 base $data].}.pr
d220: 6f 63 20 3a 3a 64 6f 6d 3a 3a 64 6f 6d 50 61 72 oc ::dom::domPar
d230: 73 65 46 65 65 64 62 61 63 6b 20 7b 7d 20 7b 0a seFeedback {} {.
d240: 20 20 20 20 67 6c 6f 62 61 6c 20 63 61 6e 63 65 global cance
d250: 6c 0a 20 20 20 20 69 66 20 7b 24 63 61 6e 63 65 l. if {$cance
d260: 6c 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 l} {. ret
d270: 75 72 6e 20 2d 63 6f 64 65 20 62 72 65 61 6b 0a urn -code break.
d280: 20 20 20 20 7d 0a 7d 0a 74 65 73 74 20 64 6f 6d }.}.test dom
d290: 2d 31 32 2e 36 20 7b 2d 66 65 65 64 62 61 63 6b -12.6 {-feedback
d2a0: 41 66 74 65 72 20 61 6e 64 20 65 78 74 65 72 6e After and extern
d2b0: 61 6c 20 65 6e 74 69 74 69 65 73 2c 20 77 69 74 al entities, wit
d2c0: 68 20 63 61 6e 63 65 6c 7d 20 2d 62 6f 64 79 20 h cancel} -body
d2d0: 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 {. dom parse
d2e0: 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 63 -externalentityc
d2f0: 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 65 73 ommand extRefRes
d300: 6f 6c 76 65 72 2d 31 32 2e 36 20 5c 0a 20 20 20 olver-12.6 \.
d310: 20 20 20 20 20 2d 66 65 65 64 62 61 63 6b 41 66 -feedbackAf
d320: 74 65 72 20 31 20 7b 0a 20 20 20 20 20 20 20 20 ter 1 {.
d330: 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 64 6f <!DOCTYPE do
d340: 63 20 5b 0a 20 20 20 20 20 20 20 20 20 20 20 20 c [.
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c <
d360: 21 45 4e 54 49 54 59 20 61 20 50 55 42 4c 49 43 !ENTITY a PUBLIC
d370: 20 22 61 22 20 22 61 2e 78 6d 6c 22 3e 0a 20 20 "a" "a.xml">.
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d390: 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 <!ENTIT
d3a0: 59 20 62 20 50 55 42 4c 49 43 20 22 62 22 20 22 Y b PUBLIC "b" "
d3b0: 62 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 b.xml">.
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d3d0: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
d3e0: 20 3c 64 6f 63 3e 26 61 3b 26 62 3b 3c 2f 64 6f <doc>&a;&b;</do
d3f0: 63 3e 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 22 22 c>}.} -result ""
d400: 0a 70 72 6f 63 20 3a 3a 64 6f 6d 3a 3a 64 6f 6d .proc ::dom::dom
d410: 50 61 72 73 65 46 65 65 64 62 61 63 6b 20 7b 7d ParseFeedback {}
d420: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 63 61 {. global ca
d430: 6e 63 65 6c 0a 20 20 20 20 69 66 20 7b 24 63 61 ncel. if {$ca
d440: 6e 63 65 6c 7d 20 7b 0a 20 20 20 20 20 20 20 20 ncel} {.
d450: 65 72 72 6f 72 20 22 45 72 72 6f 72 20 69 6e 20 error "Error in
d460: 66 65 65 64 62 61 63 6b 20 63 6d 64 2e 22 0a 20 feedback cmd.".
d470: 20 20 20 7d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d }.}.test dom-
d480: 31 32 2e 37 20 7b 2d 66 65 65 64 62 61 63 6b 41 12.7 {-feedbackA
d490: 66 74 65 72 20 61 6e 64 20 65 78 74 65 72 6e 61 fter and externa
d4a0: 6c 20 65 6e 74 69 74 69 65 73 2c 20 77 69 74 68 l entities, with
d4b0: 20 65 72 72 6f 72 7d 20 2d 62 6f 64 79 20 7b 0a error} -body {.
d4c0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [
d4d0: 63 61 74 63 68 20 7b 64 6f 6d 20 70 61 72 73 65 catch {dom parse
d4e0: 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 79 -externalentity
d4f0: 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 65 command extRefRe
d500: 73 6f 6c 76 65 72 2d 31 32 2e 36 20 5c 0a 20 20 solver-12.6 \.
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d520: 20 20 20 20 20 20 20 20 20 2d 66 65 65 64 62 61 -feedba
d530: 63 6b 41 66 74 65 72 20 31 20 7b 0a 20 20 20 20 ckAfter 1 {.
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d550: 20 20 20 20 20 20 20 20 20 20 20 3c 21 44 4f 43 <!DOC
d560: 54 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 20 TYPE doc [.
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d590: 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 <!ENTIT
d5a0: 59 20 61 20 50 55 42 4c 49 43 20 22 61 22 20 22 Y a PUBLIC "a" "
d5b0: 61 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 a.xml">.
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d5e0: 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 62 <!ENTITY b
d5f0: 20 50 55 42 4c 49 43 20 22 62 22 20 22 62 2e 78 PUBLIC "b" "b.x
d600: 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ml">.
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d630: 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 20 ]>.
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d650: 20 20 20 20 3c 64 6f 63 3e 26 61 3b 26 62 3b 3c <doc>&a;&b;<
d660: 2f 64 6f 63 3e 7d 7d 20 6d 73 67 5d 0a 20 20 20 /doc>}} msg].
d670: 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 6d list $result $m
d680: 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c 69 sg.} -result [li
d690: 73 74 20 31 20 22 45 72 72 6f 72 20 69 6e 20 66 st 1 "Error in f
d6a0: 65 65 64 62 61 63 6b 20 63 6d 64 2e 22 5d 0a 0a eedback cmd."]..
d6b0: 74 65 73 74 20 64 6f 6d 2d 31 32 2e 38 20 7b 2d test dom-12.8 {-
d6c0: 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 77 69 feedbackAfter wi
d6d0: 74 68 6f 75 74 20 2d 66 65 65 64 62 61 63 6b 63 thout -feedbackc
d6e0: 6d 64 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 md} -setup {.
d6f0: 20 63 61 74 63 68 20 7b 72 65 6e 61 6d 65 20 3a catch {rename :
d700: 3a 64 6f 6d 3a 3a 64 6f 6d 50 61 72 73 65 46 65 :dom::domParseFe
d710: 65 64 62 61 63 6b 20 22 22 7d 0a 7d 20 2d 62 6f edback ""}.} -bo
d720: 64 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 dy {. set res
d730: 75 6c 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 ult [catch {dom
d740: 70 61 72 73 65 20 2d 66 65 65 64 62 61 63 6b 41 parse -feedbackA
d750: 66 74 65 72 20 31 30 30 20 3c 64 6f 63 2f 3e 7d fter 100 <doc/>}
d760: 20 6d 73 67 5d 0a 20 20 20 20 6c 69 73 74 20 24 msg]. list $
d770: 72 65 73 75 6c 74 20 24 6d 73 67 0a 7d 20 2d 72 result $msg.} -r
d780: 65 73 75 6c 74 20 7b 31 20 7b 49 66 20 2d 66 65 esult {1 {If -fe
d790: 65 64 62 61 63 6b 41 66 74 65 72 20 69 73 20 75 edbackAfter is u
d7a0: 73 65 64 2c 20 2d 66 65 65 64 62 61 63 6b 63 6d sed, -feedbackcm
d7b0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20 75 d must also be u
d7c0: 73 65 64 2e 7d 7d 0a 0a 70 72 6f 63 20 66 65 65 sed.}}..proc fee
d7d0: 64 62 61 63 6b 63 6d 64 2d 31 32 2e 39 20 7b 7d dbackcmd-12.9 {}
d7e0: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 63 {. return -c
d7f0: 6f 64 65 20 62 72 65 61 6b 0a 7d 0a 74 65 73 74 ode break.}.test
d800: 20 64 6f 6d 2d 31 32 2e 39 20 7b 2d 66 65 65 64 dom-12.9 {-feed
d810: 62 61 63 6b 41 66 74 65 72 20 77 69 74 68 20 2d backAfter with -
d820: 66 65 65 64 62 61 63 6b 63 6d 64 20 2d 2d 20 63 feedbackcmd -- c
d830: 6d 64 20 72 65 74 75 72 6e 73 20 54 43 4c 5f 42 md returns TCL_B
d840: 52 45 41 4b 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 REAK} -body {.
d850: 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 66 65 65 dom parse -fee
d860: 64 62 61 63 6b 41 66 74 65 72 20 31 20 2d 66 65 dbackAfter 1 -fe
d870: 65 64 62 61 63 6b 63 6d 64 20 66 65 65 64 62 61 edbackcmd feedba
d880: 63 6b 63 6d 64 2d 31 32 2e 39 20 5c 0a 20 20 20 ckcmd-12.9 \.
d890: 20 20 20 20 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e {<doc><e1/>
d8a0: 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e <e1/><e1/></doc>
d8b0: 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 22 22 0a 0a }.} -result ""..
d8c0: 70 72 6f 63 20 66 65 65 64 62 61 63 6b 63 6d 64 proc feedbackcmd
d8d0: 2d 31 32 2e 31 30 20 7b 7d 20 7b 0a 20 20 20 20 -12.10 {} {.
d8e0: 65 72 72 6f 72 20 22 45 72 72 6f 72 20 69 6e 20 error "Error in
d8f0: 66 65 65 64 62 61 63 6b 20 63 6d 64 2e 22 0a 7d feedback cmd.".}
d900: 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 31 30 20 .test dom-12.10
d910: 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 {-feedbackAfter
d920: 77 69 74 68 20 2d 66 65 65 64 62 61 63 6b 63 6d with -feedbackcm
d930: 64 20 2d 2d 20 63 6d 64 20 72 65 74 75 72 6e 73 d -- cmd returns
d940: 20 54 43 4c 5f 45 52 52 4f 52 7d 20 2d 62 6f 64 TCL_ERROR} -bod
d950: 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 75 y {. set resu
d960: 6c 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 lt [catch {.
d970: 20 20 20 20 64 6f 6d 20 70 61 72 73 65 20 2d 66 dom parse -f
d980: 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 20 2d eedbackAfter 1 -
d990: 66 65 65 64 62 61 63 6b 63 6d 64 20 66 65 65 64 feedbackcmd feed
d9a0: 62 61 63 6b 63 6d 64 2d 31 32 2e 31 30 20 5c 0a backcmd-12.10 \.
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 3c 64 6f {<do
d9c0: 63 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 65 31 2f c><e1/><e1/><e1/
d9d0: 3e 3c 2f 64 6f 63 3e 7d 0a 20 20 20 20 7d 20 6d ></doc>}. } m
d9e0: 73 67 5d 0a 20 20 20 20 6c 69 73 74 20 24 72 65 sg]. list $re
d9f0: 73 75 6c 74 20 24 6d 73 67 0a 7d 20 2d 72 65 73 sult $msg.} -res
da00: 75 6c 74 20 5b 6c 69 73 74 20 31 20 22 45 72 72 ult [list 1 "Err
da10: 6f 72 20 69 6e 20 66 65 65 64 62 61 63 6b 20 63 or in feedback c
da20: 6d 64 2e 22 5d 0a 0a 70 72 6f 63 20 66 65 65 64 md."]..proc feed
da30: 62 61 63 6b 63 6d 64 2d 31 32 2e 31 31 20 7b 7d backcmd-12.11 {}
da40: 20 7b 0a 20 20 20 20 23 20 55 70 64 61 74 65 20 {. # Update
da50: 70 72 6f 67 65 73 73 20 64 69 61 6c 6f 67 2c 20 progess dialog,
da60: 63 68 65 63 6b 20 66 6f 72 20 63 61 6e 63 65 6c check for cancel
da70: 20 65 74 63 2e 0a 20 20 20 20 72 65 74 75 72 6e etc.. return
da80: 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 31 .}.test dom-12.1
da90: 31 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 1 {-feedbackAfte
daa0: 72 20 77 69 74 68 20 2d 66 65 65 64 62 61 63 6b r with -feedback
dab0: 63 6d 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 cmd} -body {.
dac0: 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 61 set doc [dom pa
dad0: 72 73 65 20 2d 66 65 65 64 62 61 63 6b 41 66 74 rse -feedbackAft
dae0: 65 72 20 31 20 2d 66 65 65 64 62 61 63 6b 63 6d er 1 -feedbackcm
daf0: 64 20 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 32 d feedbackcmd-12
db00: 2e 31 31 20 5c 0a 20 20 20 20 20 20 20 20 20 20 .11 \.
db10: 20 20 20 20 20 20 20 7b 3c 64 6f 63 3e 3c 65 31 {<doc><e1
db20: 2f 3e 3c 65 31 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f /><e1/><e1/></do
db30: 63 3e 7d 5d 0a 20 20 20 20 24 64 6f 63 20 73 65 c>}]. $doc se
db40: 6c 65 63 74 4e 6f 64 65 73 20 63 6f 75 6e 74 28 lectNodes count(
db50: 2f 2f 2a 29 0a 7d 20 2d 72 65 73 75 6c 74 20 34 //*).} -result 4
db60: 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e 31 32 20 .test dom-12.12
db70: 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 {-feedbackAfter
db80: 77 69 74 68 20 2d 66 65 65 64 62 61 63 6b 63 6d with -feedbackcm
db90: 64 20 61 6e 64 20 2d 63 68 61 6e 6e 65 6c 7d 20 d and -channel}
dba0: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74 -setup {. set
dbb0: 20 78 6d 6c 46 69 6c 65 20 5b 6d 61 6b 65 46 69 xmlFile [makeFi
dbc0: 6c 65 20 7b 3c 64 6f 63 3e 3c 65 31 2f 3e 3c 65 le {<doc><e1/><e
dbd0: 31 2f 3e 3c 65 31 2f 3e 3c 2f 64 6f 63 3e 7d 20 1/><e1/></doc>}
dbe0: 64 6f 6d 2e 78 6d 6c 5d 0a 7d 20 2d 62 6f 64 79 dom.xml].} -body
dbf0: 20 7b 0a 20 20 20 20 73 65 74 20 66 64 20 5b 6f {. set fd [o
dc00: 70 65 6e 20 24 78 6d 6c 46 69 6c 65 5d 0a 20 20 pen $xmlFile].
dc10: 20 20 73 65 74 20 64 6f 63 20 5b 64 6f 6d 20 70 set doc [dom p
dc20: 61 72 73 65 20 2d 63 68 61 6e 6e 65 6c 20 24 66 arse -channel $f
dc30: 64 20 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 d -feedbackAfter
dc40: 20 31 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 1 \.
dc50: 20 20 20 20 20 20 2d 66 65 65 64 62 61 63 6b 63 -feedbackc
dc60: 6d 64 20 66 65 65 64 62 61 63 6b 63 6d 64 2d 31 md feedbackcmd-1
dc70: 32 2e 31 31 5d 0a 20 20 20 20 63 6c 6f 73 65 20 2.11]. close
dc80: 24 66 64 0a 20 20 20 20 24 64 6f 63 20 73 65 6c $fd. $doc sel
dc90: 65 63 74 4e 6f 64 65 73 20 63 6f 75 6e 74 28 2f ectNodes count(/
dca0: 2f 2a 29 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b /*).} -cleanup {
dcb0: 0a 20 20 20 20 72 65 6d 6f 76 65 46 69 6c 65 20 . removeFile
dcc0: 64 6f 6d 2e 78 6d 6c 0a 7d 20 2d 72 65 73 75 6c dom.xml.} -resul
dcd0: 74 20 34 0a 74 65 73 74 20 64 6f 6d 2d 31 32 2e t 4.test dom-12.
dce0: 31 33 20 7b 2d 66 65 65 64 62 61 63 6b 41 66 74 13 {-feedbackAft
dcf0: 65 72 20 77 69 74 68 20 2d 66 65 65 64 62 61 63 er with -feedbac
dd00: 6b 63 6d 64 20 61 6e 64 20 65 78 74 65 72 6e 61 kcmd and externa
dd10: 6c 20 65 6e 74 69 74 69 65 73 7d 20 2d 62 6f 64 l entities} -bod
dd20: 79 20 7b 0a 20 20 20 20 73 65 74 20 64 6f 63 20 y {. set doc
dd30: 5b 64 6f 6d 20 70 61 72 73 65 20 2d 65 78 74 65 [dom parse -exte
dd40: 72 6e 61 6c 65 6e 74 69 74 79 63 6f 6d 6d 61 6e rnalentitycomman
dd50: 64 20 65 78 74 52 65 66 52 65 73 6f 6c 76 65 72 d extRefResolver
dd60: 2d 31 32 2e 35 20 5c 0a 20 20 20 20 20 20 20 20 -12.5 \.
dd70: 20 20 20 20 20 20 20 20 20 2d 66 65 65 64 62 61 -feedba
dd80: 63 6b 63 6d 64 20 66 65 65 64 62 61 63 6b 63 6d ckcmd feedbackcm
dd90: 64 2d 31 32 2e 31 31 20 5c 0a 20 20 20 20 20 20 d-12.11 \.
dda0: 20 20 20 20 20 20 20 20 20 20 20 2d 66 65 65 64 -feed
ddb0: 62 61 63 6b 41 66 74 65 72 20 31 20 7b 0a 20 20 backAfter 1 {.
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ddd0: 20 20 20 3c 21 44 4f 43 54 59 50 45 20 64 6f 63 <!DOCTYPE doc
dde0: 20 5b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 [.
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de00: 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 <!ENTITY
de10: 61 20 50 55 42 4c 49 43 20 22 61 22 20 22 61 2e a PUBLIC "a" "a.
de20: 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 xml">.
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de40: 20 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 <!ENTI
de50: 54 59 20 62 20 50 55 42 4c 49 43 20 22 62 22 20 TY b PUBLIC "b"
de60: 22 62 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 "b.xml">.
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 3e 0a ]>.
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dea0: 20 20 20 20 20 3c 64 6f 63 3e 26 61 3b 26 62 3b <doc>&a;&b;
deb0: 3c 2f 64 6f 63 3e 7d 5d 0a 20 20 20 20 24 64 6f </doc>}]. $do
dec0: 63 20 73 65 6c 65 63 74 4e 6f 64 65 73 20 63 6f c selectNodes co
ded0: 75 6e 74 28 2f 2f 2a 29 0a 7d 20 2d 72 65 73 75 unt(//*).} -resu
dee0: 6c 74 20 34 0a 0a 73 65 74 20 63 61 6e 63 65 6c lt 4..set cancel
def0: 20 30 0a 70 72 6f 63 20 66 65 65 64 62 61 63 6b 0.proc feedback
df00: 63 6d 64 2d 31 32 2e 31 34 20 7b 7d 20 7b 0a 20 cmd-12.14 {} {.
df10: 20 20 20 67 6c 6f 62 61 6c 20 63 61 6e 63 65 6c global cancel
df20: 0a 20 20 20 20 69 66 20 7b 24 63 61 6e 63 65 6c . if {$cancel
df30: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 } {. retu
df40: 72 6e 20 2d 63 6f 64 65 20 62 72 65 61 6b 0a 20 rn -code break.
df50: 20 20 20 7d 0a 7d 0a 74 65 73 74 20 64 6f 6d 2d }.}.test dom-
df60: 31 32 2e 31 34 20 7b 2d 66 65 65 64 62 61 63 6b 12.14 {-feedback
df70: 41 66 74 65 72 20 77 69 74 68 20 2d 66 65 65 64 After with -feed
df80: 62 61 63 6b 63 6d 64 20 61 6e 64 20 65 78 74 65 backcmd and exte
df90: 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 2c 20 77 rnal entities, w
dfa0: 69 74 68 20 63 61 6e 63 65 6c 7d 20 2d 62 6f 64 ith cancel} -bod
dfb0: 79 20 7b 0a 20 20 20 20 64 6f 6d 20 70 61 72 73 y {. dom pars
dfc0: 65 20 2d 65 78 74 65 72 6e 61 6c 65 6e 74 69 74 e -externalentit
dfd0: 79 63 6f 6d 6d 61 6e 64 20 65 78 74 52 65 66 52 ycommand extRefR
dfe0: 65 73 6f 6c 76 65 72 2d 31 32 2e 36 20 5c 0a 20 esolver-12.6 \.
dff0: 20 20 20 20 20 20 20 2d 66 65 65 64 62 61 63 6b -feedback
e000: 63 6d 64 20 66 65 65 64 62 61 63 6b 63 6d 64 2d cmd feedbackcmd-
e010: 31 32 2e 31 34 20 5c 0a 20 20 20 20 20 20 20 20 12.14 \.
e020: 2d 66 65 65 64 62 61 63 6b 41 66 74 65 72 20 31 -feedbackAfter 1
e030: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c {. <
e040: 21 44 4f 43 54 59 50 45 20 64 6f 63 20 5b 0a 20 !DOCTYPE doc [.
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e060: 20 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 <!ENTI
e070: 54 59 20 61 20 50 55 42 4c 49 43 20 22 61 22 20 TY a PUBLIC "a"
e080: 22 61 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 "a.xml">.
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0a0: 20 20 20 20 3c 21 45 4e 54 49 54 59 20 62 20 50 <!ENTITY b P
e0b0: 55 42 4c 49 43 20 22 62 22 20 22 62 2e 78 6d 6c UBLIC "b" "b.xml
e0c0: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ">.
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 3e 0a ]>.
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 64 6f 63 <doc
e0f0: 3e 26 61 3b 26 62 3b 3c 2f 64 6f 63 3e 7d 0a 7d >&a;&b;</doc>}.}
e100: 20 2d 72 65 73 75 6c 74 20 22 22 0a 73 65 74 20 -result "".set
e110: 63 61 6e 63 65 6c 20 30 0a 70 72 6f 63 20 66 65 cancel 0.proc fe
e120: 65 64 62 61 63 6b 63 6d 64 2d 31 32 2e 31 35 20 edbackcmd-12.15
e130: 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 {} {. global
e140: 63 61 6e 63 65 6c 0a 20 20 20 20 69 66 20 7b 24 cancel. if {$
e150: 63 61 6e 63 65 6c 7d 20 7b 0a 20 20 20 20 20 20 cancel} {.
e160: 20 20 65 72 72 6f 72 20 22 45 72 72 6f 72 20 69 error "Error i
e170: 6e 20 66 65 65 64 62 61 63 6b 20 63 6d 64 2e 22 n feedback cmd."
e180: 0a 20 20 20 20 7d 0a 7d 0a 74 65 73 74 20 64 6f . }.}.test do
e190: 6d 2d 31 32 2e 31 35 20 7b 2d 66 65 65 64 62 61 m-12.15 {-feedba
e1a0: 63 6b 41 66 74 65 72 20 77 69 74 68 20 2d 66 65 ckAfter with -fe
e1b0: 65 64 62 61 63 6b 63 6d 64 20 61 6e 64 20 65 78 edbackcmd and ex
e1c0: 74 65 72 6e 61 6c 20 65 6e 74 69 74 69 65 73 2c ternal entities,
e1d0: 20 77 69 74 68 20 65 72 72 6f 72 7d 20 2d 62 6f with error} -bo
e1e0: 64 79 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 dy {. set res
e1f0: 75 6c 74 20 5b 63 61 74 63 68 20 7b 64 6f 6d 20 ult [catch {dom
e200: 70 61 72 73 65 20 2d 65 78 74 65 72 6e 61 6c 65 parse -externale
e210: 6e 74 69 74 79 63 6f 6d 6d 61 6e 64 20 65 78 74 ntitycommand ext
e220: 52 65 66 52 65 73 6f 6c 76 65 72 2d 31 32 2e 36 RefResolver-12.6
e230: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 -f
e250: 65 65 64 62 61 63 6b 63 6d 64 20 66 65 65 64 62 eedbackcmd feedb
e260: 61 63 6b 63 6d 64 2d 31 32 2e 31 35 20 5c 0a 20 ackcmd-12.15 \.
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e280: 20 20 20 20 20 20 20 20 20 20 2d 66 65 65 64 62 -feedb
e290: 61 63 6b 41 66 74 65 72 20 31 20 7b 0a 20 20 20 ackAfter 1 {.
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 21 44 4f <!DO
e2c0: 43 54 59 50 45 20 64 6f 63 20 5b 0a 20 20 20 20 CTYPE doc [.
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 20
e2f0: 20 20 20 20 20 20 20 20 20 20 3c 21 45 4e 54 49 <!ENTI
e300: 54 59 20 61 20 50 55 42 4c 49 43 20 22 61 22 20 TY a PUBLIC "a"
e310: 22 61 2e 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 "a.xml">.
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 20 20 20 20
e340: 20 20 20 20 20 20 20 3c 21 45 4e 54 49 54 59 20 <!ENTITY
e350: 62 20 50 55 42 4c 49 43 20 22 62 22 20 22 62 2e b PUBLIC "b" "b.
e360: 78 6d 6c 22 3e 0a 20 20 20 20 20 20 20 20 20 20 xml">.
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 20 20 20 20 20 20 20 20
e390: 20 20 20 5d 3e 0a 20 20 20 20 20 20 20 20 20 20 ]>.
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e3b0: 20 20 20 20 20 3c 64 6f 63 3e 26 61 3b 26 62 3b <doc>&a;&b;
e3c0: 3c 2f 64 6f 63 3e 7d 7d 20 6d 73 67 5d 0a 20 20 </doc>}} msg].
e3d0: 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74 20 24 list $result $
e3e0: 6d 73 67 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 6c msg.} -result [l
e3f0: 69 73 74 20 31 20 22 45 72 72 6f 72 20 69 6e 20 ist 1 "Error in
e400: 66 65 65 64 62 61 63 6b 20 63 6d 64 2e 22 5d 0a feedback cmd."].
e410: 0a 0a 23 20 63 6c 65 61 6e 75 70 0a 3a 3a 74 63 ..# cleanup.::tc
e420: 6c 74 65 73 74 3a 3a 63 6c 65 61 6e 75 70 54 65 ltest::cleanupTe
e430: 73 74 73 0a 72 65 74 75 72 6e 0a sts.return.