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/