Перевести можно то, что во время трансляции макроса разрешено в Символ("Модуль.ОВ.ОВ.член"). Для этого достаточно, чтобы:
- все ветки макроса покрывались в процессе перевода
- каждый кусок превращён либо в символ вида Модуль.ОВ...ЧленОВ, либо в ключевое слово, либо в
языково-нейтральную сущность (например, комментарий) - запоминалось соответствие между исходным текстом шаблона или иного файла и символов
Самое простое для шаблонов с подстановками
- шаблонный модуль можно сделать просто модулем, т.е. обозначения формальных параметров должны быть сами по себе валидными значениями параметров. Тогда этот модуль просто переводится. Точку перевода нужно вставить в механизм подстановки параметров. При этом, подставляемый кусок должен помечаться меткой начала и конца, чтобы обрезать заголовок модуля, полученный из шаблона. Либо, ещё проще, допускать только шаблонные модули.
- любые другие шаблоны можно тоже пытаться запихать в модуль и извлекать их оттуда по ключу, допустим, "дай тело процедуры Max из псевдо-модуль Математика.шм"
- синтезировать текст не с нуля, а из символов, например:
Код: Выделить всё
(* а - переменная, аргумент шаблона *) БСП(КС("если"),а,КС("суть"),Символ("Commans.Context"),...)