1*b4dd7d09SAndy Fiddaman#!/usr/bin/ksh93 2*b4dd7d09SAndy Fiddaman 3*b4dd7d09SAndy Fiddaman# 4*b4dd7d09SAndy Fiddaman# CDDL HEADER START 5*b4dd7d09SAndy Fiddaman# 6*b4dd7d09SAndy Fiddaman# The contents of this file are subject to the terms of the 7*b4dd7d09SAndy Fiddaman# Common Development and Distribution License (the "License"). 8*b4dd7d09SAndy Fiddaman# You may not use this file except in compliance with the License. 9*b4dd7d09SAndy Fiddaman# 10*b4dd7d09SAndy Fiddaman# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 11*b4dd7d09SAndy Fiddaman# or http://www.opensolaris.org/os/licensing. 12*b4dd7d09SAndy Fiddaman# See the License for the specific language governing permissions 13*b4dd7d09SAndy Fiddaman# and limitations under the License. 14*b4dd7d09SAndy Fiddaman# 15*b4dd7d09SAndy Fiddaman# When distributing Covered Code, include this CDDL HEADER in each 16*b4dd7d09SAndy Fiddaman# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 17*b4dd7d09SAndy Fiddaman# If applicable, add the following below this CDDL HEADER, with the 18*b4dd7d09SAndy Fiddaman# fields enclosed by brackets "[]" replaced with your own identifying 19*b4dd7d09SAndy Fiddaman# information: Portions Copyright [yyyy] [name of copyright owner] 20*b4dd7d09SAndy Fiddaman# 21*b4dd7d09SAndy Fiddaman# CDDL HEADER END 22*b4dd7d09SAndy Fiddaman# 23*b4dd7d09SAndy Fiddaman 24*b4dd7d09SAndy Fiddaman# 25*b4dd7d09SAndy Fiddaman# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 26*b4dd7d09SAndy Fiddaman# 27*b4dd7d09SAndy Fiddaman 28*b4dd7d09SAndy Fiddaman# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant 29*b4dd7d09SAndy Fiddamanexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin 30*b4dd7d09SAndy Fiddaman 31*b4dd7d09SAndy Fiddamanfunction fatal_error 32*b4dd7d09SAndy Fiddaman{ 33*b4dd7d09SAndy Fiddaman print -u 2 "${progname}: $*" 34*b4dd7d09SAndy Fiddaman exit 1 35*b4dd7d09SAndy Fiddaman} 36*b4dd7d09SAndy Fiddaman 37*b4dd7d09SAndy Fiddamanfunction attrstrtoattrarray 38*b4dd7d09SAndy Fiddaman{ 39*b4dd7d09SAndy Fiddaman#set -o xtrace 40*b4dd7d09SAndy Fiddaman typeset s="$1" 41*b4dd7d09SAndy Fiddaman nameref aa=$2 # attribute array 42*b4dd7d09SAndy Fiddaman integer aa_count=0 43*b4dd7d09SAndy Fiddaman integer aa_count=0 44*b4dd7d09SAndy Fiddaman typeset nextattr 45*b4dd7d09SAndy Fiddaman integer currattrlen=0 46*b4dd7d09SAndy Fiddaman typeset tagstr 47*b4dd7d09SAndy Fiddaman typeset tagval 48*b4dd7d09SAndy Fiddaman 49*b4dd7d09SAndy Fiddaman while (( ${#s} > 0 )) ; do 50*b4dd7d09SAndy Fiddaman # skip whitespaces 51*b4dd7d09SAndy Fiddaman while [[ "${s:currattrlen:1}" == ~(E)[[:blank:][:space:]] ]] ; do 52*b4dd7d09SAndy Fiddaman (( currattrlen++ )) 53*b4dd7d09SAndy Fiddaman done 54*b4dd7d09SAndy Fiddaman s="${s:currattrlen:${#s}}" 55*b4dd7d09SAndy Fiddaman 56*b4dd7d09SAndy Fiddaman # anything left ? 57*b4dd7d09SAndy Fiddaman (( ${#s} == 0 )) && break 58*b4dd7d09SAndy Fiddaman 59*b4dd7d09SAndy Fiddaman # Pattern tests: 60*b4dd7d09SAndy Fiddaman #x="foo=bar huz=123" ; print "${x##~(E)[[:alnum:]_-:]*=[^[:blank:]\"]*}" 61*b4dd7d09SAndy Fiddaman #x='foo="ba=r o" huz=123' ; print "${x##~(E)[[:alnum:]_-:]*=\"[^\"]*\"}" 62*b4dd7d09SAndy Fiddaman #x="foo='ba=r o' huz=123" ; print "${x##~(E)[[:alnum:]_-:]*=\'[^\"]*\'}" 63*b4dd7d09SAndy Fiddaman #x="foox huz=123" ; print "${x##~(E)[[:alnum:]_-:]*}" 64*b4dd7d09SAndy Fiddaman # All pattern combined via eregex (w|x|y|z): 65*b4dd7d09SAndy Fiddaman #x='foo="bar=o" huz=123' ; print "${x##~(E)([[:alnum:]_-:]*=[^[:blank:]\"]*|[[:alnum:]_-:]*=\"[^\"]*\"|[[:alnum:]_-:]*=\'[^\"]*\')}" 66*b4dd7d09SAndy Fiddaman nextattr="${s##~(E)([[:alnum:]_-:]*=[^[:blank:]\"]*|[[:alnum:]_-:]*=\"[^\"]*\"|[[:alnum:]_-:]*=\'[^\"]*\'|[[:alnum:]_-:]*)}" 67*b4dd7d09SAndy Fiddaman currattrlen=$(( ${#s} - ${#nextattr})) 68*b4dd7d09SAndy Fiddaman 69*b4dd7d09SAndy Fiddaman # add entry 70*b4dd7d09SAndy Fiddaman tagstr="${s:0:currattrlen}" 71*b4dd7d09SAndy Fiddaman if [[ "${tagstr}" == *=* ]] ; then 72*b4dd7d09SAndy Fiddaman # normal case: attribute with value 73*b4dd7d09SAndy Fiddaman 74*b4dd7d09SAndy Fiddaman tagval="${tagstr#*=}" 75*b4dd7d09SAndy Fiddaman 76*b4dd7d09SAndy Fiddaman # strip quotes ('' or "") 77*b4dd7d09SAndy Fiddaman if [[ "${tagval}" == ~(Elr)(\'.*\'|\".*\") ]] ; then 78*b4dd7d09SAndy Fiddaman tagval="${tagval:1:${#tagval}-2}" 79*b4dd7d09SAndy Fiddaman fi 80*b4dd7d09SAndy Fiddaman 81*b4dd7d09SAndy Fiddaman aa[${aa_count}]=( name="${tagstr%%=*}" value="${tagval}" ) 82*b4dd7d09SAndy Fiddaman else 83*b4dd7d09SAndy Fiddaman # special case for HTML where you have something like <foo baz> 84*b4dd7d09SAndy Fiddaman aa[${aa_count}]=( name="${tagstr}" ) 85*b4dd7d09SAndy Fiddaman fi 86*b4dd7d09SAndy Fiddaman (( aa_count++ )) 87*b4dd7d09SAndy Fiddaman (( aa_count > 1000 )) && fatal_error "$0: aa_count too large" # assert 88*b4dd7d09SAndy Fiddaman done 89*b4dd7d09SAndy Fiddaman} 90*b4dd7d09SAndy Fiddaman 91*b4dd7d09SAndy Fiddaman 92*b4dd7d09SAndy Fiddamanfunction handle_document 93*b4dd7d09SAndy Fiddaman{ 94*b4dd7d09SAndy Fiddaman#set -o xtrace 95*b4dd7d09SAndy Fiddaman nameref callbacks=${1} 96*b4dd7d09SAndy Fiddaman typeset tag_type="${2}" 97*b4dd7d09SAndy Fiddaman typeset tag_value="${3}" 98*b4dd7d09SAndy Fiddaman typeset tag_attributes="${4}" 99*b4dd7d09SAndy Fiddaman nameref doc=${callbacks["arg_tree"]} 100*b4dd7d09SAndy Fiddaman nameref nodepath="${stack.items[stack.pos]}" 101*b4dd7d09SAndy Fiddaman nameref nodesnum="${stack.items[stack.pos]}num" 102*b4dd7d09SAndy Fiddaman 103*b4dd7d09SAndy Fiddaman case "${tag_type}" in 104*b4dd7d09SAndy Fiddaman tag_begin) 105*b4dd7d09SAndy Fiddaman nodepath[${nodesnum}]+=( 106*b4dd7d09SAndy Fiddaman typeset tagtype="element" 107*b4dd7d09SAndy Fiddaman typeset tagname="${tag_value}" 108*b4dd7d09SAndy Fiddaman compound -A tagattributes 109*b4dd7d09SAndy Fiddaman compound -A nodes 110*b4dd7d09SAndy Fiddaman integer nodesnum=0 111*b4dd7d09SAndy Fiddaman ) 112*b4dd7d09SAndy Fiddaman 113*b4dd7d09SAndy Fiddaman # fill attributes 114*b4dd7d09SAndy Fiddaman if [[ "${tag_attributes}" != "" ]] ; then 115*b4dd7d09SAndy Fiddaman attrstrtoattrarray "${tag_attributes}" "nodepath[${nodesnum}].tagattributes" 116*b4dd7d09SAndy Fiddaman fi 117*b4dd7d09SAndy Fiddaman 118*b4dd7d09SAndy Fiddaman (( stack.pos++ )) 119*b4dd7d09SAndy Fiddaman stack.items[stack.pos]="${stack.items[stack.pos-1]}[${nodesnum}].nodes" 120*b4dd7d09SAndy Fiddaman (( nodesnum++ )) 121*b4dd7d09SAndy Fiddaman ;; 122*b4dd7d09SAndy Fiddaman tag_end) 123*b4dd7d09SAndy Fiddaman (( stack.pos-- )) 124*b4dd7d09SAndy Fiddaman ;; 125*b4dd7d09SAndy Fiddaman tag_text) 126*b4dd7d09SAndy Fiddaman nodepath[${nodesnum}]+=( 127*b4dd7d09SAndy Fiddaman typeset tagtype="text" 128*b4dd7d09SAndy Fiddaman typeset tagvalue="${tag_value}" 129*b4dd7d09SAndy Fiddaman ) 130*b4dd7d09SAndy Fiddaman (( nodesnum++ )) 131*b4dd7d09SAndy Fiddaman ;; 132*b4dd7d09SAndy Fiddaman tag_comment) 133*b4dd7d09SAndy Fiddaman nodepath[${nodesnum}]+=( 134*b4dd7d09SAndy Fiddaman typeset tagtype="comment" 135*b4dd7d09SAndy Fiddaman typeset tagvalue="${tag_value}" 136*b4dd7d09SAndy Fiddaman ) 137*b4dd7d09SAndy Fiddaman (( nodesnum++ )) 138*b4dd7d09SAndy Fiddaman ;; 139*b4dd7d09SAndy Fiddaman document_start) 140*b4dd7d09SAndy Fiddaman ;; 141*b4dd7d09SAndy Fiddaman document_end) 142*b4dd7d09SAndy Fiddaman ;; 143*b4dd7d09SAndy Fiddaman esac 144*b4dd7d09SAndy Fiddaman 145*b4dd7d09SAndy Fiddaman# print "xmltok: '${tag_type}' = '${tag_value}'" 146*b4dd7d09SAndy Fiddaman} 147*b4dd7d09SAndy Fiddaman 148*b4dd7d09SAndy Fiddamanfunction xml_tok 149*b4dd7d09SAndy Fiddaman{ 150*b4dd7d09SAndy Fiddaman typeset buf="" 151*b4dd7d09SAndy Fiddaman typeset namebuf="" 152*b4dd7d09SAndy Fiddaman typeset attrbuf="" 153*b4dd7d09SAndy Fiddaman typeset c="" 154*b4dd7d09SAndy Fiddaman typeset isendtag # bool: true/false 155*b4dd7d09SAndy Fiddaman typeset issingletag # bool: true/false (used for tags like "<br />") 156*b4dd7d09SAndy Fiddaman nameref callbacks=${1} 157*b4dd7d09SAndy Fiddaman 158*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["document_start"]}" ]] && ${callbacks["document_start"]} "${1}" "document_start" 159*b4dd7d09SAndy Fiddaman 160*b4dd7d09SAndy Fiddaman while IFS='' read -r -N 1 c ; do 161*b4dd7d09SAndy Fiddaman isendtag=false 162*b4dd7d09SAndy Fiddaman 163*b4dd7d09SAndy Fiddaman if [[ "$c" == "<" ]] ; then 164*b4dd7d09SAndy Fiddaman # flush any text content 165*b4dd7d09SAndy Fiddaman if [[ "$buf" != "" ]] ; then 166*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["tag_text"]}" ]] && ${callbacks["tag_text"]} "${1}" "tag_text" "$buf" 167*b4dd7d09SAndy Fiddaman buf="" 168*b4dd7d09SAndy Fiddaman fi 169*b4dd7d09SAndy Fiddaman 170*b4dd7d09SAndy Fiddaman IFS='' read -r -N 1 c 171*b4dd7d09SAndy Fiddaman if [[ "$c" == "/" ]] ; then 172*b4dd7d09SAndy Fiddaman isendtag=true 173*b4dd7d09SAndy Fiddaman else 174*b4dd7d09SAndy Fiddaman buf="$c" 175*b4dd7d09SAndy Fiddaman fi 176*b4dd7d09SAndy Fiddaman IFS='' read -r -d '>' c 177*b4dd7d09SAndy Fiddaman buf+="$c" 178*b4dd7d09SAndy Fiddaman 179*b4dd7d09SAndy Fiddaman # handle comments 180*b4dd7d09SAndy Fiddaman if [[ "$buf" == ~(El)!-- ]] ; then 181*b4dd7d09SAndy Fiddaman # did we read the comment completely ? 182*b4dd7d09SAndy Fiddaman if [[ "$buf" != ~(Elr)!--.*-- ]] ; then 183*b4dd7d09SAndy Fiddaman buf+=">" 184*b4dd7d09SAndy Fiddaman while [[ "$buf" != ~(Elr)!--.*-- ]] ; do 185*b4dd7d09SAndy Fiddaman IFS='' read -r -N 1 c || break 186*b4dd7d09SAndy Fiddaman buf+="$c" 187*b4dd7d09SAndy Fiddaman done 188*b4dd7d09SAndy Fiddaman fi 189*b4dd7d09SAndy Fiddaman 190*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["tag_comment"]}" ]] && ${callbacks["tag_comment"]} "${1}" "tag_comment" "${buf:3:${#buf}-5}" 191*b4dd7d09SAndy Fiddaman buf="" 192*b4dd7d09SAndy Fiddaman continue 193*b4dd7d09SAndy Fiddaman fi 194*b4dd7d09SAndy Fiddaman 195*b4dd7d09SAndy Fiddaman # check if the tag starts and ends at the same time (like "<br />") 196*b4dd7d09SAndy Fiddaman if [[ "${buf}" == ~(Er).*/ ]] ; then 197*b4dd7d09SAndy Fiddaman issingletag=true 198*b4dd7d09SAndy Fiddaman buf="${buf%*/}" 199*b4dd7d09SAndy Fiddaman else 200*b4dd7d09SAndy Fiddaman issingletag=false 201*b4dd7d09SAndy Fiddaman fi 202*b4dd7d09SAndy Fiddaman 203*b4dd7d09SAndy Fiddaman # check if the tag has attributes (e.g. space after name) 204*b4dd7d09SAndy Fiddaman if [[ "$buf" == ~(E)[[:space:][:blank:]] ]] ; then 205*b4dd7d09SAndy Fiddaman namebuf="${buf%%~(E)[[:space:][:blank:]].*}" 206*b4dd7d09SAndy Fiddaman attrbuf="${buf#~(E).*[[:space:][:blank:]]}" 207*b4dd7d09SAndy Fiddaman else 208*b4dd7d09SAndy Fiddaman namebuf="$buf" 209*b4dd7d09SAndy Fiddaman attrbuf="" 210*b4dd7d09SAndy Fiddaman fi 211*b4dd7d09SAndy Fiddaman 212*b4dd7d09SAndy Fiddaman if ${isendtag} ; then 213*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["tag_end"]}" ]] && ${callbacks["tag_end"]} "${1}" "tag_end" "$namebuf" 214*b4dd7d09SAndy Fiddaman else 215*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["tag_begin"]}" ]] && ${callbacks["tag_begin"]} "${1}" "tag_begin" "$namebuf" "$attrbuf" 216*b4dd7d09SAndy Fiddaman 217*b4dd7d09SAndy Fiddaman # handle tags like <br/> (which are start- and end-tag in one piece) 218*b4dd7d09SAndy Fiddaman if ${issingletag} ; then 219*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["tag_end"]}" ]] && ${callbacks["tag_end"]} "${1}" "tag_end" "$namebuf" 220*b4dd7d09SAndy Fiddaman fi 221*b4dd7d09SAndy Fiddaman fi 222*b4dd7d09SAndy Fiddaman buf="" 223*b4dd7d09SAndy Fiddaman else 224*b4dd7d09SAndy Fiddaman buf+="$c" 225*b4dd7d09SAndy Fiddaman fi 226*b4dd7d09SAndy Fiddaman done 227*b4dd7d09SAndy Fiddaman 228*b4dd7d09SAndy Fiddaman [[ ! -z "${callbacks["document_end"]}" ]] && ${callbacks["document_end"]} "${1}" "document_end" "exit_success" 229*b4dd7d09SAndy Fiddaman 230*b4dd7d09SAndy Fiddaman print # final newline to make filters like "sed" happy 231*b4dd7d09SAndy Fiddaman} 232*b4dd7d09SAndy Fiddaman 233*b4dd7d09SAndy Fiddamanfunction print_sample1_xml 234*b4dd7d09SAndy Fiddaman{ 235*b4dd7d09SAndy Fiddamancat <<EOF 236*b4dd7d09SAndy Fiddaman<br /> 237*b4dd7d09SAndy Fiddaman<score-partwise instrument="flute1"> 238*b4dd7d09SAndy Fiddaman <identification> 239*b4dd7d09SAndy Fiddaman <kaiman>nocrocodile</kaiman> 240*b4dd7d09SAndy Fiddaman </identification> 241*b4dd7d09SAndy Fiddaman <!-- a comment --> 242*b4dd7d09SAndy Fiddaman <partlist> 243*b4dd7d09SAndy Fiddaman <foo>myfootext</foo> 244*b4dd7d09SAndy Fiddaman <bar>mybartext</bar> 245*b4dd7d09SAndy Fiddaman <snap /> 246*b4dd7d09SAndy Fiddaman <!-- another 247*b4dd7d09SAndy Fiddaman comment --> 248*b4dd7d09SAndy Fiddaman <ttt>myttttext</ttt> 249*b4dd7d09SAndy Fiddaman </partlist> 250*b4dd7d09SAndy Fiddaman</score-partwise> 251*b4dd7d09SAndy FiddamanEOF 252*b4dd7d09SAndy Fiddaman} 253*b4dd7d09SAndy Fiddaman 254*b4dd7d09SAndy Fiddamanfunction usage 255*b4dd7d09SAndy Fiddaman{ 256*b4dd7d09SAndy Fiddaman OPTIND=0 257*b4dd7d09SAndy Fiddaman getopts -a "${progname}" "${xmldocumenttree1_usage}" OPT '-?' 258*b4dd7d09SAndy Fiddaman exit 2 259*b4dd7d09SAndy Fiddaman} 260*b4dd7d09SAndy Fiddaman 261*b4dd7d09SAndy Fiddaman# program start 262*b4dd7d09SAndy Fiddamanbuiltin basename 263*b4dd7d09SAndy Fiddamanbuiltin cat 264*b4dd7d09SAndy Fiddamanbuiltin date 265*b4dd7d09SAndy Fiddamanbuiltin uname 266*b4dd7d09SAndy Fiddaman 267*b4dd7d09SAndy Fiddamantypeset progname="${ basename "${0}" ; }" 268*b4dd7d09SAndy Fiddaman 269*b4dd7d09SAndy Fiddamantypeset -r xmldocumenttree1_usage=$'+ 270*b4dd7d09SAndy Fiddaman[-?\n@(#)\$Id: xmldocumenttree1 (Roland Mainz) 2009-05-09 \$\n] 271*b4dd7d09SAndy Fiddaman[-author?Roland Mainz <roland.mainz@nrubsig.org>] 272*b4dd7d09SAndy Fiddaman[+NAME?xmldocumenttree1 - XML tree demo] 273*b4dd7d09SAndy Fiddaman[+DESCRIPTION?\bxmldocumenttree\b is a small ksh93 compound variable demo 274*b4dd7d09SAndy Fiddaman which reads a XML input file, converts it into an internal 275*b4dd7d09SAndy Fiddaman variable tree representation and outputs it in the format 276*b4dd7d09SAndy Fiddaman specified by viewmode (either "list", "namelist", "tree" or "compacttree").] 277*b4dd7d09SAndy Fiddaman 278*b4dd7d09SAndy Fiddamanfile viewmode 279*b4dd7d09SAndy Fiddaman 280*b4dd7d09SAndy Fiddaman[+SEE ALSO?\bksh93\b(1)] 281*b4dd7d09SAndy Fiddaman' 282*b4dd7d09SAndy Fiddaman 283*b4dd7d09SAndy Fiddamanwhile getopts -a "${progname}" "${xmldocumenttree1_usage}" OPT ; do 284*b4dd7d09SAndy Fiddaman# printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|" 285*b4dd7d09SAndy Fiddaman case ${OPT} in 286*b4dd7d09SAndy Fiddaman *) usage ;; 287*b4dd7d09SAndy Fiddaman esac 288*b4dd7d09SAndy Fiddamandone 289*b4dd7d09SAndy Fiddamanshift $((OPTIND-1)) 290*b4dd7d09SAndy Fiddaman 291*b4dd7d09SAndy Fiddamantypeset xmlfile="$1" 292*b4dd7d09SAndy Fiddamantypeset viewmode="$2" 293*b4dd7d09SAndy Fiddaman 294*b4dd7d09SAndy Fiddamanif [[ "${xmlfile}" == "" ]] ; then 295*b4dd7d09SAndy Fiddaman fatal_error $"No file given." 296*b4dd7d09SAndy Fiddamanfi 297*b4dd7d09SAndy Fiddaman 298*b4dd7d09SAndy Fiddamanif [[ "${viewmode}" != ~(Elr)(list|namelist|tree|compacttree) ]] ; then 299*b4dd7d09SAndy Fiddaman fatal_error $"Invalid view mode \"${viewmode}\"." 300*b4dd7d09SAndy Fiddamanfi 301*b4dd7d09SAndy Fiddaman 302*b4dd7d09SAndy Fiddamancompound xdoc 303*b4dd7d09SAndy Fiddamancompound -A xdoc.nodes 304*b4dd7d09SAndy Fiddamaninteger xdoc.nodesnum=0 305*b4dd7d09SAndy Fiddaman 306*b4dd7d09SAndy Fiddamancompound stack 307*b4dd7d09SAndy Fiddamantypeset -a stack.items=( [0]="doc.nodes" ) 308*b4dd7d09SAndy Fiddamaninteger stack.pos=0 309*b4dd7d09SAndy Fiddaman 310*b4dd7d09SAndy Fiddaman# setup callbacks for xml_tok 311*b4dd7d09SAndy Fiddamantypeset -A document_cb # callbacks for xml_tok 312*b4dd7d09SAndy Fiddamandocument_cb["document_start"]="handle_document" 313*b4dd7d09SAndy Fiddamandocument_cb["document_end"]="handle_document" 314*b4dd7d09SAndy Fiddamandocument_cb["tag_begin"]="handle_document" 315*b4dd7d09SAndy Fiddamandocument_cb["tag_end"]="handle_document" 316*b4dd7d09SAndy Fiddamandocument_cb["tag_text"]="handle_document" 317*b4dd7d09SAndy Fiddamandocument_cb["tag_comment"]="handle_document" 318*b4dd7d09SAndy Fiddaman# argument for "handle_document" 319*b4dd7d09SAndy Fiddamandocument_cb["arg_tree"]="xdoc" 320*b4dd7d09SAndy Fiddaman 321*b4dd7d09SAndy Fiddaman 322*b4dd7d09SAndy Fiddamanif [[ "${xmlfile}" == "#sample1" ]] ; then 323*b4dd7d09SAndy Fiddaman print_sample1_xml | xml_tok document_cb 324*b4dd7d09SAndy Fiddamanelif [[ "${xmlfile}" == "#sample2" ]] ; then 325*b4dd7d09SAndy Fiddaman /usr/sfw/bin/wget \ 326*b4dd7d09SAndy Fiddaman --user-agent='ksh93_xmldocumenttree' \ 327*b4dd7d09SAndy Fiddaman --output-document=- \ 328*b4dd7d09SAndy Fiddaman 'http://www.google.com/custom?q=gummi+bears' | 329*b4dd7d09SAndy Fiddaman /usr/bin/iconv -f "ISO8859-1" | 330*b4dd7d09SAndy Fiddaman xml_tok document_cb 331*b4dd7d09SAndy Fiddamanelse 332*b4dd7d09SAndy Fiddaman cat "${xmlfile}" | xml_tok document_cb 333*b4dd7d09SAndy Fiddamanfi 334*b4dd7d09SAndy Fiddaman 335*b4dd7d09SAndy Fiddamanprint -u2 "#parsing completed." 336*b4dd7d09SAndy Fiddaman 337*b4dd7d09SAndy Fiddamancase "${viewmode}" in 338*b4dd7d09SAndy Fiddaman list) 339*b4dd7d09SAndy Fiddaman set | egrep "xdoc.*(tagname|tagtype|tagval|tagattributes)" | fgrep -v ']=$' 340*b4dd7d09SAndy Fiddaman ;; 341*b4dd7d09SAndy Fiddaman namelist) 342*b4dd7d09SAndy Fiddaman typeset + | egrep "xdoc.*(tagname|tagtype|tagval|tagattributes)" 343*b4dd7d09SAndy Fiddaman ;; 344*b4dd7d09SAndy Fiddaman tree) 345*b4dd7d09SAndy Fiddaman print -v xdoc 346*b4dd7d09SAndy Fiddaman ;; 347*b4dd7d09SAndy Fiddaman compacttree) 348*b4dd7d09SAndy Fiddaman print -C xdoc 349*b4dd7d09SAndy Fiddaman ;; 350*b4dd7d09SAndy Fiddaman *) 351*b4dd7d09SAndy Fiddaman fatal_error $"Invalid view mode \"${viewmode}\"." 352*b4dd7d09SAndy Fiddaman ;; 353*b4dd7d09SAndy Fiddamanesac 354*b4dd7d09SAndy Fiddaman 355*b4dd7d09SAndy Fiddamanprint -u2 "#done." 356*b4dd7d09SAndy Fiddaman 357*b4dd7d09SAndy Fiddamanexit 0 358*b4dd7d09SAndy Fiddaman# EOF. 359