X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=pctb%2Fdictionary-manager;h=5501765992e14e21953238e4fce7724a4801bc32;hp=a638d9e7b5449d056ce3e90225f96a12b161b447;hb=98e67ebe5cf374b38b59d503710874b8f63c93b2;hpb=0784ae937712ff7bf220f25d58e8da0ae2a10d87 diff --git a/pctb/dictionary-manager b/pctb/dictionary-manager index a638d9e..5501765 100755 --- a/pctb/dictionary-manager +++ b/pctb/dictionary-manager @@ -25,9 +25,12 @@ # sponsored by Three Rings. -# ./dictionary-manager --approve-updates ijackson@login.chiark.greenend.org.uk /home/ijackson/things/ypp-sc-tools.pctb-dict-test/pctb /home/ftp/users/ijackson/pctb/test # ./dictionary-manager --approve-updates ijackson@login.chiark.greenend.org.uk /home/ijackson/things/ypp-sc-tools.pctb-dict/pctb /home/ftp/users/ijackson/pctb +# ./dictionary-manager --approve-updates ijackson@login.chiark.greenend.org.uk /home/ijackson/things/ypp-sc-tools.pctb-dict-test/pctb /home/ftp/users/ijackson/pctb/test + +# ./dictionary-manager --approve-updates '' . . + # invocation: # OUT OF DATE @@ -39,6 +42,9 @@ # if it wrote a byte to fd 4, it can take another question +set aadepth 2 + + #---------- library routines ---------- proc manyset {list args} { @@ -88,6 +94,13 @@ proc bgerror {m} { exit 16 } +proc execpnm_createphoto {photoname args} { + set tmpfile ./_dictimage.tmp + eval exec $args > $tmpfile + image create photo $photoname -file $tmpfile + file delete $tmpfile +} + #---------- display core ---------- set mul 6 @@ -108,7 +121,7 @@ proc init_widgets {} { upload_init - frame .d -bd 2 -relief groove -pady 2 -padx 2 + frame .d -pady 2 -padx 2 -bg black -bd 2 -relief sunken image create bitmap image/main label .d.mi -image image/main -bd 0 @@ -117,7 +130,8 @@ proc init_widgets {} { frame .d.got -bg black -height $gotsh frame .d.ctx -bg black - image create bitmap image/cursor -data \ + image create bitmap image/cursor -foreground white -background black \ + -data \ {#define csr_width 11 #define csr_height 11 static unsigned char csr_bits[] = { @@ -126,20 +140,21 @@ static unsigned char csr_bits[] = { } frame .d.csr.csr - label .d.csr.csr.l -image image/cursor -compound left + label .d.csr.csr.l -image image/cursor -compound left -fg white -bg black entry .d.csr.csr.e -bd 0 pack .d.csr.csr.l -side left - frame .d.selctx -bd 2 -relief groove + frame .selctx -bd 2 -relief groove frame .d.mi.csr_0 -bg white -width 1 frame .d.mi.csr_1 -bg white -width 1 - frame .d.pe - frame .d.pe.grid + frame .pe + frame .pe.grid - button .d.pe.ok -text OK - pack .d.pe.grid .d.pe.ok -side left + button .pe.ok -text OK + pack .pe.grid .pe.ok -side left + bind .pe.ok { .pe.ok invoke } - pack .d.mi .d.ctx -side top + pack .d.mi .d.ctx -side top -anchor w pack .d -fill x -padx 2 -pady 2 frame .help -bd 2 -relief groove @@ -150,9 +165,10 @@ proc resize_widgets_core {} { global mulcols mulrows csrh gotsh ctxh global unk_l unk_contexts - foreach w {.d.csr .d.got .d.ctx .d.mi} { + foreach w {.d.csr .d.got .d.ctx} { $w configure -width $mulcols } + .d.csr configure -width [expr {$mulcols+150}] eval destroy [winfo children .d.ctx] } @@ -221,7 +237,7 @@ proc write_database {} { global reqkind database_fn database upvar #0 database_magic/$reqkind magic - set f [open $database_fn.new w] + set f [open $database_fn.tmp w] puts $f $magic write_database_header/$reqkind $f @@ -235,13 +251,13 @@ proc write_database {} { } puts $f "." close $f - file rename -force $database_fn.new $database_fn + file rename -force $database_fn.tmp $database_fn } proc select_database {dbname_spec} { global dbname set dbname $dbname_spec - read_database "./#local-$dbname#.txt" + read_database "./_local-$dbname.txt" } proc do_database_update {im def} { @@ -276,30 +292,31 @@ proc required/char {} { } foreach ctx $unk_contexts { set all_contexts($ctx) 1 } - eval destroy [winfo children .d.selctx] - label .d.selctx.title -text \ + eval destroy [winfo children .selctx] + label .selctx.title -text \ {Select match context for altering dictionary:} - pack .d.selctx.title -side left - set new_context [lindex $unk_contexts 0] + pack .selctx.title -side left + set new_context {} set ci 0; foreach ctx [lsort [array names all_contexts]] { set all_contexts($ctx) $ci - set selw .d.selctx.c$ci + set selw .selctx.c$ci set seltxt $ctx radiobutton $selw -variable new_context -value $ctx -text $seltxt pack $selw -side left incr ci } $selw configure -text "$seltxt." - label .d.selctx.warning -text {See README.charset.} - pack .d.selctx.warning -side left + label .selctx.warning -text {See README.charset.} + pack .selctx.warning -side left show_context maxh $unk_l $unk_contexts .d.ctx configure -height $maxh - pack forget .d.pe - pack .d.selctx .d.csr -side top -before .d.mi - pack .d.got .d.ctx -side top -after .d.mi - pack configure .d.selctx -fill x + pack forget .pe + pack .selctx -before .d -padx 2 -fill x + pack .d.csr -side top -before .d.mi -anchor w + pack .d.got .d.ctx -side top -after .d.mi -anchor w + pack configure .selctx -fill x focus .d select_database char$rows @@ -355,15 +372,17 @@ proc pixmap_select {ncol} { debug "PIX SELECT $ncol [llength $alloptions]" foreach_pixmap_col col { if {$col==$ncol} continue - .d.pe.grid.l$col selection clear 0 end + .pe.grid.l$col selection clear 0 end + } + if {[pixmap_maybe_ok]} { + focus .pe.ok } - pixmap_maybe_ok } proc pixmap_maybe_ok {} { global alloptions pixmap_selcol pixmap_selrow set nsel 0 foreach_pixmap_col col { - set cs [.d.pe.grid.l$col curselection] + set cs [.pe.grid.l$col curselection] set lcs [llength $cs] if {!$lcs} continue incr nsel $lcs @@ -372,9 +391,11 @@ proc pixmap_maybe_ok {} { } if {$nsel==1} { debug "MAYBE_OK YES col=$pixmap_selcol row=$pixmap_selrow." - .d.pe.ok configure -state normal -command pixmap_ok + .pe.ok configure -state normal -command pixmap_ok + return 1 } else { - .d.pe.ok configure -state disabled -command {} + .pe.ok configure -state disabled -command {} + return 0 } } proc pixmap_ok {} { @@ -382,9 +403,9 @@ proc pixmap_ok {} { return_result_start foreach_pixmap_col col { - .d.pe.grid.l$col configure -state disabled + .pe.grid.l$col configure -state disabled } - .d.pe.ok configure -state disabled + .pe.ok configure -state disabled manyset [lrange $alloptions [expr {$pixmap_selcol*3}] end] \ colname coldesc rows @@ -408,8 +429,7 @@ proc required/pixmap {} { if {![string length $ppml]} break append ppm $ppml "\n" } - set data [exec pnmscale 2 << $ppm] - image create photo image/main -data $data + execpnm_createphoto image/main pnmscale 2 << $ppm set alloptions [exec ./database-info-fetch $unk_what] @@ -421,29 +441,29 @@ proc required/pixmap {} { place forget .d.mi.csr_0 place forget .d.mi.csr_1 - pack forget .d.selctx .d.csr .d.got - pack .d.pe -side top -before .d.mi -pady 2 + pack forget .selctx .d.csr .d.got + pack .pe -side top -before .d -pady 2 .d configure -takefocus 0 #-pady 2 -fill x - eval destroy [winfo children .d.pe.grid] + eval destroy [winfo children .pe.grid] set col 0; foreach {colname coldesc rows} $alloptions { debug "INIT $col $colname \"$coldesc\"" - label .d.pe.grid.t$col -text $colname - listbox .d.pe.grid.l$col + label .pe.grid.t$col -text $colname + listbox .pe.grid.l$col foreach {rowname rowdesc} $rows { debug "INIT $col $colname \"$coldesc\" $rowname \"$rowdesc\"" - .d.pe.grid.l$col insert end $rowdesc + .pe.grid.l$col insert end $rowdesc } - bind .d.pe.grid.l$col <> [list pixmap_select $col] - grid .d.pe.grid.t$col -column $col -row 0 - grid .d.pe.grid.l$col -column $col -row 1 + bind .pe.grid.l$col <> [list pixmap_select $col] + grid .pe.grid.t$col -column $col -row 0 + grid .pe.grid.l$col -column $col -row 1 incr col } pixmap_maybe_ok helptext { - {{Indicate the meaning of this image, and click OK.}} + {{Indicate the meaning of this image; then click OK or hit Return.}} } } @@ -508,7 +528,7 @@ proc upload_status {} { } proc maybe_upload_entry {im def} { - global reqkind privacy_setting env dbname quiet + global reqkind privacy_setting env dbname quiet aadepth debug "DB-UPDATE PRIVACY $privacy_setting" if {!$privacy_setting} return @@ -517,6 +537,8 @@ proc maybe_upload_entry {im def} { set pl {} lappend pl dict $dbname + lappend pl version 3 + lappend pl depth $aadepth if {$privacy_setting>=2} { set pirate [string totitle $env(YPPSC_PIRATE)] @@ -684,9 +706,9 @@ proc char_read_pgm {f} { append o $ointerl } -# debug "DATA $o" - set data [exec pnmscale 1 << $o] - image create photo image/main -data $data +# debug "DATA1 $o" + + execpnm_createphoto image/main pnmscale 1 << $o } #---------- character set editor display ---------- @@ -718,7 +740,7 @@ proc startup_cursor {} { global glyphsdone unk_l unk_r set cur_already [expr {[llength $glyphsdone]/5-1}] - set cur_mode 1 ;# one of: 0 1 already text + set cur_mode 0 ;# one of: 0 1 already text set cur_0 $unk_l set cur_1 [expr {$unk_r+1}] @@ -732,7 +754,7 @@ proc char_exactly_selctxts {contexts} { global all_contexts foreach ctx [array names all_contexts] { set ci $all_contexts($ctx) - set selw .d.selctx.c$ci + set selw .selctx.c$ci if {[lsearch -exact $contexts $ctx]>=0} { set state normal } else { @@ -759,7 +781,7 @@ proc recursor//01 {z1} { if {[lsearch -exact $okctxts $ctx] >= 0} { bind_key [string tolower $key] " [list set new_context $ctx] - recursor + char_start_define_text " } else { bind_key [string tolower $key] {} @@ -767,7 +789,7 @@ proc recursor//01 {z1} { lappend context_help $key } set context_help [list [join $context_help " "] \ - {Set match context for new glyph.}] + {Set match context for new glyph, confirm location, and start entry.}] bind_key space { othercursor } bind_leftright_q cur_$z1 0 [expr {$cols-1}] @@ -813,7 +835,7 @@ proc recursor/text {} { {Escape {abandon entry}} } unbind_all_keys - pack .d.csr.csr.e -side left + pack .d.csr.csr.e -side left -padx 2 focus .d.csr.csr.e bind .d.csr.csr.e { set strq [.d.csr.csr.e get] @@ -892,7 +914,7 @@ proc recursor {} { # $database($context 0x 0x...) = $hex -set database_magic/char {# ypp-sc-tools pctb font v2} +set database_magic/char "# ypp-sc-tools pctb font v3 depth=$aadepth" proc read_database_header/char {f} { global rows @@ -1046,9 +1068,14 @@ proc remote-serv/take {yesno file dict} { manyset [dict2_reqkind_rows $dict] reqkind rows if {$yesno} { - read_database $dictdir/master-$dict.txt + set fnbase $dictdir/master-$dict.txt + read_database $fnbase set database($key) $val write_database + + exec gzip --rsyncable -7 < $fnbase > $fnbase.gz.new + exec mv -f -- $fnbase.gz.new $fnbase.gz + set desc approve } else { set desc reject @@ -1128,10 +1155,10 @@ proc chop_counted {var} { } proc approve_decompose_data {specdata} { - global data + global data aadepth set data $specdata - regsub-data {^ypp-sc-tools dictionary update v1\n} {} + regsub-data "^ypp-sc-tools dictionary update v3 depth=$aadepth\\n" {} uplevel 1 chop_counted pirate uplevel 1 chop_counted caller uplevel 1 chop_counted dict @@ -1141,7 +1168,7 @@ proc approve_decompose_data {specdata} { uplevel 1 chop_counted key uplevel 1 chop_counted val - return [uplevel 1 {list $dict $def $image}] + return [uplevel 1 {list $dict $ctx $def $image}] } proc approve_compare {fd1 fd2} { @@ -1181,9 +1208,12 @@ proc approve_showentry {ix file specdata} { label $wb-def.def -text $def pack $wb-def.scope $wb-def.def -side bottom - set ppm [exec pnmscale 2 << $image] - image create photo approve/$ix -data $ppm - label $wb-image -image approve/$ix -bd 2 -relief sunken + if {[regexp {^P2} $image]} { + set image [exec pgmtoppm {#008-white} << $image | pnmnoraw] + append image "\n" + } + execpnm_createphoto approve/$ix pnmscale 3 << $image + label $wb-image -image approve/$ix -bd 2 -relief flat -bg black manyset [dict2_reqkind_rows $dict] reqkind approve_showentry_xinfo/$reqkind $wb-xinfo $def @@ -1231,6 +1261,8 @@ proc approve_check_server {} { proc approve_confirm {} { global approve_ixes approve_entryhow + .ok configure -state disabled + update idletasks approve_check_server foreach ix $approve_ixes { set how $approve_entryhow($ix) @@ -1265,6 +1297,7 @@ proc approve_fetch_list {} { set approve_list [lsort -command approve_compare $approve_list] approve_show_page 0 + .ok configure -state normal } proc main/approve {} {