frame .d -bd 2 -relief groove -pady 2 -padx 2
image create bitmap image/main
- label .d.mi -image image/main -borderwidth 0
+ label .d.mi -image image/main -bd 0
frame .d.csr -bg black -height $csrh
frame .d.got -bg black -height $gotsh
entry .d.csr.csr.e -bd 0
pack .d.csr.csr.l -side left
+ frame .d.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
}
proc resize_widgets_core {} {
- global mulcols mulrows csrh gotsh ctxh glyphsdone
+ global mulcols mulrows csrh gotsh ctxh
global unk_l unk_contexts
foreach w {.d.csr .d.got .d.ctx} {
}
proc required/char {} {
- global mulrows glyphsdone unk_l unk_r unk_contexts rows
+ global mulrows glyphsdone unk_l unk_r unk_contexts rows new_context
+ global all_contexts
must_gets stdin l
char_read_xpm stdin
+ catch { unset all_contexts }
+
resize_widgets_core
foreach w {0 1} {
.d.mi.csr_$w configure -height $mulrows
}
set maxh 0
- foreach {min max contexts got} $glyphsdone {
- show_context maxh $min $contexts
+ foreach {min max context contexts got} $glyphsdone {
+ show_context maxh $min $context
+ foreach ctx $contexts { set all_contexts($ctx) 1 }
+ }
+ foreach ctx $unk_contexts { set all_contexts($ctx) 1 }
+
+ destroy [winfo children .d.selctx]
+ label .d.selctx.title -text \
+ {Select match context for altering dictionary:}
+ pack .d.selctx.title -side left
+ set new_context [lindex $unk_contexts 0]
+
+ set ci 0; foreach ctx [lsort [array names all_contexts]] {
+ set all_contexts($ctx) $ci
+ set selw .d.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
+
show_context maxh $unk_l $unk_contexts
.d.ctx configure -height $maxh
pack forget .d.pe
- pack .d.csr -side top -before .d.mi
+ 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
focus .d
select_database char$rows
place forget .d.mi.csr_0
place forget .d.mi.csr_1
- pack forget .d.csr .d.got
+ pack forget .d.selctx .d.csr .d.got
pack .d.pe -side top -before .d.mi -pady 2
.d configure -takefocus 0
#-pady 2 -fill x
set unk_l [expr {$unk_l - $chop_l}]
set unk_r [expr {$unk_r - $chop_l}]
set ngd {}
- foreach {min max contexts got} $glyphsdone {
+ foreach {min max context contexts got} $glyphsdone {
lappend ngd \
[expr {$min-$chop_l}] \
[expr {$max-$chop_l}] \
- $contexts $got
+ $context $contexts $got
}
set glyphsdone $ngd
set how q
} else {
set ab 0
- foreach {min max contexts got} $glyphsdone {
+ foreach {min max context contexts got} $glyphsdone {
set rhsmost_max $max
if {$x >= $min && $x <= $max} {
set how [lindex {a b} $ab]
proc draw_glyphsdone {} {
global glyphsdone mul inter
eval destroy [winfo children .d.got]
- foreach {min max contexts got} $glyphsdone {
+ foreach {min max context contexts got} $glyphsdone {
frame .d.got.m$min -bd 0 -background \#888
label .d.got.m$min.l -text "$got" -fg white -bg black -bd 0
pack .d.got.m$min.l -padx 1 -pady 1
global cur_already cur_mode cur_0 cur_1 last_ht
global glyphsdone unk_l unk_r
- set cur_already [expr {[llength $glyphsdone]/4-1}]
+ set cur_already [expr {[llength $glyphsdone]/5-1}]
set cur_mode 1 ;# one of: 0 1 already text
set cur_0 $unk_l
#---------- character set runtime display and keystroke handling ----------
+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
+ if {[lsearch -exact $contexts $ctx]>=0} {
+ set state normal
+ } else {
+ set state disabled
+ }
+ $selw configure -state $state
+ }
+}
+
proc recursor/0 {} { recursor//01 0 }
proc recursor/1 {} { recursor//01 1 }
proc recursor//01 {z1} {
- global mul rhsmost_max cols glyphsdone
+ global mul rhsmost_max cols glyphsdone cur_0 cur_1
upvar #0 cur_$z1 cur
.d.csr.csr.l configure -text {adjust}
place .d.csr.csr -x [expr {$cur*$mul - 7}]
+
+ manyset [char_get_definition_info $cur_0 $cur_1] contexts
+ char_exactly_selctxts $contexts
+
bind_key space { othercursor }
bind_leftright_q cur_$z1 0 [expr {$cols-1}]
if {[llength $glyphsdone]} {
}
proc recursor/text {} {
+ global all_contexts
+
helptext {
{Return {confirm entry of new glyph}}
{Escape {abandon entry}}
proc recursor/already {} {
global mul
- global glyphsdone
global cur_already mul
global glyphsdone cur_already mul
+
+ char_exactly_selctxts [lindex $glyphsdone [expr {$cur_already*5+3}]]
+
.d.csr.csr.l configure -text {correct}
- set rmax [lindex $glyphsdone [expr {$cur_already*4}]]
+ set rmax [lindex $glyphsdone [expr {$cur_already*5}]]
place .d.csr.csr -x [expr {$rmax*$mul-3}]
bind_key Return {}
- bind_leftright_q cur_already 0 [expr {[llength $glyphsdone]/4-1}]
+ bind_leftright_q cur_already 0 [expr {[llength $glyphsdone]/5-1}]
bind_key space { bind_key Delete {}; set cur_mode 1; recursor }
bind_key Delete {
RETURN_RESULT DELETE [lrange $glyphsdone \
- [expr $cur_already*4] \
- [expr $cur_already*4+2]]
+ [expr $cur_already*5] \
+ [expr $cur_already*5+2]]
}
helptext {
{{<- ->} {move cursor, selecting glyph to correct}}
return $bm
}
-proc update_database/DEFINE {c0 c1 strq} {
+proc char_get_definition_info {c0 c1} {
+ # => ncontexts cl cr
global glyphsdone unk_l unk_contexts wordmap database
+
if {$c0 > $c1} { manyset [list $c0 $c1] c1 c0 }
+
if {$c0 == $unk_l} {
set ncontexts $unk_contexts
} else {
- foreach {l r contexts got} $glyphsdone {
+ foreach {l r context contexts got} $glyphsdone {
if {$l==$c0} { set ncontexts $contexts; break }
}
if {![info exists ncontexts]} {
- puts stderr "must start at letter LHS!"
- return
+ set ncontexts {}
}
}
incr c1 -1
+ set r [list $ncontexts $c0 $c1]
+ debug "CDGI $r"
+ return $r
+}
+
+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
+ }
foreach c $ncontexts {
set bm [dbkey $c $c0 $c1]
do_database_update $bm $strq