Completed
Push — master ( ea8a4d...672bcf )
by cam
01:02
created
ecrire/inc/texte.php 1 patch
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/texte_mini');
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
  * @return array Tablea ('','')
34 34
  */
35 35
 function definir_raccourcis_alineas() {
36
-	return ['', ''];
36
+    return ['', ''];
37 37
 }
38 38
 
39 39
 
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
  * @return string
47 47
  */
48 48
 function traiter_tableau($bloc) {
49
-	return $bloc;
49
+    return $bloc;
50 50
 }
51 51
 
52 52
 
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
  * @return string
61 61
  */
62 62
 function traiter_listes($texte) {
63
-	return $texte;
63
+    return $texte;
64 64
 }
65 65
 
66 66
 /**
@@ -76,16 +76,16 @@  discard block
 block discarded – undo
76 76
  */
77 77
 function traiter_raccourcis($letexte) {
78 78
 
79
-	// Appeler les fonctions de pre_traitement
80
-	$letexte = pipeline('pre_propre', $letexte);
79
+    // Appeler les fonctions de pre_traitement
80
+    $letexte = pipeline('pre_propre', $letexte);
81 81
 
82
-	// APPELER ICI UN PIPELINE traiter_raccourcis ?
83
-	// $letexte = pipeline('traiter_raccourcis', $letexte);
82
+    // APPELER ICI UN PIPELINE traiter_raccourcis ?
83
+    // $letexte = pipeline('traiter_raccourcis', $letexte);
84 84
 
85
-	// Appeler les fonctions de post-traitement
86
-	$letexte = pipeline('post_propre', $letexte);
85
+    // Appeler les fonctions de post-traitement
86
+    $letexte = pipeline('post_propre', $letexte);
87 87
 
88
-	return $letexte;
88
+    return $letexte;
89 89
 }
90 90
 
91 91
 /*************************************************************************************************************************
@@ -101,22 +101,22 @@  discard block
 block discarded – undo
101 101
  * @return string
102 102
  */
103 103
 function echappe_js($t, $class = ' class = "echappe-js"') {
104
-	foreach (['script', 'iframe'] as $tag) {
105
-		if (
106
-			stripos($t, (string) "<$tag") !== false
107
-			and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
108
-		) {
109
-			foreach ($r as $regs) {
110
-				$t = str_replace(
111
-					$regs[0],
112
-					"<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
113
-					$t
114
-				);
115
-			}
116
-		}
117
-	}
118
-
119
-	return $t;
104
+    foreach (['script', 'iframe'] as $tag) {
105
+        if (
106
+            stripos($t, (string) "<$tag") !== false
107
+            and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
108
+        ) {
109
+            foreach ($r as $regs) {
110
+                $t = str_replace(
111
+                    $regs[0],
112
+                    "<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
113
+                    $t
114
+                );
115
+            }
116
+        }
117
+    }
118
+
119
+    return $t;
120 120
 }
121 121
 
122 122
 
@@ -145,55 +145,55 @@  discard block
 block discarded – undo
145 145
  *     Code protégé
146 146
  **/
147 147
 function interdire_scripts($arg, $mode_filtre = null) {
148
-	// on memorise le resultat sur les arguments non triviaux
149
-	static $dejavu = [];
150
-
151
-	// Attention, si ce n'est pas une chaine, laisser intact
152
-	if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
153
-		return $arg;
154
-	}
155
-
156
-	if (is_null($mode_filtre) or !in_array($mode_filtre, [-1, 0, 1])) {
157
-		$mode_filtre = $GLOBALS['filtrer_javascript'];
158
-	}
159
-
160
-	if (isset($dejavu[$mode_filtre][$arg])) {
161
-		return $dejavu[$mode_filtre][$arg];
162
-	}
163
-
164
-	// echapper les tags asp/php
165
-	$t = str_replace('<' . '%', '&lt;%', $arg);
166
-
167
-	// echapper le php
168
-	$t = str_replace('<' . '?', '&lt;?', $t);
169
-
170
-	// echapper le < script language=php >
171
-	$t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
172
-
173
-	// Pour le js, trois modes : parano (-1), prive (0), ok (1)
174
-	switch ($mode_filtre) {
175
-		case 0:
176
-			if (!_DIR_RESTREINT) {
177
-				$t = echappe_js($t);
178
-			}
179
-			break;
180
-		case -1:
181
-			$t = echappe_js($t);
182
-			break;
183
-	}
184
-
185
-	// pas de <base href /> svp !
186
-	$t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
187
-
188
-	// Reinserer les echappements des modeles
189
-	if (defined('_PROTEGE_JS_MODELES')) {
190
-		$t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
191
-	}
192
-	if (defined('_PROTEGE_PHP_MODELES')) {
193
-		$t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
194
-	}
195
-
196
-	return $dejavu[$mode_filtre][$arg] = $t;
148
+    // on memorise le resultat sur les arguments non triviaux
149
+    static $dejavu = [];
150
+
151
+    // Attention, si ce n'est pas une chaine, laisser intact
152
+    if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
153
+        return $arg;
154
+    }
155
+
156
+    if (is_null($mode_filtre) or !in_array($mode_filtre, [-1, 0, 1])) {
157
+        $mode_filtre = $GLOBALS['filtrer_javascript'];
158
+    }
159
+
160
+    if (isset($dejavu[$mode_filtre][$arg])) {
161
+        return $dejavu[$mode_filtre][$arg];
162
+    }
163
+
164
+    // echapper les tags asp/php
165
+    $t = str_replace('<' . '%', '&lt;%', $arg);
166
+
167
+    // echapper le php
168
+    $t = str_replace('<' . '?', '&lt;?', $t);
169
+
170
+    // echapper le < script language=php >
171
+    $t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
172
+
173
+    // Pour le js, trois modes : parano (-1), prive (0), ok (1)
174
+    switch ($mode_filtre) {
175
+        case 0:
176
+            if (!_DIR_RESTREINT) {
177
+                $t = echappe_js($t);
178
+            }
179
+            break;
180
+        case -1:
181
+            $t = echappe_js($t);
182
+            break;
183
+    }
184
+
185
+    // pas de <base href /> svp !
186
+    $t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
187
+
188
+    // Reinserer les echappements des modeles
189
+    if (defined('_PROTEGE_JS_MODELES')) {
190
+        $t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
191
+    }
192
+    if (defined('_PROTEGE_PHP_MODELES')) {
193
+        $t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
194
+    }
195
+
196
+    return $dejavu[$mode_filtre][$arg] = $t;
197 197
 }
198 198
 
199 199
 
@@ -222,66 +222,66 @@  discard block
 block discarded – undo
222 222
  *     texte transformé
223 223
  **/
224 224
 function typo($letexte, $echapper = true, $connect = null, $env = []) {
225
-	// Plus vite !
226
-	if (!$letexte) {
227
-		return $letexte;
228
-	}
229
-
230
-	// les appels directs a cette fonction depuis le php de l'espace
231
-	// prive etant historiquement ecrit sans argment $connect
232
-	// on utilise la presence de celui-ci pour distinguer les cas
233
-	// ou il faut passer interdire_script explicitement
234
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
235
-	// ne seront pas perturbes
236
-	$interdire_script = false;
237
-	if (is_null($connect)) {
238
-		$connect = '';
239
-		$interdire_script = true;
240
-		$env['espace_prive'] = test_espace_prive();
241
-	}
242
-
243
-	// Echapper les codes <html> etc
244
-	if ($echapper) {
245
-		$letexte = echappe_html($letexte, 'TYPO');
246
-	}
247
-
248
-	//
249
-	// Installer les modeles, notamment images et documents ;
250
-	//
251
-	// NOTE : propre() ne passe pas par ici mais directement par corriger_typo
252
-	// cf. inc/lien
253
-
254
-	$letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect ?? '', null, $env);
255
-	if ($letexte != $mem) {
256
-		$echapper = true;
257
-	}
258
-	unset($mem);
259
-
260
-	$letexte = corriger_typo($letexte);
261
-	$letexte = echapper_faux_tags($letexte);
262
-
263
-	// reintegrer les echappements
264
-	if ($echapper) {
265
-		$letexte = echappe_retour($letexte, 'TYPO');
266
-	}
267
-
268
-	// Dans les appels directs hors squelette, securiser ici aussi
269
-	if ($interdire_script) {
270
-		$letexte = interdire_scripts($letexte);
271
-	}
272
-
273
-	// Dans l'espace prive on se mefie de tout contenu dangereux
274
-	// https://core.spip.net/issues/3371
275
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
276
-	// https://core.spip.net/issues/4166
277
-	if (
278
-		$GLOBALS['filtrer_javascript'] == -1
279
-		or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
280
-	) {
281
-		$letexte = echapper_html_suspect($letexte, [], $connect, $env);
282
-	}
283
-
284
-	return $letexte;
225
+    // Plus vite !
226
+    if (!$letexte) {
227
+        return $letexte;
228
+    }
229
+
230
+    // les appels directs a cette fonction depuis le php de l'espace
231
+    // prive etant historiquement ecrit sans argment $connect
232
+    // on utilise la presence de celui-ci pour distinguer les cas
233
+    // ou il faut passer interdire_script explicitement
234
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
235
+    // ne seront pas perturbes
236
+    $interdire_script = false;
237
+    if (is_null($connect)) {
238
+        $connect = '';
239
+        $interdire_script = true;
240
+        $env['espace_prive'] = test_espace_prive();
241
+    }
242
+
243
+    // Echapper les codes <html> etc
244
+    if ($echapper) {
245
+        $letexte = echappe_html($letexte, 'TYPO');
246
+    }
247
+
248
+    //
249
+    // Installer les modeles, notamment images et documents ;
250
+    //
251
+    // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
252
+    // cf. inc/lien
253
+
254
+    $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect ?? '', null, $env);
255
+    if ($letexte != $mem) {
256
+        $echapper = true;
257
+    }
258
+    unset($mem);
259
+
260
+    $letexte = corriger_typo($letexte);
261
+    $letexte = echapper_faux_tags($letexte);
262
+
263
+    // reintegrer les echappements
264
+    if ($echapper) {
265
+        $letexte = echappe_retour($letexte, 'TYPO');
266
+    }
267
+
268
+    // Dans les appels directs hors squelette, securiser ici aussi
269
+    if ($interdire_script) {
270
+        $letexte = interdire_scripts($letexte);
271
+    }
272
+
273
+    // Dans l'espace prive on se mefie de tout contenu dangereux
274
+    // https://core.spip.net/issues/3371
275
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
276
+    // https://core.spip.net/issues/4166
277
+    if (
278
+        $GLOBALS['filtrer_javascript'] == -1
279
+        or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
280
+    ) {
281
+        $letexte = echapper_html_suspect($letexte, [], $connect, $env);
282
+    }
283
+
284
+    return $letexte;
285 285
 }
286 286
 
287 287
 // Correcteur typographique
@@ -306,57 +306,57 @@  discard block
 block discarded – undo
306 306
  */
307 307
 function corriger_typo($letexte, $lang = '') {
308 308
 
309
-	// Plus vite !
310
-	if (!$letexte) {
311
-		return $letexte;
312
-	}
313
-
314
-	$letexte = pipeline('pre_typo', $letexte);
315
-
316
-	// Caracteres de controle "illegaux"
317
-	$letexte = corriger_caracteres($letexte);
318
-
319
-	// Proteger les caracteres typographiques a l'interieur des tags html
320
-	if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
321
-		foreach ($regs as $reg) {
322
-			$insert = $reg[0];
323
-			// hack: on transforme les caracteres a proteger en les remplacant
324
-			// par des caracteres "illegaux". (cf corriger_caracteres())
325
-			$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
326
-			$letexte = str_replace($reg[0], $insert, $letexte);
327
-		}
328
-	}
329
-
330
-	// trouver les blocs idiomes et les traiter à part
331
-	$letexte = extraire_idiome($ei = $letexte, $lang, true);
332
-	$ei = ($ei !== $letexte);
333
-
334
-	// trouver les blocs multi et les traiter a part
335
-	$letexte = extraire_multi($em = $letexte, $lang, true);
336
-	$em = ($em !== $letexte);
337
-
338
-	// Charger & appliquer les fonctions de typographie
339
-	$typographie = charger_fonction(lang_typo($lang), 'typographie');
340
-	$letexte = $typographie($letexte);
341
-
342
-	// Les citations en une autre langue, s'il y a lieu
343
-	if ($em) {
344
-		$letexte = echappe_retour($letexte, 'multi');
345
-	}
346
-	if ($ei) {
347
-		$letexte = echappe_retour($letexte, 'idiome');
348
-	}
349
-
350
-	// Retablir les caracteres proteges
351
-	$letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
352
-
353
-	// pipeline
354
-	$letexte = pipeline('post_typo', $letexte);
355
-
356
-	# un message pour abs_url - on est passe en mode texte
357
-	$GLOBALS['mode_abs_url'] = 'texte';
358
-
359
-	return $letexte;
309
+    // Plus vite !
310
+    if (!$letexte) {
311
+        return $letexte;
312
+    }
313
+
314
+    $letexte = pipeline('pre_typo', $letexte);
315
+
316
+    // Caracteres de controle "illegaux"
317
+    $letexte = corriger_caracteres($letexte);
318
+
319
+    // Proteger les caracteres typographiques a l'interieur des tags html
320
+    if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
321
+        foreach ($regs as $reg) {
322
+            $insert = $reg[0];
323
+            // hack: on transforme les caracteres a proteger en les remplacant
324
+            // par des caracteres "illegaux". (cf corriger_caracteres())
325
+            $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
326
+            $letexte = str_replace($reg[0], $insert, $letexte);
327
+        }
328
+    }
329
+
330
+    // trouver les blocs idiomes et les traiter à part
331
+    $letexte = extraire_idiome($ei = $letexte, $lang, true);
332
+    $ei = ($ei !== $letexte);
333
+
334
+    // trouver les blocs multi et les traiter a part
335
+    $letexte = extraire_multi($em = $letexte, $lang, true);
336
+    $em = ($em !== $letexte);
337
+
338
+    // Charger & appliquer les fonctions de typographie
339
+    $typographie = charger_fonction(lang_typo($lang), 'typographie');
340
+    $letexte = $typographie($letexte);
341
+
342
+    // Les citations en une autre langue, s'il y a lieu
343
+    if ($em) {
344
+        $letexte = echappe_retour($letexte, 'multi');
345
+    }
346
+    if ($ei) {
347
+        $letexte = echappe_retour($letexte, 'idiome');
348
+    }
349
+
350
+    // Retablir les caracteres proteges
351
+    $letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
352
+
353
+    // pipeline
354
+    $letexte = pipeline('post_typo', $letexte);
355
+
356
+    # un message pour abs_url - on est passe en mode texte
357
+    $GLOBALS['mode_abs_url'] = 'texte';
358
+
359
+    return $letexte;
360 360
 }
361 361
 
362 362
 
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
  * @return string
373 373
  */
374 374
 function paragrapher($letexte, $forcer = true) {
375
-	return $letexte;
375
+    return $letexte;
376 376
 }
377 377
 
378 378
 /**
@@ -384,11 +384,11 @@  discard block
 block discarded – undo
384 384
  * @return string texte
385 385
  **/
386 386
 function traiter_retours_chariots($letexte) {
387
-	$letexte = preg_replace(",\r\n?,S", "\n", $letexte);
388
-	$letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
389
-	$letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
387
+    $letexte = preg_replace(",\r\n?,S", "\n", $letexte);
388
+    $letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
389
+    $letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
390 390
 
391
-	return $letexte;
391
+    return $letexte;
392 392
 }
393 393
 
394 394
 
@@ -414,41 +414,41 @@  discard block
 block discarded – undo
414 414
  *     texte transformé
415 415
  **/
416 416
 function propre($t, $connect = null, $env = []) {
417
-	// les appels directs a cette fonction depuis le php de l'espace
418
-	// prive etant historiquement ecrits sans argment $connect
419
-	// on utilise la presence de celui-ci pour distinguer les cas
420
-	// ou il faut passer interdire_script explicitement
421
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
422
-	// ne seront pas perturbes
423
-	// FIXME: Trouver une solution pour avoir un type (string) unique sur $connect.
424
-	$interdire_script = false;
425
-	if (is_null($connect)) {
426
-		$connect = '';
427
-		$interdire_script = true;
428
-		$env['espace_prive'] = true;
429
-	}
430
-
431
-	if (!$t) {
432
-		return strval($t);
433
-	}
434
-
435
-	// Dans l'espace prive on se mefie de tout contenu dangereux
436
-	// avant echappement des balises <html>
437
-	// https://core.spip.net/issues/3371
438
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
439
-	// https://core.spip.net/issues/4166
440
-	if (
441
-		$interdire_script
442
-		or $GLOBALS['filtrer_javascript'] == -1
443
-		or (!empty($env['espace_prive']) and $GLOBALS['filtrer_javascript'] <= 0)
444
-		or (!empty($env['wysiwyg']) and $env['wysiwyg'] and $GLOBALS['filtrer_javascript'] <= 0)
445
-	) {
446
-		$t = echapper_html_suspect($t, ['strict' => false], $connect, $env);
447
-	}
448
-	$t = echappe_html($t);
449
-	$t = expanser_liens($t, $connect ?? '', $env);
450
-	$t = traiter_raccourcis($t);
451
-	$t = echappe_retour_modeles($t, $interdire_script);
452
-
453
-	return $t;
417
+    // les appels directs a cette fonction depuis le php de l'espace
418
+    // prive etant historiquement ecrits sans argment $connect
419
+    // on utilise la presence de celui-ci pour distinguer les cas
420
+    // ou il faut passer interdire_script explicitement
421
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
422
+    // ne seront pas perturbes
423
+    // FIXME: Trouver une solution pour avoir un type (string) unique sur $connect.
424
+    $interdire_script = false;
425
+    if (is_null($connect)) {
426
+        $connect = '';
427
+        $interdire_script = true;
428
+        $env['espace_prive'] = true;
429
+    }
430
+
431
+    if (!$t) {
432
+        return strval($t);
433
+    }
434
+
435
+    // Dans l'espace prive on se mefie de tout contenu dangereux
436
+    // avant echappement des balises <html>
437
+    // https://core.spip.net/issues/3371
438
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
439
+    // https://core.spip.net/issues/4166
440
+    if (
441
+        $interdire_script
442
+        or $GLOBALS['filtrer_javascript'] == -1
443
+        or (!empty($env['espace_prive']) and $GLOBALS['filtrer_javascript'] <= 0)
444
+        or (!empty($env['wysiwyg']) and $env['wysiwyg'] and $GLOBALS['filtrer_javascript'] <= 0)
445
+    ) {
446
+        $t = echapper_html_suspect($t, ['strict' => false], $connect, $env);
447
+    }
448
+    $t = echappe_html($t);
449
+    $t = expanser_liens($t, $connect ?? '', $env);
450
+    $t = traiter_raccourcis($t);
451
+    $t = echappe_retour_modeles($t, $interdire_script);
452
+
453
+    return $t;
454 454
 }
Please login to merge, or discard this patch.