Итак. стоит задача по шаблону получить некоторый текст. Шаблон должен быть PHP-like, то бишь со скриптами.
Пока рассматриваются варианты ASP.Net
PHP
CodeSmith
ASP.Net — Дешёво и сердито. Вроде как и шустро и кешируемо и язык выбирай — нехочу, но прикручивать его придётся с дикими хаками (если по 1.1 на сайте есть статья, то по 2.0 я ничего не нашёл).
PHP — Казалось бы те-же возможности, что и у ASP.Net, но скорость работы по меньше. Зато проще прикрутить.
CodeSmith — не работал с ним, но судя по тому что знаю он где-то посередине.
Посоветуйте что мне делать
Плюсами при выборе являются
Нормальные диагностики синтаксических ошибок, а не просто error somewhere in one of templates.
Возможность загружать шаблон из памяти и получать результат в память
Возможность передавать скрипту даные нормальным способом, а не впихивая их в начало шаблока как код (генерирование кода для генератора кода). Даные кстати могут быть весьма сложные по структуре.
Скорость работы.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
A>Цена/Лицензия? У меня проект типа для души Хотя польза народному хозяйству и возможна, вряд ли я буду брать за это деньги.
Ссылки в документации на WHTM файлы, а в архиве HTM файлы. Хорошо бы исправить, а то пользуешься как быдто ссылок и нет.
Я так понял что интерфейс есть только си++? Мне вообще-то изз C# это всё надо использовать. К тому у меня структура может быть массив массивов. Я из документации не понял как такое в скрипт передать и программы. Но несовместимость с C# это для меня очень плохо.
Здравствуйте, adontz, Вы писали:
A>Итак. стоит задача по шаблону получить некоторый текст. Шаблон должен быть PHP-like, то бишь со скриптами.
Посмотри Microsoft DSL Tools(Tools for Domain Specific Languages).
Это фактически — пакет (package) для студии, позволяющий генерировать произвольные визуальные дизайнеры по заданному тобой описанию языка.
Например, вводишь описание UML Class Diagram, нажимаешь "генерировать", и получаешь на выходе визуальный дизайнер по типу Visio. Причём полностью настраиваемый.
Так вот, причём здесь собственно генерация текста. Ты когда в своём сгенерённом дизайнере что-то рисуешь со стрелками и прямоугольниками, у тебя в памяти создаётся модель. И ты имеешь к ней полный доступ, например, можешь пробежаться по всем классам в твоём "класс-дизайнере", по всем ассоциациям, исходящими из данной фигуры и т.д.
Есть text templating engine (подобный ASP.NET), который поддерживает подмножество C# как скрипт и имеет полный доступ к нарисованной модели.
Так, можно написать простенький скрипт, который по твоему рисунку (например, диаграмме классов) генерит С# код, или VB код, или XML, или отчёт, да что угодно.
Так вот этот text templating engine и можно было бы использовать.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
A>Ссылки в документации на WHTM файлы, а в архиве HTM файлы. Хорошо бы исправить, а то пользуешься как быдто ссылок и нет.
Это просто снимок того что есть на сайте, а там wrapped html.
Сделай себе Save As страницы http://www.terrainformatica.com/tiscript/ в mht
и будет offline help.
A>Я так понял что интерфейс есть только си++? Мне вообще-то изз C# это всё надо использовать. К тому у меня структура может быть массив массивов. Я из документации не понял как такое в скрипт передать и программы. Но несовместимость с C# это для меня очень плохо.
Для C# или 1) нужно писать обертку (лучше на C++/CLI) или 2) использовать штатный JavaScript.NET
A>К тому у меня структура может быть массив массивов. Я из документации не понял как такое в скрипт передать и программы. Но несовместимость с C# это для меня очень плохо.
Это самый простой и быстрый способ передачи сложных структур данных в любой скрипт движок.
Т.е. загрузка (инициализация) твоего скрипт runtime для выполнения "макроподстановок" это примерно следующее:
// environment preparation:
tis.load(parameters_stream,false); // например все my_array_of_arrays = [ [0,1,2], [3,4,5], [6,7,8] ];
tis.load(code_stream,false); // библиотечные функции например
// setup streams:
tis.set_std_streams( 0 /*stdin*/, my_hypertext_output_stream /*stdout*/ , console /*stderr*/ );
// в stdout (scripting stdout) мы будем ловить то что получилось
// поехали!
tis.load(hypertext_input_stream); // собственно Hypertext MacroProcessing
// hypertext_input_stream - это твоя имплементация - из памяти, из файла, из сокета, из БД - откуда хошь.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Бесплатно, там же написано. (где-то )
A>Нет ну возможны варианты... Например GPL тоже по идее бесплатно...
Просто free. Надо бы мне что такое в виде лицензии изобразить.
CS>Это самый простой и быстрый способ передачи сложных структур данных в любой скрипт движок.
А вот у ASP.Net таких проблем нету. Можно из скрипта (это уже собственно и не скрипт никакой) прямо к хостящей программе обращатся. Но зато подключить его ой какая головная боль...
CS>Т.е. загрузка (инициализация) твоего скрипт runtime для выполнения "макроподстановок" это примерно следующее:
...
CS>По моему несложно.
Да, но из C# использование выглядит как левой рукой за правое ухо.
Здравствуйте, adontz, Вы писали:
A>Итак. стоит задача по шаблону получить некоторый текст. Шаблон должен быть PHP-like, то бишь со скриптами.
Если я правильно понял, то возможно проще будет парсер свой написать...
Например используя www.antlr.org — там есть много готовых шаблонов.
Все будет под твоим контролем и бесплатно.
Здравствуйте, adontz, Вы писали:
A>Итак. стоит задача по шаблону получить некоторый текст. Шаблон должен быть PHP-like, то бишь со скриптами.
A>ASP.Net — Дешёво и сердито. Вроде как и шустро и кешируемо и язык выбирай — нехочу, но прикручивать его придётся с дикими хаками (если по 1.1 на сайте есть статья, то по 2.0 я ничего не нашёл).
A>PHP — Казалось бы те-же возможности, что и у ASP.Net, но скорость работы по меньше. Зато проще прикрутить.
Точно поменьше? Даже если использовать какой-нибудь кеширующий движок аля Smarty?
-- Главное про деструктор копирования не забыть --
Здравствуйте, adontz, Вы писали:
A>Итак. стоит задача по шаблону получить некоторый текст. Шаблон должен быть PHP-like, то бишь со скриптами.
A>Пока рассматриваются варианты A> A> ASP.Net A> PHP A> CodeSmith A>
XSLT — в некоторых случаях (особенно если входные данные иерархичны) довольно удобен несмотря на громоздкий синтаксис. Еще один плюс — при наличии XSD для входных данных качественный контроль синтаксической структуры этих самых данных.
LInQ — поверх можно реализовать довольно интересный движек.
... << RSDN@Home 1.2.0 alpha rev. 624 on Windows XP 5.1.2600.131072>>
Здравствуйте, AndrewVK, Вы писали:
AVK>XSLT — в некоторых случаях (особенно если входные данные иерархичны) довольно удобен несмотря на громоздкий синтаксис. Еще один плюс — при наличии XSD для входных данных качественный контроль синтаксической структуры этих самых данных.
Не, мне нужен именно язык. простой и понятный. Лучше старый. Чтобы переменные были, if, while и всё такое. Чтобы создание шаблона не превращалось в искусство.
AVK>LInQ — поверх можно реализовать довольно интересный движек.
google выдал кучу ссылок по слову LInQ. Не поделишься единственно правильной?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AndrewVK, Вы писали:
AVK>>XSLT — в некоторых случаях (особенно если входные данные иерархичны) довольно удобен несмотря на громоздкий синтаксис. Еще один плюс — при наличии XSD для входных данных качественный контроль синтаксической структуры этих самых данных.
A>Не, мне нужен именно язык. простой и понятный. Лучше старый. Чтобы переменные были, if, while и всё такое. Чтобы создание шаблона не превращалось в искусство.
AVK>>LInQ — поверх можно реализовать довольно интересный движек.
A>google выдал кучу ссылок по слову LInQ. Не поделишься единственно правильной?
Здравствуйте, adontz, Вы писали:
A>Не, мне нужен именно язык. простой и понятный. Лучше старый. Чтобы переменные были, if, while и всё такое.
В XSLT это все есть. + прекрасная интеграция с .NET и возможность создания собственных функций либо внедрения кусков на шарпе или JScript прямо в шаблоне.
AVK>>LInQ — поверх можно реализовать довольно интересный движек.
A>google выдал кучу ссылок по слову LInQ. Не поделишься единственно правильной?