"-", "—" => "-", "‘" => "'",
"’" => "'", "…" => "...", "“" => "\"", "”" => "\"", " "=>" ",
#"<"=>"<", ">"=>">",
"œ"=>"oe","…"=>"...","’"=>"'");
$texte = strtr($texte,$unicode);
$texte = str_replace("\r\n","\n",$texte);
$texte = str_replace("\r","",$texte);
$texte = str_replace("\t"," ",$texte);
$texte = stripslashes($texte);
return $texte;
}
// nettoyage suivant l'appel d'une fonction
function nettoyer_apres($texte)
{
$texte = trim($texte);
// retours à la ligne
$texte = nl2br($texte);
$texte = str_replace("
\n
\n","
\n",$texte);
$texte = "
".$texte."
";
$texte = str_replace("\\a","\n",$texte); // Pour les retours à la ligne de formatage du code
if($this->parse_urls == "oui") { // URLs (+ gestion des liens Peercast et ed2k)
$texte = eregi_replace(
"(^|[ \t\r\n>])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|peercast|ed2k):".
"[A-Za-z0-9/](([A-Za-z0-9$|.+!*(),;/?:@&~=_#-])|%[A-Fa-f0-9]{2})+)","\\1\\2",$texte);
$texte = eregi_replace("(^|[ \t\r\n>])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)",
"\\0", $texte);
}
return $texte;
}
function transform($texte)
{
if($this->nettoyages == "oui") $texte = $this->nettoyer_avant($texte);
// Raccourcis simples: intertitres, gras, italique
$tablo = array("{{{" => "", "}}}" => "
", "{{" => "",
"}}" => "", "{" => "", "}" => "");
$texte = strtr($texte,$tablo);
$texte = ereg_replace("----+","
",$texte); // Barres horizontales
// Puces (ne prend pas en compte les niveaux de profondeurs, du moins pas encore)
$texte = ereg_replace("(^|\n)-([*#]+)?","\\1",$texte);
// Pour les liens spécifiques vers des articles, des brèves ou des rubriques: [Article->112]
// A décommenter si vous voyez l'utilité de ces liens.
// Attention: les liens de type [->article 3212] ne sont pas gérés, cette classe ne pouvant
// récupérer le titre de l'article.
#$texte = preg_replace("/\[([^\n]+)-(>|>)(ecrit|ecrit )?([0-9]+)\]/Ui","\\1",$texte);
# $texte = preg_replace("/\[([^\n]+)-(>|>)(br|breve |brève )([0-9]+)\]/Ui","\\1",$texte);
# $texte = preg_replace("/\[([^\n]+)-(>|>)(rub|rubrique )([0-9]+)\]/Ui","\\1",$texte);
// Liens
$texte = preg_replace("/\[([^\n]+)-(>|>)([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)\]/Ui",
"\\1",$texte);
$texte = preg_replace("/\[([^\n]+)-(>|>)([^\]]+)\]/Ui","\\1",$texte);
// Notes de bas de page
preg_match_all("/\[\[([^\]]+)\]\]/Ui",$texte,$out,PREG_SET_ORDER);
$a = 1;
for($i=0; $i < count($out); $i++)
{
if(preg_match("/(<|<)([^> &]+)(>|>)/Ui",$out[$i][1],$out2)) {
$note = $out2[2];
$out[$i][1] = str_replace($out2[0],"",$out[$i][1]);
}
else {
$note = $a;
$a++;
}
$texte = str_replace($out[$i][0],
'['.$note.']',$texte);
if($i == 0) $texte.= '
';
$texte.= '- ['.$note.'] '.$out[$i][1].'
\\a';
if($i == count($out)-1) $texte.= '
';
}
// Tableaux (piqué directement dans spip même si j'aimerais refaire ça avec des regex)
$texte = ereg_replace("^\n?\|","\n\n|",$texte);
$texte = ereg_replace("\|\n?$","|\n\n",$texte);
$tableBeginPos = strpos($texte, "\n\n|");
$tableEndPos = strpos($texte, "|\n\n");
while(is_integer($tableBeginPos) && is_integer($tableEndPos) && $tableBeginPos < $tableEndPos + 3)
{
$textBegin = substr($texte, 0, $tableBeginPos);
$textTable = substr($texte, $tableBeginPos + 2, $tableEndPos - $tableBeginPos);
$textEnd = substr($texte, $tableEndPos + 3);
$newTextTable = "\n\n
";
if($this->xhtml == "oui") $newTextTable = "\n\n";
$rowId = 0;
$lineEnd = strpos($textTable, "|\n");
while(is_integer($lineEnd))
{
$rowId++;
$row = substr($textTable, 0, $lineEnd);
$textTable = substr($textTable,$lineEnd+2);
if ($rowId == 1)// && ereg("^(\\|[[:space:]]*\\{\\{[^}]+\\}\\}[[:space:]]*)+$", $row))
{
$newTextTable .= '';
}
else
{
$newTextTable .= '
';
}
$newTextTable .= ereg_replace("\|([^\|]+)", "\\1 | ", $row);
$newTextTable .= '
';
$lineEnd = strpos($textTable, "|\n");
}
$newTextTable .= "
\n";
$texte = $textBegin . $newTextTable . $textEnd;
$tableBeginPos = strpos($texte, "\n\n|");
$tableEndPos = strpos($texte, "|\n\n");
}
$texte = trim($texte);
if($this->nettoyages == "oui") $texte = $this->nettoyer_apres($texte);
return $texte;
}
}
function spip($texte)
{
$spip = new SPIP();
$texte = $spip->transform($texte);
return $texte;
}
?>