Проверить как работает: http://hight.fatal.ru/bbcode/ Скачать исходники: http://hight.fatal.ru/bbcode/bbcode.zip
какие бб коды без меня? и йа участвую PHP: <? class bbcodes { public static $cnf=array(); public $ident,$bbdata_reg,$bbdata_rep,$tags,$rep; function __construct($ident,$cnf=0) { if($cnf)self::$cnf=$cnf; if(!self::$cnf) trigger_error("Ошибка: Переменная конфигурации не определена",E_USER_ERROR); $this->ident=$ident; $this->ChanceCheckBBData(); } private function ChanceCheckBBData(){ if($this->Is_BBData()){ include $this->GetBBDir(); $this->bbdata_reg=$data['reg']; $this->bbdata_rep=$data['rep']; } return false; } function Is_BBData() { if(file_exists($this->GetBBDir())) return true; return false; } function BBSet($tag,$attr=0) { if(!is_array($tag)) { $this->tags[]=array($tag,$attr); }else{ foreach($tag as $key=>$val){ if(is_numeric($key)) $this->BBSet($val); else $this->BBSet($key,$val); } } } function RepSet($tag,$attr=0) { if(!is_array($tag)) { $this->rep[]=array($tag,$attr); }else{ foreach($tag as $key=>$val){ if(is_numeric($key)) $this->RepSet($val); else $this->RepSet($key,$val); } } } function BBParse($text){ if($this->tags && $this->rep && (!$this->bbdata_rep || !$this->bbdata_reg)) $this->CompileRegular(); $text=preg_replace($this->bbdata_reg['is'],$this->bbdata_rep['is'],$text); return $text; } function R_BBParse($text){ if($this->tags && $this->rep && (!$this->bbdata_rep || !$this->bbdata_reg)) $this->CompileRegular(); $text=preg_replace($this->bbdata_reg['re'],$this->bbdata_rep['re'],$text); return $text; } private function CompileRegular(){ for($i=0,$c=count($this->tags);$i<$c;$i++){ $regsum=array();$z=1; $tag='#\['.quotemeta($this->tags[$i][0]); $retag="[".$this->tags[$i][0]; if(is_array($attr=$this->tags[$i][1])){ if(in_array('MainAttr',$attr)){ $tag.="\=(.+?)"; $retag.="=\\1"; $regsum['to'][]="{MainAttr}"; $regsum['on'][]="\\1"; $z++; } foreach($attr as $key=>$val){ if($val=='MainAttr') continue; $tag.="[\s]+$val\=(.+?)"; $retag.=" ".$val."=\\".$z; $regsum['to'][]="{".$val."}"; $regsum['on'][]="\\".$z; $z++; } } $tag.="\](?s)(.+?)\[\/".quotemeta($this->tags[$i][0])."\]#i"; $retag.=']\\'.$z.'[/'.$this->tags[$i][0].']'; $this->bbdata_reg['is'][]=$tag; $this->bbdata_rep['re'][]=$retag; $tag=$this->rep[$i][0]; $attr=$this->rep[$i][1]; $reptag="<$tag"; $rereptag="#<".quotemeta($tag); if($attr) { $reptag.=" ".$attr; $reptag=str_replace($regsum['to'],$regsum['on'],$reptag); $rereptag.=" ".preg_replace("#{(.+)}#iU","(.+?)",quotemeta($attr)); } $reptag.=">\\".$z."</".$tag.">"; $rereptag.=">(?s)(.+?)<\/".quotemeta($tag).">#i"; $this->bbdata_rep['is'][]=$reptag; $this->bbdata_reg['re'][]=$rereptag; } } function Clear($ident=0){ if(!$ident) $ident=$this->ident; $dir=$this->GetBBDir(); if(file_exists($dir)){ if(unlink($dir)){ $this->bbdata_reg=''; $this->bbdata_rep=''; return true; } } return false; } private function GetBBDir(){ return $_SERVER['DOCUMENT_ROOT'].'/'.self::$cnf['bb_data_dir'].'/'.$this->ident.".php"; } function __destruct() { $dir=$this->GetBBDir(); if(!file_exists($dir) && $this->bbdata_reg && $this->bbdata_rep) { $out="<?\$data['reg']=".var_export($this->bbdata_reg,1)."; \$data['rep']=".var_export($this->bbdata_rep,1).";?".">"; file_put_contents($dir,$out); } } } bbcodes::$cnf=array("bb_data_dir"=>"bbcodes"); $bb=new bbcodes("newbb"); $bb->BBSet(array( "b","size"=>array("MainAttr"), "align"=>array("MainAttr","color"), )); $bb->RepSet(array( "b","font"=>"style='font-size:{MainAttr}px'", "div"=>"align='{MainAttr}' style='color:{color};'" )); // ЗНАК '-' В ББ КОДАХ УБРАТЬ $v=$bb->BBParse(" dfsdfsdfsdf sf[-b]sdfsdfs[/b]df sd[-align=center color=red]fsdfsdfsdfsdfsdf[/align] s[-size=25]dfsdfs[/size]df "); print "BB:".$v."<br>"; print "REE: ".$bb->R_BBParse($v); ?> кстати почему у меня не заработало именное сохранение? (?<Name>RegExp)
Mr.M.I.T. Блин, не могу твою кашу разобрать. Ты бы лучше где-нибудь страничку с тестом этого дела сделал для наглядности и исходники выложил в архивчике. А то тут с этой подсветкой глаза сломать можно.
Hight лень вот же примерчик PHP: <? bbcodes::$cnf=array("bb_data_dir"=>"bbcodes"); $bb=new bbcodes("newbb"); $bb->BBSet(array( "b","size"=>array("MainAttr"), "align"=>array("MainAttr","color"), )); $bb->RepSet(array( "b","font"=>"style='font-size:{MainAttr}px'", "div"=>"align='{MainAttr}' style='color:{color};'" )); // ЗНАК '-' В ББ КОДАХ УБРАТЬ $v=$bb->BBParse(" dfsdfsdfsdf sf[-b]sdfsdfs[/b]df sd[-align=center color=red]fsdfsdfsdfsdfsdf[/align] s[-size=25]dfsdfs[/size]df "); print "BB:".$v."<br>"; print "REE: ".$bb->R_BBParse($v); ?> а мне кстати подсветка нравится, лучше чем у меня в редакторе =)
А у меня синглетон видел?! Удобная штука. Ещё думаю научить свой классик видео на страничке показывать.