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 ?" }
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
}
foreach ctx $unk_contexts { set all_contexts($ctx) 1 }
- destroy [winfo children .d.selctx]
+ eval destroy [winfo children .d.selctx]
label .d.selctx.title -text \
{Select match context for altering dictionary:}
pack .d.selctx.title -side left
do_database_update $ppm $result
- return_result_done
+ return_result_finish
}
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
if {!$quiet} {
puts stderr \
- "Uploaded $dbname dictionary entry `$def': $body"
+ "Uploaded $dbname `$def': $body"
}
}
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
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}]
bind_key BackSpace {}
}
bind_key Return {
- if {$cur_0 != $cur_1} {
- .d.csr.csr.e delete 0 end
- set cur_mode text
- recursor
- }
- }
- 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}}
+ char_start_define_text
}
+ 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
recursor
}
+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
+}
+
proc recursor/text {} {
global all_contexts
{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 <Key-Return> {
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 <Key-Escape> {
global cur_already mul
global glyphsdone cur_already mul
- char_exactly_selctxts [lindex $glyphsdone [expr {$cur_already*5+3}]]
+ char_exactly_selctxts [lindex $glyphsdone [expr {$cur_already*5+2}]]
.d.csr.csr.l configure -text {correct}
set rmax [lindex $glyphsdone [expr {$cur_already*5}]]
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
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
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} {
- manyset [char_get_definition_info $c0 $c1] ncontexts c0 c1
- if {![llength $ncontexts]} {
- puts stderr "must start at letter LHS!"
- return
+proc char_get_definition_context_actual {} {
+ global new_context
+ set ncontexts [char_get_definition_contexts]
+ if {[llength $ncontexts]==1} {
+ set c [lindex $ncontexts 0]
+ } elseif {[lsearch -exact $ncontexts $new_context]>=0} {
+ set c $new_context
+ } else {
+ set c {}
}
- foreach c $ncontexts {
- set bm [dbkey $c $c0 $c1]
- do_database_update $bm $strq
+ 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
}
proc update_database/DELETE {l r ctxs} {
global database
+ if {[llength $ctxs]!=1} { error "$ctxs ?" }
foreach ctx $ctxs {
set bm [dbkey $ctx $l $r]
catch { unset database($bm) }
debug "$how $what"
eval update_database/$how $what
- return_result_done
+ return_result_finish
}
#========== server for approving updates ==========
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
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 ?"
}
}
proc approve_showentry {ix file specdata} {
- global approve_ixes reqkind
+ global approve_ixes reqkind approve_entryhow
approve_decompose_data $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
must_gets_exactly_server ok
}
-proc approve_reject {ix} {
- approve_check_server
- approve_approve_reject_one $ix 0
- approve_fetch_list
-}
-
-proc approve_these {} {
- global approve_ixes
+proc approve_confirm {} {
+ global approve_ixes approve_entryhow
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
}
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"
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
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 }