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;
Автор*: Темиргалеев Е.Э.