From 12624d6a8b07e74064cd51792db4695b24fead9b Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 12 Feb 2002 21:46:58 +0000
Subject: [PATCH] reorganisation de inc_texte.php3 en deux parties (inc_texte
 et inc_filtres). Chaque partie est reorganisee de maniere "logique". --Fil

---
 ecrire/accents.php3     |   1 +
 ecrire/aide_droite.php3 |   1 +
 ecrire/inc.php3         |   1 +
 ecrire/inc_filtres.php3 | 361 +++++++++++++++++++++++++++
 ecrire/inc_texte.php3   | 536 +++++++---------------------------------
 inc-calcul.php3         |   1 +
 inc-formulaires.php3    |   1 +
 inc-forum.php3          |   1 +
 inc-public.php3         |  11 +-
 9 files changed, 467 insertions(+), 447 deletions(-)
 create mode 100644 ecrire/inc_filtres.php3

diff --git a/ecrire/accents.php3 b/ecrire/accents.php3
index d28dfeed36..c4cd031402 100644
--- a/ecrire/accents.php3
+++ b/ecrire/accents.php3
@@ -14,6 +14,7 @@ function changer_accents($dir) {
 		if (ereg('\.', $nomfich) && !ereg('(\.php3|\.html)$', $nomfich)) continue;
 		if ($nomfich == 'accents.php3') continue;
 		if ($nomfich == 'inc_texte.php3') continue;
+		if ($nomfich == 'inc_filtres.php3') continue;
 		if ($nomfich == 'inc_index.php3') continue;
 		if ($nomfich == 'inc_mail.php3') continue;
 		$nomfich = "$dir/$nomfich";
diff --git a/ecrire/aide_droite.php3 b/ecrire/aide_droite.php3
index 0776e401bb..7d95fbcedb 100644
--- a/ecrire/aide_droite.php3
+++ b/ecrire/aide_droite.php3
@@ -1,6 +1,7 @@
 <?php
 include ("inc_version.php3");
 include_local ("inc_texte.php3");
+include_local ("inc_filtres.php3");
 ?>
 <HTML>
 <head>
diff --git a/ecrire/inc.php3 b/ecrire/inc.php3
index b3b1eda6a2..c9f9cab3db 100644
--- a/ecrire/inc.php3
+++ b/ecrire/inc.php3
@@ -91,6 +91,7 @@ include_local ("inc_connect.php3");
 include_local ("inc_meta.php3");
 include_local ("inc_auth.php3");
 include_local ("inc_texte.php3");
+include_local ("inc_filtres.php3");
 include_local ("inc_urls.php3");
 include_local ("inc_mail.php3");
 include_local ("inc_admin.php3");
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
new file mode 100644
index 0000000000..c12a4e7b42
--- /dev/null
+++ b/ecrire/inc_filtres.php3
@@ -0,0 +1,361 @@
+<?php
+
+//
+// Ce fichier ne sera execute qu'une fois
+if (defined("_ECRIRE_INC_FILTRES")) return;
+define("_ECRIRE_INC_FILTRES", "1");
+
+//
+// divers
+//
+
+// pour les titres numerotes ("1. Titre" -> "Titre")
+function supprimer_numero($texte) {
+	$texte = ereg_replace("^[[:space:]]*[0-9]+[.)財[[:space:]]+", "", $texte);
+	return $texte;
+}
+
+// suppression basique et brutale de tous les <...>
+function supprimer_tags($texte, $rempl = "") {
+	// super gavant : la regexp ci-dessous plante sous php3, genre boucle infinie !
+	// $texte = ereg_replace("<([^>\"']*|\"[^\"]*\"|'[^']*')*>", $rempl, $texte);
+	$texte = ereg_replace("<[^>]*>", $rempl, $texte);
+	return $texte;
+}
+
+// texte au kilometre
+function textebrut($texte) {
+	$texte = ereg_replace("[\n\r]+", " ", $texte);
+	$texte = eregi_replace("<(p|br)([[:space:]][^>]*)?".">", "\n\n", $texte);
+	$texte = ereg_replace("^\n+", "", $texte);
+	$texte = ereg_replace("\n+$", "", $texte);
+	$texte = ereg_replace("\n +", "\n", $texte);
+	$texte = supprimer_tags($texte);
+	$texte = ereg_replace("(&nbsp;| )+", " ", $texte);
+	return $texte;
+}
+
+// pour ceux qui aiment les liens qui ouvrent une nouvelle fenetre
+function liens_ouvrants ($texte) {
+	return ereg_replace("<a ([^>]*class=\"spip_out\")>",
+		"<a \\1 target=\"_blank\">", $texte);
+}
+
+// corrige les caracteres degoutants
+function corriger_caracteres($texte) {
+	// 145,146,180 = simple quote ; 147,148 = double quote ; 150 = tiret long
+	return strtr($texte, chr(145).chr(146).chr(180).chr(147).chr(148).chr(150), "'''".'""-');
+}
+
+// resserrer les paragraphes pour l'intro
+function PtoBR($texte){
+	$texte = eregi_replace("</p>", "\n", $texte);
+	$texte = eregi_replace("<p([[:space:]][^>]*)?".">", "<br>", $texte);
+	return $texte;
+}
+
+// majuscules y compris accents
+function majuscules($texte) {
+	$suite = htmlentities($texte);
+	$suite = ereg_replace('&amp;', '&', $suite);
+	$suite = ereg_replace('&lt;', '<', $suite); 
+	$suite = ereg_replace('&gt;', '>', $suite); 
+	$texte = '';
+	if (ereg('^(.*)&([A-Za-z])([a-zA-Z]*);(.*)$', $suite, $regs)) {
+		$texte .= majuscules($regs[1]);
+		$suite = $regs[4];
+		$carspe = $regs[2];
+		$accent = $regs[3];
+		if (ereg('^(acute|grave|circ|uml|cedil|slash|caron|ring|tilde|elig)$', $accent))
+			$carspe = strtoupper($carspe); 
+		if ($accent == 'elig') $accent = 'Elig';
+		$texte .= '&'.$carspe.$accent.';';
+	}
+	$texte .= strtoupper($suite);
+	return $texte;
+}
+
+// "127.4 ko" ou "3.1 Mo"
+function taille_en_octets ($taille) {
+	if ($taille < 1024) {$taille .= "&nbsp;octets";}
+	else if ($taille < 1024*1024) {
+		$taille = ((floor($taille / 102.4))/10)."&nbsp;ko";
+	} else {
+		$taille = ((floor(($taille / 1024) / 102.4))/10)."&nbsp;Mo";
+	}
+	return $taille;
+}
+
+
+//
+// date, heure, saisons
+//
+
+function vider_date($letexte) {
+	if (ereg("^0000-00-00", $letexte)) return '';
+	return $letexte;
+}
+
+function recup_heure($numdate){
+	if (!$numdate) return '';
+
+	if (ereg('([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) {
+		$heures = $regs[1];
+		$minutes = $regs[2];
+		$secondes = $regs[3];
+	}
+	return array($heures, $minutes, $secondes);
+}
+
+function heures($numdate) {
+	$date_array = recup_heure($numdate);
+	if ($date_array)
+		list($heures, $minutes, $secondes) = $date_array;
+	return $heures;
+}
+
+function minutes($numdate) {
+	$date_array = recup_heure($numdate);
+	if ($date_array)
+		list($heures, $minutes, $secondes) = $date_array;
+	return $minutes;
+}
+
+function secondes($numdate) {
+	$date_array = recup_heure($numdate);
+	if ($date_array)
+		list($heures,$minutes,$secondes) = $date_array;
+	return $secondes;
+}
+
+function recup_date($numdate){
+	if (!$numdate) return '';
+	if (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})', $numdate, $regs)) {
+		$jour = $regs[1];
+		$mois = $regs[2];
+		$annee = $regs[3];
+		if ($annee < 90){
+			$annee = 2000 + $annee;
+		} else {
+			$annee = 1900 + $annee ;
+		}
+	}
+	elseif (ereg('([0-9]{4})-([0-9]{2})-([0-9]{2})',$numdate, $regs)) {
+		$annee = $regs[1];
+		$mois = $regs[2];
+		$jour = $regs[3];
+	}
+	elseif (ereg('([0-9]{4})-([0-9]{2})', $numdate, $regs)){
+		$annee = $regs[1];
+		$mois = $regs[2];
+	}
+	if ($annee > 4000) $annee -= 9000;
+	if (substr($jour, 0, 1) == '0') $jour = substr($jour, 1);
+
+	return array($annee, $mois, $jour);
+}
+
+
+function affdate_base($numdate, $vue) {
+	global $lang;
+	$date_array = recup_date($numdate);
+	if ($date_array)
+		list($annee, $mois, $jour) = $date_array;
+	else
+		return '';
+
+	if ($mois > 0){
+		$saison = "hiver";
+		if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = "printemps";
+		if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = "彋�";
+		if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = "automne";
+		if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = "hiver";
+	}
+	
+	if ($lang == "fr") {
+		if ($jour == '1') $jour = '1er';
+		$tab_mois = array('',
+			'janvier', 'f憝rier', 'mars', 'avril', 'mai', 'juin',
+			'juillet', 'ao壻', 'septembre', 'octobre', 'novembre', 'd嶰embre');
+		$avjc = ' av. J.C.';
+	}
+	elseif ($lang == "en"){
+		switch($jour) {
+		case '1':
+			$jour = '1st';
+			break;
+		case '2':
+			$jour = '2nd';
+			break;
+		case '3':
+			$jour = '3rd';
+			break;
+		case '21':
+			$jour = '21st';
+			break;
+		case '22':
+			$jour = '22nd';
+			break;
+		case '23':
+			$jour = '23rd';
+			break;
+		case '31':
+			$jour = '31st';
+			break;
+		}
+		$tab_mois = array('',
+			'January', 'February', 'March', 'April', 'May', 'June',
+			'July', 'August', 'September', 'October', 'November', 'December');
+		$avjc = ' B.C.';
+	}
+	if ($jour == 0) $jour = "";
+	if ($jour) $jour .= ' ';
+	$mois = $tab_mois[(int) $mois];
+	if ($annee < 0) {
+		$annee = -$annee.$avjc;
+		$avjc = true;
+	}
+	else $avjc = false;
+
+	switch ($vue) {
+	case 'saison':
+		return $saison;
+
+	case 'court':
+		if ($avjc) return $annee;
+		$a = date('Y');
+		if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee;
+		if ($annee != $a) return ucfirst($mois)." $annee";
+		return $jour.$mois;
+
+	case 'entier':
+		if ($avjc) return $annee;
+		return "$jour$mois $annee";
+
+	case 'mois':
+		return "$mois";
+
+	case 'mois_annee':
+		if ($avjc) return $annee;
+		return "$mois $annee";
+	}
+
+	return '<blink>format non d&eacute;fini</blink>';
+}
+
+function nom_jour($numdate) {
+	global $lang;
+	$date_array = recup_date($numdate);
+	if ($date_array)
+		list($annee,$mois,$jour) = $date_array;
+	else
+		return '';
+
+	if (!$mois OR !$jour) return;
+	
+	$nom = mktime(1,1,1,$mois,$jour,$annee);
+	$nom = date("D",$nom);
+
+	if ($lang == "fr") {
+		switch($nom) {
+			case 'Sun': $nom='dimanche'; break;
+			case 'Mon': $nom='lundi'; break;
+			case 'Tue': $nom='mardi'; break;
+			case 'Wed': $nom='mercredi'; break;
+			case 'Thu': $nom='jeudi'; break;
+			case 'Fri': $nom='vendredi'; break;
+			case 'Sat': $nom='samedi'; break;
+		}
+	}
+	elseif ($lang == "en") {
+		switch($nom) {
+			case 'Sun': $nom='Sunday'; break;
+			case 'Mon': $nom='Monday'; break;
+			case 'Tue': $nom='Tuesday'; break;
+			case 'Wed': $nom='Wednesday'; break;
+			case 'Thu': $nom='Thursday'; break;
+			case 'Fri': $nom='Friday'; break;
+			case 'Sat': $nom='Saturday'; break;
+		}
+	}
+	return $nom;
+}
+
+function jour($numdate) {
+	$date_array = recup_date($numdate);
+	if ($date_array)
+		list($annee,$mois,$jour) = $date_array;
+	else
+		return '';
+	if ($jour=="1") $jour="1er";
+	return $jour;
+}
+
+function mois($numdate) {
+	$date_array = recup_date($numdate);
+	if ($date_array)
+		list($annee,$mois,$jour) = $date_array;
+	else
+		return '';
+	return $mois;
+}
+
+function annee($numdate) {
+	$date_array = recup_date($numdate);
+	if ($date_array)
+		list($annee,$mois,$jour) = $date_array;
+	else
+		return '';
+	return $annee;
+}
+
+function saison($numdate) {
+	return affdate_base($numdate, 'saison');
+}
+
+function affdate($numdate) {
+	return affdate_base($numdate, 'entier');
+}
+
+function affdate_court($numdate) {
+	return affdate_base($numdate, 'court');
+}
+
+function affdate_mois_annee($numdate) {
+	return affdate_base($numdate, 'mois_annee');
+}
+
+function nom_mois($numdate) {
+	return affdate_base($numdate, 'mois');
+}
+
+//
+// alignements
+//
+
+function justifier($letexte) {
+	if ($letexte)
+		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='justify'>", $letexte);
+	return $letexte;
+}
+
+function aligner_droite($letexte) {
+	if ($letexte)
+		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='right'>",$letexte);
+	return $letexte;
+}
+
+function aligner_gauche($letexte) {
+	$letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte));
+	if ($letexte)
+		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='left'>",$letexte);
+	return $letexte;
+}
+
+function centrer($letexte) {
+	$letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte));
+	if ($letexte)
+		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='center'>",$letexte);
+	return $letexte;
+}
+
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 43a02e6a67..fa7eb13b00 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -46,345 +46,120 @@ setlocale('LC_CTYPE', $lang2.'_'.$GLOBALS['lang']) ||
 setlocale('LC_CTYPE', $GLOBALS['lang'].'_'.$lang2);
 
 
-// Securite : empecher l'execution de code PHP
-function interdire_scripts($source) {
-	$source = eregi_replace("<(\%|\?|([[:space:]]*)script)", "&lt;\\1", $source);
-	return $source;
-}
-
-function supprimer_numero($texte) {
-	$texte = ereg_replace("^[[:space:]]*[0-9]+[.)財[[:space:]]+", "", $texte);
-	return $texte;
-}
-
-function supprimer_tags($texte, $rempl = "") {
-	// super gavant : la regexp ci-dessous plante sous php3, genre boucle infinie !
-	// $texte = ereg_replace("<([^>\"']*|\"[^\"]*\"|'[^']*')*>", $rempl, $texte);
-	$texte = ereg_replace("<[^>]*>", $rempl, $texte);
-	return $texte;
-}
-
-function corriger_caracteres($texte) {
-	// corrige les caracteres degoutants
-	// 145,146,180 = simple quote ; 147,148 = double quote ; 150 = tiret long
-	return strtr($texte, chr(145).chr(146).chr(180).chr(147).chr(148).chr(150), "'''".'""-');
-}
+//
+// diverses fonctions essentielles
+//
 
-function PtoBR($texte){
-	$texte = eregi_replace("</p>", "\n", $texte);
-	$texte = eregi_replace("<p([[:space:]][^>]*)?".">", "<br>", $texte);
-	return $texte;
-}
+// ereg_ ou preg_ ?
+function ereg_remplace($cherche_tableau, $remplace_tableau, $texte) {
+	global $flag_preg_replace;
 
-function vider_date($letexte) {
-	if (ereg("^0000-00-00", $letexte)) return '';
-	return $letexte;
-}
+	if ($flag_preg_replace) return preg_replace($cherche_tableau, $remplace_tableau, $texte);
 
-function recup_heure($numdate){
-	if (!$numdate) return '';
+	$n = count($cherche_tableau);
 
-	if (ereg('([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) {
-		$heures = $regs[1];
-		$minutes = $regs[2];
-		$secondes = $regs[3];
+	for ($i = 0; $i < $n; $i++) {
+		$texte = ereg_replace(substr($cherche_tableau[$i], 1, -1), $remplace_tableau[$i], $texte);
 	}
-	return array($heures, $minutes, $secondes);
+	return $texte;
 }
 
-function heures($numdate) {
-	$date_array = recup_heure($numdate);
-	if ($date_array)
-		list($heures, $minutes, $secondes) = $date_array;
-	return $heures;
-}
 
-function minutes($numdate) {
-	$date_array = recup_heure($numdate);
-	if ($date_array)
-		list($heures, $minutes, $secondes) = $date_array;
-	return $minutes;
-}
+// Mise de cote des echappements
+function echappe_html($letexte,$source) {
+	//
+	// Echapper les <code>...</ code>
+	//
+	$regexp_echap = "<code>(([^<]|<[^/]|</[^c]|</c[^o]|</co[^d]|</cod[^e]|<\/code[^>])*)<\/code>";
+	while (eregi($regexp_echap, $letexte, $regs)) {
+		$num_echap++;
+		$lecode = htmlspecialchars($regs[1]);
 
-function secondes($numdate) {
-	$date_array = recup_heure($numdate);
-	if ($date_array)
-		list($heures,$minutes,$secondes) = $date_array;
-	return $secondes;
-}
+		// ne pas mettre le <div...> s'il n'y a qu'une ligne
+		if (is_int(strpos($lecode,"\n")))
+			$lecode = nl2br("<div align='left' class='spip_code'>".trim($lecode)."</div>");
 
-function recup_date($numdate){
-	if (!$numdate) return '';
-	if (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})', $numdate, $regs)) {
-		$jour = $regs[1];
-		$mois = $regs[2];
-		$annee = $regs[3];
-		if ($annee < 90){
-			$annee = 2000 + $annee;
-		} else {
-			$annee = 1900 + $annee ;
-		}
-	}
-	elseif (ereg('([0-9]{4})-([0-9]{2})-([0-9]{2})',$numdate, $regs)) {
-		$annee = $regs[1];
-		$mois = $regs[2];
-		$jour = $regs[3];
-	}
-	elseif (ereg('([0-9]{4})-([0-9]{2})', $numdate, $regs)){
-		$annee = $regs[1];
-		$mois = $regs[2];
+		$lecode = ereg_replace("\t", "&nbsp; &nbsp; &nbsp; &nbsp; ", $lecode);
+		$lecode = ereg_replace("  ", " &nbsp;", $lecode);
+		$les_echap[$num_echap] = "<tt>".$lecode."</tt>";
+		$pos = strpos($letexte, $regs[0]);
+		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
+			.substr($letexte,$pos+strlen($regs[0]));
 	}
-	if ($annee > 4000) $annee -= 9000;
-	if (substr($jour, 0, 1) == '0') $jour = substr($jour, 1);
 
-	return array($annee, $mois, $jour);
-}
+	//
+	// Echapper les <cadre>...</cadre>
+	//
+	$regexp_echap = "<cadre>(([^<]|<[^/]|</[^c]|</c[^a]|</ca[^d]|</cad[^r]|</cadr[^e]|<\/cadre[^>])*)<\/cadre>";
+	while (eregi($regexp_echap, $letexte, $regs)) {
+		$num_echap++;
+		$lecode = trim(htmlspecialchars($regs[1]));
+		$total_lignes = count(explode("\n", $lecode)) + 1;
 
+		$les_echap[$num_echap] = "<form><textarea cols='40' rows='$total_lignes' wrap='no' class='spip_cadre'>".$lecode."</textarea></form>";
 
-function affdate_base($numdate, $vue) {
-	global $lang;
-	$date_array = recup_date($numdate);
-	if ($date_array)
-		list($annee, $mois, $jour) = $date_array;
-	else
-		return '';
-
-	if ($mois > 0){
-		$saison = "hiver";
-		if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = "printemps";
-		if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = "彋�";
-		if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = "automne";
-		if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = "hiver";
-	}
-	
-	if ($lang == "fr") {
-		if ($jour == '1') $jour = '1er';
-		$tab_mois = array('',
-			'janvier', 'f憝rier', 'mars', 'avril', 'mai', 'juin',
-			'juillet', 'ao壻', 'septembre', 'octobre', 'novembre', 'd嶰embre');
-		$avjc = ' av. J.C.';
-	}
-	elseif ($lang == "en"){
-		switch($jour) {
-		case '1':
-			$jour = '1st';
-			break;
-		case '2':
-			$jour = '2nd';
-			break;
-		case '3':
-			$jour = '3rd';
-			break;
-		case '21':
-			$jour = '21st';
-			break;
-		case '22':
-			$jour = '22nd';
-			break;
-		case '23':
-			$jour = '23rd';
-			break;
-		case '31':
-			$jour = '31st';
-			break;
-		}
-		$tab_mois = array('',
-			'January', 'February', 'March', 'April', 'May', 'June',
-			'July', 'August', 'September', 'October', 'November', 'December');
-		$avjc = ' B.C.';
-	}
-	if ($jour == 0) $jour = "";
-	if ($jour) $jour .= ' ';
-	$mois = $tab_mois[(int) $mois];
-	if ($annee < 0) {
-		$annee = -$annee.$avjc;
-		$avjc = true;
+		$pos = strpos($letexte, $regs[0]);
+		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
+			.substr($letexte,$pos+strlen($regs[0]));
 	}
-	else $avjc = false;
-
-	switch ($vue) {
-	case 'saison':
-		return $saison;
 
-	case 'court':
-		if ($avjc) return $annee;
-		$a = date('Y');
-		if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee;
-		if ($annee != $a) return ucfirst($mois)." $annee";
-		return $jour.$mois;
-
-	case 'entier':
-		if ($avjc) return $annee;
-		return "$jour$mois $annee";
-
-	case 'mois':
-		return "$mois";
-
-	case 'mois_annee':
-		if ($avjc) return $annee;
-		return "$mois $annee";
+	//
+	// Echapper les <html>...</ html>
+	//
+	$regexp_echap = "<html>(([^<]|<[^/]|</[^h]|</h[^t]|</ht[^m]|</htm[^l]|<\/html[^>])*)<\/html>";
+	while (eregi($regexp_echap, $letexte, $regs)) {
+		$num_echap++;
+		$les_echap[$num_echap] = $regs[1];
+		$pos = strpos($letexte, $regs[0]);
+		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
+			.substr($letexte,$pos+strlen($regs[0]));
 	}
 
-	return '<blink>format non d&eacute;fini</blink>';
-}
-
-
-function nom_jour($numdate) {
-	global $lang;
-	$date_array = recup_date($numdate);
-	if ($date_array)
-		list($annee,$mois,$jour) = $date_array;
-	else
-		return '';
-
-	if (!$mois OR !$jour) return;
-	
-	$nom = mktime(1,1,1,$mois,$jour,$annee);
-	$nom = date("D",$nom);
-
-	if ($lang == "fr") {
-		switch($nom) {
-			case 'Sun': $nom='dimanche'; break;
-			case 'Mon': $nom='lundi'; break;
-			case 'Tue': $nom='mardi'; break;
-			case 'Wed': $nom='mercredi'; break;
-			case 'Thu': $nom='jeudi'; break;
-			case 'Fri': $nom='vendredi'; break;
-			case 'Sat': $nom='samedi'; break;
-		}
-	}
-	elseif ($lang == "en") {
-		switch($nom) {
-			case 'Sun': $nom='Sunday'; break;
-			case 'Mon': $nom='Monday'; break;
-			case 'Tue': $nom='Tuesday'; break;
-			case 'Wed': $nom='Wednesday'; break;
-			case 'Thu': $nom='Thursday'; break;
-			case 'Fri': $nom='Friday'; break;
-			case 'Sat': $nom='Saturday'; break;
-		}
+	//
+	// Echapper les <a href>
+	//
+	$regexp_echap = "<a [^>]+>";
+	while (eregi($regexp_echap, $letexte, $regs)) {
+		$num_echap++;
+		$les_echap[$num_echap] = $regs[0];
+		$pos = strpos($letexte, $les_echap[$num_echap]);
+		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
+			.substr($letexte,$pos+strlen($les_echap[$num_echap]));
 	}
-	return $nom;
-}
-
-
-function jour($numdate) {
-	$date_array = recup_date($numdate);
-	if ($date_array)
-		list($annee,$mois,$jour) = $date_array;
-	else
-		return '';
-	if ($jour=="1") $jour="1er";
-	return $jour;
-}
-
-
-function mois($numdate) {
-	$date_array = recup_date($numdate);
-	if ($date_array)
-		list($annee,$mois,$jour) = $date_array;
-	else
-		return '';
-	return $mois;
-}
-
-
-function annee($numdate) {
-	$date_array = recup_date($numdate);
-	if ($date_array)
-		list($annee,$mois,$jour) = $date_array;
-	else
-		return '';
-	return $annee;
-}
-
-function saison($numdate) {
-	return affdate_base($numdate, 'saison');
-}
-
-function affdate($numdate) {
-	return affdate_base($numdate, 'entier');
-}
-
-function affdate_court($numdate) {
-	return affdate_base($numdate, 'court');
-}
-
-function affdate_mois_annee($numdate) {
-	return affdate_base($numdate, 'mois_annee');
-}
 
-function nom_mois($numdate) {
-	return affdate_base($numdate, 'mois');
+	return array($letexte, $les_echap);
 }
 
-function majuscules($texte) {
-	$suite = htmlentities($texte);
-	$suite = ereg_replace('&amp;', '&', $suite);
-	$suite = ereg_replace('&lt;', '<', $suite); 
-	$suite = ereg_replace('&gt;', '>', $suite); 
-	$texte = '';
-	if (ereg('^(.*)&([A-Za-z])([a-zA-Z]*);(.*)$', $suite, $regs)) {
-		$texte .= majuscules($regs[1]);
-		$suite = $regs[4];
-		$carspe = $regs[2];
-		$accent = $regs[3];
-		if (ereg('^(acute|grave|circ|uml|cedil|slash|caron|ring|tilde|elig)$', $accent))
-			$carspe = strtoupper($carspe); 
-		if ($accent == 'elig') $accent = 'Elig';
-		$texte .= '&'.$carspe.$accent.';';
+// Traitement final des echappements
+function echappe_retour($letexte, $les_echap, $source) {
+	while(ereg("___SPIP_$source([0-9]+) ___", $letexte, $match)) {
+		$lenum = $match[1];
+		$cherche = $match[0];
+		$pos = strpos($letexte, $cherche);
+		$letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche));
 	}
-	$texte .= strtoupper($suite);
-	return $texte;
-}
-
-function justifier($letexte) {
-	if ($letexte)
-		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='justify'>", $letexte);
-	return $letexte;
-}
-
-function aligner_droite($letexte) {
-	if ($letexte)
-		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='right'>",$letexte);
 	return $letexte;
 }
 
-function aligner_gauche($letexte) {
-	$letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte));
-	if ($letexte)
-		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='left'>",$letexte);
-	return $letexte;
-}
-
-function centrer($letexte) {
-	$letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte));
-	if ($letexte)
-		$letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='center'>",$letexte);
-	return $letexte;
-}
+function couper($texte, $long) {
+	$texte2 = substr($texte, 0, $long * 2); /* heuristique pour prendre seulement le necessaire */
+	if (strlen($texte2) < strlen($texte)) $plus_petit = true;
+	$texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte2);
 
-function textebrut($texte) {
-	$texte = ereg_replace("[\n\r]+", " ", $texte);
-	$texte = eregi_replace("<(p|br)([[:space:]][^>]*)?".">", "\n\n", $texte);
-	$texte = ereg_replace("^\n+", "", $texte);
-	$texte = ereg_replace("\n+$", "", $texte);
-	$texte = ereg_replace("\n +", "\n", $texte);
-	$texte = supprimer_tags($texte);
-	$texte = ereg_replace("(&nbsp;| )+", " ", $texte);
-	return $texte;
-}
+	// supprimer les notes
+	$texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte);
 
+	// supprimer les codes typos
+	$texte = strtr($texte,"{}","  ");
 
-// une fonction bien pratique pour ceux qui aiment les liens qui ouvrent
-// une nouvelle fen皻re : utiliser (#TEXTE|liens_ouvrants)
-function liens_ouvrants ($texte) {
-	return ereg_replace("<a ([^>]*class=\"spip_out\")>",
-		"<a \\1 target=\"_blank\">", $texte);
+	$texte2 = substr($texte." ", 0, $long);
+	$texte2 = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $texte2);
+	if ((strlen($texte2) + 3) < strlen($texte)) $plus_petit = true;
+	if ($plus_petit) $texte2 .= ' (...)';
+	return $texte2;
 }
 
-// si le texte contient <intro>...</intro>, prendre CES bouts-la
-// sinon couper automatiquement � la longueur demandee
+// prendre <intro>...</intro> sinon couper a la longueur demandee
 function couper_intro($texte, $long) {
 	$texte = eregi_replace("(</?)intro>", "\\1intro>", $texte); // minuscules
 	while ($fin = strpos($texte, "</intro>")) {
@@ -406,50 +181,17 @@ function couper_intro($texte, $long) {
 	return $intro;
 }
 
-function couper($texte, $long) {
-	$texte2 = substr($texte, 0, $long * 2); /* heuristique pour prendre seulement le necessaire */
-	if (strlen($texte2) < strlen($texte)) $plus_petit = true;
-	$texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte2);
-
-	// supprimer les notes
-	$texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte);
-
-	// supprimer les codes typos
-	$texte = strtr($texte,"{}","  ");
-
-	$texte2 = substr($texte." ", 0, $long);
-	$texte2 = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $texte2);
-	if ((strlen($texte2) + 3) < strlen($texte)) $plus_petit = true;
-	if ($plus_petit) $texte2 .= ' (...)';
-	return $texte2;
-}
-
-
-function ereg_remplace($cherche_tableau, $remplace_tableau, $texte) {
-	global $flag_preg_replace;
-
-	if ($flag_preg_replace) return preg_replace($cherche_tableau, $remplace_tableau, $texte);
-
-	$n = count($cherche_tableau);
-
-	for ($i = 0; $i < $n; $i++) {
-		$texte = ereg_replace(substr($cherche_tableau[$i], 1, -1), $remplace_tableau[$i], $texte);
-	}
-	return $texte;
-}
 
+//
+// les elements de propre()
+//
 
-function taille_en_octets ($taille) {
-	if ($taille < 1024) {$taille .= "&nbsp;octets";}
-	else if ($taille < 1024*1024) {
-		$taille = ((floor($taille / 102.4))/10)."&nbsp;ko";
-	} else {
-		$taille = ((floor(($taille / 1024) / 102.4))/10)."&nbsp;Mo";
-	}
-	return $taille;
+// Securite : empecher l'execution de code PHP
+function interdire_scripts($source) {
+	$source = eregi_replace("<(\%|\?|([[:space:]]*)script)", "&lt;\\1", $source);
+	return $source;
 }
 
-
 // correction typographique francaise
 function typo_fr($letexte) {
 	global $flag_preg_replace;
@@ -498,89 +240,7 @@ function typo_fr($letexte) {
 	return ($letexte);
 }
 
-
-//
-// Mise de cote des echappements
-//
-
-function echappe_html($letexte,$source) {
-	//
-	// Echapper les <code>...</ code>
-	//
-	$regexp_echap = "<code>(([^<]|<[^/]|</[^c]|</c[^o]|</co[^d]|</cod[^e]|<\/code[^>])*)<\/code>";
-	while (eregi($regexp_echap, $letexte, $regs)) {
-		$num_echap++;
-		$lecode = htmlspecialchars($regs[1]);
-
-		// ne pas mettre le <div...> s'il n'y a qu'une ligne
-		if (is_int(strpos($lecode,"\n")))
-			$lecode = nl2br("<div align='left' class='spip_code'>".trim($lecode)."</div>");
-
-		$lecode = ereg_replace("\t", "&nbsp; &nbsp; &nbsp; &nbsp; ", $lecode);
-		$lecode = ereg_replace("  ", " &nbsp;", $lecode);
-		$les_echap[$num_echap] = "<tt>".$lecode."</tt>";
-		$pos = strpos($letexte, $regs[0]);
-		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
-			.substr($letexte,$pos+strlen($regs[0]));
-	}
-
-	//
-	// Echapper les <cadre>...</cadre>
-	//
-	$regexp_echap = "<cadre>(([^<]|<[^/]|</[^c]|</c[^a]|</ca[^d]|</cad[^r]|</cadr[^e]|<\/cadre[^>])*)<\/cadre>";
-	while (eregi($regexp_echap, $letexte, $regs)) {
-		$num_echap++;
-		$lecode = trim(htmlspecialchars($regs[1]));
-		$total_lignes = count(explode("\n", $lecode)) + 1;
-
-		$les_echap[$num_echap] = "<form><textarea cols='40' rows='$total_lignes' wrap='no' class='spip_cadre'>".$lecode."</textarea></form>";
-
-		$pos = strpos($letexte, $regs[0]);
-		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
-			.substr($letexte,$pos+strlen($regs[0]));
-	}
-
-	//
-	// Echapper les <html>...</ html>
-	//
-	$regexp_echap = "<html>(([^<]|<[^/]|</[^h]|</h[^t]|</ht[^m]|</htm[^l]|<\/html[^>])*)<\/html>";
-	while (eregi($regexp_echap, $letexte, $regs)) {
-		$num_echap++;
-		$les_echap[$num_echap] = $regs[1];
-		$pos = strpos($letexte, $regs[0]);
-		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
-			.substr($letexte,$pos+strlen($regs[0]));
-	}
-
-	//
-	// Echapper les <a href>
-	//
-	$regexp_echap = "<a [^>]+>";
-	while (eregi($regexp_echap, $letexte, $regs)) {
-		$num_echap++;
-		$les_echap[$num_echap] = $regs[0];
-		$pos = strpos($letexte, $les_echap[$num_echap]);
-		$letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___"
-			.substr($letexte,$pos+strlen($les_echap[$num_echap]));
-	}
-
-	return array($letexte, $les_echap);
-}
-
-//
-// Traitement final des echappements
-//
-
-function echappe_retour($letexte, $les_echap, $source) {
-	while(ereg("___SPIP_$source([0-9]+) ___", $letexte, $match)) {
-		$lenum = $match[1];
-		$cherche = $match[0];
-		$pos = strpos($letexte, $cherche);
-		$letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche));
-	}
-	return $letexte;
-}
-
+// typo : francaise sinon rien (pour l'instant)
 function typo($letexte) {
 	global $lang;
 
@@ -595,9 +255,7 @@ function typo($letexte) {
 	return $letexte;
 }
 
-//
 // Nettoie un texte, traite les raccourcis spip, la typo, etc.
-//
 function traiter_raccourcis($letexte, $les_echap = false) {
 	global $puce;
 	global $debut_intertitre, $fin_intertitre;
@@ -609,14 +267,6 @@ function traiter_raccourcis($letexte, $les_echap = false) {
 	global $ferme_note;
 	global $flag_strpos_3, $flag_preg_replace, $flag_str_replace;
 
-	// regle l'id_article pour recuperation d'images
-/*	global $id_article;
-	global $id_article_img;
-	$my_id_article_img = (int) $id_article_img;
-	if ($my_id_article_img == 0) {
-		$my_id_article_img = (int) $id_article;
-	}*/
-
 	// Harmoniser les retours chariot
 	$letexte = ereg_replace ("\r\n?", "\n",$letexte);
 
@@ -805,7 +455,7 @@ function traiter_raccourcis($letexte, $les_echap = false) {
 	// en forme (paragraphes, raccourcis...)
 	//
 	// ATTENTION : si vous modifiez cette partie, modifiez les DEUX
-	// alternatives (if/else) de fa蔞n similaire. Merci.
+	// alternatives (if/else) de facon similaire. Merci.
 	//
 
 	$letexte = trim($letexte);
@@ -868,7 +518,7 @@ function traiter_raccourcis($letexte, $les_echap = false) {
 	return $letexte;
 }
 
-
+// filtre a appliquer aux champs du type #TEXTE*
 function propre($letexte) {
 	return interdire_scripts(traiter_raccourcis(trim($letexte)));
 }
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index 0ab5dc7686..168dda46fa 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -92,6 +92,7 @@ function integre_image($id_document, $align, $affichage_detaille = false) {
 
 include_local("ecrire/inc_index.php3");
 include_local("ecrire/inc_texte.php3");
+include_local ("ecrire/inc_filtres.php3");
 
 include_local("inc-forum.php3");
 
diff --git a/inc-formulaires.php3 b/inc-formulaires.php3
index 97b608749e..efbd9e2c2a 100644
--- a/inc-formulaires.php3
+++ b/inc-formulaires.php3
@@ -52,6 +52,7 @@ function formulaire_signature($id_article) {
 
 	include_local ("ecrire/inc_connect.php3");
 	include_local ("ecrire/inc_texte.php3");
+	include_local ("ecrire/inc_filtres.php3");
 
 	echo "<a name='sp$id_article'>";
 
diff --git a/inc-forum.php3 b/inc-forum.php3
index 4e72ba274e..7045b91c62 100644
--- a/inc-forum.php3
+++ b/inc-forum.php3
@@ -11,6 +11,7 @@ include_local ("ecrire/inc_meta.php3");
 include_local ("ecrire/inc_admin.php3");
 include_local ("ecrire/inc_acces.php3");
 include_local ("ecrire/inc_texte.php3");
+include_local ("ecrire/inc_filtres.php3");
 include_local ("ecrire/inc_mail.php3");
 if (file_exists("inc-urls.php3")) {
 	include_local ("inc-urls.php3");
diff --git a/inc-public.php3 b/inc-public.php3
index efd60bad67..493eb48167 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -172,8 +172,9 @@ if (!file_exists("CACHE/.htaccess")) {
 if (lire_meta('activer_moteur') == 'oui') {
 	$fichier_index = 'CACHE/.index';
 	if ($db_ok) {
-		include_local("ecrire/inc_texte.php3");
-		include_local("ecrire/inc_index.php3");
+		include_local ("ecrire/inc_texte.php3");
+		include_local ("ecrire/inc_filtres.php3");
+		include_local ("ecrire/inc_index.php3");
 		$s = '';
 		if ($id_article AND !deja_indexe('article', $id_article))
 			$s .= "article $id_article\n";
@@ -194,8 +195,9 @@ if (lire_meta('activer_moteur') == 'oui') {
 	if ($use_cache AND file_exists($fichier_index) AND $size = filesize($fichier_index)) {
 		include_local ("ecrire/inc_connect.php3");
 		if ($db_ok) {
-			include_local("ecrire/inc_texte.php3");
-			include_local("ecrire/inc_index.php3");
+			include_local ("ecrire/inc_texte.php3");
+			include_local ("ecrire/inc_filtres.php3");
+			include_local ("ecrire/inc_index.php3");
 			$f = fopen($fichier_index, 'r');
 			$s = fgets($f, 100);
 			$suite = fread($f, $size);
@@ -322,6 +324,7 @@ if ($id_article AND lire_meta("activer_statistiques") != "non" AND !$flag_preser
 
 if ($db_ok AND lire_meta("activer_syndic") != "non") {
 	include_local ("ecrire/inc_texte.php3");
+	include_local ("ecrire/inc_filtres.php3");
 	include_local ("ecrire/inc_sites.php3");
 	include_local ("ecrire/inc_index.php3");
 	executer_une_syndication();
-- 
GitLab