diff --git a/README.md b/README.md
index cfc19c3..e61e617 100644
--- a/README.md
+++ b/README.md
@@ -1,303 +1,306 @@
-Aspect templater
-================
-
-
-## Быстрый старт
-
-
-Отрисовать шаблон `pages/about.tpl`:
-
-```php
-$aspect = Aspect::factory('./templates', './compiled', Aspect::CHECK_MTIME);
-$aspect->display("pages/about.tpl", $data);
-```
-
-Получить результат отрисовки шаблона:
-
-```php
-$aspect = Aspect::factory('./templates', './compiled', Aspect::CHECK_MTIME);
-$content = $aspect->fetch("pages/about.tpl", $data);
-```
-
-Создание шаблона в реальном времени:
-
-```php
-$aspect = new Aspect();
-$tempate = $aspect->compileCode('Hello {$user.name}! {if $user.email?} Your email: {$user.email} {/if}');
-$tempate->display($data);
-$content = $tempate->fetch($data);
-```
-
-## Синтаксис
-
-Базовый синтаксис, по бОльшей части, унаследован от Smarty3.
-
-### Переменные
-
-#### Вывод переменной
-
-Вывод значений переменных в шаблонизаторе Aspect идентичен правилам вывода шаблонизатора Smarty
-
-```smarty
-{$foo} <-- displaying a simple variable (non array/object)
-{$foo[4]} <-- display the 5th element of a zero-indexed array
-{$foo.4}
-{$foo.bar} <-- display the "bar" key value of an array, similar to PHP $foo['bar']
-{$foo.'bar'}
-{$foo."bar"}
-{$foo[bar]}
-{$foo['bar']}
-{$foo["bar"]}
-{$foo.$bar} <-- display variable key value of an array, similar to PHP $foo[$bar]
-{$foo[$bar]}
-{$foo->bar} <-- display the object property "bar"
-{$foo->bar()} <-- display the return value of object method "bar"
-```
-
-#### Комбинированные варианты
-
-```smarty
-{$foo.bar.baz}
-{$foo.$bar.$baz}
-{$foo[4].baz}
-{$foo[4].$baz}
-{$foo.bar.baz[4]}
-{$foo->bar($baz, 2, $bar)} <-- passing parameters
-{"foo"} <-- static values are allowed
-```
-
-#### Математические операции
-
-```smarty
-{$x+$y} // will output the sum of x and y.
-{$foo[$x+3]} // as array index
-{$foo[$x+3]*$x+3*$y % 3}
-```
-
-#### Объявление переменных
-
-```smarty
-{var $foo = $x + $y}
-{var $foo = $x.y[z] + $y}
-{var $foo = strlen($a)}
-{var $foo = myfunct( ($x+$y)*3 )}
-{var $foo.bar.baz = 1}
-```
-
-#### Объявление массивов
-
-```smarty
-{var $foo=[1,2,3]}
-{var $foo=['y'=>'yellow','b'=>'blue']}
-{var $foo=[1,[9,8],3]} // can be nested
-```
-
-#### Работа с объектами
-
-```smarty
-{$object->method1($x)->method2($y)}
-{var $foo=$object->item->method($y, 'named')}
-```
-
-
-#### Работа со строками
-
-Строки в Aspect обрабатываются идентично правилам подстановки переменных в строки в PHP, т.е. в двойных кавычках переменная заменяется на её значение, в одинарных замены не происходит.
-В отличие от Smarty в строках не обрабатываются управляющие конструкции, например "if", но работают модификаторы.
-
-```smarty
-{var $foo="Ivan"}
-{var $user.name="Ivan"}
-{"Hi, $foo"} выведет "Hi, Ivan"
-{"Hi, {$foo}"} выведет "Hi, Ivan"
-{"Hi, {$user.name}"} выведет "Hi, Ivan"
-{'Hi, $foo'} выведет 'Hi, $foo'
-{'Hi, {$foo}'} выведет 'Hi, {$foo}'
-```
-
-### Модификаторы
-
-* Модификаторы позволяют изменить значение переменной перед выводом или использованием в выражении
-* Модификаторы записываются после переменной через символ вертикальной черты "|"
-* Модификаторы могут иметь параметры, которые записываются через символ двоеточие ":" после имени модификатора
-* Параметры модификаторов друг от друга также разделяются символом двоеточие ":"
-* В качестве параметров могут использоваться переменные.
-* Модификаторы могут составлять цепочки. В этом случае они применяются к переменной последовательно слева направо
-
-```smarty
-{var $foo="Ivan"}
-{$foo|upper} выведет "IVAN"
-{$foo|lower} выведет "ivan"
-{$looong_text|truncate:80:"..."} обрежет текст до 80 символов и добавит "..." в конец текста
-{$looong_text|lower|truncate:$settings.count:$settings.etc}
-{var $foo="Ivan"|upper} переменная $foo будет содержать "IVAN"
-```
-
-Подробнее модификаторы описаны в разделе [модификаторы](docs/modifiers.md)
-
-### Функции
-
-Каждый тэг шаблонизатора либо выводит переменную, либо вызывает какую-либо функцию.
-Тег вызова функции начинается с названия функции и содержит список аргументов:
-
-```smarty
-{FUNCNAME attr1 = "val1" attr2 = $val2}
-```
-
-Это общий формат функций, но могут быть исключения, например функция {var}, использовавшаяся выше.
-
-```smarty
-{include file="my.tpl"}
-{mailto address="bzick@megagroup.ru" text="Article's author"}
-{var $foo=5}
-{if $user.loggined}
- Welcome, {$user.name}!
-{else}
- Who are you?
-{/if}
-```
-
-#### Аргументы
-
-Аргументы принимают любой формат переменных, в том числе результаты арифметических операций и модификаторов.
-
-```smarty
-{funct arg=true}
-{funct arg=5}
-{funct arg=1.2}
-{funct arg='string'}
-{funct arg="string this {$var}"}
-{funct arg=[1,2,34]}
-{funct arg=$x}
-{funct arg=$x.c}
-```
-
-```smarty
-{funct arg="ivan"|upper}
-{funct arg=$a.d.c|lower}
-```
-
-```smarty
-{funct arg=1+2}
-{funct arg=$a.d.c+4}
-{funct arg=($a.d.c|count+4)/3}
-```
-
-
-
-### Вставка JS
-
-Как и в Smarty, в шаблонизаторе Aspect используются фигурные скобки для отделения HTML от кода Aspect.
-Если требуется вывести текст, содержащий фигурные скобки помните о следующих возможностях:
-
-1. Использование блочного тега `{literal}{/literal}`. Текст внутри этого тега не компилируется шаблонизатором и выводится "как есть".
-2. Если после открывающей фигурной скобки есть пробельный символ, то она не воспринимается как разделитель Aspect и код после неё выводится "как есть".
-
-Пример:
-
-```smarty
-{literal}
-
-{/literal}
-
-```
-
-Выведет
-
-```html
-
-
-```
-
-## Настройка
-
-### Параметры
-
-#### Исходные шаблоны
-
-Добавить папку с шаблонами:
-
-```php
-$aspect->addTemplateDir($dir);
-```
-
-Шаблонизатор последовательно будет перебирать папки и искать указанный шаблон.
-
-#### Сборки шаблонов
-
-Задаёт папку в которую будут сохранятся преобразованные в PHP шаблоны
-
-```php
-$aspect->setCompileDir($dir);
-```
-
-#### Опции
-
-```php
-$aspect->setOptions($options);
-```
-
-Массив `'option_name' => boolean` (если ключ не указан автоматически задаётся false)
-
-* **disable_methods**, `boolean`, запретить вызов методов у объектов
-* **disable_native_funcs**, `boolean`, запретить использование PHP функций, кроме разрешенных
-* **disable_set_vars**, `boolean`, запретить изменять или задавать переменные
-* **include_sources**, `boolean`, вставлять исходный код шаблона в его сборку
-* **compile_check**, `boolean`, сравнивать mtime у исходного шаблона и его сборки. При изменении исходного шаблона будет производится его пересборка (замедляет работу шаблонизатора).
-* **force_compile**, `boolean`, пересобирать шаблон при каждом вызове (сильно замедляет работу шаблонизатора).
-
-или битовая маска из флагов:
-
-* `Aspect::DENY_METHODS` то же что и **disable_methods**
-* `Aspect::DENY_INLINE_FUNCS` то же что и **disable_native_funcs**
-* `Aspect::DENY_SET_VARS` то же что и **disable_set_vars**
-* `Aspect::INCLUDE_SOURCES` то же что и **include_sources**
-* `Aspect::CHECK_MTIME` то же что и **compile_check**
-* `Aspect::FORCE_COMPILE` то же что и **force_compile**
-
-### Модификаторы
-
-Добавить модификатор:
-
-```php
-$aspect->addModifier($modifier, $callback);
-```
-
-* `$modifier` - имя модификатора
-* `$callback` - строка с именем функции
-
-### Теги
-
-Теги делятся на компилеры и функции.
-Компилеры формируют синтаксис языка шаблона, добавляя такой функционал как foreach, if, while и т.д. В то время как функции - обычный вызов некоторой именованной функции
-
-Добавить компилер:
-
-```php
-$aspect->addCompiler($compiler, $parser);
-```
-
-* `$compiler` - имя модификатора
-* `$parser` - функция разбора тега в формате function (MF\Tokenizer $tokens, MF\Aspect\Template $tpl) {}
-
-Добавить блочный компилер:
-
-```php
-$aspect->addBlockCompiler($compiler, $parsers, $tags);
+Aspect templater
+================
+
+
+## Быстрый старт
+
+
+Отрисовать шаблон `pages/about.tpl`:
+
+```php
+display("pages/about.tpl", $data);
+```
+
+Получить результат отрисовки шаблона:
+
+```php
+fetch("pages/about.tpl", $data);
+```
+
+Создание шаблона в реальном времени:
+
+```php
+compileCode('Hello {$user.name}! {if $user.email?} Your email: {$user.email} {/if}');
+$tempate->display($data);
+$content = $tempate->fetch($data);
+```
+
+## Синтаксис
+
+Базовый синтаксис, по бОльшей части, унаследован от Smarty3.
+
+### Переменные
+
+#### Вывод переменной
+
+Вывод значений переменных в шаблонизаторе Aspect идентичен правилам вывода шаблонизатора Smarty
+
+```smarty
+{$foo} <-- displaying a simple variable (non array/object)
+{$foo[4]} <-- display the 5th element of a zero-indexed array
+{$foo.4}
+{$foo.bar} <-- display the "bar" key value of an array, similar to PHP $foo['bar']
+{$foo.'bar'}
+{$foo."bar"}
+{$foo[bar]}
+{$foo['bar']}
+{$foo["bar"]}
+{$foo.$bar} <-- display variable key value of an array, similar to PHP $foo[$bar]
+{$foo[$bar]}
+{$foo->bar} <-- display the object property "bar"
+{$foo->bar()} <-- display the return value of object method "bar"
+```
+
+#### Комбинированные варианты
+
+```smarty
+{$foo.bar.baz}
+{$foo.$bar.$baz}
+{$foo[4].baz}
+{$foo[4].$baz}
+{$foo.bar.baz[4]}
+{$foo->bar($baz, 2, $bar)} <-- passing parameters
+{"foo"} <-- static values are allowed
+```
+
+#### Математические операции
+
+```smarty
+{$x+$y} // will output the sum of x and y.
+{$foo[$x+3]} // as array index
+{$foo[$x+3]*$x+3*$y % 3}
+```
+
+#### Объявление переменных
+
+```smarty
+{var $foo = $x + $y}
+{var $foo = $x.y[z] + $y}
+{var $foo = strlen($a)}
+{var $foo = myfunct( ($x+$y)*3 )}
+{var $foo.bar.baz = 1}
+```
+
+#### Объявление массивов
+
+```smarty
+{var $foo=[1,2,3]}
+{var $foo=['y'=>'yellow','b'=>'blue']}
+{var $foo=[1,[9,8],3]} // can be nested
+```
+
+#### Работа с объектами
+
+```smarty
+{$object->method1($x)->method2($y)}
+{var $foo=$object->item->method($y, 'named')}
+```
+
+
+#### Работа со строками
+
+Строки в Aspect обрабатываются идентично правилам подстановки переменных в строки в PHP, т.е. в двойных кавычках переменная заменяется на её значение, в одинарных замены не происходит.
+В отличие от Smarty в строках не обрабатываются управляющие конструкции, например "if", но работают модификаторы.
+
+```smarty
+{var $foo="Ivan"}
+{var $user.name="Ivan"}
+{"Hi, $foo"} выведет "Hi, Ivan"
+{"Hi, {$foo}"} выведет "Hi, Ivan"
+{"Hi, {$user.name}"} выведет "Hi, Ivan"
+{'Hi, $foo'} выведет 'Hi, $foo'
+{'Hi, {$foo}'} выведет 'Hi, {$foo}'
+```
+
+### Модификаторы
+
+* Модификаторы позволяют изменить значение переменной перед выводом или использованием в выражении
+* Модификаторы записываются после переменной через символ вертикальной черты "|"
+* Модификаторы могут иметь параметры, которые записываются через символ двоеточие ":" после имени модификатора
+* Параметры модификаторов друг от друга также разделяются символом двоеточие ":"
+* В качестве параметров могут использоваться переменные.
+* Модификаторы могут составлять цепочки. В этом случае они применяются к переменной последовательно слева направо
+
+```smarty
+{var $foo="Ivan"}
+{$foo|upper} выведет "IVAN"
+{$foo|lower} выведет "ivan"
+{$looong_text|truncate:80:"..."} обрежет текст до 80 символов и добавит "..." в конец текста
+{$looong_text|lower|truncate:$settings.count:$settings.etc}
+{var $foo="Ivan"|upper} переменная $foo будет содержать "IVAN"
+```
+
+Подробнее модификаторы описаны в разделе [модификаторы](docs/modifiers.md)
+
+### Функции
+
+Каждый тэг шаблонизатора либо выводит переменную, либо вызывает какую-либо функцию.
+Тег вызова функции начинается с названия функции и содержит список аргументов:
+
+```smarty
+{FUNCNAME attr1 = "val1" attr2 = $val2}
+```
+
+Это общий формат функций, но могут быть исключения, например функция {var}, использовавшаяся выше.
+
+```smarty
+{include file="my.tpl"}
+{mailto address="bzick@megagroup.ru" text="Article's author"}
+{var $foo=5}
+{if $user.loggined}
+ Welcome, {$user.name}!
+{else}
+ Who are you?
+{/if}
+```
+
+#### Аргументы
+
+Аргументы принимают любой формат переменных, в том числе результаты арифметических операций и модификаторов.
+
+```smarty
+{funct arg=true}
+{funct arg=5}
+{funct arg=1.2}
+{funct arg='string'}
+{funct arg="string this {$var}"}
+{funct arg=[1,2,34]}
+{funct arg=$x}
+{funct arg=$x.c}
+```
+
+```smarty
+{funct arg="ivan"|upper}
+{funct arg=$a.d.c|lower}
+```
+
+```smarty
+{funct arg=1+2}
+{funct arg=$a.d.c+4}
+{funct arg=($a.d.c|count+4)/3}
+```
+
+
+
+### Вставка JS
+
+Как и в Smarty, в шаблонизаторе Aspect используются фигурные скобки для отделения HTML от кода Aspect.
+Если требуется вывести текст, содержащий фигурные скобки помните о следующих возможностях:
+
+1. Использование блочного тега `{literal}{/literal}`. Текст внутри этого тега не компилируется шаблонизатором и выводится "как есть".
+2. Если после открывающей фигурной скобки есть пробельный символ, то она не воспринимается как разделитель Aspect и код после неё выводится "как есть".
+
+Пример:
+
+```smarty
+{literal}
+
+{/literal}
+
+```
+
+Выведет
+
+```html
+
+
+```
+
+## Настройка
+
+### Параметры
+
+#### Исходные шаблоны
+
+Добавить папку с шаблонами:
+
+```php
+$aspect->addTemplateDir($dir);
+```
+
+Шаблонизатор последовательно будет перебирать папки и искать указанный шаблон.
+
+#### Сборки шаблонов
+
+Задаёт папку в которую будут сохранятся преобразованные в PHP шаблоны
+
+```php
+$aspect->setCompileDir($dir);
+```
+
+#### Опции
+
+```php
+$aspect->setOptions($options);
+```
+
+Массив `'option_name' => boolean` (если ключ не указан автоматически задаётся false)
+
+* **disable_methods**, `boolean`, запретить вызов методов у объектов
+* **disable_native_funcs**, `boolean`, запретить использование PHP функций, кроме разрешенных
+* **disable_set_vars**, `boolean`, запретить изменять или задавать переменные
+* **include_sources**, `boolean`, вставлять исходный код шаблона в его сборку
+* **compile_check**, `boolean`, сравнивать mtime у исходного шаблона и его сборки. При изменении исходного шаблона будет производится его пересборка (замедляет работу шаблонизатора).
+* **force_compile**, `boolean`, пересобирать шаблон при каждом вызове (сильно замедляет работу шаблонизатора).
+
+или битовая маска из флагов:
+
+* `Aspect::DENY_METHODS` то же что и **disable_methods**
+* `Aspect::DENY_INLINE_FUNCS` то же что и **disable_native_funcs**
+* `Aspect::DENY_SET_VARS` то же что и **disable_set_vars**
+* `Aspect::INCLUDE_SOURCES` то же что и **include_sources**
+* `Aspect::CHECK_MTIME` то же что и **compile_check**
+* `Aspect::FORCE_COMPILE` то же что и **force_compile**
+
+### Модификаторы
+
+Добавить модификатор:
+
+```php
+$aspect->addModifier($modifier, $callback);
+```
+
+* `$modifier` - имя модификатора
+* `$callback` - строка с именем функции
+
+### Теги
+
+Теги делятся на компилеры и функции.
+Компилеры формируют синтаксис языка шаблона, добавляя такой функционал как foreach, if, while и т.д. В то время как функции - обычный вызов некоторой именованной функции
+
+Добавить компилер:
+
+```php
+$aspect->addCompiler($compiler, $parser);
+```
+
+* `$compiler` - имя модификатора
+* `$parser` - функция разбора тега в формате function (MF\Tokenizer $tokens, MF\Aspect\Template $tpl) {}
+
+Добавить блочный компилер:
+
+```php
+$aspect->addBlockCompiler($compiler, $parsers, $tags);
```
\ No newline at end of file