X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=pctb%2Fdictionary-manager;h=210af064c8d13f7f91447b2fae2d09e6ef942573;hb=579edbc3e615ade4ac65296eeaff383ac19fe9b1;hp=105490d5817eb9549bca6ebf2a7644618a75923d;hpb=3b77f87531d0429325ca1adfa27d62f642e3643c;p=ypp-sc-tools.web-live.git diff --git a/pctb/dictionary-manager b/pctb/dictionary-manager index 105490d..210af06 100755 --- a/pctb/dictionary-manager +++ b/pctb/dictionary-manager @@ -53,6 +53,13 @@ proc must_gets {f lvar} { if {[gets $f l] < 0} { error "huh?" } } +proc must_gets_imagel {f lvar} { + global debug_rect + upvar 1 $lvar l + must_gets $f l + if {$debug_rect} { debug "<< $l" } +} + proc must_gets_exactly {f expected} { must_gets $f got if {[string compare $expected $got]} { error "$expected $got ?" } @@ -246,13 +253,13 @@ proc do_database_update {im def} { proc required/char {} { global mulrows glyphsdone unk_l unk_r unk_contexts rows new_context - global all_contexts + global all_contexts debug_rect must_gets stdin l + debug "GOT $l" manyset [lrange $l 0 3] unk_l unk_r unk_contexts set glyphsdone [lrange $l 3 end] - debug "GOT $l" char_read_xpm stdin @@ -397,14 +404,14 @@ proc required/pixmap {} { debug "GOT pixmap $unk_what" set ppm {} while 1 { - must_gets stdin ppml + must_gets_imagel stdin ppml if {![string length $ppml]} break append ppm $ppml "\n" } set data [exec pnmscale 2 << $ppm] image create photo image/main -data $data - set alloptions [exec ./dictionary-pixmap-options $unk_what] + set alloptions [exec ./database-info-fetch $unk_what] select_database pixmap @@ -568,7 +575,7 @@ proc maybe_upload_entry {im def} { if {!$quiet} { puts stderr \ - "Uploaded $dbname dictionary entry `$def': $body" + "Uploaded $dbname `$def': $body" } } @@ -583,7 +590,7 @@ proc char_read_xpm {f} { set o {} set y -3 while 1 { - must_gets $f l + must_gets_imagel $f l if {![regexp {^"(.*)",$} $l dummy l]} { append o "$l\n" if {[regexp {^\}\;$} $l]} break @@ -739,12 +746,28 @@ proc recursor/0 {} { recursor//01 0 } proc recursor/1 {} { recursor//01 1 } proc recursor//01 {z1} { global mul rhsmost_max cols glyphsdone cur_0 cur_1 + global all_contexts upvar #0 cur_$z1 cur - .d.csr.csr.l configure -text {adjust} + .d.csr.csr.l configure -text "adjust [char_get_definition_context_actual]" place .d.csr.csr -x [expr {$cur*$mul - 7}] - manyset [char_get_definition_info $cur_0 $cur_1] contexts - char_exactly_selctxts $contexts + set okctxts [char_get_definition_contexts] + char_exactly_selctxts $okctxts + + foreach ctx [lsort [array names all_contexts]] { + set key [string range $ctx 0 0] + if {[lsearch -exact $okctxts $ctx] >= 0} { + bind_key [string tolower $key] " + [list set new_context $ctx] + recursor + " + } else { + bind_key [string tolower $key] {} + } + lappend context_help $key + } + set context_help [list [join $context_help " "] \ + {Set match context for new glyph.}] bind_key space { othercursor } bind_leftright_q cur_$z1 0 [expr {$cols-1}] @@ -756,13 +779,14 @@ proc recursor//01 {z1} { bind_key Return { char_start_define_text } - helptext { - {{<- ->} {move cursor, adjusting area to define}} - {Space {switch to moving other cursor}} - {Return {confirm location, enter letter(s)}} - {Backspace {switch to correcting earlier ocr}} - {Q {quit and abandon OCR run}} - } + helptext [list \ + {{<- ->} {move cursor, adjusting area to define}} \ + {Space {switch to moving other cursor}} \ + {Return {confirm location, enter letter(s)}} \ + {Backspace {switch to correcting earlier ocr}} \ + {Q {quit and abandon OCR run}} \ + $context_help \ + ] } proc othercursor {} { global cur_mode @@ -773,8 +797,11 @@ proc othercursor {} { proc char_start_define_text {} { global cur_0 cur_1 cur_mode if {$cur_0 == $cur_1} return + set cdgdca [char_get_definition_context_actual] + if {![string length $cdgdca]} return .d.csr.csr.e delete 0 end set cur_mode text + .d.csr.csr.l configure -text "define $cdgdca:" recursor } @@ -786,13 +813,12 @@ proc recursor/text {} { {Escape {abandon entry}} } unbind_all_keys - .d.csr.csr.l configure -text {define:} pack .d.csr.csr.e -side left focus .d.csr.csr.e bind .d.csr.csr.e { set strq [.d.csr.csr.e get] if {[string length $strq]} { - RETURN_RESULT DEFINE [list $cur_0 $cur_1 $strq] + RETURN_RESULT DEFINE [list $strq] } } bind .d.csr.csr.e { @@ -870,7 +896,8 @@ set database_magic/char {# ypp-sc-tools pctb font v1} proc read_database_header/char {f} { global rows - if {([db_getsl $f])+0 != $rows} { error "wrong h ?" } + set l [db_getsl $f] + if {$l+0 != $rows} { error "wrong h $l $rows ?" } } proc read_database_entry/char {f context} { global database @@ -904,11 +931,22 @@ proc dbkey {ctx l r} { return $bm } -proc char_get_definition_info {c0 c1} { - # => ncontexts cl cr +proc char_get_definition_cursors {} { + global cur_0 cur_1 + if {$cur_0 <= $cur_1} { + set cl $cur_0; set cr $cur_1 + } else { + set cl $cur_1; set cr $cur_0 + } + incr cr -1 + debug "CGD CURSORS $cl $cr" + return [list $cl $cr] +} + +proc char_get_definition_contexts {} { global glyphsdone unk_l unk_contexts wordmap database - - if {$c0 > $c1} { manyset [list $c0 $c1] c1 c0 } + + manyset [char_get_definition_cursors] c0 c1 if {$c0 == $unk_l} { set ncontexts $unk_contexts @@ -920,24 +958,31 @@ proc char_get_definition_info {c0 c1} { set ncontexts {} } } - incr c1 -1 - set r [list $ncontexts $c0 $c1] - debug "CDGI $r" - return $r + debug "CGD CONTEXTS $ncontexts" + return $ncontexts } -proc update_database/DEFINE {c0 c1 strq} { +proc char_get_definition_context_actual {} { global new_context - manyset [char_get_definition_info $c0 $c1] ncontexts c0 c1 - debug "DEFINE $c0 $c1 $new_context {$ncontexts}" + set ncontexts [char_get_definition_contexts] if {[llength $ncontexts]==1} { set c [lindex $ncontexts 0] - } elseif {[lsearch -exact $new_context $ncontexts]>=0} { + } elseif {[lsearch -exact $ncontexts $new_context]>=0} { set c $new_context } else { - puts stderr "Selected context is not one of the many possibilities." - return; + set c {} + } + debug "CDG CONTEXT ACTUAL $c FROM NEW $new_context ALLOW $ncontexts" + return $c +} + +proc update_database/DEFINE {strq} { + manyset [char_get_definition_cursors] c0 c1 + set c [char_get_definition_context_actual] + if {![string length $c]} { + error "Selected context is not one of the many possibilities." } + debug "DEFINE $strq" set bm [dbkey $c $c0 $c1] do_database_update $bm $strq } @@ -998,7 +1043,7 @@ proc remote-serv/take {yesno file dict} { must_gets_exactly stdin confirmed - manyset [dict2_reqkind_rows reqkind rows] + manyset [dict2_reqkind_rows $dict] reqkind rows if {$yesno} { read_database $dictdir/master-$dict.txt @@ -1065,7 +1110,7 @@ proc dict2_reqkind_rows {dict} { debug "DICT PIXMAP" } elseif {[regexp {^(char)([1-9]\d*)$} $dict dummy reqkind rows]} { debug "DICT CHAR rqk=$reqkind r=$rows." - return [list $reqkind rows] + return [list $reqkind $rows] } else { error "$dict ?" } @@ -1116,7 +1161,7 @@ proc string2unicodenames {str} { } proc approve_showentry {ix file specdata} { - global approve_ixes reqkind + global approve_ixes reqkind approve_entryhow approve_decompose_data $specdata @@ -1148,9 +1193,14 @@ proc approve_showentry {ix file specdata} { grid configure $wb-div -columnspan 5 -sticky ew -padx 5 } - frame $wb-act - button $wb-act.rej -text Reject -command [list approve_reject $ix] - pack $wb-act.rej + frame $wb-act -bd 2 -relief groove + set approve_entryhow($ix) approve + foreach how {approve reject defer} { + set w $wb-act.$how + radiobutton $w -variable approve_entryhow($ix) \ + -text [string totitle $how] -value $how + pack $w -side left + } grid $wb-def $wb-image $wb-xinfo $wb-act $wb-inf -padx 3 grid configure $wb-image -ipadx 3 -ipady 3 -sticky w @@ -1179,16 +1229,18 @@ proc approve_check_server {} { must_gets_exactly_server ok } -proc approve_reject {ix} { +proc approve_confirm {} { + global approve_ixes approve_entryhow approve_check_server - approve_approve_reject_one $ix 0 - approve_fetch_list -} - -proc approve_these {} { - global approve_ixes - approve_check_server - foreach ix $approve_ixes { approve_approve_reject_one $ix 1 } + foreach ix $approve_ixes { + set how $approve_entryhow($ix) + switch -exact $how { + approve { approve_approve_reject_one $ix 1 } + reject { approve_approve_reject_one $ix 0 } + defer { } + default { error $how? } + } + } approve_fetch_list } @@ -1229,7 +1281,7 @@ proc main/approve {} { switch -glob $userhost { {} { } {* *} { set cmd $userhost } - * { set cmd [concat [list ssh $userhost] $cmd] } + * { set cmd [concat [list ssh -o compression=yes $userhost] $cmd] } } debug "APPROVER RUNS $cmd" @@ -1242,7 +1294,7 @@ proc main/approve {} { label .title -text {} frame .app -bd 2 -relief groove - button .ok -text "Approve These" -command approve_these + button .ok -text "Confirm" -command approve_confirm pack .title .app -side top pack .left -side left pack .right -side right @@ -1332,12 +1384,14 @@ proc debug {m} { } set mainkind default set ai 0 set debug 0 +set debug_rect 0 set quiet 0 foreach arg $argv { incr ai switch -exact -- $arg { {--quiet} { set quiet 1 } {--debug} { set debug 1 } + {--debug-rect} { set debug_rect 1 } {--debug-server} { proc debug {m} { puts stderr "DICT-MGR-SVR $m" }} {--noop-arg} { } {--approve-updates} { set mainkind approve; break }