[613] | 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
|
---|