DevSelectors — переключатели вариантов в исходном коде

Краткая документация и патч для модуля DevSelectors. Информация с форума: http://forum.oberoncore.ru/viewtopic.php?f=1&t=435

Описание

Селекторы — специальные отображения, размещаемые в тексте. Они позволяют вводить в текстовые документы (в том числе исходный код) различные варианты:

selector = "[" name {"|" variant} "]".

Здесь »[», «|» и »]» обозначают левый, средний и правый селекторы соответственно.

Селекторы позволяют легко переключаться между вариантами: щелкаем по «|» перед нужным вариантом, остальные прячутся, причем сразу во всех селекторах с тем же именем. Щелчок по »[» или »]» раскрывает селектор, показывая все варианты.

Заметьте (если нужно сохранить после смены варианта), что операции с селекторами не делают документ изменённым («грязным»).

Для вставки селекторов в текст можно использовать следующие команды меню:

"Вставить левый"	"*F5"	"DevSelectors.DepositLeft; StdCmds.PasteView"	  "StdCmds.PasteViewGuard"
"Вставить средний"	"*F6"	"DevSelectors.DepositMiddle; StdCmds.PasteView"	"StdCmds.PasteViewGuard"
"Вставить правый"	"*F7"	"DevSelectors.DepositRight; StdCmds.PasteView"	"StdCmds.PasteViewGuard"

Селекторы в исходных текстах

Селекторы могут быть полезны в следующих случаях:

  • на промежуточных стадиях разработки, когда есть желание поэксперементировать с разными вариантами;
  • для вставки в код комментариев на разных языках;
  • при переводе заголовочных файлов с языка Си в качестве аналога условной компиляции.

Удобно где-нибудь в начале модуля сделать комментарии вида:

(* [feature|On|Off] *)
(* [comment|en|ru|fr] *)
(* [macrosId|value1|value2|value3] *)

Тогда легко переключать варианты. Кроме того компилятор понимает команды вида:

DevCompiler.CompileThis MyModule(feature:On, macrosId:value1)

Замечание: в команде имена селектора и вариантов должны быть строками. Например:

DevCompiler.CompileThis MyModule("BlackBox version":"1.5")

Патч

Ошибка возникает при сохранении документа если выполнялось копирование селектора.

Для исправления1) модуля DevSelectors нужно в исходную процедуру вставить

 >>>>>выделенный текст<<<<< 
PROCEDURE (selector: Selector) CopyFromSimpleView- (source: Views.View);
BEGIN
  (* selector.CopyFrom^(source); *)
  WITH source: Selector DO
    selector.position := source.position;
    IF source.leftHidden # NIL THEN
      selector.leftHidden := TextModels.CloneOf(source.leftHidden);
      selector.leftHidden.InsertCopy(0, source.leftHidden, 0, source.leftHidden.Length());
      >>>>>>Stores.Join(selector, selector.leftHidden)<<<<<<
    END;
    IF source.rightHidden # NIL THEN
      selector.rightHidden := TextModels.CloneOf(source.rightHidden);
      selector.rightHidden.InsertCopy(0, source.rightHidden, 0, source.rightHidden.Length());
      >>>>>Stores.Join(selector, selector.rightHidden)<<<<<<
    END
  END
END CopyFromSimpleView;

Автор*: Темиргалеев Е.Э.

1) Указанная поправка включена в bb16base-core как (B7).
© 2005-2019 OberonCore и коллектив авторов.