OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 16 Апрель, 2024 13:42

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Выделенный текст - в кавычки
СообщениеДобавлено: Четверг, 16 Апрель, 2009 17:07 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Очередной пример, как просто в ББ добавляются такие функции. Понадобилось брать в кавычки много слов (двойной клик - выделил слово, Ctrl+F1 - в кавычки).
Код:
MODULE WorkQuote;

   IMPORT
      TextModels, TextControllers, Models, Stores;

   PROCEDURE Quote (text: TextModels.Model; beg, end: INTEGER);
      VAR   script: Stores.Operation; wr: TextModels.Writer;
   BEGIN
      wr := text.NewWriter(NIL);
      Models.BeginScript(text, "#Work:Quoting", script);
      wr.SetPos(end); wr.WriteChar('"');
      wr.SetPos(beg); wr.WriteChar('"');
      Models.EndScript(text, script)
   END Quote;
   
   PROCEDURE Do*;
   (* guard: TextCmds.SelectionGuard *)
      VAR   c: TextControllers.Controller; beg, end: INTEGER;
   BEGIN
      c := TextControllers.Focus();
      IF (c # NIL) & c.HasSelection() THEN
         c.GetSelection(beg, end);
         Quote(c.view.ThisModel(), beg, end)
      END
   END Do;

END WorkQuote.
Код:
MENU "Wo&rk"
...
   "Quote"   "^F1"   "WorkQuote.Do"   "StdCmds.SelectionGuard"
END


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выделенный текст - в кавычки
СообщениеДобавлено: Четверг, 16 Апрель, 2009 17:11 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Или, например, ставить комментарии:
Код:
MODULE SternSource;

(**
   project   = "Stern Collection"
   subproject   = "Source code decoration
   organization   = ""
   contributors   = ""
   version   = "System/Rsrc/About"
   copyright   = "System/Rsrc/About"
   license   = "Docu/BB-License"
   purpose   = ""
   changes   = ""
   issues   = ""

**)

   IMPORT
      Stores, Dialog, SternDates, StdCmds, Models, TextMappers, TextModels, TextControllers, TextCmds;

   VAR
      dialog*: RECORD
         name*: ARRAY 100 OF CHAR
      END;

   (*23.05.2008 Сервисные процедуры для тегирования выделения*)
   PROCEDURE Write(t: TextModels.Model; beg: INTEGER; IN s: ARRAY OF CHAR);
      VAR w: TextModels.Writer; i: INTEGER;
   BEGIN
      w := t.NewWriter(NIL); w.SetPos(beg);
      FOR i := 0 TO LEN(s$)-1 DO w.WriteChar(s[i]); END;
   END Write;

   PROCEDURE TagThis(IN start, end: ARRAY OF CHAR);
      VAR t: TextModels.Model; w: TextModels.Writer; c: TextControllers.Controller; selBeg, selEnd: INTEGER; s: Stores.Operation;
   BEGIN
      c := TextControllers.Focus();
      t := c.text;
      IF c.HasSelection() THEN
         c.GetSelection(selBeg, selEnd);
         Models.BeginScript(t, "SternSource.Comment", s);
         Write(t, selBeg, start);
         Write(t, selEnd+LEN(start$), end);
         c.SetSelection(selBeg, selEnd+LEN(start$)+LEN(end$)); StdCmds.Italic; StdCmds.Size(10);
         Models.EndScript(t, s);
      END;
   END TagThis;

   PROCEDURE Comment*;
   BEGIN
      TagThis('(* ', ' *)');
   END Comment;

   PROCEDURE CommentDate*;
      VAR datetime: ARRAY 50 OF CHAR;
   BEGIN
      SternDates.DateTimeToString(datetime);
      TagThis('(* '+datetime+' ', ' *)');
   END CommentDate;

   PROCEDURE CommentDev*;
      VAR datetime: ARRAY 50 OF CHAR; devname: ARRAY 50 OF CHAR;
   BEGIN
      SternDates.DateTimeToString(datetime);
      Dialog.MapString('#Stern:Developer', devname);
      IF devname = 'Developer' THEN devname := '' END;
      TagThis('(* '+datetime+' '+devname+' ', ' *)');
   END CommentDev;

   PROCEDURE LogString*;
      VAR t: TextModels.Model; w: TextModels.Writer; c: TextControllers.Controller; selBeg, selEnd: INTEGER; s: Stores.Operation;
   BEGIN
      c := TextControllers.Focus();
      t := c.text;
      c.GetSelection(selBeg, selEnd);
      Models.BeginScript(t, "SternCmds.Log", s);
      IF selBeg = selEnd THEN
         Write(t, c.CaretPos(), "Log.String('Модуль: '); Log.Ln")
      ELSE
         Write(t, selEnd, "'); Log.Ln;");
         Write(t, selBeg, "Log.String('");
      END;
      Models.EndScript(t, s);
   END LogString;
   
   PROCEDURE InsertOpenSourceHeader*;
      VAR t: TextModels.Model; r: TextModels.Reader; c: TextControllers.Controller; b, selBeg, selEnd: INTEGER; s: Stores.Operation;
   BEGIN
      c := TextControllers.Focus(); t := c.text; r := t.NewReader(NIL);
      (*  Вставить после MODULE ...;  *)
      r.SetPos(0);
      REPEAT r.Read() UNTIL (r.char = ';') OR (r.eot); selBeg := r.Pos()+2;
      Models.BeginScript(t, "SternSource.OpenSourceHeader", s);
      Write(t, r.Pos(), 0DX+0DX+'(**'+0DX+09X+'project   = "Your Project"'+0DX+09X+'subproject   = "Subproject"'+0DX+09X+'organization   = ""'+0DX+09X+'contributors   = ""'+0DX+09X+'version   = "System/Rsrc/About"'+0DX+09X+'copyright   = "System/Rsrc/About"'+0DX+09X+'license   = "Docu/BB-License"'+0DX+09X+'purpose   = ""'+0DX+09X+'changes   = ""'+0DX+'   issues   = ""'+0DX+'**)'+0DX);
      TextCmds.find.find := '**)';
      TextCmds.FindFirst('');
      c.GetSelection(b, selEnd);
      c.SetSelection(selBeg, selEnd);
      StdCmds.Italic; StdCmds.Size(10);
      Models.EndScript(t, s);
   END InsertOpenSourceHeader;

   PROCEDURE InsertMenu*;
      VAR f: TextMappers.Formatter;
   BEGIN
      f.ConnectTo(TextControllers.Focus().text); f.SetPos(0);
      f.WriteString('MENU "Your menu"'); f.WriteLn;
      f.WriteString('END'); f.WriteLn;
   END InsertMenu;

   PROCEDURE InsertMenuItem*;
      VAR f: TextMappers.Formatter;
   BEGIN
      f.ConnectTo(TextControllers.Focus().text);
      f.SetPos(TextControllers.Focus().CaretPos());
      f.WriteTab; f.WriteString('"item name"');(*  item name *)
      f.WriteTab; f.WriteString('""'); (* hot key *)
      f.WriteTab; f.WriteString('"command"'); (* command *)
      f.WriteTab; f.WriteString('""'); (* guard *)
   END InsertMenuItem;

   PROCEDURE InsertProcedure*;
      VAR t: TextModels.Model; w: TextModels.Writer; c: TextControllers.Controller; selBeg, selEnd: INTEGER; s: Stores.Operation;
   BEGIN
      c := TextControllers.Focus();
      t := c.text;
      c.GetSelection(selBeg, selEnd);
      Models.BeginScript(t, "SternSource.InsertProcedure", s);
      Write(t, selEnd, ';'+0DX+'BEGIN'+0DX+'END ;');
      Write(t, selBeg, 'PROCEDURE ');
      Models.EndScript(t, s);
   END InsertProcedure;
   
END SternSource.


Для, собственно, комментирования, используются команды SternSource.Comment, SternSource.CommentDate (вставка даты и времени комментария), SternSource.CommentDev (вставка имени разработчика, поставившего комментарий).

Остальные команды:

SternSource.LogString - вставляет комбинацию для вывода строки в журнал.
SternSource.InsertOpenSourceHeader - вставляет open-source заголовок после MODULE.
SternSource.InsertMenu - заготовка MENU...END.
SternSource.InsertMenuItem - заготовка для пункта меню.
SternSource.InsertProcedure - заготовка процедуры.


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

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


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

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


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

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