From 479a3cc7b4b79e8cb4df95664da5a9b0cb7918de Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 1 Jul 2009 21:18:32 +0100 Subject: [PATCH] WIP new context definition. --- pctb/TODO | 3 +++ pctb/dictionary-manager | 52 +++++++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/pctb/TODO b/pctb/TODO index 6a603c6..17c14b1 100644 --- a/pctb/TODO +++ b/pctb/TODO @@ -1,5 +1,8 @@ add UI option to dictionary-manager to make user specify which dictionary to add multi-context entries to + - need to test that it actually works + - add keyboard shortcuts for specifying context + install/test dictionary upload/approval write real uploader test real uploader diff --git a/pctb/dictionary-manager b/pctb/dictionary-manager index 105490d..cfb4a69 100755 --- a/pctb/dictionary-manager +++ b/pctb/dictionary-manager @@ -743,8 +743,7 @@ proc recursor//01 {z1} { .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 + char_exactly_selctxts [char_get_definition_contexts] bind_key space { othercursor } bind_leftright_q cur_$z1 0 [expr {$cols-1}] @@ -773,6 +772,7 @@ proc othercursor {} { proc char_start_define_text {} { global cur_0 cur_1 cur_mode if {$cur_0 == $cur_1} return + if {![string length [char_get_definition_context_actual]]} return .d.csr.csr.e delete 0 end set cur_mode text recursor @@ -792,7 +792,7 @@ proc recursor/text {} { 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 { @@ -904,11 +904,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 +931,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 } -- 2.30.2