OberonCore https://forum.oberoncore.ru/ |
|
Разворачивалка реализации для абстрактных процедур https://forum.oberoncore.ru/viewtopic.php?f=47&t=3364 |
Страница 1 из 1 |
Автор: | Иван Кузьмицкий [ Понедельник, 28 Март, 2011 18:03 ] |
Заголовок сообщения: | Разворачивалка реализации для абстрактных процедур |
Выделено: viewtopic.php?p=61969#p61969 Я бы не отказался попользоваться штукой, которая бы автоматом разворачивала абстрактные методы для наследника. Скажем, объявляешь отложенное действие: Action = POINTER TO RECORD (Services.Action). И вот тут сильно не помешает автоматическая генерация куска кода: Код: PROCEDURE (a: Action) Do;
BEGIN END Do; |
Автор: | Info21 [ Понедельник, 28 Март, 2011 18:27 ] |
Заголовок сообщения: | Re: Smart - всякие полезности, облегчающие кодинг в BlackBox |
Иван Кузьмицкий писал(а): Я бы не отказался попользоваться штукой, которая бы автоматом разворачивала абстрактные методы для наследника. Это да, только надо, чтобы они вставлялись так, чтобы компиляция не проходила.
|
Автор: | Илья Ермаков [ Понедельник, 28 Март, 2011 19:35 ] |
Заголовок сообщения: | Разворачивалка реализации для абстрактных процедур |
Коллеги просили в соседней ветке разворачиватель для ABSTRACT-процедур. модератор: "соседняя ветка" внесена сюда Пользуюсь вот таким. Автор - Павел Манюнин (мой бывший студент, ныне проходящий службу в в рядах военно-воздушных сил РФ ![]() Код: IMPORT TextControllers, TextModels, TextMappers; PROCEDURE MakeProcBody*; VAR c: TextControllers.Controller; beg, end: INTEGER; rd: TextModels.Reader; procname: ARRAY 64 OF CHAR; i, j: INTEGER; ch: CHAR; find: BOOLEAN; f: TextMappers.Formatter; BEGIN c := TextControllers.Focus(); IF c.HasSelection() THEN c.GetSelection(beg, end); rd := c.text.NewReader(NIL); i := beg; j := 0; rd.SetPos(beg); WHILE i < end DO rd.ReadChar(procname[j]); INC(j); INC(i) END; procname[j] := 0X; find := FALSE; i := end; rd.ReadChar(ch); WHILE ~( rd.eot OR (ch = 0DX) ) & ~( (ch = "(") OR (ch = ",") ) DO rd.ReadChar(ch) END; IF ch = "(" THEN rd.ReadChar(ch); WHILE (~(ch = 0DX) & ~(rd.eot)) & ~(ch = ")") DO rd.ReadChar(ch) END; IF ch # 0DX THEN rd.ReadChar(ch); WHILE (~(ch = 0DX) & ~(rd.eot)) & ~(ch = ",") DO rd.ReadChar(ch) END; END; END; IF ch = "," THEN beg := rd.Pos()-1; find := TRUE; END; IF find THEN rd.ReadChar(ch); WHILE ~rd.eot & ~(ch = 0DX) DO rd.ReadChar(ch); END; c.text.Delete(beg, rd.Pos()); f.ConnectTo(c.text); f.rider.SetPos(beg); f.rider.WriteChar(';'); f.rider.WriteChar(TextModels.line); f.rider.WriteChar(TextModels.tab); f.WriteString("BEGIN"); f.rider.WriteChar(TextModels.line); (* IF это функция THEN END; *) f.rider.WriteChar(TextModels.tab); f.WriteString("END "); f.WriteString(procname); f.rider.WriteChar(';'); f.rider.WriteChar(TextModels.line); END; END; END MakeProcBody; MakeProcBody вешается в меню. Как применять: скопировали себе в модуль реализации абстрактные декларации. Выделяем имя процедуры двойным кликом, даём команду, она разворачивается в реализацию. Надо бы избавиться от необходимости выделять, пусть просто курсор стоит на строке. |
Автор: | Info21 [ Понедельник, 28 Март, 2011 22:09 ] |
Заголовок сообщения: | Re: Разворачивалка реализации для абстрактных процедур |
Илья Ермаков писал(а): Коллеги просили в соседней ветке разворачиватель для ABSTRACT-процедур. Обязательно посмотрю, как найду время.Пользуюсь вот таким. Автор - Павел Манюнин (мой бывший студент, ныне проходящий службу в в рядах военно-воздушных сил РФ ![]() Кстати, как там Паша? |
Автор: | Илья Ермаков [ Понедельник, 28 Март, 2011 22:21 ] |
Заголовок сообщения: | Re: Разворачивалка реализации для абстрактных процедур |
Ничего, бодрячком, а интересного ничего нет ![]() |
Автор: | Александр Ильин [ Понедельник, 28 Март, 2011 22:36 ] |
Заголовок сообщения: | Re: Smart - всякие полезности, облегчающие кодинг в BlackBox |
Info21 писал(а): Это да, только надо, чтобы они вставлялись так, чтобы компиляция не проходила. Достаточно в тело генерируемой процедуры добавить нелегальный символ "@". Да или вообще любой печатный символ, кроме ";".
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |