Ada_Ru форум

Обсуждение языка Ада

Scintilla

Оставить новое сообщение

Сообщения

Maxim Reznik
Scintilla
2006-08-07 09:33:22

[ Attachment content not displayed ]

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

 

Классная штука эта Scintilla. Это такой компонент для разработки IDE и редакторов. Я тут наваял когда-то биндинг к нему, а на выходных на GtkAda обернул его в такой себе небольшой редактор.

 

А можно подробнее? Я бы хотел, в некотором времени, сделать редактор для FCL (fuzzy control language), это - для таких вещей? Компилятор-то у меня давно готов, а вот редактор писать лень. Красить текст она умеет? Строчки идентифицирует, когда удаляешь строку, а потом жмешь к-следующей-ошибке, и... в-молоко?

 

Хочу похвастаться. Скриншот в аттаче.

 

Можно попробовать версию под винду:

http://www.ten15.org/~maxr/ide.rar

Чтоб запустить нужен GTK для виндовс. Я юзаю от GAIM, но подойдет и тот что идет с GtkAda.

 

А зачем он нужен, если widget - только один, ну может, два?

 

Лицензия?

On Mon, Aug 07, 2006 at 07:06:00PM -0000, kazakov1961 wrote:

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

 

Классная штука эта Scintilla. Это такой компонент для разработки IDE и редакторов. Я тут наваял когда-то биндинг к нему, а на выходных на GtkAda обернул его в такой себе небольшой редактор.

 

А можно подробнее? Я бы хотел, в некотором времени, сделать редактор для FCL (fuzzy control language), это - для таких вещей? Компилятор-то у меня давно готов, а вот редактор писать лень. Красить текст она умеет? Строчки идентифицирует, когда удаляешь строку, а потом жмешь к-следующей-ошибке, и... в-молоко?

 

 

Про scintill-у:

Ссылки http://www.scintilla.org/ и русская страничка

http://scite.ruteam.ru/category/scintilla

 

Если FCL это текстовый файл, то - да. Красить тескт умеет, для этого ей нужен Styler, есть много готовых для разных языков в том числе и для Ады. Для своего языка можно написать Styler или на C++ или на Аде. В последнем случае будешь получать уведомления с регионом который надо раскрасить, дальше сам читаешь из Scintilla текст и указываешь какой кусок имеет какой цвет. С indent такая же песьня, ловишь

перевод строки и вызываешь Set_Line_Indentation. Умеет Folding,

тоже нужно ей указывать для каждой строки уровень вложенности,

появляется на полях плюсик и можно схлопнуть кусок кода

(для Ады я пока сделал indent простой - как у пердыдущей строки,

а фолдинга нет вообще). "К следующей ошибке" надо писать, есть

только Set_Current_Pos.

 

 

Хочу похвастаться. Скриншот в аттаче.

 

Можно попробовать версию под винду:

http://www.ten15.org/~maxr/ide.rar

Чтоб запустить нужен GTK для виндовс. Я юзаю от GAIM, но подойдет и тот что идет с GtkAda.

 

А зачем он нужен, если widget - только один, ну может, два?

Не понял вопрос, кто он? IDE? Скриншот? GTK?

 

 

Лицензия?

 

BSD

 

PS О том, что пойдет с GTK под Windows от GtkAda-2.4.0 я погорячился. Не идет, ибо глюкавый. Нужен gtk-runtime-2.6.10-rev-a.exe с

http://gaim.sourceforge.net/win32/index.php или другой, но не глючный :)

Ошибку с Paste нашел. Нужно было немного по другому собрать Scintilla под виндой.

 

--

Maxim Reznik

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

 

Про scintill-у:

Ссылки http://www.scintilla.org/ и русская страничка

http://scite.ruteam.ru/category/scintilla

 

Гляну.

Если FCL это текстовый файл, то - да.

 

Текстовый.

 

Красить тескт умеет, для этого ей

нужен Styler, есть много готовых для разных языков в том числе и для Ады. Для своего языка можно написать Styler или на C++ или на Аде. В последнем случае будешь получать уведомления с регионом который надо раскрасить, дальше сам читаешь из Scintilla текст и указываешь какой кусок имеет какой цвет. С indent такая же песьня, ловишь

перевод строки и вызываешь Set_Line_Indentation.

 

Более гнусной мерзости, чем auto indent, в редакторах я еще не видел, но это так, к слову.

 

Умеет Folding,

тоже нужно ей указывать для каждой строки уровень вложенности,

появляется на полях плюсик и можно схлопнуть кусок кода

(для Ады я пока сделал indent простой - как у пердыдущей строки, а фолдинга нет вообще). "К следующей ошибке" надо писать, есть

только Set_Current_Pos.

 

Ну прыгнуть-подсветить - не проблема. Проблема - доступ к стеку Undo. Если в MS Develоping Studio удалить строку перед строкой, где была ошибка, или вставить несколько строк, а затем кликнуть в сообщение об этой ошибке, то Studio все-таки покажет правильную строку. А вот

AdaGIDE - нет.

 

Хочу похвастаться. Скриншот в аттаче.

 

Можно попробовать версию под винду:

http://www.ten15.org/~maxr/ide.rar

Чтоб запустить нужен GTK для виндовс. Я юзаю от GAIM, но подойдет и тот что идет с GtkAda.

 

А зачем он нужен, если widget - только один, ну может, два?

Не понял вопрос, кто он? IDE? Скриншот? GTK?

 

GAIM. Если это widget, то должен работать и без GAIM. Gtk_New, Show - готово.

 

PS О том, что пойдет с GTK под Windows от GtkAda-2.4.0 я погорячился. Не идет, ибо глюкавый. Нужен gtk-runtime-2.6.10-rev-a.exe с

http://gaim.sourceforge.net/win32/index.php или другой, но не глючный :)

 

А почему не GtkAda-2.8.0? Он отлично под 3.15p работает. И в Fedora я его из сырцов скомпилировал, тоже работает.

On Tue, Aug 08, 2006 at 04:58:56PM -0000, kazakov1961 wrote:

Более гнусной мерзости, чем auto indent, в редакторах я еще не видел, но это так, к слову.

 

 

Может не попадалась качественная реализация? Я так в Emacs привык очень. Авторы настолько уверены в ее работоспособности, что забиндили кнопку Tab на indent. Теперь в любом месте строки ее жмешь и строка становиться "на место". Хотя это все если следовать "стандартным" правилам выравнивания. Я бы сделал такую, но не соображу как.

 

 

Ну прыгнуть-подсветить - не проблема. Проблема - доступ к стеку Undo. Если в MS Develоping Studio удалить строку перед строкой, где была ошибка, или вставить несколько строк, а затем кликнуть в сообщение об этой ошибке, то Studio все-таки покажет правильную строку. А вот AdaGIDE - нет.

 

 

Ну можно получать оповещения об изменении текста и корректировать данные в своих структурах. А можно пойти другим путем: понаставить букмарков на каждую ошибку и прыгать по ним, Scintilla сама отследит их положение.

 

А зачем он нужен, если widget - только один, ну может, два?

Не понял вопрос, кто он? IDE? Скриншот? GTK?

 

GAIM. Если это widget, то должен работать и без GAIM. Gtk_New, Show - готово.

 

А ну так я Scintill-у под gtk собрал, по этому ей gtk и нужен.

Я gtk от GAIM-а беру, удобный самоинсталятор, проще таскать если

не нужен GtkAda, например на клиенскую машину. Сам GAIM не нужен

конечно. А Scintilla widget он не "top level", ему нужно Gtk_Window или что-то куда его ложить.

 

 

PS О том, что пойдет с GTK под Windows от GtkAda-2.4.0 я погорячился. Не идет, ибо глюкавый. Нужен gtk-runtime-2.6.10-rev-a.exe с

http://gaim.sourceforge.net/win32/index.php или другой, но не глючный :)

 

А почему не GtkAda-2.8.0? Он отлично под 3.15p работает. И в Fedora я его из сырцов скомпилировал, тоже работает.

 

 

Gtk-2.8 под Windows 9x не работает. Как-то жалко терять лишнюю

платформу, пусть и несколько устаревшую. Думаю скомпилять под 2.8 проблем не составит. Да и обратная совместимость должна быть,

можно попробовать пустить на DLL-ках от 2.8 текущую версию.

Вот у меня в Gentoo Linux стоит GtkAda-2.4, а gtk+-2.8.19

и все нормально.

 

--

Maxim Reznik

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

 

Может не попадалась качественная реализация? Я так в Emacs привык очень. Авторы настолько уверены в ее работоспособности, что забиндили кнопку Tab на indent. Теперь в любом месте строки ее жмешь и строка становиться "на место". Хотя это все если следовать "стандартным" правилам выравнивания. Я бы сделал такую, но не соображу как.

 

Правила должны быть настраиваемыми. Кроме того, надо сканировать текст вверх. Это - непросто, и для parser-а, и для сопоставителя образцов. Первый вариант вообще не-очень, т.к. ненастраиваемый. Второй, можно попробовать, но многие сопоставители только вперед могут, а регулярные выражения слишком слабы, вложенность не тянут. Но, вообще, лучше

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

 

Ну прыгнуть-подсветить - не проблема. Проблема - доступ к стеку Undo. Если в MS Develоping Studio удалить строку перед строкой, где была ошибка, или вставить несколько строк, а затем кликнуть в сообщение об этой ошибке, то Studio все-таки покажет правильную строку. А вот AdaGIDE - нет.

 

Ну можно получать оповещения об изменении текста и корректировать данные в своих структурах. А можно пойти другим путем: понаставить букмарков на каждую ошибку и прыгать по ним, Scintilla сама отследит их положение.

 

Я это и имел ввиду. Если он закладки правильно обрабатывает, конечно. Нужно, чтобы закладка на сегмент текста ставилась. Хотя, это можно сэмулировать парой закладок - начало-конец. Если одна пропала, то вторую - выбрасывать.

 

А Scintilla widget он не "top level", ему нужно Gtk_Window

или что-то куда его ложить.

 

Хорошо.

 

Gtk-2.8 под Windows 9x не работает.

 

Ага, MS-DOS не любит, значит. Вообще, странно, чего ему там может не хватать. Тот-же Win32, в пару вызовов NULL совать нельзя, где в XP - можно. Еще для device context есть несколько функций, но они

эмулируются, более-менее. С другой стороны, на актуальную машину (ГГц) Windows 95 поставить - это битва при пирамидах...

On Wed, Aug 09, 2006 at 10:09:09AM -0000, kazakov1961 wrote:

Правила должны быть настраиваемыми. Кроме того, надо сканировать текст

выключить autoindent (если он будет) будет просто.

 

вверх. Это - непросто, и для parser-а, и для сопоставителя образцов. Первый вариант вообще не-очень, т.к. ненастраиваемый. Второй, можно попробовать, но многие сопоставители только вперед могут, а регулярные выражения слишком слабы, вложенность не тянут. Но, вообще, лучше держать дерево разбра программы и обновлять его асинхронно из другой задачи. Вопрос только, зачем весь этот бред.

 

 

Ну иметь дерево разбора было бы классно, там уже и до семантики рукой подать :-) А это уже не только indent & folding, а еще и умное

autocompletion, прыганье к декларации имени, calltips-ы для параметров функции, списки элементов структур и пр. современные штучки. Вот я только не уверен, что какой-нибудь ayacc можно научить нормально

обрабатывать ошибки с непарными BEGIN ... END. Или можно?

Может проще сделать какой-то предварительный анализатор, который

будет только закрывать пропущенные END-ы, подсчитывая вложенные

структуры и реализуя indent & folding. Он будет отдавать

откорректированный тект на анализ yacc который уже будет строить

полное AST дерево.

 

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

коментарии, выделять ключевые слова и их последовательности - будет сложно и запутанно IMHO.

 

данные в своих структурах. А можно пойти другим путем: понаставить букмарков на каждую ошибку и прыгать по ним, Scintilla сама отследит их положение.

 

Я это и имел ввиду. Если он закладки правильно обрабатывает, конечно.

 

Попробовал как работают закладки при редактировании текста: двигаются вместе с текстом если добавлять/убирать текст до закладки. Если

грохнуть фрагмент с закладкой, закладка переезжает на первую строку перед удаленным фрагментом. Вполне разумное поведение.

 

Хорошо.

 

Gtk-2.8 под Windows 9x не работает.

 

Ага, MS-DOS не любит, значит. Вообще, странно, чего ему там может не хватать. Тот-же Win32, в пару вызовов NULL совать нельзя, где в XP - можно. Еще для device context есть несколько функций, но они

Там GTK пересело на некую Cairo - библиотеку отрисовки 2D графики. Ее бакенд под win32 использует какие-то функции из более новой винды. Они решили не марочиться в Win 9x. Тем более что MS объявило о

перкращении ее поддержки.

 

эмулируются, более-менее. С другой стороны, на актуальную машину (ГГц) Windows 95 поставить - это битва при пирамидах...

 

 

Может я отстал от жизни, но IMHO "у нас" еще старые машинки с Win 9x используются.

 

--

Maxim Reznik

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

 

On Wed, Aug 09, 2006 at 10:09:09AM -0000, kazakov1961 wrote:

Правила должны быть настраиваемыми. Кроме того, надо сканировать

текст

выключить autoindent (если он будет) будет просто.

 

вверх. Это - непросто, и для parser-а, и для сопоставителя

образцов.

Первый вариант вообще не-очень, т.к. ненастраиваемый. Второй,

можно

попробовать, но многие сопоставители только вперед могут, а

регулярные

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

другой

задачи. Вопрос только, зачем весь этот бред.

 

Ну иметь дерево разбора было бы классно, там уже и до семантики

рукой

подать :-) А это уже не только indent & folding, а еще и умное

autocompletion, прыганье к декларации имени, calltips-ы для

параметров

функции, списки элементов структур и пр. современные штучки. Вот я только не уверен, что какой-нибудь ayacc можно научить нормально обрабатывать ошибки с непарными BEGIN ... END. Или можно?

 

Я пользую простой рекурсивный спуск для всего, кроме выражений. А выражения разбираю табличным parser-ом. Не люблю грамматику! (:-)) Если интересно, весь parser отписан в Аде:

 

http://www.dmitry-kazakov.de/ada/components.htm#Parsers_etc

 

Может проще сделать какой-то предварительный анализатор,

 

Без разницы, выход parser-а уже эквивалентен дереву. В том смысле, что дерево можно сгенерировать, если хочется, а можно программу

синтерпретировать, или текст раскрасить. Дальше, точно, уже только семантика.

 

который

будет только закрывать пропущенные END-ы, подсчитывая вложенные

структуры и реализуя indent & folding. Он будет отдавать

откорректированный тект на анализ yacc который уже будет строить полное AST дерево.

 

Не проблема. END в рекурсивном спуске закрывается тупым сворачиванием стека. Скобки в выражениях - тем же способом. На самом деле, BEGIN, END - те-же скобки. Проблема в интеллигентном сворачивании. Но для нормальных языков типа Ады это - просто, т.к. скобки все разные и разграничителей полно. Для С++ - да, покувыркаться.

 

Все-таки есть сомнение, не понадобится ли сканирование назад, а это очень гадко. Кстати, MS Word и Front Page сканируют только вперед, как я догадываюсь, от того, и тормозят страшно.

 

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

коментарии, выделять ключевые слова и их последовательности - будет сложно и запутанно IMHO.

 

Согласен. Обычно, проще написать сопоставитель коментариев,

литералов, идентификаторов руками, чем возиться с образцами. Я с ними много баловался, даже свой язык типа СНОБОЛА сделал, но потом бросил - тупик это.

 

Попробовал как работают закладки при редактировании текста:

двигаются

вместе с текстом если добавлять/убирать текст до закладки. Если

грохнуть фрагмент с закладкой, закладка переезжает на первую строку перед удаленным фрагментом. Вполне разумное поведение.

 

Это плохо. Он должен-бы ее удалять.

Может я отстал от жизни, но IMHO "у нас" еще старые машинки с Win 9x используются.

 

У нас парк полностью меняется примерно за в пять лет. То заказчикам USB понадобится, то PGM. Дома я 95 держу на съёмном диске для пары старых кривых програм, которые напрямую в порты лезут. А так, что в Starcon-2 melee резаться? (:-))

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти