Генератор текста на основе изменяемого в Runtime шаблона
От: stomsky Россия  
Дата: 29.07.19 08:34
Оценка:
Добрый день!

Есть такая задача:
Нужен генератор текста (в памяти или сразу в текстовый файл — не важно), формирующий текст на основе шаблонов. Шаблоны представляют собой текстовые файлы со специфической разметкой типа T4 или Razor. Фишка в том, что в эти шаблоны могут вноситься изменения в процессе работы программы. И после внесения этих изменений перезапуск программы требоваться не должен.
Четкого требования к формату файлов-шаблонов нет. Что выберу, то и будет.

Для себя решил:
1. взять либо Razor (есть небольшой опыт генерации текста с его помощью в своем приложении), либо T4 (пока есть опыт его использования только в Visual Studio, но мне синтаксис почему-то нравится больше)
2. для исполнения сгенерированного Razor-ом или T4 кода на C# в условиях меняющихся шаблонов (т.е. меняющего C#-кода) планирую использовать Roslyn. Опыта с Roslyn-ом нет совсем, но читал, что он умеет исполнять код на C# как скрипт. Просто с загрузкой/выгрузкой домена приложения на каждое изменение файла шаблона не хочется заморачиваться...

Собственно вопросы:
1. Как бы вы решали аналогичную проблему? Не слишком ли тяжелый вариант я выбрал? Может вообще какая-нибудь отдельная утилита/библиотека существует? Строго говоря, на C# завязываться не обязательно, но тогда понадобится интеграция с программой на C#.
2. Насколько вообще хорошая идея использовать Roslyn в качестве скриптового движка? Может на основе шаблона сформировать генерирующий скрипт на JavaScript-е (вроде C# умеет с V8 работать) или на IronPyton (но это, вроде, уже неживой проект)... Собственно парсер шаблонов (вместо Razor и T4) написать на особо сложно, хотя и не особо хочется.
3. Если я со своей программой буду поставлять конечному пользователю необходимые для работы T4 "запчасти" от Visual Studio (например Microsoft.VisualStudio.TextTemplating.*.dll), не будет ли это нарушением лицензии? В Инете этот момент как-то вскользь упоминается...
Красота — наивысшая степень целесообразности. (c) И. Ефремов
Отредактировано 29.07.2019 8:39 stomsky . Предыдущая версия . Еще …
Отредактировано 29.07.2019 8:38 stomsky . Предыдущая версия .
Отредактировано 29.07.2019 8:38 stomsky . Предыдущая версия .
Re: Генератор текста на основе изменяемого в Runtime шаблона
От: Danchik Украина  
Дата: 29.07.19 12:51
Оценка: 4 (1)
Здравствуйте, stomsky, Вы писали:

[skip]

Если решение не окончательное в выборе движка, то есть еще такой вариант https://github.com/sebastienros/fluid
Re: Генератор текста на основе изменяемого в Runtime шаблона
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 29.07.19 15:00
Оценка: 4 (1) +1
Здравствуйте, stomsky, Вы писали:

S>Есть такая задача:


Если у вас внутри шаблонов не планируется какой-то серьезной логики, а только что-то близкое к "подстановка на размеченные места заранее вычисленных параметров", то и Razor и T4, скорее всего будут излишне переусложненным решением.

Выше давали ссылку на одну из реализаций Liquid. Я могу также посоветовать посмотреть на
— альтернативную реализацию Liquid https://github.com/dotliquid/dotliquid (мне кажется она слега проще в использовании)
— на реализацию Mustache для .Net https://github.com/StubbleOrg/Stubble
— ну и быть может на StringTemplate (хотя не очень уверен, на сколько проект жив) https://github.com/antlr/stringtemplate4/blob/master/doc/index.md

Это всё языки разметки шаблонов чуть более сложные, чем простая замена именованных переменных.
Там есть (не уверен ,что во всех — надо смотреть): циклы, ветвления, операции типа конкатенации, …

По части редакторов (если большие шаблоны — это весьма актуально) можно посмотреть плагины к студии, но скорее всего будут только к VS Code.
Отредактировано 30.07.2019 7:08 Михаил Романов . Предыдущая версия .
Re[2]: Генератор текста на основе изменяемого в Runtime шаблона
От: Danchik Украина  
Дата: 29.07.19 15:23
Оценка: 8 (1)
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, stomsky, Вы писали:


S>>Есть такая задача:


МР>Если у вас внутри шаблонов не планируется какой-то серьезной логики, а только что-то близкое к "подстановка на размеченные места заранее вычисленных параметров", то и Razor и T4, скорее всего будут излишне переусложненным решением.


МР>Выше давали ссылку на одну из реализаций Liquid. Я могу также посоветовать посмотреть на

МР>- альтернативную реализацию Liquid https://github.com/Shopify/liquid (мне кажется она слега проще в использовании)
МР>- на реализацию Mustache для .Net https://github.com/Shopify/liquid

Что-то это все указывает на Ruby репозитории.
Re[3]: Генератор текста на основе изменяемого в Runtime шаблона
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.07.19 07:09
Оценка: +1
Здравствуйте, Danchik, Вы писали:

D>Что-то это все указывает на Ruby репозитории.

Спасибо!
Второпях накопировал совсем не того.
Теперь всё правильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.