tkxmllint.tcl

Go to the documentation of this file.
00001 /* !/bin/sh
00002 */
00003 /*  \
00004 */
00005 exec wish "$0" "$@"
00006 
00007 /*  tkxmllint --
00008 */
00009 /* 
00010 */
00011 /*  Simple GUI for xmllint-style processing of XML documents
00012 */
00013 /* 
00014 */
00015 /*  Copyright (c) 2005-2007 Explain
00016 */
00017 /*  http://www.explain.com.au/
00018 */
00019 /*  Copyright (c) 2003-2004 Zveno
00020 */
00021 /*  http://www.zveno.com/
00022 */
00023 /* 
00024 */
00025 /*  See the file "LICENSE" in this distribution for information on usage and
00026 */
00027 /*  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
00028 */
00029 /* 
00030 */
00031 /*  $Id: tkxmllint.tcl,v 1.11 2005/05/20 14:07:33 balls Exp $
00032 */
00033 
00034 /*  Global initialisation
00035 */
00036 
00037  VERSION =  1.9
00038 
00039 /*  Temporary hack for TclApp-wrapped executables
00040 */
00041 lappend auto_path [file dirname [info nameofexecutable]]
00042 
00043 package require dom::libxml2 3.2
00044 
00045 package require msgcat
00046 namespace import ::msgcat::mc
00047 
00048 package require uri 1.2
00049 
00050 tk appname tkxmllint
00051 
00052 /*  We need the code shared with tkxsltproc
00053 */
00054 source [file join [file dirname [info script]] common.tcl]
00055 
00056 /*  Init --
00057 */
00058 /* 
00059 */
00060 /*  Create the GUI
00061 */
00062 /* 
00063 */
00064 /*  Arguments:
00065 */
00066 /*  win toplevel window
00067 */
00068 /* 
00069 */
00070 /*  Results:
00071 */
00072 /*  Tk widgets created
00073 */
00074 
00075 ret  Init win (
00076     type upvar \#0 , type State$, type win , type state
00077 
00078     , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00079 
00080     array set state {
00081     url {}
00082     cwd {}
00083     noent 0
00084     nonet 0
00085 
00086     display:entrefs 0
00087     }
00088 
00089     wm title $win "Tk XML Lint"
00090 
00091     switch [tk windowingsystem] {
00092     aqua -
00093     classic {
00094          metakey =  Command
00095          metakeylabel =  Command-
00096     }
00097     default {
00098          metakey =  Control
00099          metakeylabel =  Ctrl+
00100     }
00101     }
00102 
00103     menu $w.menu -tearoff 0
00104     $win configure -menu $w.menu
00105     $w.menu add cascade -label [mc File] -menu $w.menu.file
00106     menu $w.menu.file -tearoff 1
00107     $w.menu.file add command -label [mc {New Window}] -command NewWindow -accel ${metakeylabel}N
00108     bind $win <${metakey}-n> NewWindow
00109     $w.menu.file add separator
00110     $w.menu.file add command -label [mc {Save As...}] -command [list SaveAs $win] -state disabled
00111     $w.menu.file add separator
00112     $w.menu.file add command -label [mc Quit] -command {destroy .} -accel ${metakeylabel}Q
00113     bind $win <${metakey}-q> {destroy .}
00114 
00115     $w.menu add cascade -label [mc Help] -menu $w.menu.help
00116     menu $w.menu.help -tearoff 0
00117     $w.menu.help add command -label [mc {About tkxmllint}] -command tkAboutDialog -accel ${metakeylabel}?
00118     /*  This fails on Linux
00119 */
00120     catch {bind $win <${metakey}-?> tkAboutDialog}
00121 
00122     if {$::tcl_platform(platform) == "macintosh" ||
00123     ($::tcl_platform(platform) == "unix" && $::tcl_platform(os) == "Darwin")} {
00124     $w.menu add cascade -label tkxmllint -menu $w.menu.apple
00125     menu $w.menu.apple -tearoff 0
00126     $w.menu.apple add command -label [mc {About tkxmllint}] -command tkAboutDialog
00127     }
00128 
00129     frame $w.controls
00130     grid $w.controls - -row 0 -column 0 -sticky ew
00131     button $w.controls.check -text [mc Check] -command [list Check $win]
00132     /*  TODO: add a nice icon
00133 */
00134     grid $w.controls.check -row 0 -column 0 -sticky w
00135     grid columnconfigure $w.controls 0 -weight 1
00136 
00137     labelframe $w.doc -text [mc Document]
00138     grid $w.doc - -row 1 -column 0 -sticky ew
00139     label $w.doc.url -text [mc URL:]
00140     entry $w.doc.urlentry -width 60 -textvariable State${win}(url)
00141     button $w.doc.browse -text [mc Browse] -command [list Browse $win url -title {Select XML Document}]
00142     grid $w.doc.url -row 0 -column 0 -sticky w
00143     grid $w.doc.urlentry -row 0 -column 1 -sticky ew
00144     grid $w.doc.browse -row 0 -column 2 -sticky e
00145     grid columnconfigure $w.doc 1 -weight 1
00146 
00147     labelframe $w.options -text [mc Options]
00148     grid $w.options - -row 2 -column 0 -sticky news
00149     checkbutton $w.options.noout -text [mc {Display document}] -variable State${win}(display)
00150     checkbutton $w.options.timing -text [mc {Display timing}] -variable State${win}(timing)
00151     checkbutton $w.options.xinclude -text [mc XInclude] -variable State${win}(xinclude)
00152     checkbutton $w.options.noent -text [mc {Substitute entities}] -variable State${win}(noent)
00153     checkbutton $w.options.logentities -text [mc {Log entities}] -variable State${win}(display:entrefs)
00154     checkbutton $w.options.nonet -text [mc {No network}] -variable State${win}(nonet)
00155     menubutton $w.options.encode -text [mc Encoding...] -menu $w.options.encode.menu
00156      m =  [menu $w.options.encode.menu -tearoff 0]
00157     $m add radiobutton -label [mc utf-8] -variable ::State${win}(encoding) -value utf-8
00158     $m add radiobutton -label [mc ascii] -variable ::State${win}(encoding) -value ascii
00159     entry $w.options.encoding -textvariable ::State${win}(encoding)
00160      state = (encoding) utf-8
00161     grid $w.options.noout -row 0 -column 0 -sticky w
00162     grid $w.options.timing -row 1 -column 0 -sticky w
00163     grid $w.options.logentities -row 2 -column 0 -sticky w
00164     grid $w.options.xinclude -row 0 -column 1 -sticky w
00165     grid $w.options.noent -row 1 -column 1 -sticky w
00166     grid $w.options.nonet -row 2 -column 1 -sticky w
00167     grid $w.options.encode -row 0 -column 2 -sticky w
00168     grid $w.options.encoding -row 0 -column 3 -sticky ew
00169     grid columnconfigure $w.options 3 -weight 1
00170 
00171     labelframe $w.validation -text [mc Validation]
00172     grid $w.validation - -row 3 -column 0 -sticky news
00173     radiobutton $w.validation.none -text [mc none] -variable State${win}(validate) -value no
00174     radiobutton $w.validation.dtd -text [mc DTD] -variable State${win}(validate) -value dtd
00175     radiobutton $w.validation.wxs -text [mc WXS] -variable State${win}(validate) -value wxs
00176     labelframe $w.validation.doc -text [mc {Schema Document}]
00177     label $w.validation.doc.url -text [mc URL:]
00178     entry $w.validation.doc.urlentry -width 40 -textvariable State${win}(schemaurl)
00179     button $w.validation.doc.browse -text [mc Browse] -command [list Browse $win schemaurl -title {Select Schema Document}]
00180     grid $w.validation.doc.url -row 0 -column 0 -sticky w
00181     grid $w.validation.doc.urlentry -row 0 -column 1 -sticky ew
00182     grid $w.validation.doc.browse -row 0 -column 2 -sticky e
00183     grid columnconfigure $w.validation.doc 1 -weight 1
00184      state = (validate) no
00185     grid $w.validation.none -row 0 -column 0 -sticky w
00186     grid $w.validation.dtd -row 0 -column 1 -sticky w
00187     grid $w.validation.wxs -row 0 -column 2 -sticky w
00188     grid $w.validation.doc - - - -row 1 -sticky ew
00189     grid columnconfigure $w.validation 2 -weight 1
00190 
00191      state = (messages) [labelframe $w.messages -text [mc Messages]]
00192     grid $w.messages - -row 4 -column 0 -sticky news
00193     text $w.messages.log -wrap none \
00194     -state disabled \
00195     -xscrollcommand [list $w.messages.xscroll ] \
00196     -yscrollcommand =  [list $w.messages.yscroll ]
00197     scrollbar =  $w.messages.xscroll -orient horizontal \
00198     -command [list $w.messages.log xview]
00199     scrollbar $w.messages.yscroll -orient vertical \
00200     -command [list $w.messages.log yview]
00201     grid $w.messages.log -row 0 -column 0 -sticky news
00202     grid $w.messages.yscroll -row 0 -column 1 -sticky ns
00203     grid $w.messages.xscroll -row 1 -column 0 -sticky ew
00204     grid rowconfigure $w.messages 0 -weight 1
00205     grid columnconfigure $w.messages 0 -weight 1
00206 
00207     SetProperties $win $w.messages.log
00208 
00209     frame $w.feedback
00210     grid $w.feedback - -row 5 -column 0 -sticky ew
00211     label $w.feedback.msg -textvariable State${win}(feedback)
00212      state = (progress) [canvas $w.feedback.progress \
00213                  -width 100 -height 25 -relief sunken]
00214      state = (progressbar) [$w.feedback.progress create rectangle 0 0 1 25 \
00215                 -fill blue -disabledfill white -state disabled]
00216     grid $w.feedback.progress -row 0 -column 1
00217     grid $w.feedback.msg -row 0 -column 0 -sticky ew
00218     grid columnconfigure $w.feedback 0 -weight 1
00219 
00220     grid rowconfigure $win 3 -weight 1
00221     grid columnconfigure $win 1 -weight 1
00222 
00223     return {}
00224 }
00225 
00226 /*  tkAboutDialog --
00227 */
00228 /* 
00229 */
00230 /*  Information about this application
00231 */
00232 /* 
00233 */
00234 /*  Arguments:
00235 */
00236 /*  None
00237 */
00238 /* 
00239 */
00240 /*  Results:
00241 */
00242 /*  Displays window
00243 */
00244 
00245 ret  tkAboutDialog () {
00246     catch {destroy .about}
00247     toplevel .about
00248     catch {::tk::unsupported::MacWindowStyle style .about floatProc}
00249     wm title .about [mc {About tkxmllint}]
00250     label .about.libxml2logo -image libxml2Logo
00251     label .about.tcllogo -image tclLogo
00252     text .about.msg -width 40 -height 10 -font Arial
00253     .about.msg insert end [mc [format "tkxmllint - A GUI for xmllint
00254 
00255 Version %s
00256 
00257 Powered by:
00258 \tlibxml2\tv%s
00259 \tTclXML\tv%s
00260 \tTcl/Tk\tv%s
00261 
00262 http://tclxml.sourceforge.net/tkxmllint.html
00263 " $::VERSION $::xml::libxml2::libxml2version \
00264     [package require xml] [info patchlevel]]]
00265 
00266     .about.msg configure -state disabled
00267 
00268     grid .about.libxml2logo -row 0 -column 2 -sticky news
00269     grid .about.tcllogo -row 1 -column 2 -sticky news
00270     grid .about.msg -row 0 -column 1 -rowspan 2 -sticky news -padx 20 -pady 20
00271     grid rowconfigure .about 0 -weight 1
00272     grid rowconfigure .about 1 -weight 1
00273     grid columnconfigure .about 1 -weight 1
00274 
00275     return {}
00276 }
00277 
00278 /*  SaveAs --
00279 */
00280 /* 
00281 */
00282 /*  Save document into a file
00283 */
00284 /* 
00285 */
00286 /*  Arguments:
00287 */
00288 /*  win toplevel
00289 */
00290 /* 
00291 */
00292 /*  Results:
00293 */
00294 /*  File written
00295 */
00296 
00297 ret  SaveAs (type win) {
00298     upvar \#0 State$win state
00299 
00300     if {![info exists state(dom)]} {
00301     tk_messageBox -parent $win -title [mc {No Document}] \
00302         -message [mc {No document to save}] -type ok
00303     return {}
00304     }
00305 
00306     set w [expr {$win == "." ? {} : $win}]
00307 
00308     set cwd [pwd]
00309     if {$state(cwd) != {}} {
00310     set cwd $state(cwd)
00311     }
00312 
00313     set fname [tk_getSaveFile -parent $win -title [mc {Save As...}] -initialdir $cwd]
00314 
00315     if {![string length $fname]} {
00316     return {}
00317     }
00318 
00319     set state(cwd) [file dirname $fname]
00320 
00321     if {[catch {open $fname w} ch]} {
00322     tk_messageBox -parent $win -icon error -type ok -message "Unable to open \"[file nativename $fname]\" for writing"
00323     return {}
00324     }
00325 
00326     fconfigure $ch -encoding $state(encoding)
00327     puts $ch [dom::serialize $state(dom) -encoding $state(encoding)]
00328     close $ch
00329 
00330     return {}
00331 }
00332 
00333 /*  NewWindow --
00334 */
00335 /* 
00336 */
00337 /*  Create another toplevel window
00338 */
00339 /* 
00340 */
00341 /*  Arguments:
00342 */
00343 /*  None
00344 */
00345 /* 
00346 */
00347 /*  Results:
00348 */
00349 /*  Tk toplevel created and initialised
00350 */
00351 
00352 ret  NewWindow () {
00353     global counter
00354 
00355     Init [toplevel .top[Incr counter]]
00356 
00357     return {}
00358 }
00359 
00360 /*  Check --
00361 */
00362 /* 
00363 */
00364 /*  Parse the given document and display report
00365 */
00366 /* 
00367 */
00368 /*  Arguments:
00369 */
00370 /*  win toplevel window
00371 */
00372 /* 
00373 */
00374 /*  Results:
00375 */
00376 /*  Document read into memory, parsed and report displayed
00377 */
00378 
00379 ret  Check win (
00380     type upvar \#0 , type State$, type win , type state
00381 
00382     , type set , type w [, type expr , optional $win === "." =? { : $, type win)]
00383 
00384     set fname [GetFilename $win $w.doc.urlentry url]
00385     if {![string length $fname]} {
00386     return
00387     }
00388 
00389      dodisplay =  $state(display)
00390 
00391     Log clear $win
00392     $w.menu.file entryconfigure [mc {Save As...}] -state disabled
00393 
00394     catch {
00395     dom::destroy $state(dom)
00396     un state = (dom)
00397     }
00398 
00399      time = (start) [clock clicks -milliseconds]
00400 
00401     if {[catch {ReadAndParseXML $win [mc "source"] $fname $state(url) time \
00402             -noent $state(noent) \
00403         -nonet $state(nonet)} doc]} {
00404     return
00405     }
00406     $w.menu.file entryconfigure [mc {Save As...}] -state normal
00407 
00408     switch -- $state(validate) {
00409     dtd {
00410         Feedback $win [mc "Validating document"]
00411         if {[catch {$doc dtd validate} msg]} {
00412         Log addXMLError $win [dom::serialize $doc] $msg
00413         Feedback $win [mc "Document is not valid"]
00414          dodisplay =  0
00415         } else {
00416         Log add $win $msg
00417         }
00418          time = (validate) [clock clicks -milliseconds]
00419         Log timing $win "Validation took [expr $time(validate) - $time(last)]ms\n"
00420          time = (last) $time(validate)
00421     }
00422     wxs {
00423         Feedback $win [mc "Schema-validating document"]
00424          schemafname =  [GetFilename $win $w.validation.doc.urlentry schemaurl]
00425         if {[string length $schemafname]} {
00426          schematime = (start) $time(last)
00427         if {[catch {ReadAndParseXML $win [mc "schema"] $schemafname ? schematime} schemadoc]} {
00428             /*  continue
00429 */
00430         } else {
00431              time = (last) $schematime(last)
00432             Feedback $win [mc "Preparing schema"]
00433             if {[catch {$schemadoc schema compile} msg]} {
00434             Log add $win $msg
00435             Feedback $win [mc "Preparing schema failed"]
00436              time = (schemacompile) [clock clicks -milliseconds]
00437              time = (last) $time(schemacompile)
00438              dodisplay =  0
00439             } else {
00440              time = (schemacompile) [clock clicks -milliseconds]
00441             Log timing $win "Preparing schema took [expr $time(schemacompile) - $time(last)]ms\n"
00442              time = (last) $time(schemacompile)
00443 
00444             Feedback $win [mc "Schema-validating document"]
00445             if {[catch {$schemadoc schema validate $doc} msg]} {
00446                 Log addXMLError $win [dom::serialize $doc] $msg
00447                 Feedback $win [mc "Document is not schema-valid"]
00448                  dodisplay =  0
00449             } else {
00450                 Log add $win $msg
00451                 Feedback $win [mc "Document is schema-valid"]
00452             }
00453              time = (schemavalidate) [clock clicks -milliseconds]
00454             Log timing $win "Schema validation took [expr $time(schemavalidate) - $time(last)]ms\n"
00455              time = (last) $time(schemavalidate)
00456             }
00457 
00458             /*  TODO: cache the compiled schema
00459 */
00460             dom::destroy $schemadoc
00461         }
00462         }
00463     }
00464     }
00465 
00466     if {$dodisplay} {
00467     Log add $win [dom::serialize $doc -encoding $state(encoding)]
00468      time = (serialize) [clock clicks -milliseconds]
00469     Log timing $win "Displaying document took [expr $time(serialize) - $time(last)]ms\n"
00470      time = (last) $time(serialize)
00471     }
00472 
00473     Feedback $win [mc "Processing completed"]
00474     after 2000 [list Feedback $win {}]
00475 
00476     /*  We no longer destroy the document, since the user may wish to save it
00477 */
00478      state = (dom) $doc
00479 
00480     Log timing $win "Total time: [expr $time(last) - $time(start)]ms\n"
00481 
00482     Log view $win start
00483 
00484     return {}
00485 }
00486 
00487 /*  Image data - end of script
00488 */
00489 
00490 image create photo libxml2Logo -data {
00491 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
00662 BDAAE5jCBbBg7GJhwYIe9ID/BbAoQQkcy1jKmsIUFVAsLHrwBha4oAImQIIJ
00663 KmBZF2BAs5ZlrE4n29rGYgADrG1sZS8LCxdc9rUuqCxqc/vbEmwWAYVtCwoC
00664 8AIPBAAXG4UFFLDwBRUAwgE6oG51rXtd7GZXuzqYACZIkAZ1oABBFcgopQRw
00665 Xo2idQXrXS960cte+A5AvgNYQXrd697yCWAF9K3vff3L3vsC2L+UInBbcBEA
00666 D5xrEIZFLCwIUAZvdICV5DRlhS18YQxnGMMzcKU6NBABDvSgAkggboFNfGIU
00667 p1jFK2axSgYRgAkcIQDS4ACDTVCCN/SUpN7whgZ8/GMgB1nIQw6yN0J6U0nA
00668 YsQl4G5xk538ZCgTmAPSCMARiACKAGxBZwPYSAlY4AUCQAGmYyZzmc185jND
00669 gQCS6IELTGGCAaQ3ynOmc51TvIUAgIII/8BBQXAAR7Ry2bSmkG2hDX1oRCda
00670 0aodLRLoK2c7R1rSda5AnwOAg39k+sUBYMINYnPe9c5X1KMmdalNLer+TlrV
00671 q47yDZhQkEFkWtZX0EQAcqEKXHyByazmda99neIVfAEXqshFADRxBVknWw0H
00672 6F6znf1saEdb2tOmdrWtvZADqCHZ2ybCISagg2JfW9zjJne5zU3tXHD3EHtO
00673 dkAAADs=
00674 }
00675 image create photo tclLogo -data {
00676 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
00731 5V+g+JBhTvOaGyEIADs=
00732 }
00733 
00734 Init .
00735 

Generated on 21 Sep 2010 for Gui by  doxygen 1.6.1