VistA-FOIAVistA/r/XML_PARSER-MXML/MXMLTEST.m

104 lines
2.4 KiB
Mathematica

MXMLTEST ;SAIC/DKM - Test XML SAX interface ;01/31/2002 17:11
;;7.3;TOOLKIT;**58**;Apr 25, 1995
;=================================================================
; This application acts as a client to the XML parser. It displays
; parsing events as they occur and generates a summary at the end.
EN(DOC,OPTION) ;
N CBK,CNT
W !!!,"Invoking XML Parser...",!!!
D SET(.CBK),EN^MXMLPRSE(DOC,.CBK,.OPTION)
S CNT=""
W !!!,"Parser Summary:",!!
F S CNT=$O(CNT(CNT)) Q:CNT="" W CNT,":",?25,CNT(CNT),!
Q
; Direct entry of XML text from keyboard
; Terminate text entry with a solitary '^'
PASTE(OPTION) ;
N X,Y,GBL
S GBL=$NA(^TMP("MXMLTEST",$J))
K @GBL
F X=1:1 D Q:Y="^"
.W X,"> "
.R Y:$G(DTIME,600),!
.E S Y="^"
.S:Y'="^" @GBL@(X)=Y
D EN(GBL,.OPTION)
K @GBL
Q
; Set the event interface entry points
SET(CBK) N X,Y
K CBK
F X=0:1 S Y=$P($T(SETX+X),";;",2) Q:Y="" D
.S CBK(Y)=$E(Y,1,8)_"^MXMLTEST"
Q
; Convert special characters to \x format
ESC(X) N C,Y,Z
F Z=1:1 S C=$E(X,Z) Q:C="" D
.S Y=$TR(C,$C(9,10,13,92),"tnc")
.S:C'=Y $E(X,Z)=$S(Y="":"\\",1:"\"_Y),Z=Z+1
Q X
SETX ;;STARTDOCUMENT
;;ENDDOCUMENT
;;DOCTYPE
;;STARTELEMENT
;;ENDELEMENT
;;CHARACTERS
;;PI
;;ERROR
;;COMMENT
;;EXTERNAL
;;NOTATION
;;
; Event interface callbacks
STARTDOC ;
ENDDOCUM W EVT,"()",!
Q
DOCTYPE(P1,P2,P3) ;
W EVT,"(""",P1,""",""",P2,""",""",P3,""")",!
Q
STARTELE(ELE,ATR) ;
D ARGS(ELE,.ATR),COUNT("Elements")
Q
ARGS(ELE,ATR) ;
N X,Y
W EVT,"(""",ELE,""""
S X="",Y=","""
F S X=$O(ATR(X)) Q:X="" W Y,X,"=",$$ESC(ATR(X)) S Y=";"
W $S($L(Y)=1:""")",1:")"),!
Q
ENDELEME(ELE) ;
W EVT,"(""",ELE,""")",!
Q
CHARACTE(TXT) ;
D COUNT("Non-markup Content",$L(TXT))
W EVT,"(""",$$ESC(TXT),""")",!
Q
PI(TGT,TXT) ;
D ARGS(TGT,.TXT)
D COUNT("Processing Instructions")
Q
COMMENT(TXT) ;
W EVT,"(""",TXT,""")",!
D COUNT("Comments")
Q
EXTERNAL(SYS,PUB,GBL) ;
W EVT,"(""",SYS,""",""",PUB,""")",!
D COUNT("External Entities")
Q
NOTATION(NAME,SYS,PUB) ;
W EVT,"(""",NAME,""",""",SYS,""",""",PUB,""")",!
D COUNT("Notation Declarations")
Q
COUNT(TYPE,INC) ;
S CNT(TYPE)=$G(CNT(TYPE))+$G(INC,1)
Q
ERROR(ERR) ;
N X
S X=$P("Warning^Validation Error^Conformance Error","^",ERR("SEV")+1)
D COUNT(X_"s")
W X,": ",ERR("MSG")
W:$G(ERR("ARG"))'="" " (",ERR("ARG"),")"
W ". ","Line ",ERR("LIN"),", Position ",ERR("POS"),!
W $TR(ERR("XML"),$C(9,10,13)," "),!,$$REPEAT^XLFSTR("-",ERR("POS")-1),"^",!!
Q