* @version 2.1 (28/04/2005)
* @link http://resources.neolao.com/php/classes/data/wiki2html
*/
class Wiki2html extends TextFormat{
// ----------------------------- CONSTANTES --------------------------------
// ----------------------------- VARIABLES ---------------------------------
/*=========================== METHODES PRIVEES ===========================*/
/*========================================================================*/
/**
* Initialisation des variables
*/
static protected function _init(){
// Réinitialisation des filtres
parent::_init();
// -------------- URL automatique
if(self::getOption("urlauto")){
self::$patterns[] = '_(^|[^\[\|\(])http://([^ <\r\n\'"]+)_';
self::$replacements[] = '$1http://$2';
}
// -------------- URL avec [[url|titre|langue]]
if(self::getOption("url")){
// [[url]]
self::$patterns[] = "_\[\[([^\|]+)\]\]_";
self::$replacements[] = '$1';
// [[url|titre]]
self::$patterns[] = "_\[\[([^\|]+)\|([^\|]+)\]\]_";
self::$replacements[] = '$2';
// [[url|titre|langue]]
self::$patterns[] = "_\[\[([^\|]+)\|([^\|]+)\|([a-z]+)\]\]_";
self::$replacements[] = '$2';
}
// -------------- STRONG avec **texte**
if(self::getOption("strong")){
self::$patterns[] = "|\*\*([^<]*?)\*\*|";
self::$replacements[] = "$1";
}
// -------------- INS avec __texte__
if(self::getOption("ins")){
self::$patterns[] = "|__([^<]*?)__|";
self::$replacements[] = "$1";
}
// -------------- EM avec ''texte''
if(self::getOption("em")){
self::$patterns[] = "|''([^<]*?)''|";
self::$replacements[] = "$1";
}
// -------------- DEL avec --texte--
if(self::getOption("del")){
self::$patterns[] = "|\-\-([^<]*?)\-\-|";
self::$replacements[] = "$1";
}
// -------------- IMAGE avec ((url))
if(self::getOption("image")){
self::$patterns[] = "_(^| |>|\n)\(\(([^<]*?)\)\)_";
self::$replacements[] = '$1';
}
// -------------- ACRONYM avec ??PC|Personnal Computer??
if(self::getOption("acronym")){
self::$patterns[] = "_\?\?([^\|<]+)\|?([^\|<]+)\?\?_";
self::$replacements[] = '$1';
}
}
/**
* Le traitement de remplacement. Ca passe d'abord par les blocks.
* @param string $text Le texte à formater
* @return string L'équivalent html
*/
static protected function _tagsBlock($text){
// $a = split("\r\n", $text);
$a = split("(\r\n|\r|\n)", $text);
// $a = split("[\r\n]", $text);
$inBlock = false;
for($i=0; $i
";
$inBlock = true;
$blockType = "blockquote";
if($i == count($a) - 1){
// Fin de message
$a[$i] .= "
\n";
}
}else if($inBlock && ereg("^\*\*\*\*$", $a[$i], $regs) === false){
// Toujours dans le block à plusieurs lignes
$a[$i] = parent::format($a[$i])."
\n";
if($i == count($a) - 1){
// Fin de message
$a[$i] .= "\n";
}
}else if($inBlock && ereg("^\*\*\*\*$", $a[$i], $regs) !== false){
// Fin du block à plusieurs lignes
$a[$i] = "\n";
$inBlock = false;
}
}
// -------------- UL avec *
if(self::getOption("ul") && (!$inBlock || ($inBlock && $blockType == "ul"))){
if(!$inBlock && ereg("^ \*(.+)", $a[$i], $regs) !== false){
// Début du block
$a[$i] = "
\n";
}
}else if($inBlock && ereg("^ \*(.+)", $a[$i], $regs) !== false){
// Intérieur du block
$a[$i] = "
\n";
}
}else if($inBlock && ereg("^ \#(.+)", $a[$i], $regs) !== false){
// Intérieur du block
$a[$i] = "
".parent::format($a[$i])."
\n"; } } } } return implode("", $a); } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Reformate le texte * @param string $text Le texte à formater * @return string Le nouveau texte formaté */ static public function format($text){ self::_init(); return self::_tagsBlock($text); } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ } ?>