OberonCore https://forum.oberoncore.ru/ |
|
Выделенный текст - в кавычки https://forum.oberoncore.ru/viewtopic.php?f=47&t=1481 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Четверг, 16 Апрель, 2009 17:07 ] |
Заголовок сообщения: | Выделенный текст - в кавычки |
Очередной пример, как просто в ББ добавляются такие функции. Понадобилось брать в кавычки много слов (двойной клик - выделил слово, 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 |
Автор: | Иван Кузьмицкий [ Четверг, 16 Апрель, 2009 17:11 ] |
Заголовок сообщения: | Re: Выделенный текст - в кавычки |
Или, например, ставить комментарии: Код: 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 - заготовка процедуры. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |