From ac57e525c940f75db3821d29db71c4f48502c3e0 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 19 Mar 2002 18:13:01 +0000
Subject: [PATCH] le surlignage automatique des mots de la recherche. Pour
 l'instant c'est la variable var_s=xxxx

---
 ecrire/admin_tech.php3  |  4 ++--
 ecrire/inc_filtres.php3 | 37 +++++++++++++++++++++++++++++++++++++
 ecrire/inc_version.php3 | 12 +++++++-----
 ecrire/index.php3       |  2 +-
 inc-public.php3         | 30 ++++++++++++++++++++++++++++++
 spip_style.css          | 22 ++++++++++++----------
 6 files changed, 89 insertions(+), 18 deletions(-)

diff --git a/ecrire/admin_tech.php3 b/ecrire/admin_tech.php3
index 275f94c043..9d5e86deed 100644
--- a/ecrire/admin_tech.php3
+++ b/ecrire/admin_tech.php3
@@ -57,7 +57,7 @@ le contenu de la base dans un fichier qui sera stock&eacute; dans le r&eacute;pe
 N'oubliez pas &eacute;galement de r&eacute;cup&eacute;rer l'int&eacute;gralit&eacute; du r&eacute;pertoire <i>IMG/</i>, qui contient
 les images utilis&eacute;es dans les articles et les rubriques.";
 
-if ($gz_exists) {
+if ($flag_gz) {
 	echo "\n<p align='justify'>Vous pouvez choisir de sauvegarder le fichier sous forme compress&eacute;e, afin
 	d'&eacute;courter son transfert chez vous ou sur un serveur de sauvegardes, et d'&eacute;conomiser de l'espace disque.<p>";
 	echo "\n<INPUT TYPE='radio' NAME='gz' VALUE='1' id='gz_on' CHECKED><label for='gz_on'> sauvegarde compress&eacute;e sous <b>ecrire/data/dump.xml.gz</b> </label><BR>\n";
@@ -96,7 +96,7 @@ Soyez prudent avec cette fonctionnalit&eacute;&nbsp;: <b>les modifications, pert
 irr&eacute;versibles.</b>";
 
 
-if ($gz_exists) {
+if ($flag_gz) {
 	$fichier_defaut = 'dump.xml.gz';
 	$texte_compresse = "(celui-ci peut &ecirc;tre compress&eacute; ou non)&nbsp;";
 }
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index a8bee30b9b..9b589d9c67 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -357,4 +357,41 @@ function centrer($letexte) {
 	return aligner($letexte,'center');
 }
 
+// utilise avec ob_start() et ob_get_contents() pour
+// mettre en rouge les mots passes dans $var_s
+function mots_surligne($page) {
+	global $var_s;
+
+	// s'il y a des accents dans les mots, nettoyer la page
+	// ne prendre en consideration que les mots > 3 lettres
+	// et pas plus de 5 mots
+	$trans = get_html_translation_table(HTML_ENTITIES);
+	$mots = split(" +",$var_s);
+	while (list(,$mot) = each ($mots)) {
+		if (strlen($mot)>3) {
+			if ($trans) {
+				$motx = strtr($mot, $trans);
+				if ($motx != $mot) {
+					$trans = array_flip($trans);
+					$page = strtr($page,$trans);
+					$trans = false;
+				}
+			}
+			$mots_surligne[] = $mot;
+			if ($nb_mots ++ > 4) break;
+		}
+	}
+
+	// remplacer 4 occurrences maxi de chaque mot
+	reset ($mots_surligne);
+	if ($mots_surligne AND eregi('<html', $page)) {
+		while (list(,$mot) = each($mots_surligne)) {
+			$regexp = "/(>([^<]*[^[:alnum:]])?)(($mot)"."[[:alnum:]]*?)/Uis";
+			$page = preg_replace($regexp,"$1<span class='spip_surligne'>$3</span>", $page, 4);
+		}
+	}
+
+	return $page;
+}
+
 ?>
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 3e72278851..2dfc541b28 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -33,8 +33,9 @@ $flag_str_replace = ($php_version_maj > 3 OR $php_version_min >= 8);
 $flag_strpos_3 = (@strpos('baba', 'a', 2) == 3);
 
 if ($flag_function_exists) {
-	$gz_exists = function_exists("gzopen");
-	$ob_exists = function_exists("ob_gzhandler");
+	$flag_gz = function_exists("gzopen");
+	$flag_obgz = function_exists("ob_gzhandler");
+	$flag_ob = function_exists("ob_start");
 	$flag_preg_replace = function_exists("preg_replace");
 	$flag_crypt = function_exists("crypt");
 	$flag_wordwrap = function_exists("wordwrap");
@@ -42,8 +43,9 @@ if ($flag_function_exists) {
 	$flag_sapi_name = function_exists("php_sapi_name");
 }
 else {
-	$gz_exists = false;
-	$ob_exists = false;
+	$flag_gz = false;
+	$flag_obgz = false;
+	$flag_ob = false;
 	$flag_preg_replace = false;
 	$flag_crypt = true; // la non-existence de crypt est une exception
 	$flag_wordwrap = false;
@@ -227,7 +229,7 @@ function tester_accesdistant() {
 // compressee pour economiser de la bande passante
 //
 
-if ($ob_exists) {
+if ($flag_obgz) {
 	$use_gz = true;
 
 	// special bug de proxy
diff --git a/ecrire/index.php3 b/ecrire/index.php3
index ea519707a8..2bddadffb7 100644
--- a/ecrire/index.php3
+++ b/ecrire/index.php3
@@ -160,7 +160,7 @@ if ($meta["debut_restauration"]) {
 	fin_page();
 	echo "</HTML><font color='white'>\n<!--";
 	@flush();
-	$gz = $gz_exists;
+	$gz = $flag_gz;
 	$_fopen = ($gz) ? gzopen : fopen;
 
 	if ($ok) {
diff --git a/inc-public.php3 b/inc-public.php3
index 3d8ea4bdb6..46484d12f0 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -143,6 +143,19 @@ else {
 }
 
 
+//
+// si $var_s est positionnee, on met en rouge les mots cherches (php4 uniquement)
+//
+
+if ($var_s) {
+	if ($flag_ob AND $flag_preg_replace AND $var_s AND !$flag_preserver) {
+		include_ecrire("inc_filtres.php3");
+		ob_start();
+	} else
+		$var_s = false;
+}
+
+
 //
 // Inclusion du cache pour envoyer la page au client
 //
@@ -154,6 +167,23 @@ if (file_exists($chemin_cache)) {
 		apc_rm($chemin_cache);
 	}
 }
+
+
+//
+// suite et fin mots en rouge
+//
+
+if ($var_s) {
+	$la_page = ob_get_contents();
+	ob_end_clean();
+	echo mots_surligne($la_page);
+}
+
+
+//
+// nettoie
+//
+
 @flush();
 if (!$delais) @unlink($chemin_cache);
 
diff --git a/spip_style.css b/spip_style.css
index 1f807f3878..8332bbff70 100644
--- a/spip_style.css
+++ b/spip_style.css
@@ -7,9 +7,9 @@ a:hover {
 	text-decoration: underline;
 }
 
-a.spip_url  { }
-a.spip_in   { } 
-a.spip_out  { } 
+a.spip_url { }
+a.spip_in { }
+a.spip_out { }
 
 .spip_code { }
 
@@ -56,17 +56,17 @@ i.spip { }
 
 .forml { width: 100% ; background-color: #FFDDAA;}
 
-.spip_encadrer { 
+.spip_encadrer {
 	width : 100%;
-	background-color: #FFFFFF; 
-	padding: 5px; 
-	border: 1px #666666 solid; 
+	background-color: #FFFFFF;
+	padding: 5px;
+	border: 1px #666666 solid;
 }
 
-.spip_cadre { 
+.spip_cadre {
 	width : 100%;
-	background-color: #FFFFFF; 
-	padding: 5px; 
+	background-color: #FFFFFF;
+	padding: 5px;
 }
 
 
@@ -80,3 +80,5 @@ i.spip { }
 	font-size: 110%;
 	color: red;
 }
+
+.spip_surligne { background-color: #FFFF66; }
\ No newline at end of file
-- 
GitLab