summaryrefslogtreecommitdiffstats
path: root/ds9/util/mergedict.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/util/mergedict.tcl')
-rw-r--r--ds9/util/mergedict.tcl68
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}