プログラム
/**
* Smarttemplate テンプレート ハンドラー フレームワークを生成します
*
* Smarttemplate テンプレート クラスは、作業効率が非常に高く、コード サイズが小さいです。
* 彼の拡張可能なテンプレート機能はさらにユニークです。
*
* 方法は少ないですが、使い方はとても簡単です。
* ただし、テンプレートファイルを調整しすぎると、ハンドラーをテンプレートに対応させるのに時間がかかります。
* このプログラムは、テンプレート ファイルを分析し、テンプレート処理プログラムのフレームワークを提供するために使用されます
**/
ob_start();
$Template_name = "include/main.html";
$str = file_get_contents($Template_name);
preg_match_all("/|{w.*}/U",$str,$regs);
$stack = array();
$vars = array();
$functions = array();
$key = 0; // = chr(ord("i")+count($stack));
$LF = "rn";
$outstr = "";
foreach($regs[0] as $v) {
if( preg_match_all("//",$v, $r)) {
array_push($stack,$r[1][0]);
$k = chr( ord("i")+$key++);
$outstr .= str_repeat(chr(9), $key-1)."/* 对数组 ${$r[1][0]} 赋值 */$LF ";
$outstr .= str_repeat(chr(9), $key-1)."for($$k=0;$$k<1;$$k++) {$LF";
}elseif(preg_match_all( "//",$v, $r)) {
$v = array_pop($stack);
$outstr .= str_repeat(chr(9), -- $key)."}$LF";
if($key) {
$k = chr(ord("i")+$key-1);
$p = $stack[$key-1];
$outstr .= str_repeat(chr(9), $key)."${$p}[$$k][$v] = $$v;$LF";
}else
$outstr .= "$data [$v] = $$v;$LF";
}elseif(preg_match_all("/{(w+)}/",$v, $r)) {
if(count($stack)) {
$v = $stack[$key-1];
$k = chr(ord("i")+$key-1);
$outstr .= str_repeat(chr(9), count($stack))."$ {$v}[$$k][{$r[1][0]}] = '{$r[1][0]}测试';$LF";
$ch = "$data[". join("][][",$stack)."][{$r[1][0]}]";
if(! in_array($ch, $vars))
$vars[] = $ch;
}else
if(! in_array("$data[{$r[1][0]}]", $vars)) {
$vars[] = "$data[{$r[1][0]}]";
$outstr .= "$data[{$r[1][0]}] = '{$r[1] [0]}测试';$LF";
}
}elseif(preg_match_all("/{(w+):([^}]+)/",$v, $r)) {
$ch = $r [1][0]."({$r[2][0]})";
$define = true;
if(! @include("smarttemplate_extensions/smarttemplate_extension_serverr.php"))
$define = false;
$functions[] = array(name=>$ch,define=>$define);
foreach(split(",",$r[2][0]) as $v)
if($v [0] != '"')
if(! in_array($v, $vars)) {
$vars[] = "$data[$v]";
$outstr .= "$data[$v] = '$v测试';$LF";
}
}elseif(preg_match_all("/