fenom/docs/en/dev/schema.md
2014-08-02 00:24:14 +04:00

6.1 KiB

How Fenom works


use Fenom;
use Fenom\Render;
use Fenom\Template;
use Fenom\Tokenizer;

______________________________
|                            |
| Fenom::display($tpl, $var) |
|____________________________|
              |
              | search the template
______________|___________________________
| Template loaded into Fenom::$_storage? |
|     Fenom::getTemplate($tpl)           |
|________________________________________|
              |                       |
              | yes                   | no
______________|__________             |
|  Render the template  |             |
| Render::display($tpl) |             |
|_______________________|             |
  |                                   |
  | (hot start)                       |
  |     ______________________________|__________________
  |     | Template already compiled and stored in cache |
  |     | Fenom::getTemplate($template)                 |
  |     |_______________________________________________|
  |                 |                              |
  |                 | yes                          | no
  |     ____________|_______________               |
  |     | Load template from cache |   not found   |
  |     | Fenom::_load(...)        |-------------->|
  |     |__________________________|               |
  |                 |                              |
  |                 | found                        |
  |     ____________|___________                   |
  |     | Validate template    |     invalid       |
  |     | Render::isValid(...) |------------------>|
  |     |______________________|                   |
  |                 |                              |
  |                 | valid                        |
  |     ____________|____________                  |
  |     |  Render the template  |                  |
  |<----| Render::display(...)  |                  |
  |     |_______________________|                  |
  |                                                |
  |     _____________________________      ________|___________________
  |     | Initialize compiler       |      | Compile the template     |
  |     | Template::load($tpl)      |<-----| Fenom::compile($tpl)     |
  |     |___________________________|      |__________________________|
  |                 |
  |     ____________|________________
  |     | Load template source      |
  |     | Provider::getSource($tpl) |
  |     |___________________________|
  |                 |
  |     ____________|______________
  |     | Start compilation       |
  |     | Template::compile($tpl) |
  |     |_________________________|
  |                 |
  |     ____________|______________
  |     | Search template tag     |
  |     | Template::compile($tpl) |<------------------------------------------------------|
  |     |_________________________|                                                       |
  |       |                 |                                                             |
  |       | not found       | found                                                       |
  |       |    _____________|_______________    _______________________________           |
  |       |    | Tokenize the tag's code   |    | Parse the tag               |           |
  |       |    | new Tokenizer($tag)       |--->| Template::parseTag($tokens) |           |
  |       |    |___________________________|    |_____________________________|           |
  |       |                                        |                  |                   |
  |       |                                 is tag |                  | is expression     |
  |       |      _______________________________   |   _______________|________________   |
  |       |      | Detect tag name             |   |   | Detect expression            |   |
  |       |      | Template::parseAct($tokens) |<---   | Template::parseAct($tokens)  |   |
  |       |      | Get callback by tag name    |       | Parse expression             |   |
  |       |      | Fenom::getTag($tag_name)    |       | Template::parseExpr($tokens) |   |
  |       |      |_____________________________|       |______________________________|   |
  |       |                   |                                       |                   |
  |       |                   | found                                 |                   |
  |       |    _______________|_______________                        |                   |
  |       |    | Invoke callback             |                        |                   |
  |       |    | Template::parseAct($tokens) |                        |                   |
  |       |    |_____________________________|                        |                   |
  |       |                   |                                       |                   |
  |       |    _______________|________________                       |                   |
  |       |    | Append code to template      |                       |                   |
  |       |    | Template::_appendCode($code) |<-----------------------                   |
  |       |    |______________________________|                                           |
  |       |                   |                                                           |
  |       |    _______________|___________                                                |
  |       |    | Finalize the tag        |                 starts search next tag         |
  |       |    | Template::compile($tpl) |>------------------------------------------------
  |       |    |_________________________|
  |       |
  |     __|___________________________________
  |     | Store template to cache            |
  |     | Fenom::compile($tpl)               |
  |     | Store template to Fenom::$_storage |
  |     | Fenom::getTemplate($tpl)           |
  |     |____________________________________|
  |                 |
  |     ____________|_____________
  |     | Render the template    |
  |     | Template::display(...) |
  |     |________________________|
  |         |
  |         | (cold start)
__|_________|________
|                   |
|       DONE        |
|___________________|