PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » My_Notepad_Sci


My_Notepad_Sci

Сообщений 1 страница 4 из 4

1

Для изучения Scintilla решил сделать блокнот со стандартными функциями и даже больше, насколько запалу хватит.
Скачать (старый исходник тут)
в исходнике я добавил функционал поиска и замены, но компилировать не стал, так как понял что надо переделывать, замена увеличивает документ и надо перемещать границу или вообще я не той функцией воспользовался, ведь там есть "замена целевого", то есть не пошагово в цикле. В том числе в справке есть функции назад-вперёд, но они с C++ библиотекой (cxx11...), в общем сегодня уже времени нет. И я не понял как стандартные лексеры прикрутить языка С++ например. Хотя и есть примеры, но я пока не уверен, там нет #SCI_SETLEXER, а значит собственные теги используются.

И я в PB User.7z добавил 4 функции из Scintilla для пробы, с теми что разберусь и которые вызывают проблемы в понимании добавлю, так как справку переведённую гуглом долго приходится понимать.

Обновление (последние)

26.11.22 v0.1.5
Некоторые настройки в ini.
Добавлены настройки шрифта и фона, удаление пробелов в конце строк, вставка даты.

22.11.22 v0.1.4
Добавлена кнопки "Подсветить", "Очистить"

Отредактировано AZJIO (27.11.2022 03:06:51)

0

2

Оказывается Scintilla.dll может быть скомпилирован с лексерами и функционалом SCFIND_CXX11REGEX, а может и без этого. Например в Notepad++ файл Scintilla.dll размером 1 Мб, а в PureBasic 372 кб. Попытка подменять Scintilla.dll другими файлами из других редакторов вызывает сбои.

Как я понял из справки SCI_FINDTEXT работает со структурой FINDTEXTEX, которая должна включать функционал SCFIND_CXX11REGEX, и также это будет поддерживать SCI_SEARCHPREV и SCI_SEARCHNEXT.

Выписал для себя правило поиска/замены (для переделки):
Понятие TARGET в функциях поиска и замены. TARGET это цель, то есть диапазнон. В данном случае "SEARCH IN TARGET" является вполне понятным, поиск внутри заданной цели, например от символа 5 до символа 105. А вот SCI_REPLACETARGET не содержит IN поэтому это не замена в диапазоне, а замена самого диапазона. Например SCI_SEARCHINTARGET вернул начало найденного, есть длина найденного из этого мы задаём цель для замены SCI_SETTARGETRANGE (SET TARGET RANGE). Но после замены надо учесть, что длина текста может увеличиться или уменьшиться, а значит нельзя пользоваться старым понятием конца цели. Также надо снова задать цель для поиска внутри этой цели, так как при замене цель заявлялась как найденный текст для замены, и надо вернуть цель - диапазон, в котором производился поиск, при этом начало цели это конец вставленного текста (так как поиск далее), а конец это сдвиг на величину, насколько вставленное больше искомого.
Для указания "SEARCH IN TARGET" используются SCI_SETTARGETSTART и SCI_SETTARGETEND, а для указания цели для замены используется SCI_SETTARGETRANGE. И это не взаимозаменяемо почему-то. Для каждого диапазона проверять какие функции подходят для этого.

Отредактировано AZJIO (20.11.2022 12:01:34)

0

3

Может пригодится? Ссылка

0

4

Обновление
Некоторые настройки в ini
Добавлены настройки шрифта и фона, удаление пробелов в конце строк, вставка даты

https://www.upload.ee/files/14699733/My … ci.7z.html

Отредактировано AZJIO (27.11.2022 04:32:54)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » My_Notepad_Sci