- MXMLTEST ;SAIC/DKM - Test XML SAX interface ;01/31/2002 17:11 [ 12/18/2003 4:53 PM ]
- ;;7.3;TOOLKIT;**58,1002**;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
- 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
- MXMLTEST ;SAIC/DKM - Test XML SAX interface ;01/31/2002 17:11 [ 12/18/2003 4:53 PM ]
- +1 ;;7.3;TOOLKIT;**58,1002**;Apr 25, 1995
- +2 ;=================================================================
- +3 ; This application acts as a client to the XML parser. It displays
- +4 ; parsing events as they occur and generates a summary at the end.
- EN(DOC,OPTION) ;
- +1 NEW CBK,CNT
- +2 WRITE !!!,"Invoking XML Parser...",!!!
- +3 DO SET(.CBK)
- DO EN^MXMLPRSE(DOC,.CBK,.OPTION)
- +4 SET CNT=""
- +5 WRITE !!!,"Parser Summary:",!!
- +6 FOR
- SET CNT=$ORDER(CNT(CNT))
- IF CNT=""
- QUIT
- WRITE CNT,":",?25,CNT(CNT),!
- +7 QUIT
- +8 ; Direct entry of XML text from keyboard
- +9 ; Terminate text entry with a solitary '^'
- PASTE(OPTION) ;
- +1 NEW X,Y,GBL
- +2 SET GBL=$NAME(^TMP("MXMLTEST",$JOB))
- +3 KILL @GBL
- +4 FOR X=1:1
- Begin DoDot:1
- +5 WRITE X,"> "
- +6 READ Y:$GET(DTIME,600),!
- +7 IF '$TEST
- SET Y="^"
- +8 IF Y'="^"
- SET @GBL@(X)=Y
- End DoDot:1
- IF Y="^"
- QUIT
- +9 DO EN(GBL,.OPTION)
- +10 KILL @GBL
- +11 QUIT
- +12 ; Set the event interface entry points
- SET(CBK) NEW X,Y
- +1 KILL CBK
- +2 FOR X=0:1
- SET Y=$PIECE($TEXT(SETX+X),";;",2)
- IF Y=""
- QUIT
- Begin DoDot:1
- +3 SET CBK(Y)=$EXTRACT(Y,1,8)_"^MXMLTEST"
- End DoDot:1
- +4 QUIT
- +5 ; Convert special characters to \x format
- ESC(X) NEW C,Y,Z
- +1 FOR Z=1:1
- SET C=$EXTRACT(X,Z)
- IF C=""
- QUIT
- Begin DoDot:1
- +2 SET Y=$TRANSLATE(C,$CHAR(9,10,13,92),"tnc")
- +3 IF C'=Y
- SET $EXTRACT(X,Z)=$SELECT(Y="":"\\",1:"\"_Y)
- SET Z=Z+1
- End DoDot:1
- +4 QUIT X
- SETX ;;STARTDOCUMENT
- +1 ;;ENDDOCUMENT
- +2 ;;DOCTYPE
- +3 ;;STARTELEMENT
- +4 ;;ENDELEMENT
- +5 ;;CHARACTERS
- +6 ;;PI
- +7 ;;ERROR
- +8 ;;COMMENT
- +9 ;;EXTERNAL
- +10 ;;NOTATION
- +11 ;;
- +12 ; Event interface callbacks
- STARTDOC ;
- ENDDOCUM WRITE EVT,"()",!
- +1 QUIT
- DOCTYPE(P1,P2,P3) ;
- +1 WRITE EVT,"(""",P1,""",""",P2,""",""",P3,""")",!
- +2 QUIT
- STARTELE(ELE,ATR) ;
- +1 DO ARGS(ELE,.ATR)
- DO COUNT("Elements")
- +2 QUIT
- ARGS(ELE,ATR) ;
- +1 NEW X,Y
- +2 WRITE EVT,"(""",ELE,""""
- +3 SET X=""
- SET Y=","""
- +4 FOR
- SET X=$ORDER(ATR(X))
- IF X=""
- QUIT
- WRITE Y,X,"=",$$ESC(ATR(X))
- SET Y=";"
- +5 WRITE $SELECT($LENGTH(Y)=1:""")",1:")"),!
- +6 QUIT
- ENDELEME(ELE) ;
- +1 WRITE EVT,"(""",ELE,""")",!
- +2 QUIT
- CHARACTE(TXT) ;
- +1 DO COUNT("Non-markup Content",$LENGTH(TXT))
- +2 WRITE EVT,"(""",$$ESC(TXT),""")",!
- +3 QUIT
- PI(TGT,TXT) ;
- +1 DO ARGS(TGT,.TXT)
- +2 DO COUNT("Processing Instructions")
- +3 QUIT
- +1 WRITE EVT,"(""",TXT,""")",!
- +2 DO COUNT("Comments")
- +3 QUIT
- EXTERNAL(SYS,PUB,GBL) ;
- +1 WRITE EVT,"(""",SYS,""",""",PUB,""")",!
- +2 DO COUNT("External Entities")
- +3 QUIT
- NOTATION(NAME,SYS,PUB) ;
- +1 WRITE EVT,"(""",NAME,""",""",SYS,""",""",PUB,""")",!
- +2 DO COUNT("Notation Declarations")
- +3 QUIT
- COUNT(TYPE,INC) ;
- +1 SET CNT(TYPE)=$GET(CNT(TYPE))+$GET(INC,1)
- +2 QUIT
- ERROR(ERR) ;
- +1 NEW X
- +2 SET X=$PIECE("Warning^Validation Error^Conformance Error","^",ERR("SEV")+1)
- +3 DO COUNT(X_"s")
- +4 WRITE X,": ",ERR("MSG")
- +5 IF $GET(ERR("ARG"))'=""
- WRITE " (",ERR("ARG"),")"
- +6 WRITE ". ","Line ",ERR("LIN"),", Position ",ERR("POS"),!
- +7 WRITE $TRANSLATE(ERR("XML"),$CHAR(9,10,13)," "),!,$$REPEAT^XLFSTR("-",ERR("POS")-1),"^",!!
- +8 QUIT