* @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\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] = "
  • ".parent::format($regs[1])."
  • \n"; if($i == count($a) - 1){ // Fin de message $a[$i] .= "\n"; } }else if($inBlock){ // Fin du block $a[$i - 1] .= "\n"; $inBlock = false; $i--; } } // -------------- OL avec # if(self::getOption("ol") && (!$inBlock || ($inBlock && $blockType == "ol"))){ if(!$inBlock && ereg("^ \#(.+)", $a[$i], $regs) !== false){ // Début du block $a[$i] = "
    1. ".parent::format($regs[1])."
    2. \n"; $inBlock = true; $blockType = "ol"; if($i == count($a) - 1){ // Fin de message $a[$i] .= "
    \n"; } }else if($inBlock && ereg("^ \#(.+)", $a[$i], $regs) !== false){ // Intérieur du block $a[$i] = "
  • ".parent::format($regs[1])."
  • \n"; if($i == count($a) - 1){ // Fin de message $a[$i] .= "\n"; } }else if($inBlock){ // Fin du block $a[$i - 1] .= "\n"; $inBlock = false; $i--; } } // -------------- Paragraphe if(!$inBlock && ereg("\n$", $a[$i - 1], $regs) !== false){ $a[$i - 1] = substr($a[$i - 1], 0, strlen($a[$i - 1]) - 5)."
    \n"; $a[$i] = parent::format($a[$i])."

    \n"; }else{ $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 ====================*/ /*========================================================================*/ } ?>