| 1 | MXMLTEST ;SAIC/DKM - Test XML SAX interface ;01/31/2002  17:11
 | 
|---|
| 2 |  ;;7.3;TOOLKIT;**58**;Apr 25, 1995
 | 
|---|
| 3 |  ;=================================================================
 | 
|---|
| 4 |  ; This application acts as a client to the XML parser.  It displays
 | 
|---|
| 5 |  ; parsing events as they occur and generates a summary at the end.
 | 
|---|
| 6 | EN(DOC,OPTION) ;
 | 
|---|
| 7 |  N CBK,CNT
 | 
|---|
| 8 |  W !!!,"Invoking XML Parser...",!!!
 | 
|---|
| 9 |  D SET(.CBK),EN^MXMLPRSE(DOC,.CBK,.OPTION)
 | 
|---|
| 10 |  S CNT=""
 | 
|---|
| 11 |  W !!!,"Parser Summary:",!!
 | 
|---|
| 12 |  F  S CNT=$O(CNT(CNT)) Q:CNT=""  W CNT,":",?25,CNT(CNT),!
 | 
|---|
| 13 |  Q
 | 
|---|
| 14 |  ; Direct entry of XML text from keyboard
 | 
|---|
| 15 |  ; Terminate text entry with a solitary '^'
 | 
|---|
| 16 | PASTE(OPTION) ;
 | 
|---|
| 17 |  N X,Y,GBL
 | 
|---|
| 18 |  S GBL=$NA(^TMP("MXMLTEST",$J))
 | 
|---|
| 19 |  K @GBL
 | 
|---|
| 20 |  F X=1:1 D  Q:Y="^"
 | 
|---|
| 21 |  .W X,"> "
 | 
|---|
| 22 |  .R Y:$G(DTIME,600),!
 | 
|---|
| 23 |  .E  S Y="^"
 | 
|---|
| 24 |  .S:Y'="^" @GBL@(X)=Y
 | 
|---|
| 25 |  D EN(GBL,.OPTION)
 | 
|---|
| 26 |  K @GBL
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ; Set the event interface entry points
 | 
|---|
| 29 | SET(CBK) N X,Y
 | 
|---|
| 30 |  K CBK
 | 
|---|
| 31 |  F X=0:1 S Y=$P($T(SETX+X),";;",2) Q:Y=""  D
 | 
|---|
| 32 |  .S CBK(Y)=$E(Y,1,8)_"^MXMLTEST"
 | 
|---|
| 33 |  Q
 | 
|---|
| 34 |  ; Convert special characters to \x format
 | 
|---|
| 35 | ESC(X) N C,Y,Z
 | 
|---|
| 36 |  F Z=1:1 S C=$E(X,Z) Q:C=""  D
 | 
|---|
| 37 |  .S Y=$TR(C,$C(9,10,13,92),"tnc")
 | 
|---|
| 38 |  .S:C'=Y $E(X,Z)=$S(Y="":"\\",1:"\"_Y),Z=Z+1
 | 
|---|
| 39 |  Q X
 | 
|---|
| 40 | SETX ;;STARTDOCUMENT
 | 
|---|
| 41 |  ;;ENDDOCUMENT
 | 
|---|
| 42 |  ;;DOCTYPE
 | 
|---|
| 43 |  ;;STARTELEMENT
 | 
|---|
| 44 |  ;;ENDELEMENT
 | 
|---|
| 45 |  ;;CHARACTERS
 | 
|---|
| 46 |  ;;PI
 | 
|---|
| 47 |  ;;ERROR
 | 
|---|
| 48 |  ;;COMMENT
 | 
|---|
| 49 |  ;;EXTERNAL
 | 
|---|
| 50 |  ;;NOTATION
 | 
|---|
| 51 |  ;;
 | 
|---|
| 52 |  ; Event interface callbacks
 | 
|---|
| 53 | STARTDOC ;
 | 
|---|
| 54 | ENDDOCUM W EVT,"()",!
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 | DOCTYPE(P1,P2,P3) ;
 | 
|---|
| 57 |  W EVT,"(""",P1,""",""",P2,""",""",P3,""")",!
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 | STARTELE(ELE,ATR) ;
 | 
|---|
| 60 |  D ARGS(ELE,.ATR),COUNT("Elements")
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 | ARGS(ELE,ATR) ;
 | 
|---|
| 63 |  N X,Y
 | 
|---|
| 64 |  W EVT,"(""",ELE,""""
 | 
|---|
| 65 |  S X="",Y=","""
 | 
|---|
| 66 |  F  S X=$O(ATR(X)) Q:X=""  W Y,X,"=",$$ESC(ATR(X)) S Y=";"
 | 
|---|
| 67 |  W $S($L(Y)=1:""")",1:")"),!
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 | ENDELEME(ELE) ;
 | 
|---|
| 70 |  W EVT,"(""",ELE,""")",!
 | 
|---|
| 71 |  Q
 | 
|---|
| 72 | CHARACTE(TXT) ;
 | 
|---|
| 73 |  D COUNT("Non-markup Content",$L(TXT))
 | 
|---|
| 74 |  W EVT,"(""",$$ESC(TXT),""")",!
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 | PI(TGT,TXT) ;
 | 
|---|
| 77 |  D ARGS(TGT,.TXT)
 | 
|---|
| 78 |  D COUNT("Processing Instructions")
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 | COMMENT(TXT) ;
 | 
|---|
| 81 |  W EVT,"(""",TXT,""")",!
 | 
|---|
| 82 |  D COUNT("Comments")
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 | EXTERNAL(SYS,PUB,GBL) ;
 | 
|---|
| 85 |  W EVT,"(""",SYS,""",""",PUB,""")",!
 | 
|---|
| 86 |  D COUNT("External Entities")
 | 
|---|
| 87 |  Q
 | 
|---|
| 88 | NOTATION(NAME,SYS,PUB) ;
 | 
|---|
| 89 |  W EVT,"(""",NAME,""",""",SYS,""",""",PUB,""")",!
 | 
|---|
| 90 |  D COUNT("Notation Declarations")
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 | COUNT(TYPE,INC) ;
 | 
|---|
| 93 |  S CNT(TYPE)=$G(CNT(TYPE))+$G(INC,1)
 | 
|---|
| 94 |  Q
 | 
|---|
| 95 | ERROR(ERR) ;
 | 
|---|
| 96 |  N X
 | 
|---|
| 97 |  S X=$P("Warning^Validation Error^Conformance Error","^",ERR("SEV")+1)
 | 
|---|
| 98 |  D COUNT(X_"s")
 | 
|---|
| 99 |  W X,": ",ERR("MSG")
 | 
|---|
| 100 |  W:$G(ERR("ARG"))'="" " (",ERR("ARG"),")"
 | 
|---|
| 101 |  W ".  ","Line ",ERR("LIN"),", Position ",ERR("POS"),!
 | 
|---|
| 102 |  W $TR(ERR("XML"),$C(9,10,13)," "),!,$$REPEAT^XLFSTR("-",ERR("POS")-1),"^",!!
 | 
|---|
| 103 |  Q
 | 
|---|