Или, например, ставить комментарии:
Код:
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 - заготовка процедуры.