X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Ffiltres_mime.php;fp=www%2Fecrire%2Finc%2Ffiltres_mime.php;h=5ca260dc237c5975721dfe348675d86cb2c63187;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/filtres_mime.php b/www/ecrire/inc/filtres_mime.php new file mode 100644 index 0000000..5ca260d --- /dev/null +++ b/www/ecrire/inc/filtres_mime.php @@ -0,0 +1,148 @@ +' . echapper_tags($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 " + + + + + "; +} +?>