[ 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 резаться? (:-))
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти