Селекторы — специальные отображения, размещаемые в тексте. Они позволяют вводить в текстовые документы (в том числе исходный код) различные варианты:
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")
Ошибка возникает при сохранении документа если выполнялось копирование селектора.
Для исправления модуля 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;
Автор*: Темиргалеев Е.Э.
|