PureBasic - форум

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

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


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


My_Notepad_Sci

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

1

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

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

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

07.12.22 v0.1.7
Улучшен движок подсветки. Открытие больших файлов вызывает торможение, но в процессе ввода подсвечивается только изменяемое
Очистка подсветки при смене синтаксиса и восстановление подсветки при преобразование кодировки.
Галка напротив выбранного синтаксиса.

28.11.22 v0.1.6
Добавлена ком-строка для открытия файлов через контекстное меню проводника
Добавлено детектирование UTF-8 без BOM

Отредактировано AZJIO (14.12.2022 09:56:36)

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

Обновление
Кто не следил на кибер-форуме, обновил всвязи с новыми идеями.

Кстати, скачав исходник IDE, чтобы поизучать как там сделано удалось скомпилировать и даже сделать некоторые правки

Отредактировано AZJIO (14.12.2022 10:00:39)

0


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