OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 10:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 28 Март, 2011 18:03 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Выделено: viewtopic.php?p=61969#p61969

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

Скажем, объявляешь отложенное действие: Action = POINTER TO RECORD (Services.Action). И вот тут сильно не помешает автоматическая генерация куска кода:

Код:
PROCEDURE (a: Action) Do;
BEGIN
END Do;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 28 Март, 2011 18:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Кузьмицкий писал(а):
Я бы не отказался попользоваться штукой, которая бы автоматом разворачивала абстрактные методы для наследника.
Это да, только надо, чтобы они вставлялись так, чтобы компиляция не проходила.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 28 Март, 2011 19:35 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Коллеги просили в соседней ветке разворачиватель для 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 вешается в меню.

Как применять:
скопировали себе в модуль реализации абстрактные декларации. Выделяем имя процедуры двойным кликом, даём команду, она разворачивается в реализацию. Надо бы избавиться от необходимости выделять, пусть просто курсор стоит на строке.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 28 Март, 2011 22:09 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Коллеги просили в соседней ветке разворачиватель для ABSTRACT-процедур.

Пользуюсь вот таким.
Автор - Павел Манюнин (мой бывший студент, ныне проходящий службу в в рядах военно-воздушных сил РФ :)
Обязательно посмотрю, как найду время.

Кстати, как там Паша?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 28 Март, 2011 22:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ничего, бодрячком, а интересного ничего нет :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 28 Март, 2011 22:36 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Info21 писал(а):
Это да, только надо, чтобы они вставлялись так, чтобы компиляция не проходила.
Достаточно в тело генерируемой процедуры добавить нелегальный символ "@". Да или вообще любой печатный символ, кроме ";".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB