fix #2 and directly trim on the global regex

master
Rémi Passerieu 6 years ago
parent d02867eb5d
commit 018785867f

@ -65,12 +65,15 @@ class TplBlock {
$this->subBlocs[$bloc->name][] = $bloc;
}
private function subBlockRegex($prefix, $blocName) {
private function subBlockRegex($prefix, $blocName,$trim = true) {
echo "t".$trim;
return '/'
. self::blockStartStart
. preg_quote($prefix . $blocName)
. self::blockStartEnd
. (($trim === false)? '' : '(?:\R|)?' )
. '(.*?)'
. (($trim === false)? '' : '(?:\R|)?' )
. self::blockEndStart
. preg_quote($prefix . $blocName)
. self::blockEndEnd
@ -78,7 +81,8 @@ class TplBlock {
}
/*
* Shake template and input vars and returns the text
* Shake the template string and input vars
* Then returns the parsed text
* Input:
* $str String containing the template to parse
* $subBlocsPath String optional, for this class internal use. The path like "bloc.subbloc"
@ -100,7 +104,7 @@ class TplBlock {
//parse blocs
foreach($this->subBlocs as $blocName => $blocsArr){
$str = preg_replace_callback(
$this->subBlockRegex($prefix, $blocName),
$this->subBlockRegex($prefix, $blocName, $trim),
function($m) use($blocName,$blocsArr,$prefix, $trim) {
$out = "";
foreach($blocsArr as $bloc){
@ -115,12 +119,8 @@ class TplBlock {
// Delete unused blocs
$str = preg_replace($this->unusedRegex, "", $str);
if($trim){
return trim($str,"\n");
}else{
return $str;
}
return $str;
}
/*

@ -44,4 +44,4 @@ for ($i = 2; $i < 121; $i++){
echo $tpl->apply_tpl_file("tpl.txt",true);
echo $tpl->apply_tpl_file("tpl.txt");

@ -0,0 +1,15 @@
hello {{title}} {{name}} {{firstname}}
The first primes numbers are:
<!-- BEGIN primes -->
- {{primes.number}}
<!-- END primes -->
Lets list all divisors of:
<!-- BEGIN number -->
{{number.value}} Have those divisors:
<!-- BEGIN number.divisor -->
- {{number.divisor.value}}
<!-- END number.divisor -->
<!-- END number -->

@ -0,0 +1,47 @@
<?php
include("../class.TplBlock.php");
$tpl = new TplBlock();
//simples vars
$tpl->add_vars(array(
"name" => "Gnieark",
"title" => "Monsieur",
"firstname" => "Grouik"
)
);
$primes = array(1,2,3,5,7,11);
// a sub bloc
foreach($primes as $prime){
$tplPrime = new TplBlock('primes');
$tplPrime->add_vars(array('number' => $prime));
$tpl->add_sub_block($tplPrime);
}
// test sub - sub blocs
for ($i = 2; $i < 121; $i++){
$tplNumber = new TplBlock('number');
$tplNumber->add_vars( array("value" => $i));
$index = 1;
$number = $i;
while ( $number > 1 && $index < count($primes)){
if($number % $primes[$index] == 0){
$number = $number / $primes[$index];
$tplDivisor = new TplBlock("divisor");
$tplDivisor->add_vars( array("value" => $primes[$index]));
$tplNumber->add_sub_block($tplDivisor);
}else{
$index++;
}
}
$tpl->add_sub_block($tplNumber);
}
echo $tpl->apply_tpl_file("sample.txt",false);
Loading…
Cancel
Save