<?php
$source = <<<"SOURCEND"
This is a test
{% block hello %}
This is a test
This is a {{ $test }}
{% end block %}
{{ block('hello') }}
{% for $post in $posts %}
{% end %}
SOURCEND;
function microtwig_compile($source){
function microtwig_parsecmd($cmd){
static $stack = array();
$fragments = preg_split('/\s+/',$cmd);
$cmd = array_shift($fragments);
switch($cmd){
case 'block': return 'function block_'.$fragments[0].'(){'; break;
case 'if':
$stack[] = 'if';
return 'if('.$fragments[2].' as '.$fragments[0].'):'; break;
case 'for':
$stack[] = 'foreach';
return 'foreach('.$fragments[2].' as '.$fragments[0].'):'; break;
case 'end':
switch(isset($fragments[0])?$fragments[0]:''){
case 'block': return '}'; break;
default:
switch($peek = array_pop($stack)){
case 'if': return 'endif;'; break;
case 'foreach': return 'endforeach;'; break;
}
break;
}
break;
default: break;
}
}
$cnt=0;
$fragments = array();
$source = str_replace(array('{{','}}'),array('<?=','?>'),$source);
foreach(explode('{%',$source) as $tmp) {
foreach(explode('%}',$tmp) as $item) {
$fragments[] = $cnt++%2?'<?php '.microtwig_parsecmd(trim($item)).'?>':$item;
}
}
return implode('',$fragments);
}
echo microtwig_compile($source);
Warning: Undefined variable $test in /in/PifBP on line 8
Warning: Undefined variable $post in /in/PifBP on line 14
Warning: Undefined variable $posts in /in/PifBP on line 14
Warning: Undefined array key 2 in /in/PifBP on line 32
This is a test
<?php function block_hello(){?>
This is a test
This is a <?= ?>
<?php }?>
<?= block('hello') ?>
<?php foreach( as in):?>
<?php endforeach;?>
Notice: Undefined variable: test in /in/PifBP on line 8
Notice: Undefined variable: post in /in/PifBP on line 14
Notice: Undefined variable: posts in /in/PifBP on line 14
Notice: Undefined offset: 2 in /in/PifBP on line 32
This is a test
<?php function block_hello(){?>
This is a test
This is a <?= ?>
<?php }?>
<?= block('hello') ?>
<?php foreach( as in):?>
<?php endforeach;?>
Output for 7.3.32 - 7.3.33
This is a test
<?php function block_hello(){?>
This is a test
This is a <?= ?>
<?php }?>
<?= block('hello') ?>
<?php foreach( as in):?>
<?php endforeach;?>
Notice: Undefined variable: test in /in/PifBP on line 14
Notice: Undefined variable: post in /in/PifBP on line 14
Notice: Undefined variable: posts in /in/PifBP on line 16
Notice: Undefined offset: 2 in /in/PifBP on line 32
This is a test
<?php function block_hello(){?>
This is a test
This is a <?= ?>
<?php }?>
<?= block('hello') ?>
<?php foreach( as in):?>
<?php endforeach;?>