diff options
Diffstat (limited to 'ds9/util/mergedict.tcl')
-rw-r--r-- | ds9/util/mergedict.tcl | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/ds9/util/mergedict.tcl b/ds9/util/mergedict.tcl new file mode 100644 index 0000000..47a7c08 --- /dev/null +++ b/ds9/util/mergedict.tcl @@ -0,0 +1,68 @@ +# usage: mergedict <##> + +set mm [lindex $argv 0] +set enc [lindex $argv 1] +set fn "msgs/${mm}.msg" + +# read in original msg file +if {[catch {open $fn r} id]} { + puts "Error: can't open $fn for reading" + return +} +fconfigure $id -encoding $enc + +set orgmsg {} +while {[gets $id line] >= 0} { + lappend orgmsg $line +} +set orgmsg [lsort -unique $orgmsg] +catch {close $id} + +# read current msgs +set curmsg {} +while {[gets stdin line] >= 0} { + set exp {.*msgcat::mc {([^\}]*)}} + if [regexp $exp $line foo aa] { + lappend curmsg "::msgcat::mcset $mm {$aa} " + } +} +set curmsg [lsort -unique $curmsg] + +# now merge original against current +set mermsg {} +foreach ll $curmsg { + set ii [lsearch -glob $orgmsg "$ll*"] + if {$ii != -1} { + lappend mermsg [lindex $orgmsg $ii] + } else { + lappend mermsg $ll + } +} +set mermsg [lsort -unique $mermsg] + +# now find unused entries in original +foreach ll $orgmsg { + set ii [lsearch -exact $mermsg $ll] + + if {$ii == -1} { + if {[string range $ll 0 0] != {#}} { + lappend mermsg "# $ll" + } else { + lappend mermsg "$ll" + } + } +} +set mermsg [lsort -unique $mermsg] + +# write new msg file +if {[catch {open $fn w} id]} { + puts "Error: can't open $fn for writing" + return +} +fconfigure $id -encoding $enc + +foreach ll $mermsg { + puts $id $ll +} + +catch {close $id} |