Artifact e0febcbda4b7d4f10d76302574e7e64095f347e9:

  • File tests/dom.test — part of check-in [9e7f64d9c5] at 2017-08-17 14:30:40 on branch nodecmdns — Documented the new feature "creating real FQ nodes with *fromScript methods'. Added checks to createElementNS and createDocumentNS to prevent them to create xmlns prefixes with empty uri (which are not legal). (user: rolf size: 58427) [more...]

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.