wiki:ru/TemplateEngine

Version 2 (modified by vadim.godunko, 8 years ago) ( diff )

--

Template Engine

Основное назначение - обработка XML/HTML документов для использования в серверных приложениях.

Передача данных из приложения

Для передачи данных из приложения используется механизм Holder-ов. Его необходимо расширить функциями метапрограммирования для обеспечения доступа к структурированной информации. К таковой относятся:

  • простые типы, доработок не требуется;
  • записи, необходима возможность получения значений отдельных полей, что требует наличия механизма описания их типов и способов получения данных (прямой доступ либо вызов функции);
  • коллекции, необходима возможность обхода всех элементов.

Как начальный шаг (и весьма полезный в последующем) можно релизовать перечисленные механизмы для JSON, а потом уже расширять Ada методами описания свойств типов и реализовывать мета-компилятор.

Синтаксис шаблонов

Для конструкций языка шаблонов используется пространство имён http://matreshka.forge.ada-ru.org/template, во всех примерах отображаемое на префикс mtl:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:mtl="http://matreshka.forge.ada-ru.org/template">
...

Для подстановки значений объекта в шаблон используется синтаксис (в последующем можно будет использовать выражение, синтаксис при этом не изменится):

${name}

Условие mtl:if

<div mtl:if="${boolean expression}"/>
<mtl:if condition="${boolean expression}">
  ...
</mtl:if>

Выбор mtl:case

<div mtl:case="${expression}">
  <span mtl:when="literal">...</span>
  <span mtl:when="literal">...</span>
  <span mtl:others="">...</span>
</div>
<mtl:case expression="${expresion}">
  <mtl:when condition="literal">...</mtl:when>
  <mtl:when condition="literal">...</mtl:when>
  <mtl:others>...</mtl:others>
</mtl:case>

Синтаксис выражений

Note: See TracWiki for help on using the wiki.