Модераторы: Vitalik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Scintilla или как жить дальше? обсуждение перспектив 
:(
    Опции темы
Sep.
Дата 28.7.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 22.7.2004

Репутация: 6
Всего: 6



Понимаю что тема немного оффтопного характера, но все таки спрашиваю здесь, потому как здесь знающие люди тусуются.

После разборок с очередным багом кодфолдинга в SinMix я решил все же посмотреть поближе на основного конкурента: Scintilla.
Сайт: http://www.scintilla.org/
Русские сборки SciTE с бонусами: http://scite.ruteam.ru
Обертка для дельфи: http://delphisci.sourceforge.net/ 
Есть официальный хелп по параметрам движка, доступ ко всем ним осуществляется в обертке через одноменные методы. Параметров и возможностей действительно ОЧЕНЬ много. Из основных плюсов:
* поддержка Unicode напрямую
* paint можно делать в два прохода, поэтому например край у буквы V написанной италиком в конце диапазона не будет урезаться.
* можно одновременно использовать различные шрифты разных размеров. И даже не моноширинные вместе с моноширинными.
* стабильный кодфолдинг =), можно копировать свернутые строки
* есть простой способ разделить зону редактирования, без лишнего использования памяти. Один и тот же текст можно будет редактировать в разных местах в двух разных окнах. (Типа как в ворде: Окно->Разделить)
* можно подчеркивать определенный участок волнистой линией =)
* поддержка dwell'ов (когда мышку задерживаешь над словом, появляется хинт)
* раскраска синтаксиса зашита во внешнюю SciLexer.dll Это позволяет очень быстро красить, и не ограничивает сложность правил для раскраски. (Нормально красит heredoc в php и т.д.) Но из этого также вытекают и свои минусы.

Минусы:
* IndentGuides не рассчитываются, а просто выводятся слева через каждые Tab пробелов
* нет 10 закладок, есть 32 типа маркеров по которым можно перемещаться только вперед и назад
* поддержка AutoComplete и Calltip рудиментарна(листбокс и хинт) и не идет ни в какое сравнение с AutoCompletitionProposal
* Т.к. раскраска синтаксиса зашита в движок, то можно менять только цвета уже определенных стилей (Variable, text, string  и т.д.) и набор ключевых слов. При этом можно сохранить в файл только все цвета и ключевые слова для ВСЕХ языков. Для какого либо одного нельзя. Это дает нехилое торможение при старте. Формат для сохраняемого файла пытались сделать совместимым с файлами .properties из SciTE. Но в SciTE есть не один а много файлов .properties для каждого языка и кроме ключевых слов и цветов там также могут быть указаны: 
Код
filter.pascal=Pascal (dpr dpk pas dfm inc)|*.dpr;*.dpk;*.pas;*.dfm;*.inc;*.pp|
file.patterns.pascal=*.dpr;*.dpk;*.pas;*.dfm;*.inc;*.pp
lexer.$(file.patterns.pascal)=pascal
statement.indent.$(file.patterns.pascal)=5 case catch class default do else for then \
private protected public struct try union while type
statement.end.$(file.patterns.pascal)=10 ;
statement.lookback.$(file.patterns.pascal)=20
block.start.$(file.patterns.pascal)=10 begin
block.end.$(file.patterns.pascal)=10 end 
# compile
command.compile.*.pas=fpc "$(FilePath)"
# normal execute
if PLAT_WIN
    command.go.*.pas="$(FileName).exe"
    command.go.subsystem.*.pas=2
if PLAT_GTK
    command.go.*.pas="kvt -e $(FileName)"

# build
command.build.*.pas=fpc -B "$(FilePath)"
command.build.subsystem.*.pas=1

command.name.0.*.pas=Debug Compile
command.0.*.pas=fpc -g "$(FilePath)"
command.name.1.*.pas=Debug Build
command.1.*.pas=fpc -g -B "$(FilePath)"
command.name.2.*.pas=GDB
if PLAT_WIN
    command.2.*.pas=gdbpasw "$(FileName)"
if PLAT_GTK
    command.2.*.pas=gdb "$(FileName)"
    command.name.3.*.pas=DDD
    command.3.*.pas=ddd "$(FileName)"
calltip.perl.parameters.start= (
calltip.perl.parameters.separators=,
autocomplete.perl.start.characters=.
 Т.е. много другой полезной информации для редактора о файле. При сохранении же методами обертки все содержимое файла уничтожается, так что можно сказать этот метод неприменим.
Оценить возможности delphisci можно в примере.
sciTest.rar (520кб)
 В архиве исходники и сама тестовая болванка. Можно открыть файл, поменять лексер, вызвать стандартный диалог настроек обертки. Приложен последний SciLexer.dll v1.70

Поэтому я вижу 2 пути для развития своего проекта:
1. Использовать scintilla
* закладки и переход по ним можно легко сделать самому.
* портирование AutoCompletitonProposal под delphisci (вроде как решаемая задача, поскольку SearchReplaceDialog там уже портирован из SynEdit'a)
* написание дизайнера подсветки, который будет совместим с форматом .properties и не будет уничтожать в них дополнительную информацию и коментарии. Вроде как тоже решаемо. И уже есть пара идей как это можно сделать. Должен сохранять каждый язык в свой файл. Соответсвенно при старте программы можно будет загружать только информацию для нужного языка. 
* Это также выливается в написание парсера для файлов .properties, т.к. там можно использовать переменные :
Код

font.base=tahoma
style.php.32=$(font.base)

* неизвестно насколько хороши правила расцветки зашитые в движок. может когда нибудь меня что то там не устроит, а поменять правило уже возможности нет, только цвета. хотя пока проверял на php ошибок не выявил.

2. НЕ использовать scintilla
* помочь/дождаться версии UniHighlighter для UniSynEdit
* Виталик говорит что есть еще порох в пороховницах. Для раскраски сложных правил есть возможность добавить:
Правила-ссылки, рэгэекспы, возможность токена задавать только закрывающим тегом, улучшение возможностей Set' и KeyWords' (добавление им некоторых свойств диапазона), сам открывающий тег потом еще разбивать на токены.
* вновь начинается дебаг и поиск утечек памяти и мелких багов , недоработок что более менее поправлены в SynMix
* теряется кодфолдинг. Соответственно можно либо опять портировать вариант из мистикса. (Он был сделан поверх синедита видимо так чтобы как можно меньше затрагивать оригинальный код. Идея такова что свернутая строка вырезается из основного текста и сохраняется в массиве. Массив содержит все места возможного сворачивания и переменные: FromLine, ToLine, Level, RealLevel, LinesCollapsed, ParentCollapsed, Collapsed, CollapsedBy и сам свернутый текст CollapsedLines. То есть система довольно сложна и есть множество багов)
Либо реализовать идею кодфолдинга синтиллы. А она там намного проще: есть массив где для каждой строки содержится вычисленное движком число индента - level. А так же для каждой строки есть параметр visible. Вот в принципе и все =)
* Есть множество веток и патчей для SynEdit'a но нет определенной политики партии. Как то разрозненно идет продвижение.

PS Пока все же склоняюсь в сторону синтиллы. Она регулярно обновляется и разработка поддерживается такими компаниями как activestate.com и т.д. Все же синедит находится в позиции догоняющего, и там реализовываются те фишки что уже есть в синтилле. Мне кажется лучше переносить ACP на хороший движок , чем развивать движок под хороший ACP.

Сам нахожусь в глубоких задумках... 
кому есть что сказать - говорите   

Это сообщение отредактировал(а) Sep. - 28.7.2006, 18:43
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Quadr0
Дата 28.7.2006, 19:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 11:48
  Вверх
navykeds
Дата 28.7.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.3.2006

Репутация: 3
Всего: 3



А есть ли там пред. просмотр перед печатью? Открытые исходники на Delphi? Вот-вот.

Цитата(Sep. @  28.7.2006,  18:30 Найти цитируемый пост)
* можно одновременно использовать различные шрифты разных размеров. И даже не моноширинные вместе с моноширинными.


Сомнительное преимущество. Plain-text редактор не для этого предназначен.

По тексту. Сейчас два основных препятствия для использования SynEdit это:
— поддержка Юникода. Решается переходом на UniSynEdit и адаптацией под него SynUniHighlighter.
— CodeFolding. В SynMix, как мне кажется, не самое удачное решение.

То есть, все опять вытекает в создание собственного пакета SynEdit, который уже будет включать и Юникод-версию компонентов и поддержку CodeFolding. А вот после этого, я бы уже не стал утверждать, что SynEdit — догоняющий. 

P.S: это теория, на практике Quadr0 (сам говорил smile) уже занимается адаптацией хайлайтера под UniSynEdit, с CodeFolding могут возникнуть сложности, ибо не особо понятно, кто будет им заниматься.  

Это сообщение отредактировал(а) navykeds - 28.7.2006, 20:09
PM MAIL   Вверх
WhiteWind
Дата 29.7.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.7.2006

Репутация: нет
Всего: нет



Насколько я понял, у scintilla нет опции Scroll past EOL, а это для меня главный критерий при выборе редактора.
Также, насколько я понял, я (как пользователь) не смогу создать подсветку для какого-нибудь другого языка.
В общем, я против scintilla. 
PM   Вверх
Sep.
Дата 31.7.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 22.7.2004

Репутация: 6
Всего: 6



Что ж, раз оппонентов от стана сцинтиллы не нашлось, тогда я сам немного поддержу ее =)

1. Поговорив с Виталиком появилась идея написать лексер который будет те же HGL файлы читать. Тогда бы UniHighlighter был бы действительно UNI !=)
2. Тебе маркеры не нравятся? Так их наоборот можно настраивать намного шире чем в синедите. Там больше типов иконок, кроме того можно использовать вообще свои иконки для гуттера. А если ты про любимый всеми нами значек [...] =) то уже есть решение и выглядит получше.
3. AutoComplete есть, а AutoCOrrect легко сделать по onKeyDown
4. Можно самому сделать через маркеры. И преимуществом будет то что маркеры там нормально фолдятся. А в синедите закладки не сворачиваются =(.
Цитата

Енто не есть хорошо. ИМХО, что будет, когда она перестанет поддерживаться? 

а что будет когда вы с Виталиком перестанете поддерживать? =)

Цитата

А есть ли там пред. просмотр перед печатью? Открытые исходники на Delphi? Вот-вот.

печать есть, экспорты в htm и т.д. есть. Все равно я например из SynPlus ничего не печатал. Уверенее чуствую себя если сохранить как rtf и печатать из ворда.
Цитата

А вот после этого, я бы уже не стал утверждать, что SynEdit — догоняющий. 

по моему там останется еще много чего доделывать. К тому же за это время я в delphisci ACP могу успеть перенести =) 
Цитата

с CodeFolding могут возникнуть сложности, ибо не особо понятно, кто будет им заниматься.  

вот именно =( Я кинул ссылку на наш пакет на sf.net странице SynEdit. Может кто присоединится да поможет.
Цитата

Насколько я понял, у scintilla нет опции Scroll past EOL,

Это да. Автор сказал что не станет этим заниматься. Но он не один там проект ведет. К тому же я сам эту фишку люблю, и заморочился бы даже с С++ ради этого.

Еще пара плюсов сцинтиллы: 
* Есть довольно плавный зум, в довольно больших пределах
* Есть еще 2 свободные колонки на гуттере под маркеры. Легко реализовать фишку из BDS2006 где цветом отображается редактировалась ли строка и сохранена ли она.

Синедит конечно стабилен. Пока основные баги связаны лишь с кодфолдингом. Трудности с копированием и стиранем свернутых строк если они были в выделении. Undo не распространяется на фолдинг. Потеря свернутых регионов если просто стирать текст вокруг них. GetUncollapsedStrings иногда возвращает nil. Закладки не сворачиваются. 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Seldon
Дата 20.8.2006, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 23.12.2005
Где: Minsk

Репутация: 2
Всего: 2



слегка не в тему, но может поможет
гляньте вот это: http://www.delphikingdom.com/zip/mpsyntaxmemo.zip
чувак в одиночку (!) написал аналог SynEdit'a с поддержкой кодфолдинга, настраиваемых пожсветок, не-моноширинных шрифтов...
конечно не готовое решение, надо обрабатывать напильником, но может пригодится.
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
navykeds
Дата 20.8.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.3.2006

Репутация: 3
Всего: 3



Интересно. Автор — молодец. Но для серьезного использования не годится. Да и заброшен уже проект, кажется.
PM MAIL   Вверх
Sep.
Дата 1.11.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 22.7.2004

Репутация: 6
Всего: 6



Похоже найдена панацея - и уникод есть, и настройка подсветок есть:
http://www.econtrol.ru/syntedit_e.html
он используется в phpExpertEditor , с сайта можно скачать демку поглядеть возможности. Пока конкретней не могу сказать, поглядел только демку, но то что увидел очень понравилось. Качаю компонент... =)
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Seldon
Дата 2.11.2006, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 23.12.2005
Где: Minsk

Репутация: 2
Всего: 2



я вот полазив по сайту не понял: а эта дрянь бесплатная? open source?
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
Dende-Soft
Дата 4.1.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 10.3.2007

Репутация: нет
Всего: нет



Цитата

я вот полазив по сайту не понял: а эта дрянь бесплатная? open source? 

Не, без бабок пишет на текстовом поле, что версия не зарегистрированная.
Что касается Скинтилы. Ну, Во первых SynEdit создан на основе Скинтилы (я думаю у авторов хватит смелости это не отрицать). Однако мне все еще не понятно. Как реализовать подсветку скажем 3-4 нужных мне языков?
PM MAIL WWW ICQ   Вверх
navykeds
Дата 5.1.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.3.2006

Репутация: 3
Всего: 3



Цитата(Dende-Soft @ 4.1.2008,  14:16)
Ну, Во первых SynEdit создан на основе Скинтилы (я думаю у авторов хватит смелости это не отрицать).

Какой фантастический бред.

SynEdit has been started as an attempt to continue the no longer maintained
sources of the mwEdit project.
...
The mwEdit project was started in 1998 by Martin Waldenburg, aim was to produce
a syntax highlighting editor component for an Open Source IDE.  In the 15 months
that mwEdit was developped in public Martin was increasingly dissatisfied with
the direction the development of mwEdit took, so he finally requested that his
name and initials had to be removed from the project.


Старт Scintilla - 1998 г.
Старт mwEdit - 1998 г.

Не нужно быть смелым, чтобы:
1. Различать языки, на которых написана Scintilla и mwEdit (SynEdit), прежде чем употреблять словосочетание "на основе".
2. Понимать простые вещи и не говорить о том, чего не знаешь.

Это сообщение отредактировал(а) navykeds - 5.1.2008, 22:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




[ Время генерации скрипта: 0.1391 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.