The following mk2tcl.tcl script can be used to dump and restore a wikit.tkd datafile (any MK datafile, in fact):
# Dump a Metakit file as a set of Tcl commands, which when run will
# reconstruct the datafile. This probably won't work for binary data.
#
# 02oct02 [email protected]
set argv0 [file tail $argv0]
set setup {
package require Mk4tcl
set filename [lindex $argv 0]
if {$filename eq ""} { puts stderr "Usage: $argv0 file"; exit 1 }
}
eval $setup
mk::file open db $filename -readonly
puts "# Generated by '$argv0 $filename' - [clock format [clock seconds]]"
puts $setup
puts {file delete $filename}
puts {mk::file open db $filename}
foreach v [mk::file views db] {
puts [list mk::view layout db.$v [mk::view layout db.$v]]
}
puts "
[string repeat # 75]
"
foreach v [mk::file views db] {
mk::loop c db.$v {
puts [linsert [mk::get $c] 0 mk::set $c]
}
puts [string repeat # 75]
}
puts [list mk::file commit db]Example:
tclkit mk2tcl.tcl wikit.tkd >mydump.tcl tclkit mydump.tcl newfile.tkd
This can also be used to compact a datafile, since the resulting datafile is created from scratch.
This script doesn't save any subviews. The following procedure could be helpful:
# Arguments: a tag or view
# Result: a string
# 04dec03 [email protected]
proc saveView {view} {
set saveString ""
mk::loop cursor $view {
append saveString [linsert [mk::get $cursor] 0 mk::set $cursor] \n
foreach prop [mk::view info $cursor] {
# for each subview
set prop [split $prop :]
if {[string equal [lindex $prop 1] V]} {
set key [lindex $prop 0]
append saveString [saveView $cursor.$key]
}
}
}
return $saveString
} Example:
foreach v [mk::file views db] {
puts [saveView db.$v]
}