- First commit of first draft
This commit is contained in:
commit
66c7b349d1
36 files changed
+820
No files matched your search
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Picea\ControlStructure;
|
||||
|
||||
class SectionToken implements ControlStructure {
|
||||
|
||||
public string $token = "section";
|
||||
|
||||
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments) {
|
||||
list($name, $options) = array_pad(explode(',', $arguments), 2, null);
|
||||
|
||||
if ( $options ?? false ) {
|
||||
$options = eval($options);
|
||||
}
|
||||
|
||||
if ( ! ctype_alnum(str_replace([".", "\"", "'"], "", $name)) ) {
|
||||
throw new \RuntimeException("Your section named `{$name}` contains invalid character. Allowed are only letters, numbers and dots");
|
||||
}
|
||||
|
||||
$context->sections[] = [
|
||||
'name' => $name,
|
||||
'options' => $options,
|
||||
];
|
||||
|
||||
$action = $options['action'] ?? "default";
|
||||
|
||||
if (! in_array($action, ['prepend', 'append', 'default'])) {
|
||||
throw new \RuntimeException("An unsupported action `$action` was given as an option of a {% section %} tag");
|
||||
}
|
||||
|
||||
$order = $options['order'] ?? "count(\$this->__section_list[$name]['$action'])";
|
||||
|
||||
return "<?php \$this->__section_list[$name] ??= [ 'prepend' => [], 'append' => [], 'default' => [] ];
|
||||
\$this->__section_list[$name]['$action'][] = [ 'order' => $order, 'callback' => function() {
|
||||
extract(\$this->__variables_list); ?>";
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user