发信人: bb_rain(小雨)
整理人: tang(2001-01-31 09:00:38), 站内信件
|
<?
/******************************************************************************
Template Module for PHP3 & PHP4 ( v 3.00 )
Copyright (C) 2000 heyin.com, All Rights Reserved.
http://www.heyin.com
RAIN ( Email: [email protected] Oicq: 1235686 )
lib_template.php, 2001/01/01
*******************************************************************************/
class CTemplate {
var $path;
var $filename;
var $s;
var $cmode;
var $pmode;
var $blockpatterns = array();
var $patterns = array();
var $cpatterns = array();
var $ppatterns = array();
function CTemplate($Path, $Filename, $CMode=0, $PMode=0) {
$this->path = $Path;
$this->filename = $Filename;
$s = implode('', file($Path.$Filename));
$this->s = preg_replace("/[\s|\=|\"|\']+(\w*\/)/", "{ DOC_PATH }\\1", $s);
$this->cmode = $CMode;
$this->pmode = $PMode;
$blockpatterns[0] = array( "/<!--\s+CB\s+(\w*)\s*([^\|]*)\|*([^>]*)\s+-->(.*)<!--\s+CE\s+\\1\s+-->/sm",
"/<!--\s+CB\s+\$h\s*\$k\|*\$c\s+-->(.*)<!--\s+CE\s+\$h\s+-->/sm" );
$blockpatterns[1] = array( "/<!--\s+RB\s+(\w*)\s*([^\|]*)\|*([^>]*)\s+-->(.*)<!--\s+RE\s+\\1\s+-->/sm",
"/<!--\s+RB\s+\$h\s*\$k\|*\$c\s+-->(.*)<!--\s+RE\s+\$h\s+-->/sm" );
$blockpatterns[2] = array( "/<!--\s+MB\s+(\w*)\s*\|*([^>]*)\s+-->(.*)<!--\s+ME\s+\\1\s+-->/sm",
"/<!--\s+MB\s+\$h\s*\|*\$c\s+-->(.*)<!--\s+ME\s+\$h\s+-->/sm" );
$patterns[0] = array( "/\{\s+(\w+)\s+\}/", "/\{\s+\$k\s+\}/" );
$patterns[1] = array( "/\{\s+(\w*\.*\w+)\.(\w+)\s+\}/", "/\{\s+\$k\.\$v\s+\}/" );
$patterns[2] = array( "/\{\s+(\w+)\(([^\)]*)\)\s+\}/", "/\{\s+\$k\(\$v\)\s+\}/" );
$patterns[3] = array( "/\{\s+(\w+)\[([^\]]*)\]\s+\}/", "/\{\s+\$k\[\$v\]\s+\}/" );
$patterns[4] = array( "/\{\s+GT\s+(\w+)\|*([^\}]+)\s+\}/", "/\{\s+GT\s+\$k\|*\$v\s+\}/" );
$patterns[5] = array( "/\{\s+GC\s+(\w+\,*\w*)\|*([^\}]*)\s+\}/", "/\{\s+GC\s+\$k\|*\$v\s+\}/" );
$patterns[6] = array( "/\{\s+GR\s+(\w+\,*\w*)\|*([^\}]*)\s+\}/", "/\{\s+GR\s+\$k\|*\$v\s+\}/" );
$patterns[7] = array( "/\{\s+ST\s+(\w+\,*\w*\,*\w*)\|*([^\}]*)\s+\}/", "/\{\s+ST\s+\$k\|*\$v\s+\}/" );
$patterns[8] = array( "/\{\s+SN\s+(\w+\,*\w*\,*\w*)\|*([^\}]*)\s+\}/", "/\{\s+SN\s+\$k\|*\$v\s+\}/" );
$patterns[9] = array( "/\{\s+JS\s+(\w*)\s+\}/", "/\{\s+JS\s+\$k\s+\}/" );
$patterns[10] = array( "/\{\s+AD\s+(\w*)\s+\}/", "/\{\s+AD\s+\$k\s+\}/" );
$patterns[11] = array( "/\{\s+COPYRIGHT\s+(\w*)\s+\}/", "/\{\s+COPYRIGHT\s+\$k\s+\}/" );
$cpatterns[0] = array("/\[list\]([^\[]*)\[\/list\]/", "/<UL TYPE=square>\\1<\/UL>/");
$cpatterns[1] = array("/\[list=(\w+)\]([^\[]*)\[\/list\]/", "/<OL TYPE=\\1>\\2<\/OL>/");
$cpatterns[2] = array("/\[\*\]/", "//");
$cpatterns[3] = array("/\[code\]([^\[]*)\[\/code\]/", "/<BLOCKQUOTE>\n<PRE>\n\\1<\/PRE>\n</BLOCKQUOTE>/");
$cpatterns[4] = array( "/\[url\]www.([^\[]*)\[/url\]/","/<A HREF=\"http:\/\/www.\\1\" target=\"_blank\">\\1/");
$cpatterns[5] = array( "/\[url\]http:\/\/([^\[]*)\[/url\]/","/<A HREF=\"\\1\" target=\"_blank\">\\1/");
$cpatterns[6] = array( "/\[url\]([^\[]*)\[/url\]/","/<A HREF=\"http://\\1\" target=\"_blank\">http:\/\/\\1/");
$cpatterns[7] = array("/\[url=\"([^\[]*)\"\]([^\[]*)\[/url\]/","<A HREF=\"\\1\" target=_blank>\\2");
$cpatterns[8] = array("/\[url=([^\[]*)\]([^\[]*)\[/url\]/","<A HREF=\"\\1\" target=_blank>\\2");
$cpatterns[9] = array("/\[email\]([^\[]*)\[/email\]/","<A HREF=\"mailto:\\1\">\\1");
$ppatterns[0] = array("/\[img\]([^\[]*)\[/img\]/","<IMG SRC=\"\\1\" border=\"0\">");
}
function Parse() {
if ($this->cmode==1) $this->s = $this->ParseCode($this->s, $this->cpatterns);
if ($this->pmode==1) $this->s = $this->ParseCode($this->s, $this->ppatterns);
$this->s = $this->ParseCBlock($this->s);
$this->s = $this->ParseRBlock($this->s);
$this->s = $this->ParseFlag($this->s);
$this->s = $this->ParseMBlock($this->s);
print $this->s;
}
function ParseCode($S, $P) {
$count = sizeof($P);
for ($i=0; $i<$count; $i++) {
preg_replace($P[$i][0], $P[$i][1], $S);
}
return $S;
}
function ParseFlag($S, $No=0, $Color='') {
$count = sizeof($this->patterns);
for ($i=0; $i<$count; $i++) {
$size = preg_match_all($this->patterns[$i][0], $S, $OUT);
for ($j=0; $j<$size; $j++) {
$k = $OUT[1][$j];
$v = $OUT[2][$j];
if (!empty($k)) {
eval("\$patterns =\"".$this->patterns[$i][1]."\";");
switch ($i) {
case 0:
switch ($k) {
case "DOC_PATH":
$OutText = $vhis->path;
break;
case "COLOR":
$OutText = $Color[$No%2];
break;
case "I":
$OutText = $No;
break;
default:
$OutText = $GLOBALS[$k];
break;
}
break;
case 1:
$p = explode('.', $k);
$count = sizeof($p);
$ds = ($count>1) ? $p[0] : 'DS';
$as = ($count>1) ? $p[1] : $k;
eval("\$OutText = \$GLOBALS['".$ds."']->DATA[".$as."][".$No."]['".$v."'];");
break;
case 2:
eval("\$OutText = ".$k."(".$v.");");
break;
case 3:
$v = empty($v) ? 0 : str_replace(',', '][', $v);
eval("\$OutText = \$GLOBALS[".$k."][".$v."];");
break;
case 4:
$p = explode(',', trim($v));
$h = new CHtml($GLOBALS[$k], $p);
$OutText = $h->GroupText();
break;
case 5:
$r = explode(',', $k);
$h = new CHtml($GLOBALS[$r[0]], trim($r[1]), $GLOBALS[$r[2]], trim($v));
$OutText = $h->GroupCheck();
break;
case 6:
$r = explode(',', $k);
$h = new CHtml($GLOBALS[$r[0]], trim($r[1]), $GLOBALS[$r[2]], trim($v));
$OutText = $h->GroupRadio();
break;
case 7:
$r = explode(',', $k);
$s = explode(',', $v);
$h = new CHtml($GLOBALS[$r[0]], trim($r[1]), $GLOBALS[$r[2]], trim($s[0]), $GLOBALS[$s[1]]);
$OutText = $h->SelectText();
break;
case 8:
$r = explode(',', $k);
$s = explode(',', $v);
$h = new CHtml($GLOBALS[$r[0]], trim($r[1]), $GLOBALS[$r[2]], trim($s[0]), $GLOBALS[$s[1]]);
$OutText = $h->SelectNum();
break;
case 9:
eval("\$OutText = \$GLOBALS[\'JS".$k."\'];");
break;
case 10:
eval("\$OutText = \$GLOBALS[\'AD".$k."\'];");
break;
case 11:
eval("\$OutText = \$GLOBALS[\'COPYRIGHT".$k."\'];");
break;
}
$S=preg_replace($patterns, $OutText, $S);
}
}
}
return $S;
}
function ParseCBlock($S) {
$count = preg_match_all($this->blockpatterns[1][0], $S, $OUT);
for ($i=0; $i<$count; $i++) {
$h = $OUT[1][$i];
$k = $OUT[2][$i];
$c = $OUT[3][$i];
$v = $OUT[4][$i];
if (!empty($v)) {
$OutText = "";
if (!empty($c)) {
$c = $this->ParseFlag($c);
eval("\$result =".$c.";");
} else $result = TRUE;
if ($result) {
eval("\$patterns =\"".$this->blockpatterns[1][1]."\";");
$k = $this->ParseFlag($k);
$size = explode(',', $k);
$color = (!empty($size[1])) ? explode('/', $size[1]) : '';
for ($j=0; $j<$size[0]; $j++) {
$OutText .= $this->ParseFlag($v, $j, $color);
}
}
$S=preg_replace($patterns, $OutText, $S);
}
}
return $S;
}
function ParseRBlock($S) {
$count = preg_match_all($this->blockpatterns[0][0], $S, $OUT);
for ($i=0; $i<$count; $i++) {
$h = $OUT[1][$i];
$k = $OUT[2][$i];
$c = $OUT[3][$i];
$v = $OUT[4][$i];
if (!empty($v)) {
$OutText = "";
if (!empty($c)) {
$c = $this->ParseFlag($c);
eval("\$result =".$c.";");
} else $result = TRUE;
if ($result) {
eval("\$patterns =\"".$this->blockpatterns[0][1]."\";");
$k = $this->ParseFlag($k);
$size = explode(',', $k);
$color = (!empty($size[1])) ? explode('/', $size[1]) : '';
for ($j=0; $j<$size[0]; $j++) {
$OutText .= $this->ParseFlag($v, $j, $color);
}
}
$S=preg_replace($patterns, $OutText, $S);
}
}
return $S;
}
function ParseMBlock($S) {
$count = preg_match_all($this->blockpatterns[2][0], $S, $OUT);
for ($i=0; $i<$count; $i++) {
$h = $OUT[1][$i];
$c = $OUT[2][$i];
$v = $OUT[3][$i];
if (!empty($v)) {
$OutText = "";
if (!empty($c)) {
$c = $this->ParseFlag($c);
eval("\$result =".$c.";");
} else $result = TRUE;
if ($result) {
eval("\$patterns =\"".$this->blockpatterns[2][1]."\";");
$c = $this->ParseFlag($c);
$OutText = ($this->ParseBool($c)) ? $this->ParseFlag($v) : "";
}
$S=preg_replace($patterns, $OutText, $S);
}
}
return $S;
}
function ParseBool($S) {
$OPList = "AND,OR";
$OPin = 0;
$r=0;
$OP = explode(',', $OPList);
for ($i=0; $i<2; $i++) {
unset($k);
$k = explode($Op[$i], $S);
$count = sizeof($k);
if ($count>1) {
for ($j=0; $j<$count; $j++) {
eval("\$RE = ".$k[$j].";");
$r += ($RE) ? 1 : 0;
}
$OPIN = 1;
}
}
if ($OPIN==0) {
eval("\$RE = ".$S.";");
$r += ($RE) ? 1 : 0;
}
return $r;
}
}
?>
---- HEYIN 软件 http://www.heyin.com
|
|