---------------------------------------------------------------
QSearch - плагин для текстового редактора AkelPad
---------------------------------------------------------------

Плагин представляет собой панель для "быстрого" поиска текста.
Предполагается, что для вызова функции плагина (QSearch::QSearch)
будет назначена горячая клавиша (например, F7).

Клавиши панели быстрого поиска:
Enter, F3        - искать следующий (вниз)
Shift+Enter      - искать предыдущий (вверх)
Alt+Enter        - искать с начала файла
Alt+Shift+Enter  - найти все
Ctrl+Shift+Enter - найти все (во всех файлах)
Ctrl+Enter       - подхватить выделенный текст
Esc              - скрыть панель
Ctrl+Del         - строка поиска: стереть текст после (правее) каретки
Ctrl+BS          - строка поиска: стереть текст до (левее) каретки
Ctrl+A           - строка поиска: выделить весь текст
Смотрите также описание 'use_alt_hotkeys'.
Примечание: кнопка "Найти все" имеет собственное всплывающее меню.

Функции FindNext, FindPrev и FindAll позволяют назначить "горячие клавиши"
для вызова из редактора, а также использовать их возможности при вызове из
плагина Hotkeys или из скриптов (с помощью плагина Scripts).
Рассмотрим их подробнее.

FindNext - искать следующий (вниз).
Рекомендуемая "горячая клавиша" - F3.
Эта функция поддерживает автозагрузку для скрытой загрузки плагина QSearch
при запуске AkelPad. (Цель этого - доступность всех возможностей плагина
сразу при старте AkelPad, а не после первого показа панели поиска QSearch).
Дополнительные возможности на примере плагина Hotkeys:
 -------------------------------------------------------------
 Имя              |  Команда                       |  Клавиша
 -------------------------------------------------------------
 Quick Find Next  |  Call("QSearch::FindNext", 1)  |  Ctrl+F3
 -------------------------------------------------------------
Назначает Ctrl+F3 на действие "подхватить выделенный текст и искать
далее (вниз)".
При отсутствии выделенного текста, выделяется текущее слово (согласно
настройке 'select_by_fnd').
При обеих установленных галочках "Search: Pick up selected text" и
"Window: Catch main F3", функция FindNext подхватывает выделенный текст или
выделяет текущее слово согласно настройке 'select_by_f3'.

FindPrev - искать предыдущий (вверх).
Рекомендуемая "горячая клавиша" - Shift+F3.
Дополнительные возможности на примере плагина Hotkeys:
 -------------------------------------------------------------------
 Имя              |  Команда                       |  Клавиша
 -------------------------------------------------------------------
 Quick Find Prev  |  Call("QSearch::FindPrev", 1)  |  Ctrl+Shift+F3
 -------------------------------------------------------------------
Назначает Ctrl+Shift+F3 на действие "подхватить выделенный текст и
искать далее (вверх)".
При отсутствии выделенного текста, выделяется текущее слово (согласно
настройке 'select_by_fnd').
При обеих установленных галочках "Search: Pick up selected text" и
"Window: Catch main F3", функция FindPrev подхватывает выделенный текст или
выделяет текущее слово согласно настройке 'select_by_f3'.

FindAll - найти все.
Рекомендуется использовать через плагин Hotkeys.
Дополнительные возможности на примере плагина Hotkeys:
 -------------------------------------------------------------------------
 Имя                 |  Команда                      |  Клавиша
 -------------------------------------------------------------------------
 Quick Find All (1)  |  Call("QSearch::FindAll", 1)  |  Ctrl+Alt+F3
 Quick Find All (2)  |  Call("QSearch::FindAll", 2)  |  Alt+Shift+F3
 Quick Find All (3)  |  Call("QSearch::FindAll", 3)  |  Ctrl+Alt+Shift+F3
 -------------------------------------------------------------------------
(1) Назначает Ctrl+Alt+F3 на действие "подхватить выделенный текст и
найти все в текущем документе".
При отсутствии выделенного текста, выделяется текущее слово (согласно
настройке 'select_by_fnd').
(2) Назначает Alt+Shift+F3 на действие "найти все во всех документах".
(3) Назначает Ctrl+Alt+Shift+F3 на действие "подхватить выделенный текст и
найти все во всех документах".
При отсутствии выделенного текста, выделяется текущее слово (согласно
настройке 'select_by_fnd').
При обеих установленных галочках "Search: Pick up selected text" и
"Window: Catch main F3", функция FindAll подхватывает выделенный текст или
выделяет текущее слово согласно настройке 'select_by_f3'.

GoToNextFindAllMatch - перейти к следующему совпадению из результатов "Найти все".
Рекомендуемая "горячая клавиша" - F4.
(Когда результаты "Найти все" отображаются в панели Log::Output,
то GoToNextFindAllMatch на самом деле вызывает Log::Output::NextMatch.
Если панель Log::Output закрыть, GoToNextFindAllMatch работает независимо).
Примечание: QSearch помнит совпадения из результатов "Найти все" до тех пор,
пока не был начат новый поиск "Найти все" или пока какой-то из файлов с
совпадениями не был изменён. Соответственно, можно искать другую (новую) строку
с помощью F3/FindNext/FindPrev, одновременно используя GoToNextFindAllMatch и
GoToPrevFindAllMatch для перехода к совпадению из последних результатов "Найти все".

GoToPrevFindAllMatch - перейти к предыдущему совпадению из результатов "Найти все".
Рекомендуемая "горячая клавиша" - Shift+F4.
(Когда результаты "Найти все" отображаются в панели Log::Output,
то GoToPrevFindAllMatch на самом деле вызывает Log::Output::PrevMatch.
Если панель Log::Output закрыть, GoToPrevFindAllMatch работает независимо).

Также плагин предоставляет две функции: SelFindNext и SelFindPrev -
для быстрого поиска выделенного слова/фразы ниже или выше по тексту
прямо в окне редактирования.
При отсутствии выделенного текста, выделяется текущее слово (согласно
настройке 'select_by_selfnd').
Поведение этих функций зависит от общих настроек поиска, заданных в
панели QSearch (или в ini-файле, см. ниже).
При этом функции QSearch::QSearch и QSearch::SelFindNext/Prev могут
искать разный текст (QSearch::QSearch - текст в строке поиска, а
QSearch::SelFindNext/Prev - текст, выделенный в окне редактирования).
Предполагается, что для вызова этих функций будут назначены горячие
клавиши (например, Ctrl+Alt+Right и Ctrl+Alt+Left).
Пример использования: выделяем слово в окне редактирования и вызываем
SelFindNext или SelFindPrev. В результате выделение переходит к
следующему или предыдущему слову, совпадающему с выделенным изначально.

Функция DialogSwitcher позволяет переключаться между диалогами "Поиск",
"Замена", "Перейти к строке" и панелью QSearch с помощью "горячих клавиш"
этих диалогов. Например, если нажать Ctrl+H в диалоге "Поиск", он
изменится на диалог "Замена". При использовании функции DialogSwitcher
рекомендуется поставить галочку для её автоматической загрузки в окне
настроек плагинов.

Совет: тихий мгновенный поиск по F3.
Тихий мгновенный поиск позволяет искать выделенное слово (фразу) простым
нажатием F3 или Shift+F3 прямо в окне редактирования. Поиск "тихий" потому,
что не требует открытую панель QSearch для своей работы (так же, как и
"тихие" функции QSearch::SelFindNext и QSearch::SelFindPrev).
Для активации этой возможности выполните следующие три шага:
1. Включите "Поиск: SelFind подхватывает выделенный текст" во всплывающем
   меню панели QSearch.
   Это позволяет QSearch подхватить текст, выделенный в окне редактирования.
2. Включите "Окно: Обрабатывать F3 от главного окна" во всплывающем меню
   панели QSearch.
   Это позволяет QSearch обработать F3/Shift+F3, нажатые в окне редактирования.
3. Поставьте галочку "QSearch::SelFindNext" в окне Настройки -> Плагины...
   Это позволяет скрыто загрузить QSearch при запуске AkelPad.


Дополнительные настройки (всплывающее меню панели QSearch, всплывающее меню
кнопки "Найти все" или файл "AkelFiles\Plugs\QSearch.ini"):

1) "Search: On-the-fly mode"
   "Поиск: Искать на лету"
   srch_onthefly_mode = 1
     Поиск производится непосредственно во время набора текста в
     строке поиска QSearch.
   srch_onthefly_mode = 0
     Поиск производится только по нажатию Enter.

2) "Search: Always from beginning"
   "Поиск: Всегда с начала"
   srch_from_beginning = 0
     При изменении слова в строке поиска он (поиск) будет продолжен
     с текущей позиции в файле.
   srch_from_beginning = 1
     Введенный текст будет искаться с начала файла.

3) "Search: Use special characters ( \n, \t, * and ? )"
   "Поиск: Использовать спец. символы ( \n, \t, * и ? )"
   srch_use_specialchars = 1
     В строке поиска могут использоваться спец. символы:
       \n - перевод строки
       \t - табуляция
       \\ - обратный слэш ( '\' )
       \* - звёздочка  ( '*' )
       \? - знак вопроса ( '?' )
       ?  - любой символ ( например, 'b', '0', ' ' и т.д. )
       *  - 0 или больше любых символов (т.e. любая (под)строка)
       ** - 0 или больше любых непробельных символов ("Слово целиком" вкл.)
     Примечание:
       ? и * не работают с переводом строки, \n должен быть указан явно.
   srch_use_specialchars = 0
     Обычный поиск, без спец. символов.

4) "Search: Use regular expressions"
   "Поиск: Использовать регулярные выражения"
   srch_use_regexp = 0
     Обычный поиск, без регулярных выражений.
   srch_use_regexp = 1
     Поиск с регулярными выражениями. Используется реализация регулярных
     выражений в AkelPad.

5) "Search: . matches \n in reg.expressions"
   "Поиск: . захватывает \n в рег.выражениях"
   srch_regexp_dot_newline = 0
     При поиске с регулярными выражениями,  .  не захватывает  \n
   srch_regexp_dot_newline = 1
     При поиске с регулярными выражениями,  .  захватывает  \n

6) "Search: Pick up selected text"
   "Поиск: Подхватывать выделенный текст"
   srch_pickup_selection = 1
     При вызове QSearch или при нажатии F3 в окне редактирования AkelPad,
     в строку поиска QSearch вставляется текст, выделенный в окне
     редактирования AkelPad. То же самое при нажатии кнопок Find Next
     и Find Prev в панели QSearch.
   srch_pickup_selection = 0
     При вызове QSearch или при нажатии F3 в окне редактирования AkelPad,
     текст в строке поиска не изменяется.
   srch_pickup_selection = 10
     То же, что srch_pickup_selection = 0.
     При установке галочки "Search: Pick up selected text" значение параметра
     srch_pickup_selection устанавливается в 11.
   srch_pickup_selection = 11
     При вызове QSearch или при нажатии F3 в окне редактирования AkelPad,
     в строку поиска QSearch вставляется текст, выделенный в окне
     редактирования AkelPad. При нажатии же кнопок Find Next и Find Prev
     (в панели QSearch) всегда ищется текст из строки поиска QSearch - т.е.
     выделенный в окне редактирования AkelPad текст не подхватывается.
     При снятии галочки "Search: Pick up selected text" значение параметра
     srch_pickup_selection устанавливается в 10.

7) "Search: SelFind picks up selected text"
   "Поиск: SelFind подхватывает выделенный текст"
   srch_selfind_pickup = 0
     Вызов SelFindNext или SelFindPrev не меняет текст в строке поиска
     панели QSearch.
   srch_selfind_pickup = 1
     Вызов SelFindNext или SelFindPrev вставляет в строку поиска панели
     QSearch текст, выделенный в окне редактирования AkelPad.

8) "Search: Stop at EOF (end of file)"
   "Поиск: Останавливаться в конце файла"
   srch_stop_eof = 0
     При достижении конца файла поиск продолжается с начала этого файла.
   srch_stop_eof = 1
     При достижении конца файла показывается соответствующее сообщение.
   srch_stop_eof = 10
     То же, что srch_stop_eof = 0.
     При установке галочки "Search: Stop at EOF" значение параметра
     srch_stop_eof устанавливается в 11.
   srch_stop_eof = 11
     При достижении конца файла поиск прекращается. Молча. Без показа
     сообщения.
     При снятии галочки "Search: Stop at EOF" значение параметра
     srch_stop_eof устанавливается в 10.

9) "Window: Docked top"
   "Окно: Расположить сверху"
   srch_wnd_dockedtop = 1
     Панель QSearch находится в верхней клиентской части окна AkelPad.
   srch_wnd_dockedtop = 0
     Панель QSearch находится в нижней клиентской части окна AkelPad.

10) "Window: Select all when focused"
   "Окно: Фокус ввода выделяет всё"
   edit_focus_selectall = 1
     Каждый раз, когда строка поиска QSearch получает фокус ввода,
     весь текст в строке поиска становится выделенным.
   edit_focus_selectall = 0
     Весь текст в строке поиска выделяется только при явном вызове
     QSearch::QSearch.

11) "Window: Catch main F3"
   "Окно: Обрабатывать F3 от главного окна"
   catch_main_f3 = 1
     Нажатие клавиши F3 (Shift+F3) в окне редактора AkelPad продолжает
     поиск плагином QSearch, если до этого не вызывалось стандартное
     окно поиска или замены AkelPad.
   catch_main_f3 = 0
     Стандартное поведение AkelPad.

12) "Window: Catch main Esc"
   "Окно: Обрабатывать Esc от главного окна"
   catch_main_esc = 1
     Нажатие клавиши Esc в окне редактора AkelPad скрывает панель QSearch,
     если она была видима.
   catch_main_esc = 0
     Панель QSearch не перехватывает клавишу Esc; она обрабатывается самим
     AkelPad (по умолчанию).
   Также можно вручную установить одно из следующих значений:
   catch_main_esc = 10
     Нажатие клавиши Esc в панели QSearch передаётся на обработку самому
     редактору AkelPad (по умолчанию - закрывает программу).
     При установке галочки "Window: Catch main Esc" значение параметра
     catch_main_esc устанавливается в 11.
   catch_main_esc = 11
     Работает так же, как при catch_main_esc = 1.
     При снятии галочки "Window: Catch main Esc" значение параметра
     catch_main_esc устанавливается в 10.

13) "Window: Hotkey hides the panel"
   "Окно: Hotkey скрывает панель"
   hotkey_hides_panel = 1
     При нажатии "горячей клавиши" плагина в панели QSearch, она (панель)
     скрывается (аналог нажатия Esc).
     Повторный вызов функции QSearch::QSearch также закрывает панель.
     (Равно как и нажатие "горячей клавиши" плагина в окне редактирования
     AkelPad).
   hotkey_hides_panel = 0
     При нажатии "горячей клавиши" плагина в панели QSearch, фокус ввода
     передается окну редактирования AkelPad.
   hotkey_hides_panel = 11
     При нажатии "горячей клавиши" плагина в панели QSearch, она (панель)
     скрывается (аналог нажатия Esc).
     При нажатии "горячей клавиши" плагина в окне редактирования AkelPad,
     панель QSearch становится активной.
   hotkey_hides_panel = 10
     Работает так же, как при hotkey_hides_panel = 0.
     При снятии галочки "Window: Hotkey hides the panel" значение параметра
     'hotkey_hides_panel' устанавливается в 11.

14) "Window: Editor auto-focus (on mouse move)"
   "Окно: Авто-фокус в редактор (движением мыши)"
   editor_autofocus = 1
     При qsearch_autofocus = 1:
       Если панель QSearch имеет фокус ввода и указатель мыши из строки
       поиска панели QSearch передвинулся в окно редактирования AkelPad,
       то фокус ввода переходит к окну редактирования AkelPad.
       Если указатель мыши передвинулся в строку поиска панели QSearch, то
       фокус ввода переходит к строке поиска.
     При qsearch_autofocus = 0:
       Окно редактирования AkelPad всегда получает фокус ввода при движении
       указателя мыши в этом окне (даже если указатель мыши при этом не
       покидал строку поиска QSearch).
       Если указатель мыши передвинулся в строку поиска панели QSearch, то
       фокус ввода переходит к строке поиска.
   editor_autofocus = 0
     Ничего особенного не происходит: окно редактирования AkelPad не получает
     фокус ввода автоматически при наведении указателя мыши.

15) "Window: QSearch auto-focus (on mouse move)"
   "Окно: Авто-фокус в QSearch (движением мыши)"
   qsearch_autofocus = 1
     Если указатель мыши передвинулся в строку поиска панели QSearch, то
     фокус ввода переходит к строке поиска.
   qsearch_autofocus = 0
     При editor_autofocus = 0:
       Ничего особенного не происходит: строка поиска QSearch не получает
       фокус ввода при наведении на неё указателя мыши.
     При editor_autofocus = 1:
       Если указатель мыши передвинулся в строку поиска панели QSearch, то
       фокус ввода переходит к строке поиска.

16) "Window: QSearch auto-focus (on file open)"
   "Окно: Авто-фокус в QSearch (при откр. файла)"
   qsearch_autofocus_file = 1
     При открытии файла и переключении на другой файл (документ), фокус ввода
     переходит к строке поиска панели QSearch.
   qsearch_autofocus_file = 0
     Ничего особенного не происходит: QSearch не перехватывает фокус ввода.

17) dock_rect_disabled = 1
     Если значение этого параметра вручную установлено в 1, то координаты
     "встроенной" панели QSearch не будут сохраняться.

18) dock_rect = ...
     (внутренний параметр, сохраняется автоматически при 'dock_rect_disabled'
     равном 0)

19) color_notfound = FFE0E000
     Цвет фона, который устанавливается в случае, когда искомый текст не
     найден. Этот цвет задается в виде "RRGGBB00", где RR, GG и BB - это
     шестнадцатеричные значения красного, зеленого и синего цветов (от 00
     до FF).

20) color_notregexp=F8E0F800
     Цвет фона, который устанавливается в случае неудачного регулярного
     выражения. Этот цвет задается в виде "RRGGBB00", где RR, GG и BB -
     это шестнадцатеричные значения красного, зеленого и синего цветов
     (от 00 до FF).

21) color_eof = E4FFE400
     Цвет фона, который устанавливается при пересечении конца файла (когда
     поиск продолжается с начала файла). Этот цвет задается в виде
     "RRGGBB00", где RR, GG и BB - это шестнадцатеричные значения красного,
     зеленого и синего цветов (от 00 до FF).
     При установке "color_eof = FFFFFF00" цвет меняться не будет.

22) color_highlight = C0FFC000
     Цвет фона для текста, который подсвечивается при установленной галочке
     "Highlight all". Этот цвет задается в виде "RRGGBB00", где RR, GG и BB -
     это шестнадцатеричные значения красного, зеленого и синего цветов (от 00
     до FF).

23) highlight_mark_id = 1001
     Параметр 'ID' для плагина HighLight когда QSearch вызывает его функцию
     "Coder::HighLight" для подсветки (пометки) текста.

24) highlight_state = 0
    (сохраняется автоматически при вкл/выкл галочки "Highlight all").
    Также можно вручную установить одно из следующих значений:
    highlight_state = 10
      При запуске AkelPad галочка "Highlight all" всегда не установлена.
    highlight_state = 11
      При запуске AkelPad галочка "Highlight all" всегда установлена.

25) use_alt_hotkeys = 1
     В панели QSearch доступны следующие дополнительные сочетания клавиш:
     Alt+alt_match_case    (Alt+C) - Учитывать регистр (case) вкл/выкл
     Alt+alt_whole_word    (Alt+W) - Слово целиком (whole word) вкл/выкл
     Alt+alt_search_mode   (Alt+R) - Режим поиска (текст/спец./рег.выражения)
     Alt+alt_highlight_all (Alt+H) - Подсветить все (highlight) вкл/выкл
    use_alt_hotkeys = 0
     Дополнительные сочетания клавиш в панели QSearch отключены.

26) alt_match_case = 67
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для галочки "Учитывать регистр" (панель QSearch).
     Значение 67 соответствует клавише 'C', т.е. получаем сочетание Alt+C.
     Код клавиши может быть посчитан как (англ.буква - 'A' + 65).
     То есть 65 соответствует Alt+A, 66 - Alt+B, 67 - Alt+C и т.д.
     Также, 48 соответствует Alt+0, 49 - Alt+1, 50 - Alt+2 и т.д.
     Для детальной информации по кодам клавиш см. страницу Virtual-Key Codes
     в MSDN.

27) alt_whole_word = 87
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для галочки "Слово целиком" (панель QSearch).
     Значение 87 соответствует клавише 'W', т.е. получаем сочетание Alt+W.
     См. 'alt_match_case' для более детальной информации.

28) alt_search_mode = 82
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для переключения режима поиска:
     текст -> спец. символы -> регулярные выражения -> текст -> ...
     Значение 82 соответствует клавише 'R', т.е. получаем сочетание Alt+R.
     См. 'alt_match_case' для более детальной информации.

29) alt_highlight_all = 72
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для галочки "Подсветить все" (панель QSearch).
     Значение 72 соответствует клавише 'H', т.е. получаем сочетание Alt+H.
     См. 'alt_match_case' для более детальной информации.

30) find_history_items = 15
     Максимальное количество элементов в истории поиска (выпадающем списке).
     Установка этого значения в 0 отключает историю поиска.

31) history_save = 3
     Может быть установлено в 0 или быть суммой следующих значений:
     0 - история поиска и состояние галочек не сохраняется.
     1 - история поиска сохраняется в Системном Реестре.
     2 - состояние галочек "Учитывать регистр" и "Слово целиком"
         сохраняется в Системном Реестре.
     4 - сохранять не в Системном Реестре, а там, куда сохраняет
         настройки AkelPad (например, в .ini файл).
         Позволяет сделать настройки QSearch полностью портабельными.

32) new_ui = 0
     QSearch показывает свой старый "классический" интерфейс:
     [искомый текст]  [ ]Учит.регистр [ ]Сл.целиком [ ]Подсв.все
    new_ui = 1
     QSearch показывает обновлённый "классический" интерфейс + две кнопки:
     [искомый текст]  [ < ] [ > ]  [ ]Учит.регистр [ ]Сл.целиком [ ]Подсв.все
    new_ui = 2
     QSearch показывает обновлённый "классический" интерфейс + три кнопки:
     [искомый текст]  [ < ] [ > ] [ * ]  [ ]Учит.регистр [ ]Сл.целиком [ ]Подсв.все
       - кнопка [ * ] означает "Найти все" и имеет собственное всплывающее меню

33) select_by_f3 = 0
     Актуально при установленных галочках "Search: Pick up selected text" и
     "Window: Catch main F3".
     Когда в окне редактирования нет выделенного текста, F3 использует текст
     из панели QSearch для продолжения поиска.
    select_by_f3 = 1
     Актуально при установленных галочках "Search: Pick up selected text" и
     "Window: Catch main F3".
     Когда в окне редактирования нет выделенного текста, F3 выделяет слово
     возле каретки, чтобы использовать его для дальнейшего поиска.
     (Пример: сл|ово, слово|, |слово.)
    select_by_f3 = 2
     Актуально при установленных галочках "Search: Pick up selected text" и
     "Window: Catch main F3".
     Когда в окне редактирования нет выделенного текста, F3 выделяет слово,
     чтобы использовать его для дальнейшего поиска, если каретка находится
     внутри слова - т.е. не перед первым или не после последнего символа
     этого слова.
     (Пример: с|лово, сл|ово, сло|во, слов|о - но не слово| или |слово.)

34) select_by_fnd = 1
     Эта настройка контролирует, будет ли выделяться текущее слово вызовом
      Call("QSearch::FindNext", 1), Call("QSearch::FindPrev", 1),
      Call("QSearch::FindAll", 1) и Call("QSearch::FindAll", 3)
     при отсутствии выделенного текста в редакторе.
     Значение 1 выделяет слово возле каретки (пример: сл|ово, слово|, |слово).
     Значение 2 выделяет слово, если каретка находится внутри слова - т.е.
     не перед первым или не после последнего символа этого слова (пример:
     с|лово, сл|ово, сло|во, слов|о - но не слово| или |слово).
     Значение 0 не выделяет слово.

35) select_by_selfnd = 1
     Эта настройка контролирует, будет ли выделяться текущее слово вызовом
      QSearch::SelFindNext и QSearch::SelFindPrev
     при отсутствии выделенного текста в редакторе.
     Значение 1 выделяет слово возле каретки (пример: сл|ово, слово|, |слово).
     Значение 2 выделяет слово, если каретка находится внутри слова - т.е.
     не перед первым или не после последнего символа этого слова (пример:
     с|лово, сл|ово, сло|во, слов|о - но не слово| или |слово).
     Значение 0 не выделяет слово.

36) adj_incompl_regexp = 1
     Корректирует "незавершённое" регулярное выражение: символы "+", "*",
     "+?" and "*?" в конце регулярного выражения игнорируются, чтобы
     избежать выделения до конца файла.
     Это особенно полезно в режиме поиска "на лету", когда символ "+" или
     "*" встречается в середине регулярного выражения в процессе набора.
     Чтобы специально использовать эти символы в конце регулярного выражения,
     просто добавьте в его конец дополнительный символ '+' или '*': например,
     печатайте "a++" вместо "a+" и печатайте "a*?+" вместо "a*?".
    adj_incompl_regexp = 2
     Корректирует "незавершённое" регулярное выражение только в режиме
     поиска "на лету".
    adj_incompl_regexp = 0
     Отключает коррекцию "незавершённого" регулярного выражения.

37) findall_mode = 2
     Отвечает за режим "Найти все".
     Младший байт может иметь значение:
      1 - Только подсчёт
      2 - Вывод в Log::Output
      3 - Вывод в файл (N вкладок)
      4 - Вывод в файл (1 вкладка)
     К этому значению может быть прибавлено:
      256 - Авто-подсчёт всех вхождений
     Так, значение findall_mode = 258 будет означать:
      * Авто-подсчёт всех вхождений (во время поиска)
      * Вывод в Log::Output (при нажатии кнопки "Найти все")

38) findall_result = 272
     Соответствует диалогу "Настройки вывода" (для "Найти все").
     Это значение будет суммой следующих чисел:
      0 - Показывать строку со вхождением
      1 - Показывать только само совпадение (вхождение)
      2 - Режим фильтра: чистый текст без заголовка/результата/позиции
      4 - Режим фильтра: добавить контекст (см. FindResultsPolicy)
      16 - Показывать позицию: (Стр:Поз)
      32 - Показывать длину совпадения: (Длина)
      256 - Показывать заголовок: "Ищем %s ..."
      4096 - Применить Coder alias (синтаксическую тему)

39) findall_count_delay = 400
     Задержка, в миллисекундах, перед подсчётом всех вхождений, когда обе
     настройки "Авто-подсчёт всех вхождений" и "Искать на лету" активны.

40) logoutput_frp_mode = 3
     Режим отображения результатов поиска (FindResultsPolicy) при выводе в
     панель Log::Output.
     Определяет значение (смысл) параметров 'frp_before' и 'frp_after'.
     Может принимать одно из следующих значений:
      1 (QSFRM_LINE)       - количество строк
      2 (QSFRM_LINE_CR)    - кол-во строк + завершающий перенос строки
      3 (QSFRM_CHARINLINE) - кол-во символов внутри текущей строки
      4 (QSFRM_CHAR)       - количество символов

41) logoutput_frp_before = 100
     В зависимости от 'logoutput_frp_mode', задаёт число строк или символов,
     которые будут показаны _перед_ каждым вхождением при выводе в панель
     Log::Output.
      При logoutput_frp_mode = 1, это число строк перед строкой со вхождением.
     И logoutput_frp_before = 0 будет означать: "использовать всю строку, в
     которой найдено вхождение".
      При logoutput_frp_mode = 2, это число строк перед строкой со вхождением,
     плюс после каждого выведенного в панель Log::Output вхождения будет
     добавлен перенос строки.
      При logoutput_frp_mode = 3, это число символов перед вхождением,
     ограниченное строкой со вхождением (т.е. символы вне этой строки не
     захватываются). И logoutput_frp_before = 0 будет означать:
     "использовать только само совпадение".
      При logoutput_frp_mode = 4, это число символов перед вхождением, не
     ограниченное строкой со вхождением (т.е. могут захватываться символы из
     предыдущих строк). И logoutput_frp_before = 0 будет означать:
     "использовать только само совпадение".

42) logoutput_frp_after = 100
     В зависимости от 'logoutput_frp_mode', задаёт число строк или символов,
     которые будут показаны _после_ каждого вхождения при выводе в панель
     Log::Output.
     См. описание 'logoutput_frp_before'.

43) logoutput_frp_highlight = 1
     Отвечает за подсветку найденных совпадений в результатах поиска.
     Может принимать одно из следующих значений:
      0 (QSFRH_NONE)      - не подсвечивать
      1 (QSFRH_SELECT)    - выделить искомый текст

44) fileoutput_frp_mode = 1
     Режим отображения результатов поиска (FindResultsPolicy) при выводе в
     файл.
     См. описание 'logoutput_frp_mode'.

45) fileoutput_frp_before = 0
     В зависимости от 'fileoutput_frp_mode', задаёт число строк или символов,
     которые будут показаны _перед_ каждым вхождением при выводе в файл.
     См. описание 'logoutput_frp_before'.

46) fileoutput_frp_after = 0
     В зависимости от 'fileoutput_frp_mode', задаёт число строк или символов,
     которые будут показаны _после_ каждого вхождения при выводе в файл.
     См. описание 'logoutput_frp_before'.

47) fileoutput_frp_highlight = 2
     Отвечает за подсветку найденных совпадений в результатах поиска.
     Может принимать одно из следующих значений:
      0 (QSFRH_NONE)      - не подсвечивать
      1 (QSFRH_SELECT)    - выделить искомый текст
      2 (QSFRH_IFCHECKED) - подсвечивать, если стоит галочка "Подсветить все"
      3 (QSFRH_ALWAYS)    - подсвечивать всегда

48) edit_minwidth = 0
     Минимальная ширина строки поиска панели QSearch.
     Значение 0 означает: не меньше, чем стандартная ширина, использовавшаяся
     в предыдущих версиях QSearch (когда панель не поддерживала изменение
     размеров).

49) edit_maxwidth = 640
     Максимальная ширина строки поиска панели QSearch.
     Значение 0 означает: без ограничений (т.е. ширина строки поиска всегда
     пропорциональна текущей ширине панели QSearch).

50) use_editor_colors = 0
     Строка поиска QSearch использует стандартные (системные) цвета текста и
     фона.
    use_editor_colors = 1
     Строка поиска QSearch использует цвета текста и фона из AkelPad.
     Для тёмных цветовых тем можно использовать такие цвета для QSearch:
       color_notfound=88383800
       color_notregexp=78487800
       color_eof=40784000
       color_highlight=78507800
     Цвета по умолчанию для светлых цветовых тем:
       color_notfound=FFE0E000
       color_notregexp=F8E8F800
       color_eof=E4FFE400
       color_highlight=C0FFC000

51) status_eof_crossed_down = >>
     Панель QSearch показывает данный текст (символы) при пересечении границы
     документа (EOF) во время поиска вперёд (вниз).
     Если указана пустая строка, панель QSearch никак не реагирует на
     пересечение EOF в направлении вперёд (вниз).

52) status_eof_crossed_up = <<
     Панель QSearch показывает данный текст (символы) при пересечении границы
     документа (EOF) во время поиска назад (вверх).
     Если указана пустая строка, панель QSearch никак не реагирует на
     пересечение EOF в направлении назад (вверх).

53) status_notfound = --
     Панель QSearch показывает данный текст (символы), когда искомый текст не
     найден.
     Если указана пустая строка, панель QSearch никак не реагирует на
     "не найденный" текст.

54) status_notregexp =
     Панель QSearch показывает данный текст (символы), когда искомый текст не
     является корректным регулярным выражением.
     Если указана пустая строка, панель QSearch никак не реагирует на
     некорректное регулярное выражение.


--------
История:
--------
v.8.4 (Март 2026)
 * Слава Україні! Героям слава!
 * улучшено: поиск со спец.символами теперь работает быстрее
 - исправлено: "Найти Все" со спец.символами не находило строки с '\n'

v.8.3 (Декабрь 2024)
 * Слава Україні! Героям слава!
 * уменьшен размер 64-битной версии QSearch.dll
 * улучшено: синтаксические файлы "qsfndall_*.coder" слегка обновлены
 * некоторые внутренние улучшения

v.8.2 (Ноябрь 2024)
 * Слава Україні! Героям слава!
 + добавлено: показ "%u из %u найдено" при активном "Авто-подсчёт всех вхождений"
 + добавлено: функции GoToNextFindAllMatch и GoToPrevFindAllMatch
 - исправлено: "Поиск: Всегда с начала" был поломан, и довольно давно
 * улучшена обработка AltGr (правый Alt) в панели QSearch
 * различные уточнения и улучшения в подсветке результатов поиска
 * различные внутренние улучшения
 * добавлены некоторые юнит-тесты

v.8.1 (Март 2024)
 * Слава Україні! Героям слава!
 + добавлено: показ ">>" или "<<" при пересечении границы документа (EOF)
 + добавлено: новые настройки "status_eof_crossed_down" и "status_eof_crossed_up"
 + добавлено: новые настройки "status_notfound" и "status_notregexp"

v.8.0 (Июнь 2023)
 * Слава Україні! Героям слава!
 * улучшено: теперь Вывод в файл (N вкладок) в режиме SDI создаёт новое окно
 * улучшено: теперь Вывод в файл (1 вкладка) в режиме SDI обрабатывает двойной
   клик на результатах поиска
 * улучшено: теперь Вывод в файл (N вкладок) в режиме MDI/PMDI обрабатывает
   двойной клик в последних 16 вкладках с результатами поиска
 * улучшено: внутренняя реализация некоторых функций в XMemStrFunc
 - исправлено: Вывод в файл мог быть искажён (урезан) в случае поиска в длинных
   перенесенных (word-wrapped) строках

v.7.9 (Май 2022)
 + добавлено: 'use_editor_colors'
 * улучшено: перезаписываются только изменённые настройки (это удобно при
   редактировании "QSearch.ini" в AkelPad)

v.7.8 (Февраль 2022)
 * улучшено: теперь запуск "Найти все во всех файлах" не зависит от состояния
   "не найдено" (поскольку это состояние касается только текущего документа)
 * улучшено: поведение при srch_stop_eof = 11
 + добавлено: группа настроек "Результаты поиска" в диалоге "Настройки вывода"
 + добавлено: настройка "Добавить контекст" для галочки "Режим фильтра" в
   диалоге "Настройки вывода"

v.7.7 (Май 2021)
 * улучшено: продолжение поиска по F3 (при 'catch_main_f3' вкл.) сразу после
   Ctrl+F3 (при 'select_by_f3' вкл.)

v.7.6 (Май 2020)
 + добавлено: теперь панель QSearch поддерживает изменение размеров
 + добавлено: 'edit_minwidth' и 'edit_maxwidth'
 * изменено: максимальная длина искомого текста увеличена со 120 до 250
 - исправлено: высота встроенного (docked) окна была недостаточна для
   увеличенного (например, 125%) размера текста
 - исправлено: несколько неточностей в документации (QSearch-*.txt)

v.7.5 (Март 2020)
 * изменено: результаты поиска ("Найти все") отображаются в более удобном виде
 + добавлено: синтаксические файлы "qsfndall_*.coder" для плагина Coder
 + добавлено: двойной клик в окне (вкладке) с результатами поиска переходит к
   найденной строке
 + добавлено: 'select_by_fnd', 'select_by_selfnd'
 + добавлено: 'logoutput_frp_highlight'
 * изменено: Ctrl+Tab в панели QSearch посылается окну редактирования AkelPad
 - исправлено: "Подсветить все" могло не работать при поиске со спец. символами
 - исправлено: QSFRM_CHARINLINE и QSFRM_LINE не поддерживали перенесенные строки

v.7.4 (Январь 2020)
 + добавлено: Найти Все во Всех Файлах
 + добавлено: функции FindNext, FindPrev, FindAll
 + добавлено: 'logoutput_frp_*', 'fileoutput_frp_*'
 + добавлено: hotkey_hides_panel=11

v.7.3 (Май 2019)
 * улучшено: несколько мелочей в "Найти все"
 + добавлено: "Режим фильтра" в "Найти все"

v.7.2 (Апрель 2019)
 + функциональность "Найти все" (установите new_ui=2)
 + функциональность "Авто-подсчёт всех вхождений" (установите new_ui=2)
 + теперь 'use_alt_hotkeys' включены (активны) по умолчанию
 * пользовательский интерфейс слегка обновлён

v.7.1 (Декабрь 2018)
 + исправлено: галочка "Слово целиком" не оказывала эффект на "Подсветить все"
   при поиске с регулярными выражениями
 + новая настройка: "Авто-фокус в QSearch (при откр. файла)"
 * мелкие улучшения

v.7.0 (Декабрь 2017)
 - исправлено: после неудачного поиска подхват выделенного слова в редакторе
   не сбрасывал состояние "ничего не найдено"
 * изменено: теперь при srch_pickup_selection = 1 в режиме "Поиск: Искать на
   лету" установка галочки "Подсветить все" подхватывает выделенный в редакторе
   текст. (Этого не происходит при srch_pickup_selection = 11 или при поиске
   не "на лету".)
 * 10 лет плагину QSearch! :)

v.6.9 (Июль 2016)
 * AkelPad 4.9.8+

v.6.8 (Июль 2016)
 + ничего не тянем из MSVCR = меньший размер файла

v.6.7 (Июль 2016)
 + изменено: когда "editor_autofocus" устанавливает фокус ввода в окно
   редактирования сразу после того, как что-то было выбрано в истории поиска
   (всплывающем списке) QSearch, выбранный текст из всплывающего списка будет
   использован для поиска даже при активном "srch_pickup_selection". (Раньше
   в этом случае для поиска использовался текст, выделенный в окне редактора,
   а не только что выбранный во всплывающем списке.)

v.6.6 (Март 2016)
 + добавлено: 'srch_regexp_dot_newline'

v.6.5 (Январь 2016)
 + добавлено: 'adj_incompl_regexp'

v.6.4 (Декабрь 2015)
 * AkelPad 4.9.7+
 + поддержка символа '\0' в строке AEM_GETWORDDELIMITERS
 - исправлено: "Слово целиком" при поиске со спец. символом '*'

v.6.3 (Сентябрь 2015)
 + При активном DialogSwitcher нажатие Ctrl+F и Ctrl+H в главном окне
   редактирования позволяет подхватить выделенный в этом окне текст.
   (В то время как нажатие Ctrl+F и Ctrl+H в диалоге поиска/замены
   оставляет в диалоге тот текст, который был.)
 * AkelPad 4.9.6+
 * восьмая годовщина QSearch :)

v.6.2 (Март 2015)
 - исправлено: неверно определялась версия AkelPad

v.6.1 (Март 2015)
 - исправлено: иногда "Подсветить все" вызывалось без надобности
 + добавлена информация про лицензию (см. ниже)

v.6.0 (Декабрь 2014)
 * AkelPad 4.9.1+
 + теперь "Подсветить все" учитывает состояние галочки "Слово целиком"

v.5.8 (Апрель 2014)
 * AkelPad 4.8.8+

v.5.7 (Март 2014)
 - исправлено: установка галочки "Подсветить все" всегда инициировала
   продолжение поиска для регулярных выражений
 - исправлено: SelFindNext/Prev всегда работали как srch_selfind_pickup=1
 + добавлено: srch_pickup_selection=10
 * изменено: теперь Alt+Enter ищет с начала файла, а Ctrl+Enter
   подхватывает выделенный текст

v.5.6 (Март 2014)
 * AkelPad 4.8.7+
 + теперь "Подсветить все" поддерживает регулярные выражения (AkelPad 4.8.8+)
 + теперь 'history_save' поддерживает портабельный режим
 - исправлено: hPopupMenu не освобождался (спасибо, Instructor)

v.5.5 (Июнь 2013)
 * AkelPad 4.8.4+

v.5.4 (Май 2013)
 * AkelPad 4.8.3+
 * теперь при поиске игнорируются "+", "*", "+?" и "*?" в конце регулярного
   выражения, чтобы избежать выделения до конца файла

v.5.3 (Декабрь 2012)
 * AkelPad 4.8.0+
 * теперь кнопки [>] и [<] подхватывают выделенный текст "интеллектуально"
 + добавлено: 'select_by_f3'
 * изменено сообщение о достижении конца файла

v.5.2 (Ноябрь 2012)
 * продолжение 5.1
 + поиск с регулярными выражениями (используя их реализацию в AkelPad)
 + добавлено: 'color_notregexp'
 + добавлено: явная настройка "Авто-фокус в QSearch"
 * 'hotkey_closes_wnd' изменено на 'hotkey_hides_panel'

v.5.1 (Октябрь 2012)
 + добавлено: new_ui=1

v.5.0 (Октябрь 2012)
 * пятая годовщина QSearch :)
 * AkelPad 4.7.9+
 - исправлено: неправильное поведение встроенного (docked) окна при автозагрузке
 - исправлено: всплывающее меню панели QSearch на втором мониторе
 + тихий мгновенный поиск по F3 (детали см. выше)

v.4.9 (Июль 2012)
 * AkelPad 4.7.7+

v.4.8 (Май 2012)
 * AkelPad 4.7.5+

v.4.7 (Февраль 2012)
 * для AkelPad 4.7.3+

v.4.6 (Декабрь 2011)
 * для AkelPad 4.7.1+
 + поддержка внутреннего языка AkelPad

v.4.5 (Ноябрь 2011)
 * для AkelPad 4.7.0+

v.4.4 (Июль 2011)
 + улучшена реализация doSelectCurrentWord для SelFindNext/Prev
   (взята из "WordCaretSelect.js" by FeyFre & VladSh)

v.4.3 (Июль 2011)
 + добавлено: srch_stop_eof=10

v.4.2 (Май 2011)
 - исправлено: теперь сообщение "EOF" не появится во время qsUpdateHighlight()
 - исправлено: при показе панели QSearch подхваченный текст не был выделен
 + добавлено: editor_autofocus=100

v.4.1 (Май 2011)
 * для AkelPad 4.6.0+
 + поддержка AkelPad x64
 - исправлено: без нажатого Shift, гор.клавиша Поиск Вверх работала как Вниз
 - исправлено: Grey Alt обрабатывался некорректно (например, для Польского)

v.4.0 (Декабрь 2010)
 + экспериментально: "Слово целиком" при поиске со спец. символами
   (тогда "**" соответствует 0 или больше любых непробельных символов)
 + галочки "Учитывать регистр" и "Слово целиком" могут сохраняться
   (значение 'history_save' должно быть установлено в 3 вручную!)

v.3.9 (Октябрь 2010)
 * для AkelPad 4.5.0+

v.3.8 (Сентябрь 2010)
 * теперь неактивное окно AkelPad не перехватывает фокус ввода
 * добавлена иконка

v.3.7 (Сентябрь 2010)
 * третья годовщина QSearch :)
 * изменено поведение 'srch_pickup_selection'
 + добавлено: 'editor_autofocus'

v.3.6 (Сентябрь 2010)
 + мелкие улучшения

v.3.5 (Август 2010)
 - исправлено: "Highlight all" не работало с 'srch_pickup_selection'
 + добавлено: история поиска
 + новый параметр настройки: find_history_items
 + новый параметр настройки: history_save

v.3.4 (Август 2010)
 + если нет выделения, SelFindNext/Prev выделяет текущее слово

v.3.3 (Июль 2010)
 - улучшено обнаружение Coder::HighLight
 - улучшена совместимость с PMDI
 - теперь Uninitialize() вызывается по AKDN_MAIN_ONFINISH

v.3.2 (Июнь 2010)
 * для AkelPad 4.4.4+
 + расширенная настройка catch_main_esc

v.3.1 (Май 2010)
 + теперь QSearchDlg использует шрифт "MS Shell Dlg"

v.3.0 (Март 2010)
 + теперь спец. символы могут использоваться в режиме "на лету"

v.2.9 (Февраль 2010)
 - исправлено: Ctrl+Z не работал после Ctrl+Del или Ctrl+BS

v.2.8 (Февраль 2010)
 * для AkelPad 3.7.4+/4.4.0+
 + QSearchDlg: собственная обработка Ctrl+Del, Ctrl+BS, Ctrl+A

v.2.7 (Октябрь 2009)
 * теперь SetWindowsHookEx() в DialogSwitcher использует GetCurrentThreadId()

v.2.6 (Октябрь 2009)
 + новые параметры настройки для дополнительных сочетаний клавиш панели QSearch
 - исправлено: теперь 'alt_whole_word' не работает при скрытом "Слово целиком"

v.2.5 (Октябрь 2009)
 + новый параметр настройки: color_eof
 + новый параметр настройки: use_alt_hotkeys

v.2.4 (Сентябрь 2009)
 * DialogSwitcher работает с AkelPad 4.3.2+
 - исправлено: проблема перерисовки окна ввода при режиме поиска не "на лету"
 - исправлено: изменение галочки "Слово целиком" не устанавливало QSEARCH_FIRST
 + добавлено: новые значения для параметра 'highlight_state'

v.2.3 (Сентябрь 2009)
 * вторая годовщина QSearch :)
 + добавлено: состояние галочки "Подсветить все" сохраняется
 - исправлено: неверное поведение при нажатии Shift во время поиска "на лету"
 - исправлено: иногда QSearch продолжал поиск по нажатию hot-key

v.2.2 (Август 2009)
 + добавлена функция "Подсветить все" (требует включенный плагин Highlight)
 * для AkelPad 3.7.3+/4.3.0+
 * работает с плагином Highlight версии 4.7 или выше

v.2.1 (Март 2009)
 * для AkelPad 3.7.0+/4.2.0+

v.2.0 (Март 2009)
 - исправлено (DialogSwitcher): горизонтальная полоса прокрутки окна
   редактирования не перерисовывалась при переключении с диалога
   Поиска/Замены на панель QSearch

v.1.9 (Декабрь 2008)
 + новая функция: DialogSwitcher

v.1.8 (Октябрь 2008)
 + исправлено: при нажатом Shift функция SelFindNext работала как SelFindPrev

v.1.7 (Октябрь 2008)
 + исправлено: продолжение поиска в MDI-режиме при скрытой панели QSearch

v.1.6 (Август 2008)
 + новый параметр настройки: srch_selfind_pickup

v.1.5 (Июль 2008)
 * для AkelPad 3.6.0+

v.1.4 (Июнь 2008)
 * для AkelPad 3.5.5+
 + новые функции: SelFindNext, SelFindPrev

v.1.3 (Май 2008)
 * для AkelPad 3.5.5+
 + перехват клавиши F3 (продолжение поиска) из главного окна
 + мелкие улучшения

v.1.2 (Апрель 2008)
 * для AkelPad 3.5.5+
 + встроенная поддержка русского и украинского интерфейса
 + дополнительные настройки и возможности

v.1.1 (Март 2008)
 * для AkelPad 3.5.3+
 + теперь панель плагина "встраивается" в окно AkelPad
 + мелкие улучшения
 + дополнительные настройки

v.1.0 (Сентябрь 2007)
 * начальная версия
 * для AkelPad 3.3.x/3.4.x


Автор выражает благодарность Александру Шенгальцу aka
Instructor за текстовый редактор AkelPad  ;-)
---------------------------------------------------------------------------
The original icon by Yusuke Kamiyamane, http://p.yusukekamiyamane.com/
The icon has been modified by DV.
---------------------------------------------------------------------------
(C) Sep 2007 - Mar 2026, Vitaliy Dovgan aka DV
          dvv81 <at> ukr <dot> net

Этот плагин является бесплатным (бесплатным как для частного, так и для
коммерческого использования);
он распространяется на условиях той же лицензии, что AkelPad.
