Краткий способ подачи команды текстового поиска ее параметры? (Tcl/Tk)

Я нахожусь в процессе реализации функции "Найти" в программе, которую я пишу на Tcl/Tk, и я изо всех сил пытаюсь найти краткий / эффективный способ написания этого кода. Поиск будет иметь различные параметры, такие как "найти все","точный","поиск вверх / вниз" и т. Д.

Вот что я попробовал и для чего я здесь:

set idx [.text index insert];
set search_for $::search_entry;

set parameters "";
if {$::match_exact == 1} {append parameters "-exact "};
if {$::case_sensitive == 0} {append parameters "-nocase "};
if {$::find_all == 1} {append parameters "-all "};
if {$::direction == 1} {
    append parameters "-backwards";
} else {
    append parameters "-forewards";
}

.text search $parameters $search_for $idx;

С этим я получаю следующую ошибку при попытке поиска:

bad switch "-nocase -forewards": must be --, -all, -backwards, -count, -elide, -exact, -forwards, -nocase, -nolinestop, -overlap, -regexp, or -strictlimits

Скажите, пожалуйста, есть ли такой же краткий способ написать это? Я волнуюсь, что мне придется создавать различные поиски для каждой комбинации параметров, установленных пользователем...

1 ответ

Решение

Вы определяете параметры в виде строки. Это должен быть список, который вы расширяете во время вызова команды поиска. Это будет выглядеть примерно так:

set parameters [list]
if {$::match_exact == 1} {lappend parameters "-exact"}
...
.text search {*}$parameters $search_for $idx
Другие вопросы по тегам