Update docs
  Add {import ... from ...}
  Improve parsing
This commit is contained in:
bzick
2013-03-14 21:45:00 +04:00
parent 26393ad22d
commit a3c5128aba
15 changed files with 221 additions and 101 deletions

View File

@ -1,5 +1,5 @@
About Aspect
============
About Aspect [RU]
=================
Aspect - самый быстрый, гибкий и тонкий шаблонизатор для PHP, унаследовавший синтаксис от Smarty3 и улучшив его.
Пожалуй это единственный шаблонизатор, который не использет ни регулярные выражения, как Twig, ни лексер от BISON, как Smarty3.

View File

@ -1,11 +1,22 @@
Модификаторы
Модификаторы [RU]
============
Добавить модификатор:
```php
$aspect->addModifier($modifier, $callback);
```
$aspect->addModifier(string $modifier, callable $callback);
```
* `$modifier` - имя модификатора
* `$callback` - строка с именем функции
* `$modifier` - название модификатора, которое будет использоваться в шаблоне
* `$callback` - коллбек, который будет вызван для изменения данных
For example:
```smarty
{$variable|my_modifier:$param1:$param2}
```
```php
$aspect->addModifier('my_modifier', function ($variable, $param1, $param2) {
// ...
});
```

View File

@ -1,20 +1,68 @@
Теги
====
Tags [RU]
=========
Теги делятся на компилеры и функции.
Компилеры формируют синтаксис языка шаблона, добавляя такой функционал как foreach, if, while и т.д. В то время как функции - обычный вызов некоторой именованной функции
В шаблонизаторе принято различать два типа тегов: компиляторы и функции.
Компиляторы вызываются во время преобразования кода шаблона в PHP код и возвращяю PHP код который будет вставлен вместо тега.
А функции вызываются непременно в момент выполнения шаблона и возвращают непосредственно данные которые будут отображены.
Среди тегов как и в HTML есть строчные и блоковые теги.
Добавить компилер:
## Inline function
Примитивное добавление функции можно осуществить следующим образом:
```php
$aspect->addCompiler($compiler, $parser);
$aspect->addFunction(string $function_name, callable $callback[, callable $parser]);
```
* `$compiler` - имя модификатора
* `$parser` - функция разбора тега в формате function (MF\Tokenizer $tokens, MF\Aspect\Template $tpl) {}
Добавить блочный компилер:
В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML аттрибутов и отдаст их в функцию ассоциативным массивом.
В данном случае вы можете переопределить парсер на произвольный в формате `function (Aspect\Tokenizer $tokenizer, Aspect\Template $template)`
Существует более совершенный способ добавления функции:
```php
$aspect->addBlockCompiler($compiler, $parsers, $tags);
```
$aspect->addFunctionSmarty(string $function_name, callable $callback);
```
В данном случае парсер просканирует список аргументов коллбека и попробует сопоставить с аргументами из тега. Таким образом вы успешно можете добавлять Ваши штатные функции.
## Block function
Добавление блоковой функции аналогичен добавлению строковой за исключением того что есть возможность указать парсер для закрывающего тега.
```php
$aspect->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]);
```
Сам коллбек принимает первым аргументом контент между открывающим и закрывающим тегом, а вторым аргументом - ассоциативный массив из аргуметов тега.
## Inline compiler
Добавление строчного компилятора осуществляеться очень просто:
```php
$aspect->addCompiler(string $compiler, callable $parser);
```
Парсер должен принимать `Aspect\Tokenizer $tokenizer`, `Aspect\Template $template` и возвращать PHP код.
Компилятор так же можно импортировать из класса автоматически
```php
$aspect->addCompilerSmart(string $compiler, $storage);
```
`$storage` может быть как классом так и объектом. В данном случае шаблонизатор будет искать метод `tag{$compiler}`, который будет взят в качестве парсера тега.
## Block compiler
Добавление блочного компилятора осуществяется двум способами. Первый
```php
$aspect->addBlockCompiler(string $compiler, array $parsers, array $tags);
```
где `$parser` ассоциативный массив `["open" => parser, "close" => parser]`, сождержащий парсер на открывающий и на закрывающий тег, а `$tags` содержит список внутренних тегов в формате `["tag_name"] => parser`, которые могут быть использованы только с этим компилятором.
Второй способ добавления парсера через импортирование из класса или объекта методов:
```php
$aspect->addBlockCompilerSmart(string $compiler, $storage, array $tags, array $floats);
```

View File

@ -1,5 +1,5 @@
Installation
=============================
============
For installation use [composer](http://getcompoer.org). Add in your `composer.json` requirements:
```json

View File

@ -7,7 +7,7 @@ Math
Bitwize
`| & <<`
`| & << >> |= &= <<= >>=`
Unary
@ -15,12 +15,8 @@ Unary
Boolean
`|| && and or < > <= >= == === !== != ≥ ≤ ≠`
`|| && and or < > <= >= == === !== !=`
Ternar
`? :`
Test
`is in like`

View File

@ -1,5 +1,5 @@
Настройка
=========
Settings [RU]
=============
### Engine settings

View File

@ -1,5 +1,5 @@
Syntax
======
Syntax [RU]
===========
### Output variables

View File

@ -2,7 +2,7 @@ Tag {for}
=========
```smarty
{for $counter=<start..end> [to=<end>] [step=<step>] [index=$index] [first=$first] [last=$last]}
{for $counter=<start> to=<end> [step=<step>] [index=$index] [first=$first] [last=$last]}
{* ...code... *}
{break}
{* ...code... *}

View File

@ -1,7 +1,12 @@
Tag {macro}
============
Tag {macro} [RU]
================
Declare macro
Макросы - фрагмент шаблона который можно повторить сколь угодно раз и в каком угодно месте.
Макросы не имеют общего пространства имен с шаблоном и могут оперировать только переданными переменными.
### {macro}
Обявление макроса происходит при помощи блочного тега `{macro}`
```smarty
{macro plus(x, y, z=0)}
@ -9,7 +14,7 @@ Declare macro
{/macro}
```
Invoke macro
Вызов макроса происходит при помощи строкового тега `{macro}`. Аргументы передаются стандартно, как атрибуты в HTML тегах
```smarty
{macro.plus x=$num y=100}
@ -17,14 +22,23 @@ Invoke macro
### {import}
Import [macro](./macro.md) from another template
Для использования маросов в другом шаблоне необходимо их импортировать при помощи тега `{import}`
```smarty
{import 'math.tpl'}
```
При импорте можно указать дргое пространство имен что бы можно было использовать одноименные макросы из разных шаблонов
```smarty
{import 'math.tpl' as math}
...
{math.plus x=5 y=100}
```
Пространство имен макросов может совпадать с названием какого-либо тега, в данном случае ничего плохого не произойдет: будет вызван макрос, а тег не исчезнит
При необходимости можно импортировать только необходимые макросы, явно указав в теге `{import}`
```smarty
{import [plus, minus, exp] from 'math.tpl' as math}
```