Rename Cytro to Fenom

This commit is contained in:
bzick
2013-06-28 11:53:53 +04:00
parent f36cecaaea
commit b9ac24bb5b
44 changed files with 479 additions and 641 deletions

View File

@@ -1,9 +1,9 @@
About Cytro [RU]
About Fenom [RU]
================
Cytro - самый быстрый, гибкий и тонкий шаблонизатор для PHP, унаследовавший синтаксис от Smarty3 и улучшив его.
Fenom - самый быстрый, гибкий и тонкий шаблонизатор для PHP, унаследовавший синтаксис от Smarty3 и улучшив его.
Пожалуй это единственный шаблонизатор, который не использет ни регулярные выражения, как Twig, ни лексер от BISON, как Smarty3.
Вы не найдёте ни одного регулярного выражения в ядре Cytro, но тем не менее ядро простое, компактное и очень быстрое.
Вы не найдёте ни одного регулярного выражения в ядре Fenom, но тем не менее ядро простое, компактное и очень быстрое.
* Скорость. Разбор шаблонов постоен на основе нативного [токенайзера](http://docs.php.net/tokenizer). Шаблон преобразуется в исполняемый PHP код,
который может быть закеширован на файловой системе.

View File

@@ -3,7 +3,7 @@ Benchmark
To start benchmark run script `benchmark/run.php`.
### Smarty3 vs Twig vs Cytro
### Smarty3 vs Twig vs Fenom
PHP 5.4.11
@@ -17,9 +17,9 @@ PHP 5.4.11
twig: compiled and !loaded 0.0337 sec, 16.1 MiB
twig: compiled and loaded 0.0027 sec, 16.1 MiB
cytro: !compiled and !loaded 1.0142 sec, 8.8 MiB
cytro: compiled and !loaded 0.0167 sec, 6.1 MiB
cytro: compiled and loaded 0.0024 sec, 6.1 MiB
fenom: !compiled and !loaded 1.0142 sec, 8.8 MiB
fenom: compiled and !loaded 0.0167 sec, 6.1 MiB
fenom: compiled and loaded 0.0024 sec, 6.1 MiB
Iterating of array ({foreach})
@@ -31,9 +31,9 @@ PHP 5.4.11
twig: compiled and !loaded 0.0605 sec, 2.9 MiB
twig: compiled and loaded 0.0550 sec, 2.9 MiB
cytro: !compiled and !loaded 0.0093 sec, 3.0 MiB
cytro: compiled and !loaded 0.0033 sec, 2.4 MiB
cytro: compiled and loaded 0.0027 sec, 2.4 MiB
fenom: !compiled and !loaded 0.0093 sec, 3.0 MiB
fenom: compiled and !loaded 0.0033 sec, 2.4 MiB
fenom: compiled and loaded 0.0027 sec, 2.4 MiB
Inheriting of templates ({extends})
@@ -45,9 +45,9 @@ PHP 5.4.11
twig: compiled and !loaded 0.0255 sec, 6.3 MiB
twig: compiled and loaded 0.0038 sec, 6.3 MiB
cytro: !compiled and !loaded 0.1222 sec, 3.9 MiB
cytro: compiled and !loaded 0.0004 sec, 2.4 MiB
cytro: compiled and loaded 0.0000 sec, 2.4 MiB
fenom: !compiled and !loaded 0.1222 sec, 3.9 MiB
fenom: compiled and !loaded 0.0004 sec, 2.4 MiB
fenom: compiled and loaded 0.0000 sec, 2.4 MiB
* **!compiled and !loaded** - template engine object created but parsers not initialized and templates not compiled
* **compiled and !loaded** - template engine object created, template compiled but not loaded
@@ -59,4 +59,4 @@ PHP 5.4.11
| --------------- | ------:| --------:| ------:|
| Smarty3 (3.1.13)| 320 | 190 | 55095 |
| Twig (1.13.0) | 162 | 131 | 13908 |
| Cytro (1.0.1) | 9 | 16 | 3899 |
| Fenom (1.0.1) | 9 | 16 | 3899 |

View File

@@ -31,19 +31,3 @@ Variant #2. Сloudy.
Variant #3. Rain.
Variant #4. Tornado.
Error Info (x2) :
Exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '839621621,839622021)' at line 1
Query: SELECT `image_id`, `filename` FROM `s3_image_version` WHERE `format_id`=1 AND `image_id` IN (,839621621,839622021)
#0 /www/oml.ru/s3/lib/class.db.php(480): Db::parseError('SELECT `image_i...')
#1 /www/oml.ru/s3/forms/class.shop2.product.form.php(225): Db::query('SELECT `image_i...')
#2 /www/oml.ru/s3/lib/class.form.php(2390): Shop2ProductForm->fillControls()
#3 /www/oml.ru/s3/lib/class.form.php(1444): Form->execute()
#4 /www/oml.ru/public/my/s3/data/shop2_product/edit.cphp(44): Form->display(Object(Smarty), 'form.ajax.tpl')
#5 {main}
Place: /www/oml.ru/s3/lib/class.db.php:607
Time: 2013-06-05 03:54:51
Url: http://agyumama.ru/my/s3/data/shop2_product/edit.cphp?shop_id=196421&ver_id=636664&access=u%3B270377&popup=1&product_id=89445221&rnd=9296&xhr=1

View File

@@ -3,7 +3,7 @@
```
$cytro->addModifier(string $modifier, callable $callback);
$fenom->addModifier(string $modifier, callable $callback);
```
* `$modifier` - название модификатора, которое будет использоваться в шаблоне
@@ -16,7 +16,7 @@ For example:
```
```php
$cytro->addModifier('my_modifier', function ($variable, $param1, $param2) {
$fenom->addModifier('my_modifier', function ($variable, $param1, $param2) {
// ...
});
```

View File

@@ -1,3 +1,9 @@
Parsing templates
=================
Parsing templates [RU]
======================
### Tokenizer
Объект Tokenizer содержит список готовых к обработке токенов и необходимые для фильтрации токенов методы. Помимо основнях констант расширения Tokenizer у объекта есть макросы, объединения, определенных токенов.
### Parsers

View File

@@ -1,3 +1,8 @@
Add template provider
Add template provider [RU]
=====================
Источники шаблонов позволяют хранить шаблоны не только на файловой системе, а там где вам удобдно будет. Что бы указать откуда нужно взять шаблон используется схема в имени шаблона `db:page/about.tpl`, шаблон будет взят из источника `db`. Источник шаблонов добавляется через метод `addProvider`, при добавлении необходимо указать схему по которой можно запросить шаблон из этого источника:
```php
$fenom->addProvider("db", $db_provider);
```

View File

@@ -11,15 +11,15 @@ Tags [RU]
Примитивное добавление функции можно осуществить следующим образом:
```php
$cytro->addFunction(string $function_name, callable $callback[, callable $parser]);
$fenom->addFunction(string $function_name, callable $callback[, callable $parser]);
```
В данном случае запускается стандартный парсер, который автоматически разберет аргументы тега, которые должны быть в формате HTML аттрибутов и отдаст их в функцию ассоциативным массивом.
В данном случае вы можете переопределить парсер на произвольный в формате `function (Cytro\Tokenizer $tokenizer, Cytro\Template $template)`
В данном случае вы можете переопределить парсер на произвольный в формате `function (Fenom\Tokenizer $tokenizer, Fenom\Template $template)`
Существует более совершенный способ добавления функции:
```php
$cytro->addFunctionSmarty(string $function_name, callable $callback);
$fenom->addFunctionSmarty(string $function_name, callable $callback);
```
В данном случае парсер просканирует список аргументов коллбека и попробует сопоставить с аргументами из тега. Таким образом вы успешно можете добавлять Ваши штатные функции.
@@ -29,7 +29,7 @@ $cytro->addFunctionSmarty(string $function_name, callable $callback);
Добавление блоковой функции аналогичен добавлению строковой за исключением того что есть возможность указать парсер для закрывающего тега.
```php
$cytro->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]);
$fenom->addBlockFunction(string $function_name, callable $callback[, callable $parser_open[, callable $parser_close]]);
```
Сам коллбек принимает первым аргументом контент между открывающим и закрывающим тегом, а вторым аргументом - ассоциативный массив из аргуметов тега.
@@ -39,14 +39,14 @@ $cytro->addBlockFunction(string $function_name, callable $callback[, callable $p
Добавление строчного компилятора осуществляеться очень просто:
```php
$cytro->addCompiler(string $compiler, callable $parser);
$fenom->addCompiler(string $compiler, callable $parser);
```
Парсер должен принимать `Cytro\Tokenizer $tokenizer`, `Cytro\Template $template` и возвращать PHP код.
Парсер должен принимать `Fenom\Tokenizer $tokenizer`, `Fenom\Template $template` и возвращать PHP код.
Компилятор так же можно импортировать из класса автоматически
```php
$cytro->addCompilerSmart(string $compiler, $storage);
$fenom->addCompilerSmart(string $compiler, $storage);
```
`$storage` может быть как классом так и объектом. В данном случае шаблонизатор будет искать метод `tag{$compiler}`, который будет взят в качестве парсера тега.
@@ -56,13 +56,13 @@ $cytro->addCompilerSmart(string $compiler, $storage);
Добавление блочного компилятора осуществяется двум способами. Первый
```php
$cytro->addBlockCompiler(string $compiler, array $parsers, array $tags);
$fenom->addBlockCompiler(string $compiler, array $parsers, array $tags);
```
где `$parser` ассоциативный массив `["open" => parser, "close" => parser]`, сождержащий парсер на открывающий и на закрывающий тег, а `$tags` содержит список внутренних тегов в формате `["tag_name"] => parser`, которые могут быть использованы только с этим компилятором.
Второй способ добавления парсера через импортирование из класса или объекта методов:
```php
$cytro->addBlockCompilerSmart(string $compiler, $storage, array $tags, array $floats);
$fenom->addBlockCompilerSmart(string $compiler, $storage, array $tags, array $floats);
```

View File

@@ -5,11 +5,11 @@ For installation use [composer](http://getcompoer.org). Add in your `composer.js
```json
{
"require": {
"bzick/cytro": "dev-master"
"bzick/fenom": "dev-master"
}
}
```
or use shell
`composer require bzick/cytro`
`composer require bzick/fenom`
If you do not use composer - use `psr-0` format for loading Cytro's classes.
If you do not use composer - use `psr-0` format for loading Fenom's classes.

View File

@@ -1,10 +1,10 @@
Documentation
=============
### Cytro
### Fenom
* [About](./about.md)
* [Install](./install.md)
* [Usage](./usage.md)
* [Syntax](./syntax.md)
* [Settings](./settings.md)
* [Callbacks and filters](./callbacks.md)
@@ -47,7 +47,6 @@ Documentation
* [filter](./tags/filter.md)
* [ignore](./tags/ignore.md)
* [macro](./tags/macro.md) and `import`
* [autotrim](./tags/autotrim.md)
* or [add](./ext/tags.md) your own
***

View File

@@ -6,31 +6,31 @@ Settings [RU]
Что бы установить папку для хранения кеша собранных шаблонов
```php
$cytro->setCompileDir($dir);
$fenom->setCompileDir($dir);
```
### Template settings
```php
// set options using factory
$cytro = Cytro::factory($tpl_dir, $compile_dir, $options);
$fenom = Fenom::factory($tpl_dir, $compile_dir, $options);
// or inline using method setOptions
$cytro->setOptions($options);
$fenom->setOptions($options);
```
Параметры могут быть массивом `'option_name' => true` (если ключ не указан автоматически задаётся false) или битовой маской.
* **disable_methods**, `Cytro::DENY_METHODS`, запретить вызов методов у объектов
* **disable_native_funcs**, `Cytro::DENY_INLINE_FUNCS`, запретить использование PHP функций, кроме разрешенных
* **auto_reload**, `Cytro::AUTO_RELOAD`, пересобирать шаблон если его оригинал был изменён (замедляет работу шаблонизатора).
* **force_compile**, `Cytro::FORCE_COMPILE`, пересобирать шаблон при каждом вызове (сильно замедляет работу шаблонизатора).
* **force_include**, `Cytro::FORCE_INCLUDE`, оптимизировать вставку шаблона в шаблон. Это увеличит производительность и размер собранного шаблона.
* **disable_methods**, `Fenom::DENY_METHODS`, запретить вызов методов у объектов
* **disable_native_funcs**, `Fenom::DENY_INLINE_FUNCS`, запретить использование PHP функций, кроме разрешенных
* **auto_reload**, `Fenom::AUTO_RELOAD`, пересобирать шаблон если его оригинал был изменён (замедляет работу шаблонизатора).
* **force_compile**, `Fenom::FORCE_COMPILE`, пересобирать шаблон при каждом вызове (сильно замедляет работу шаблонизатора).
* **force_include**, `Fenom::FORCE_INCLUDE`, оптимизировать вставку шаблона в шаблон. Это увеличит производительность и размер собранного шаблона.
```php
$cytro->setOptions(array(
$fenom->setOptions(array(
"compile_check" => true,
"force_include" => true
));
// same
$cytro->setOptions(Cytro::AUTO_RELOAD | Cytro::FORCE_INCLUDE);
$fenom->setOptions(Fenom::AUTO_RELOAD | Fenom::FORCE_INCLUDE);
```

View File

@@ -1,7 +1,7 @@
Syntax [RU]
===========
Cytro have [Smarty](http://www.smarty.net/) like syntax.
Fenom have [Smarty](http://www.smarty.net/) like syntax.
## Variable
@@ -198,11 +198,11 @@ but if use single quote any template expressions will be on display as it is
### Ignoring temaplate code
В шаблонизаторе Cytro используются фигурные скобки для отделения HTML от кода Cytro.
В шаблонизаторе Fenom используются фигурные скобки для отделения HTML от кода Fenom.
Если требуется вывести текст, содержащий фигурные скобки, помните о следующих возможностях:
1. Использование блочного тега `{ignore}{/ignore}`. Текст внутри этого тега текст не компилируется шаблонизатором и выводится как есть.
2. Если после открывающей фигурной скобки есть пробельный символ (пробел или `\t`) или перенос строки (`\r` или `\n`), то она не воспринимается как разделитель кода Cytro и код после неё выводится как есть.
2. Если после открывающей фигурной скобки есть пробельный символ (пробел или `\t`) или перенос строки (`\r` или `\n`), то она не воспринимается как разделитель кода Fenom и код после неё выводится как есть.
Пример:

View File

@@ -79,7 +79,7 @@ Tag {foreach} [RU]
{/foreach}
```
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Cytro\CompileException` при компиляции
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Fenom\CompileException` при компиляции
### Notice

20
docs/usage.md Normal file
View File

@@ -0,0 +1,20 @@
Basic usage
===========
### Creating template engine
```php
$fenom = Fenom::factory('/path/to/templates', '/path/to/template/cache', $options);
//or
$fenom = new Fenom(new FSProvider('/path/to/templates'));
$fenom->setCompileDir('/path/to/template/cache');
$fenom->setOptions($options);
```
### Output template result
```php
$fenom->display("template/name.tpl", $vars);
```