| 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 | 
|---|