');
static $t2 = array('&', '<', '>');
return '
' . str_replace($t1, $t2, $t) . '
';
}
// http://doc.spip.org/@filtre_text_csv_dist
function filtre_text_csv_dist($t)
{
$virg = substr_count($t, ',');
$pvirg = substr_count($t, ';');
$tab = substr_count($t, "\t");
if ($virg > $pvirg)
{ $sep = ','; $hs = ',';}
else { $sep = ';'; $hs = ';'; $virg = $pvirg;}
if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
$t = preg_replace('/\r?\n/', "\n",
preg_replace('/[\r\n]+/', "\n", $t));
// un separateur suivi de 3 guillemets attention !
// attention au ; suceptible d'etre confondu avec un separateur
// on substitue un # et on remplacera a la fin
$t = preg_replace("/([\n$sep])\"\"\"/",'\\1""#',$t);
$t = str_replace('""','"#',$t);
preg_match_all('/"[^"]*"/', $t, $r);
foreach($r[0] as $cell)
$t = str_replace($cell,
str_replace($sep, $hs,
str_replace("\n", "
",
substr($cell,1,-1))),
$t);
list($entete, $corps) = explode("\n",$t,2);
$caption = '';
// sauter la ligne de tete formee seulement de separateurs
if (substr_count($entete, $sep) == strlen($entete)) {
list($entete, $corps) = explode("\n",$corps,2);
}
// si une seule colonne, en faire le titre
if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
$caption = "\n||" . $l[1] . "|";
list($entete, $corps) = explode("\n",$corps,2);
}
// si premiere colonne vide, le raccourci doit quand meme produire 0
AND preg_match("/^$sep*$/", $lignes[count($lignes)-1]))
unset($lignes[count($lignes)-1]);
// calcul du nombre de colonne a chaque ligne
$nbcols = array();
$max = $mil = substr_count($entete, $sep);
foreach($lignes as $k=>$v) {
if ($max <> ($nbcols[$k]= substr_count($v, $sep))) {
if ($max > $nbcols[$k])
$mil = $nbcols[$k];
else { $mil = $max; $max = $nbcols[$k];}
}
}
// Si pas le meme nombre, cadrer au nombre max
if ($mil <> $max)
foreach($nbcols as $k=>$v) {
if ($v < $max) $lignes[$k].= str_repeat($sep, $max-$v);
}
// et retirer les colonnes integralement vides
while(true) {
$nbcols = ($entete[strlen($entete)-1]===$sep);
foreach($lignes as $v) $nbcols &= ($v[strlen($v)-1]===$sep);
if (!$nbcols) break;
$entete = substr($entete,0,-1);
foreach($lignes as $k=>$v) $lignes[$k] = substr($v,0,-1);
}
$corps = join("\n", $lignes) . "\n";
$corps = $caption .
"\n|{{" .
str_replace($sep,'}}|{{',$entete) .
"}}|" .
"\n|" .
str_replace($sep,'|',str_replace("\n", "|\n|",$corps));
$corps = str_replace('"#','"',$corps);
include_spip('inc/texte');
return propre($corps);
}
// Incrustation de HTML, si on est capable de le securiser
// sinon, afficher le source
// http://doc.spip.org/@filtre_text_html_dist
function filtre_text_html_dist($t)
{
if (!preg_match(',^(.*?)]*>(.*),is', $t, $r))
return appliquer_filtre($t,'text/plain');
list(,$h,$t) = $r;
$style = '';
// recuperer les styles internes
if (preg_match_all(',,is', $h, $r, PREG_PATTERN_ORDER))
$style = join("\n",$r[1]);
// ... et externes
include_spip('inc/distant');
if (preg_match_all(',]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER))
foreach($r[0] as $l) {
preg_match("/href='([^']*)'/", str_replace('"',"'",$l), $m);
$style .= "\n/* $l */\n"
. str_replace('<','',recuperer_page($m[1]));
}
// Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
$t = safehtml(preg_replace(',,is','',$t));
return (!$style ? '' : "\n") . $t;
}
// http://doc.spip.org/@filtre_audio_x_pn_realaudio
function filtre_audio_x_pn_realaudio($id)
{
return "
";
}
?>