5ca260dc237c5975721dfe348675d86cb2c63187
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2011 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14 include_spip('inc/filtres');
16 // Fichier des filtres d'incrustation d'un document selon son type MIME
17 // Les 7 familles de base ne font rien sauf celle des textes
19 function filtre_image_dist($t) {return '';}
20 function filtre_audio_dist($t) {return '';}
21 function filtre_video_dist($t) {return '';}
22 function filtre_application_dist($t) {return '';}
23 function filtre_message_dist($t) {return '';}
24 function filtre_multipart_dist($t) {return '';}
26 // http://doc.spip.org/@filtre_text_txt_dist
27 function filtre_text_dist($t) {
28 return '<pre>' . echapper_tags($t) . '</pre>';
31 // http://doc.spip.org/@filtre_text_csv_dist
32 function filtre_text_csv_dist($t)
34 $virg = substr_count($t, ',');
35 $pvirg = substr_count($t, ';');
36 $tab = substr_count($t, "\t");
38 { $sep = ','; $hs = ',';}
39 else { $sep = ';'; $hs = ';'; $virg = $pvirg;}
40 if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
42 $t = preg_replace('/\r?\n/', "\n",
43 preg_replace('/[\r\n]+/', "\n", $t));
44 // un separateur suivi de 3 guillemets attention !
45 // attention au ; suceptible d'etre confondu avec un separateur
46 // on substitue un # et on remplacera a la fin
47 $t = preg_replace("/([\n$sep])\"\"\"/",'\\1""#',$t);
48 $t = str_replace('""','"#',$t);
49 preg_match_all('/"[^"]*"/', $t, $r);
50 foreach($r[0] as $cell)
51 $t = str_replace($cell,
52 str_replace($sep, $hs,
53 str_replace("\n", "<br />",
56 list($entete, $corps) = explode("\n",$t,2);
58 // sauter la ligne de tete formee seulement de separateurs
59 if (substr_count($entete, $sep) == strlen($entete)) {
60 list($entete, $corps) = explode("\n",$corps,2);
62 // si une seule colonne, en faire le titre
63 if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
64 $caption = "\n||" . $l[1] . "|";
65 list($entete, $corps) = explode("\n",$corps,2);
67 // si premiere colonne vide, le raccourci doit quand meme produire <th...
68 if ($entete[0] == $sep) $entete = ' ' . $entete;
70 $lignes = explode("\n", $corps);
71 // retrait des lignes vides finales
72 while(count($lignes) > 0
73 AND preg_match("/^$sep*$/", $lignes[count($lignes)-1]))
74 unset($lignes[count($lignes)-1]);
75 // calcul du nombre de colonne a chaque ligne
77 $max = $mil = substr_count($entete, $sep);
78 foreach($lignes as $k=>$v) {
79 if ($max <> ($nbcols[$k]= substr_count($v, $sep))) {
80 if ($max > $nbcols[$k])
82 else { $mil = $max; $max = $nbcols[$k];}
85 // Si pas le meme nombre, cadrer au nombre max
87 foreach($nbcols as $k=>$v) {
88 if ($v < $max) $lignes[$k].= str_repeat($sep, $max-$v);
90 // et retirer les colonnes integralement vides
92 $nbcols = ($entete[strlen($entete)-1]===$sep);
93 foreach($lignes as $v) $nbcols &= ($v[strlen($v)-1]===$sep);
95 $entete = substr($entete,0,-1);
96 foreach($lignes as $k=>$v) $lignes[$k] = substr($v,0,-1);
98 $corps = join("\n", $lignes) . "\n";
101 str_replace($sep,'}}|{{',$entete) .
104 str_replace($sep,'|',str_replace("\n", "|\n|",$corps));
105 $corps = str_replace('"#','"',$corps);
106 include_spip('inc/texte');
107 return propre($corps);
110 // Incrustation de HTML, si on est capable de le securiser
111 // sinon, afficher le source
112 // http://doc.spip.org/@filtre_text_html_dist
113 function filtre_text_html_dist($t)
115 if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r))
116 return appliquer_filtre($t,'text/plain');
121 // recuperer les styles internes
122 if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER
))
123 $style = join("\n",$r[1]);
126 include_spip('inc/distant');
127 if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER
))
128 foreach($r[0] as $l) {
129 preg_match("/href='([^']*)'/", str_replace('"',"'",$l), $m);
130 $style .= "\n/* $l */\n"
131 . str_replace('<','',recuperer_page($m[1]));
133 // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
134 $t = safehtml(preg_replace(',<script.*?</script>,is','',$t));
135 return (!$style ?
'' : "\n<style>$style</style>") . $t;
138 // http://doc.spip.org/@filtre_audio_x_pn_realaudio
139 function filtre_audio_x_pn_realaudio($id)
142 <param name='controls' value='PositionSlider' />
143 <param name='controls' value='ImageWindow' />
144 <param name='controls' value='PlayButton' />
145 <param name='console' value='Console$id' />
146 <param name='nojava' value='true' />";