<?php
function tpl_engine($tpl_instance,$tpl_name,$type=0,$compile_type="debug"){
	global $skinUrl;
	$base_root=preg_match("/\//",$tpl_name);
	$allow_file_array=array("home.html","home.htm","index.html","index.htm","main.html","main.htm");
	$is_allow=in_array($tpl_name,$allow_file_array);
	$creat_path="../";
	$model_path="../models/";
	$tpl_path="../templates/".$tpl_instance."/";
	if($type==1){
		$creat_path="";
		$model_path="models/";
		$tpl_path="templates/".$tpl_instance."/";
	}
		$q_creat_path="";
		$q_model_path="models/";
		$q_tpl_path="templates/".$tpl_instance."/";
	if($base_root==false&&$is_allow==false){
		if($type==0){
			echo "<font color='red'>".$tpl_path.$tpl_name."不允許進行編譯</font><br />";
		}
	}else{
		$tmp_url_array=explode("/",$tpl_name);
		$last_dir='';
		foreach($tmp_url_array as $rs){
			if(preg_match("/\.[htm]/",$rs)){
				$tmp_fname=get_filename($tpl_name);
				$tpl_file=@file_get_contents($tpl_path.$tpl_name);//编译对应的template文件
				$model_file_url=$model_path.$tmp_fname;
				$model_file=@file_get_contents($model_file_url);//编译对应的model文件
				$tpl_file=preg_replace("/skin\/$tpl_instance\/((?!(js)|(home))\w+)\//",'skin/<?php echo $skinUrl;?>/',$tpl_file);
				$model_file=preg_replace("/skin\/$tpl_instance\/((?!(js)|(home))\w+)\//",'skin/$skinUrl/',$model_file);
				$compile_file=$model_file.tpl_compile($tpl_file);
				if($compile_type=='debug'){
$compile_file = '<?php
/*
 * 此段代碼由debug模式下生成運行，請勿改動！
 * 如果debug模式下出錯不能再次自動編譯時，請進入後台手動編譯！
 */
/* debug模式運行生成代碼 開始 */
if(!function_exists("tpl_engine")) {
	require("foundation/ftpl_compile.php");
}
if(filemtime("'.$q_tpl_path.$tpl_name.'") > filemtime(__file__) || (file_exists("'.$q_model_path.$tmp_fname.'") && filemtime("'.$q_model_path.$tmp_fname.'") > filemtime(__file__)) ) {
	tpl_engine("'.$tpl_instance.'","'.$tpl_name.'",1);
	include(__file__);
}else {
/* debug模式運行生成代碼 結束 */
?>'.$compile_file;
}

$compile_file = '<?php
/*
 * 注意：此文件由tpl_engine編譯型模板引擎編譯生成。
 * 如果您的模板要進行修改，請修改'.$q_tpl_path.$tpl_name.'
 * 如果您的模型要進行修改，請修改'.$q_model_path.$tmp_fname.'
 *
 * 修改完成之後需要您進入後台重新編譯，才會重新生成。
 * 如果您開啟了debug模式運行，那麼您可以省去上面這一步，但是debug模式每次都會判斷程序是否更新，debug模式只適合開發調試。
 * 如果您正式運行此程序時，請切換到service模式運行！
 *
 * 如有您有問題請到官方論壇（http://tech.jooyea.com/bbs/）提問，謝謝您的支持。
 */
?>'.$compile_file;

if($compile_type=='debug'){
	$compile_file .= "<?php } ?>";
}

				$creat_file=$creat_path.$tmp_fname;
				$fileob=fopen($creat_file,"w+");
				$num=fwrite($fileob,$compile_file);
				if($num>0){
					if($type==0){
						echo $tpl_path.$tpl_name." 編譯成功! <br />";
					}
				}else{
					if($type==0){
						echo $tpl_path.$tpl_name." <font color='red'> 編譯失敗! </font><br />";
					}
				}
			}else{
				if(!file_exists("../".$last_dir.$rs)){
					mkdir("../".$last_dir.$rs);
				}
				$last_dir=$rs."/".$last_dir;
			}
		}
	}
}

function tpl_compile($str){
	$tplTags=array(
								';/}',
								'{inc:',
								'{echo:',
								'{sta:',
								'[loop]}',
								'{end:',
								'foreach/}',
								'[exc]}',
								'if/}'
						);
	$phpCodes=array(
								';?>',
								'<?php ',
								'<?php echo ',
								'<?php ',
								'{?>',
								'<?php ',
								'}?>',
								'{?>',
								'}?>'
						);
  $str=lpstr_format($str);
  return str_replace($tplTags,$phpCodes,$str);
}


function lpstr_format($str){
	
	preg_match_all("/lp\{[a-zA-Z0-9]{1,4}\_/",$str,$PreStr);//取得前缀名
	preg_match_all("/lp\{[\w]+}/",$str,$BackStr);//取得语言包名
	
	$No_PreStr=str_replace("}","",str_replace("lp{","langpackage->",$BackStr[0]));
	
	$Pre_Str=str_replace("lp{","$",$PreStr[0]);
	
	$i=0;
	$finnal_arr=array();
	foreach($Pre_Str as $tmp_Str){
		 $finnal_arr[$i]=$tmp_Str.$No_PreStr[$i];
		 $i++;
	}

	return str_replace($BackStr[0],$finnal_arr,$str);
}


function get_filename($tpl_name){
	 return str_replace(array('.html','.htm'),'.php',$tpl_name);
}
?>