Completed
Push — master ( 09834f...75dce3 )
by cam
02:05
created
rector.php 2 patches
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -17,16 +17,16 @@
 block discarded – undo
17 17
         __DIR__ . '/index.php',
18 18
     ]);
19 19
 
20
-	$rectorConfig->sets([
21
-		LevelSetList::UP_TO_PHP_81
22
-	]);
20
+    $rectorConfig->sets([
21
+        LevelSetList::UP_TO_PHP_81
22
+    ]);
23 23
 
24 24
     $rectorConfig->skip([
25 25
         __DIR__ . '/ecrire/lang',
26
-		FinalizePublicClassConstantRector::class,
27
-		NullToStrictStringFuncCallArgRector::class,
28
-		CountOnNullRector::class,
29
-		MixedTypeRector::class,
26
+        FinalizePublicClassConstantRector::class,
27
+        NullToStrictStringFuncCallArgRector::class,
28
+        CountOnNullRector::class,
29
+        MixedTypeRector::class,
30 30
     ]);
31 31
 
32 32
 };
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -9,12 +9,12 @@  discard block
 block discarded – undo
9 9
 use Rector\Php71\Rector\FuncCall\CountOnNullRector;
10 10
 use Rector\Php80\Rector\FunctionLike\MixedTypeRector;
11 11
 
12
-return static function (RectorConfig $rectorConfig): void {
12
+return static function(RectorConfig $rectorConfig): void {
13 13
     $rectorConfig->paths([
14
-        __DIR__ . '/ecrire',
15
-        __DIR__ . '/prive',
16
-        __DIR__ . '/spip.php',
17
-        __DIR__ . '/index.php',
14
+        __DIR__.'/ecrire',
15
+        __DIR__.'/prive',
16
+        __DIR__.'/spip.php',
17
+        __DIR__.'/index.php',
18 18
     ]);
19 19
 
20 20
 	$rectorConfig->sets([
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 	]);
23 23
 
24 24
     $rectorConfig->skip([
25
-        __DIR__ . '/ecrire/lang',
25
+        __DIR__.'/ecrire/lang',
26 26
 		FinalizePublicClassConstantRector::class,
27 27
 		NullToStrictStringFuncCallArgRector::class,
28 28
 		CountOnNullRector::class,
Please login to merge, or discard this patch.
ecrire/public/styliser_par_z.php 2 patches
Indentation   +305 added lines, -305 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  * @package SPIP\Core\Public\Styliser
19 19
  **/
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /**
@@ -28,190 +28,190 @@  discard block
 block discarded – undo
28 28
  * @return array Données modifiées du pipeline
29 29
  */
30 30
 function public_styliser_par_z_dist($flux) {
31
-	static $prefix_path = null;
32
-	static $prefix_length;
33
-	static $z_blocs;
34
-	static $apl_constant;
35
-	static $page;
36
-	static $disponible = [];
37
-	static $echafauder;
38
-	static $prepend = '';
39
-
40
-	if (!isset($prefix_path)) {
41
-		$z_blocs = z_blocs(test_espace_prive());
42
-		if (test_espace_prive()) {
43
-			$prefix_path = 'prive/squelettes/';
44
-			$prefix_length = strlen($prefix_path);
45
-			$apl_constant = '_ECRIRE_AJAX_PARALLEL_LOAD';
46
-			$page = 'exec';
47
-			$echafauder = charger_fonction('echafauder', 'prive', true);
48
-			define('_ZCORE_EXCLURE_PATH', '');
49
-		} else {
50
-			$prefix_path = '';
51
-			$prefix_length = 0;
52
-			$apl_constant = '_Z_AJAX_PARALLEL_LOAD';
53
-			$page = _SPIP_PAGE;
54
-			$echafauder = charger_fonction('echafauder', 'public', true);
55
-			define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist' . (defined('_DIR_PLUGIN_DIST') ? '|\b' . rtrim(
56
-				(string) _DIR_PLUGIN_DIST,
57
-				'/'
58
-			) : ''));
59
-		}
60
-		$prepend = (defined('_Z_PREPEND_PATH') ? _Z_PREPEND_PATH : '');
61
-	}
62
-	$z_contenu = reset($z_blocs); // contenu par defaut
63
-
64
-	$fond = $flux['args']['fond'];
65
-
66
-	if ($prepend || strncmp((string) $fond, (string) $prefix_path, $prefix_length) == 0) {
67
-		$fond = substr((string) $fond, $prefix_length);
68
-		$squelette = $flux['data'];
69
-		$ext = $flux['args']['ext'];
70
-		// Ajax Parallel loading : ne pas calculer le bloc, mais renvoyer un js qui le loadera en ajax
71
-		if (
72
-			defined('_Z_AJAX_PARALLEL_LOAD_OK')
73
-			&& ($dir = explode('/', $fond))
74
-			&& count($dir) == 2 // pas un sous repertoire
75
-			&& ($dir = reset($dir))
76
-			&& in_array($dir, $z_blocs) // verifier deja qu'on est dans un bloc Z
77
-			&& defined($apl_constant)
78
-			&& in_array($dir, explode(',', (string) constant($apl_constant))) // et dans un demande en APL
79
-			&& ($pipe = z_trouver_bloc($prefix_path . $prepend, $dir, 'z_apl', $ext)) // et qui contient le squelette APL
80
-		) {
81
-			$flux['data'] = $pipe;
82
-
83
-			return $flux;
84
-		}
85
-
86
-		// surcharger aussi les squelettes venant de squelettes-dist/
87
-		if ($squelette && !z_fond_valide($squelette)) {
88
-			$squelette = '';
89
-			$echafauder = '';
90
-		}
91
-		if ($prepend) {
92
-			$squelette = substr((string) find_in_path($prefix_path . $prepend . "$fond.$ext"), 0, -strlen(".$ext"));
93
-			if ($squelette) {
94
-				$flux['data'] = $squelette;
95
-			}
96
-		}
97
-
98
-		// gerer les squelettes non trouves
99
-		// -> router vers les /dist.html
100
-		// ou scaffolding ou page automatique les contenus
101
-		if (!$squelette) {
102
-			// si on est sur un ?page=XX non trouve
103
-			if (
104
-				isset($flux['args']['contexte'][$page]) && $flux['args']['contexte'][$page] == $fond
105
-				|| isset($flux['args']['contexte']['type-page']) && $flux['args']['contexte']['type-page'] == $fond
106
-				|| $fond == 'sommaire' && (!isset($flux['args']['contexte'][$page]) || !$flux['args']['contexte'][$page])
107
-			) {
108
-				// si on est sur un ?page=XX non trouve
109
-				// se brancher sur contenu/xx si il existe
110
-				// ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
111
-				if (!isset($disponible[$fond])) {
112
-					$disponible[$fond] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $fond, $ext, (bool) $echafauder);
113
-				}
114
-
115
-				if ($disponible[$fond]) {
116
-					$flux['data'] = substr((string) find_in_path($prefix_path . "page.$ext"), 0, -strlen(".$ext"));
117
-				}
118
-			}
119
-
120
-			// echafaudage :
121
-			// si c'est un fond de contenu d'un objet en base
122
-			// generer un fond automatique a la volee pour les webmestres
123
-			elseif (strncmp($fond, "$z_contenu/", strlen((string) $z_contenu) + 1) == 0) {
124
-				$type = substr($fond, strlen((string) $z_contenu) + 1);
125
-				if ($type == 'page' && isset($flux['args']['contexte'][$page])) {
126
-					$type = $flux['args']['contexte'][$page];
127
-				}
128
-				if (!isset($disponible[$type])) {
129
-					$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, (bool) $echafauder);
130
-				}
131
-				if (is_string($disponible[$type])) {
132
-					$flux['data'] = $disponible[$type];
133
-				} elseif (
134
-					$echafauder
135
-					&& include_spip('inc/autoriser')
136
-					&& isset($GLOBALS['visiteur_session']['statut'])
137
-					&& autoriser('echafauder', $type)
138
-					&& ($is = $disponible[$type])
139
-					&& is_array($is)
140
-				) {
141
-					$flux['data'] = $echafauder($type, $is[0], $is[1], $is[2], $ext);
142
-				} else {
143
-					$flux['data'] = ($disponible['404'] = z_contenu_disponible(
144
-						$prefix_path . $prepend,
145
-						$z_contenu,
146
-						'404',
147
-						$ext,
148
-						(bool) $echafauder
149
-					));
150
-				}
151
-			}
152
-
153
-			// sinon, si on demande un fond non trouve dans un des autres blocs
154
-			// et si il y a bien un contenu correspondant ou echafaudable
155
-			// se rabbatre sur le dist.html du bloc concerne
156
-			else {
157
-				if (
158
-					($dir = explode('/', $fond))
159
-					&& ($dir = reset($dir))
160
-					&& $dir !== $z_contenu
161
-					&& in_array($dir, $z_blocs)
162
-				) {
163
-					$type = substr($fond, strlen("$dir/"));
164
-					if ($type == 'page' && isset($flux['args']['contexte'][$page])) {
165
-						$type = $flux['args']['contexte'][$page];
166
-					}
167
-					if ($type !== 'page' && !isset($disponible[$type])) {
168
-						$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, (bool) $echafauder);
169
-					}
170
-					if ($type == 'page' || $disponible[$type]) {
171
-						$flux['data'] = z_trouver_bloc($prefix_path . $prepend, $dir, 'dist', $ext);
172
-					}
173
-				}
174
-			}
175
-			$squelette = $flux['data'];
176
-		}
177
-
178
-		// layout specifiques par type et compositions :
179
-		// body-article.html
180
-		// body-sommaire.html
181
-		// pour des raisons de perfo, les declinaisons doivent etre dans le
182
-		// meme dossier que body.html
183
-		$f = null;
184
-		if ($fond == 'body' && str_ends_with((string) $squelette, $fond)) {
185
-			if (
186
-				isset($flux['args']['contexte']['type-page'])
187
-				&& (
188
-					isset($flux['args']['contexte']['composition']) && file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page'] . '-' . $flux['args']['contexte']['composition']) . ".$ext")
189
-					|| file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page']) . ".$ext")
190
-				)
191
-			) {
192
-				$flux['data'] = $f;
193
-			}
194
-		} elseif (
195
-			$fond == 'structure'
196
-			&& z_sanitize_var_zajax()
197
-			&& ($f = find_in_path($prefix_path . $prepend . 'ajax' . ".$ext"))
198
-		) {
199
-			$flux['data'] = substr((string) $f, 0, -strlen(".$ext"));
200
-		} elseif (
201
-			// chercher le fond correspondant a la composition
202
-			isset($flux['args']['contexte']['composition'])
203
-			&& (basename($fond) == 'page' || $squelette && str_ends_with((string) $squelette, $fond))
204
-			&& ($dir = substr($fond, $prefix_length))
205
-			&& ($dir = explode('/', $dir))
206
-			&& ($dir = reset($dir))
207
-			&& in_array($dir, $z_blocs)
208
-			&& ($f = find_in_path($prefix_path . $prepend . $fond . '-' . $flux['args']['contexte']['composition'] . ".$ext"))
209
-		) {
210
-			$flux['data'] = substr((string) $f, 0, -strlen(".$ext"));
211
-		}
212
-	}
213
-
214
-	return $flux;
31
+    static $prefix_path = null;
32
+    static $prefix_length;
33
+    static $z_blocs;
34
+    static $apl_constant;
35
+    static $page;
36
+    static $disponible = [];
37
+    static $echafauder;
38
+    static $prepend = '';
39
+
40
+    if (!isset($prefix_path)) {
41
+        $z_blocs = z_blocs(test_espace_prive());
42
+        if (test_espace_prive()) {
43
+            $prefix_path = 'prive/squelettes/';
44
+            $prefix_length = strlen($prefix_path);
45
+            $apl_constant = '_ECRIRE_AJAX_PARALLEL_LOAD';
46
+            $page = 'exec';
47
+            $echafauder = charger_fonction('echafauder', 'prive', true);
48
+            define('_ZCORE_EXCLURE_PATH', '');
49
+        } else {
50
+            $prefix_path = '';
51
+            $prefix_length = 0;
52
+            $apl_constant = '_Z_AJAX_PARALLEL_LOAD';
53
+            $page = _SPIP_PAGE;
54
+            $echafauder = charger_fonction('echafauder', 'public', true);
55
+            define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist' . (defined('_DIR_PLUGIN_DIST') ? '|\b' . rtrim(
56
+                (string) _DIR_PLUGIN_DIST,
57
+                '/'
58
+            ) : ''));
59
+        }
60
+        $prepend = (defined('_Z_PREPEND_PATH') ? _Z_PREPEND_PATH : '');
61
+    }
62
+    $z_contenu = reset($z_blocs); // contenu par defaut
63
+
64
+    $fond = $flux['args']['fond'];
65
+
66
+    if ($prepend || strncmp((string) $fond, (string) $prefix_path, $prefix_length) == 0) {
67
+        $fond = substr((string) $fond, $prefix_length);
68
+        $squelette = $flux['data'];
69
+        $ext = $flux['args']['ext'];
70
+        // Ajax Parallel loading : ne pas calculer le bloc, mais renvoyer un js qui le loadera en ajax
71
+        if (
72
+            defined('_Z_AJAX_PARALLEL_LOAD_OK')
73
+            && ($dir = explode('/', $fond))
74
+            && count($dir) == 2 // pas un sous repertoire
75
+            && ($dir = reset($dir))
76
+            && in_array($dir, $z_blocs) // verifier deja qu'on est dans un bloc Z
77
+            && defined($apl_constant)
78
+            && in_array($dir, explode(',', (string) constant($apl_constant))) // et dans un demande en APL
79
+            && ($pipe = z_trouver_bloc($prefix_path . $prepend, $dir, 'z_apl', $ext)) // et qui contient le squelette APL
80
+        ) {
81
+            $flux['data'] = $pipe;
82
+
83
+            return $flux;
84
+        }
85
+
86
+        // surcharger aussi les squelettes venant de squelettes-dist/
87
+        if ($squelette && !z_fond_valide($squelette)) {
88
+            $squelette = '';
89
+            $echafauder = '';
90
+        }
91
+        if ($prepend) {
92
+            $squelette = substr((string) find_in_path($prefix_path . $prepend . "$fond.$ext"), 0, -strlen(".$ext"));
93
+            if ($squelette) {
94
+                $flux['data'] = $squelette;
95
+            }
96
+        }
97
+
98
+        // gerer les squelettes non trouves
99
+        // -> router vers les /dist.html
100
+        // ou scaffolding ou page automatique les contenus
101
+        if (!$squelette) {
102
+            // si on est sur un ?page=XX non trouve
103
+            if (
104
+                isset($flux['args']['contexte'][$page]) && $flux['args']['contexte'][$page] == $fond
105
+                || isset($flux['args']['contexte']['type-page']) && $flux['args']['contexte']['type-page'] == $fond
106
+                || $fond == 'sommaire' && (!isset($flux['args']['contexte'][$page]) || !$flux['args']['contexte'][$page])
107
+            ) {
108
+                // si on est sur un ?page=XX non trouve
109
+                // se brancher sur contenu/xx si il existe
110
+                // ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
111
+                if (!isset($disponible[$fond])) {
112
+                    $disponible[$fond] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $fond, $ext, (bool) $echafauder);
113
+                }
114
+
115
+                if ($disponible[$fond]) {
116
+                    $flux['data'] = substr((string) find_in_path($prefix_path . "page.$ext"), 0, -strlen(".$ext"));
117
+                }
118
+            }
119
+
120
+            // echafaudage :
121
+            // si c'est un fond de contenu d'un objet en base
122
+            // generer un fond automatique a la volee pour les webmestres
123
+            elseif (strncmp($fond, "$z_contenu/", strlen((string) $z_contenu) + 1) == 0) {
124
+                $type = substr($fond, strlen((string) $z_contenu) + 1);
125
+                if ($type == 'page' && isset($flux['args']['contexte'][$page])) {
126
+                    $type = $flux['args']['contexte'][$page];
127
+                }
128
+                if (!isset($disponible[$type])) {
129
+                    $disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, (bool) $echafauder);
130
+                }
131
+                if (is_string($disponible[$type])) {
132
+                    $flux['data'] = $disponible[$type];
133
+                } elseif (
134
+                    $echafauder
135
+                    && include_spip('inc/autoriser')
136
+                    && isset($GLOBALS['visiteur_session']['statut'])
137
+                    && autoriser('echafauder', $type)
138
+                    && ($is = $disponible[$type])
139
+                    && is_array($is)
140
+                ) {
141
+                    $flux['data'] = $echafauder($type, $is[0], $is[1], $is[2], $ext);
142
+                } else {
143
+                    $flux['data'] = ($disponible['404'] = z_contenu_disponible(
144
+                        $prefix_path . $prepend,
145
+                        $z_contenu,
146
+                        '404',
147
+                        $ext,
148
+                        (bool) $echafauder
149
+                    ));
150
+                }
151
+            }
152
+
153
+            // sinon, si on demande un fond non trouve dans un des autres blocs
154
+            // et si il y a bien un contenu correspondant ou echafaudable
155
+            // se rabbatre sur le dist.html du bloc concerne
156
+            else {
157
+                if (
158
+                    ($dir = explode('/', $fond))
159
+                    && ($dir = reset($dir))
160
+                    && $dir !== $z_contenu
161
+                    && in_array($dir, $z_blocs)
162
+                ) {
163
+                    $type = substr($fond, strlen("$dir/"));
164
+                    if ($type == 'page' && isset($flux['args']['contexte'][$page])) {
165
+                        $type = $flux['args']['contexte'][$page];
166
+                    }
167
+                    if ($type !== 'page' && !isset($disponible[$type])) {
168
+                        $disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, (bool) $echafauder);
169
+                    }
170
+                    if ($type == 'page' || $disponible[$type]) {
171
+                        $flux['data'] = z_trouver_bloc($prefix_path . $prepend, $dir, 'dist', $ext);
172
+                    }
173
+                }
174
+            }
175
+            $squelette = $flux['data'];
176
+        }
177
+
178
+        // layout specifiques par type et compositions :
179
+        // body-article.html
180
+        // body-sommaire.html
181
+        // pour des raisons de perfo, les declinaisons doivent etre dans le
182
+        // meme dossier que body.html
183
+        $f = null;
184
+        if ($fond == 'body' && str_ends_with((string) $squelette, $fond)) {
185
+            if (
186
+                isset($flux['args']['contexte']['type-page'])
187
+                && (
188
+                    isset($flux['args']['contexte']['composition']) && file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page'] . '-' . $flux['args']['contexte']['composition']) . ".$ext")
189
+                    || file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page']) . ".$ext")
190
+                )
191
+            ) {
192
+                $flux['data'] = $f;
193
+            }
194
+        } elseif (
195
+            $fond == 'structure'
196
+            && z_sanitize_var_zajax()
197
+            && ($f = find_in_path($prefix_path . $prepend . 'ajax' . ".$ext"))
198
+        ) {
199
+            $flux['data'] = substr((string) $f, 0, -strlen(".$ext"));
200
+        } elseif (
201
+            // chercher le fond correspondant a la composition
202
+            isset($flux['args']['contexte']['composition'])
203
+            && (basename($fond) == 'page' || $squelette && str_ends_with((string) $squelette, $fond))
204
+            && ($dir = substr($fond, $prefix_length))
205
+            && ($dir = explode('/', $dir))
206
+            && ($dir = reset($dir))
207
+            && in_array($dir, $z_blocs)
208
+            && ($f = find_in_path($prefix_path . $prepend . $fond . '-' . $flux['args']['contexte']['composition'] . ".$ext"))
209
+        ) {
210
+            $flux['data'] = substr((string) $f, 0, -strlen(".$ext"));
211
+        }
212
+    }
213
+
214
+    return $flux;
215 215
 }
216 216
 
217 217
 /**
@@ -221,18 +221,18 @@  discard block
 block discarded – undo
221 221
  * @return array
222 222
  */
223 223
 function z_blocs($espace_prive = false) {
224
-	if ($espace_prive) {
225
-		return ($GLOBALS['z_blocs_ecrire'] ?? [
226
-			'contenu',
227
-			'navigation',
228
-			'extra',
229
-			'head',
230
-			'hierarchie',
231
-			'top'
232
-		]);
233
-	}
234
-
235
-	return ($GLOBALS['z_blocs'] ?? ['contenu']);
224
+    if ($espace_prive) {
225
+        return ($GLOBALS['z_blocs_ecrire'] ?? [
226
+            'contenu',
227
+            'navigation',
228
+            'extra',
229
+            'head',
230
+            'hierarchie',
231
+            'top'
232
+        ]);
233
+    }
234
+
235
+    return ($GLOBALS['z_blocs'] ?? ['contenu']);
236 236
 }
237 237
 
238 238
 /**
@@ -247,11 +247,11 @@  discard block
 block discarded – undo
247 247
  * @return mixed
248 248
  */
249 249
 function z_contenu_disponible($prefix_path, $z_contenu, $type, $ext, $echafauder = true) {
250
-	if ($d = z_trouver_bloc($prefix_path, $z_contenu, $type, $ext)) {
251
-		return $d;
252
-	}
250
+    if ($d = z_trouver_bloc($prefix_path, $z_contenu, $type, $ext)) {
251
+        return $d;
252
+    }
253 253
 
254
-	return $echafauder ? z_echafaudable($type) : false;
254
+    return $echafauder ? z_echafaudable($type) : false;
255 255
 }
256 256
 
257 257
 /**
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
  *   `true` si on peut l'utiliser, `false` sinon.
266 266
  **/
267 267
 function z_fond_valide($squelette) {
268
-	return !_ZCORE_EXCLURE_PATH || !preg_match(',(' . _ZCORE_EXCLURE_PATH . ')/,', $squelette);
268
+    return !_ZCORE_EXCLURE_PATH || !preg_match(',(' . _ZCORE_EXCLURE_PATH . ')/,', $squelette);
269 269
 }
270 270
 
271 271
 /**
@@ -283,14 +283,14 @@  discard block
 block discarded – undo
283 283
  * @return string
284 284
  */
285 285
 function z_trouver_bloc($prefix_path, $bloc, $fond, $ext) {
286
-	if (
287
-		defined('_ZCORE_BLOC_PREFIX_SKEL') && ($f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext")) && z_fond_valide($f)
288
-		|| ($f = find_in_path("$prefix_path$bloc/$fond.$ext")) && z_fond_valide($f)
289
-	) {
290
-		return substr((string) $f, 0, -strlen(".$ext"));
291
-	}
292
-
293
-	return '';
286
+    if (
287
+        defined('_ZCORE_BLOC_PREFIX_SKEL') && ($f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext")) && z_fond_valide($f)
288
+        || ($f = find_in_path("$prefix_path$bloc/$fond.$ext")) && z_fond_valide($f)
289
+    ) {
290
+        return substr((string) $f, 0, -strlen(".$ext"));
291
+    }
292
+
293
+    return '';
294 294
 }
295 295
 
296 296
 /**
@@ -302,52 +302,52 @@  discard block
 block discarded – undo
302 302
  * @return bool
303 303
  */
304 304
 function z_echafaudable($type) {
305
-	static $pages = null;
306
-	static $echafaudable = [];
307
-	if (isset($echafaudable[$type])) {
308
-		return $echafaudable[$type];
309
-	}
310
-	if (preg_match(',[^\w],', $type)) {
311
-		return $echafaudable[$type] = false;
312
-	}
313
-
314
-	if (test_espace_prive()) {
315
-		if (!function_exists('trouver_objet_exec')) {
316
-			include_spip('inc/pipelines_ecrire');
317
-		}
318
-		if ($e = trouver_objet_exec($type)) {
319
-			return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $e];
320
-		} else {
321
-			// peut etre c'est un exec=types qui liste tous les objets "type"
322
-			if (
323
-				($t = objet_type($type, false)) !== $type
324
-				&& ($e = trouver_objet_exec($t))
325
-			) {
326
-				return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $t];
327
-			}
328
-		}
329
-	} else {
330
-		if (is_null($pages)) {
331
-			$pages = [];
332
-			$liste = lister_tables_objets_sql();
333
-			foreach ($liste as $t => $d) {
334
-				if ($d['page']) {
335
-					$pages[$d['page']] = [$d['table_objet'], $t];
336
-				}
337
-			}
338
-		}
339
-		if (!isset($pages[$type])) {
340
-			return $echafaudable[$type] = false;
341
-		}
342
-		if ((is_countable($pages[$type]) ? count($pages[$type]) : 0) == 2) {
343
-			$trouver_table = charger_fonction('trouver_table', 'base');
344
-			$pages[$type][] = $trouver_table(reset($pages[$type]));
345
-		}
346
-
347
-		return $echafaudable[$type] = $pages[$type];
348
-	}
349
-
350
-	return $echafaudable[$type] = false;
305
+    static $pages = null;
306
+    static $echafaudable = [];
307
+    if (isset($echafaudable[$type])) {
308
+        return $echafaudable[$type];
309
+    }
310
+    if (preg_match(',[^\w],', $type)) {
311
+        return $echafaudable[$type] = false;
312
+    }
313
+
314
+    if (test_espace_prive()) {
315
+        if (!function_exists('trouver_objet_exec')) {
316
+            include_spip('inc/pipelines_ecrire');
317
+        }
318
+        if ($e = trouver_objet_exec($type)) {
319
+            return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $e];
320
+        } else {
321
+            // peut etre c'est un exec=types qui liste tous les objets "type"
322
+            if (
323
+                ($t = objet_type($type, false)) !== $type
324
+                && ($e = trouver_objet_exec($t))
325
+            ) {
326
+                return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $t];
327
+            }
328
+        }
329
+    } else {
330
+        if (is_null($pages)) {
331
+            $pages = [];
332
+            $liste = lister_tables_objets_sql();
333
+            foreach ($liste as $t => $d) {
334
+                if ($d['page']) {
335
+                    $pages[$d['page']] = [$d['table_objet'], $t];
336
+                }
337
+            }
338
+        }
339
+        if (!isset($pages[$type])) {
340
+            return $echafaudable[$type] = false;
341
+        }
342
+        if ((is_countable($pages[$type]) ? count($pages[$type]) : 0) == 2) {
343
+            $trouver_table = charger_fonction('trouver_table', 'base');
344
+            $pages[$type][] = $trouver_table(reset($pages[$type]));
345
+        }
346
+
347
+        return $echafaudable[$type] = $pages[$type];
348
+    }
349
+
350
+    return $echafaudable[$type] = false;
351 351
 }
352 352
 
353 353
 
@@ -364,42 +364,42 @@  discard block
 block discarded – undo
364 364
  * @return string
365 365
  */
366 366
 function prive_echafauder_dist($exec, $table, $table_sql, $desc_exec, $ext) {
367
-	$scaffold = '';
368
-
369
-	// page objet ou objet_edit
370
-	if (is_array($desc_exec)) {
371
-		$type = $desc_exec['type'];
372
-		$primary = $desc_exec['id_table_objet'];
373
-
374
-		if ($desc_exec['edition'] === false) {
375
-			$fond = 'objet';
376
-		} else {
377
-			$trouver_table = charger_fonction('trouver_table', 'base');
378
-			$desc = $trouver_table($table_sql);
379
-			$fond = isset($desc['field']['id_rubrique']) ? 'objet_edit' : 'objet_edit.sans_rubrique';
380
-		}
381
-		$dir = z_blocs(test_espace_prive());
382
-		$dir = reset($dir);
383
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/" . $fond . ',objet=' . $type . ',id_objet=#' . strtoupper((string) $primary) . ',env}>';
384
-	} // page objets
385
-	elseif (($type = $desc_exec) && !str_contains($type, '/')) {
386
-		$dir = z_blocs(test_espace_prive());
387
-		$dir = reset($dir);
388
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=" . $type . ',env} />';
389
-	}
390
-	// morceau d'objet : on fournit le fond de sibstitution dans $desc_exec
391
-	// et objet et tire de $table
392
-	elseif ($fond = $desc_exec) {
393
-		$dir = md5(dirname($fond));
394
-		$scaffold = "<INCLURE{fond=$fond,objet=" . objet_type($table) . ',env} />';
395
-	}
396
-
397
-	$base_dir = sous_repertoire(_DIR_CACHE, 'scaffold', false);
398
-	$base_dir = sous_repertoire($base_dir, $dir, false);
399
-	$f = $base_dir . "$exec";
400
-	ecrire_fichier("$f.$ext", $scaffold);
401
-
402
-	return $f;
367
+    $scaffold = '';
368
+
369
+    // page objet ou objet_edit
370
+    if (is_array($desc_exec)) {
371
+        $type = $desc_exec['type'];
372
+        $primary = $desc_exec['id_table_objet'];
373
+
374
+        if ($desc_exec['edition'] === false) {
375
+            $fond = 'objet';
376
+        } else {
377
+            $trouver_table = charger_fonction('trouver_table', 'base');
378
+            $desc = $trouver_table($table_sql);
379
+            $fond = isset($desc['field']['id_rubrique']) ? 'objet_edit' : 'objet_edit.sans_rubrique';
380
+        }
381
+        $dir = z_blocs(test_espace_prive());
382
+        $dir = reset($dir);
383
+        $scaffold = "<INCLURE{fond=prive/echafaudage/$dir/" . $fond . ',objet=' . $type . ',id_objet=#' . strtoupper((string) $primary) . ',env}>';
384
+    } // page objets
385
+    elseif (($type = $desc_exec) && !str_contains($type, '/')) {
386
+        $dir = z_blocs(test_espace_prive());
387
+        $dir = reset($dir);
388
+        $scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=" . $type . ',env} />';
389
+    }
390
+    // morceau d'objet : on fournit le fond de sibstitution dans $desc_exec
391
+    // et objet et tire de $table
392
+    elseif ($fond = $desc_exec) {
393
+        $dir = md5(dirname($fond));
394
+        $scaffold = "<INCLURE{fond=$fond,objet=" . objet_type($table) . ',env} />';
395
+    }
396
+
397
+    $base_dir = sous_repertoire(_DIR_CACHE, 'scaffold', false);
398
+    $base_dir = sous_repertoire($base_dir, $dir, false);
399
+    $f = $base_dir . "$exec";
400
+    ecrire_fichier("$f.$ext", $scaffold);
401
+
402
+    return $f;
403 403
 }
404 404
 
405 405
 /**
@@ -408,17 +408,17 @@  discard block
 block discarded – undo
408 408
  * @return bool|string
409 409
  */
410 410
 function z_sanitize_var_zajax() {
411
-	$z_ajax = _request('var_zajax');
412
-	if (!$z_ajax) {
413
-		return false;
414
-	}
415
-	if (
416
-		!($z_blocs = z_blocs(test_espace_prive()))
417
-		|| !in_array($z_ajax, $z_blocs)
418
-	) {
419
-		set_request('var_zajax'); // enlever cette demande incongrue
420
-		$z_ajax = false;
421
-	}
422
-
423
-	return $z_ajax;
411
+    $z_ajax = _request('var_zajax');
412
+    if (!$z_ajax) {
413
+        return false;
414
+    }
415
+    if (
416
+        !($z_blocs = z_blocs(test_espace_prive()))
417
+        || !in_array($z_ajax, $z_blocs)
418
+    ) {
419
+        set_request('var_zajax'); // enlever cette demande incongrue
420
+        $z_ajax = false;
421
+    }
422
+
423
+    return $z_ajax;
424 424
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
 			$apl_constant = '_Z_AJAX_PARALLEL_LOAD';
53 53
 			$page = _SPIP_PAGE;
54 54
 			$echafauder = charger_fonction('echafauder', 'public', true);
55
-			define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist' . (defined('_DIR_PLUGIN_DIST') ? '|\b' . rtrim(
55
+			define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist'.(defined('_DIR_PLUGIN_DIST') ? '|\b'.rtrim(
56 56
 				(string) _DIR_PLUGIN_DIST,
57 57
 				'/'
58 58
 			) : ''));
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 			&& in_array($dir, $z_blocs) // verifier deja qu'on est dans un bloc Z
77 77
 			&& defined($apl_constant)
78 78
 			&& in_array($dir, explode(',', (string) constant($apl_constant))) // et dans un demande en APL
79
-			&& ($pipe = z_trouver_bloc($prefix_path . $prepend, $dir, 'z_apl', $ext)) // et qui contient le squelette APL
79
+			&& ($pipe = z_trouver_bloc($prefix_path.$prepend, $dir, 'z_apl', $ext)) // et qui contient le squelette APL
80 80
 		) {
81 81
 			$flux['data'] = $pipe;
82 82
 
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
 			$echafauder = '';
90 90
 		}
91 91
 		if ($prepend) {
92
-			$squelette = substr((string) find_in_path($prefix_path . $prepend . "$fond.$ext"), 0, -strlen(".$ext"));
92
+			$squelette = substr((string) find_in_path($prefix_path.$prepend."$fond.$ext"), 0, -strlen(".$ext"));
93 93
 			if ($squelette) {
94 94
 				$flux['data'] = $squelette;
95 95
 			}
@@ -109,11 +109,11 @@  discard block
 block discarded – undo
109 109
 				// se brancher sur contenu/xx si il existe
110 110
 				// ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
111 111
 				if (!isset($disponible[$fond])) {
112
-					$disponible[$fond] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $fond, $ext, (bool) $echafauder);
112
+					$disponible[$fond] = z_contenu_disponible($prefix_path.$prepend, $z_contenu, $fond, $ext, (bool) $echafauder);
113 113
 				}
114 114
 
115 115
 				if ($disponible[$fond]) {
116
-					$flux['data'] = substr((string) find_in_path($prefix_path . "page.$ext"), 0, -strlen(".$ext"));
116
+					$flux['data'] = substr((string) find_in_path($prefix_path."page.$ext"), 0, -strlen(".$ext"));
117 117
 				}
118 118
 			}
119 119
 
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 					$type = $flux['args']['contexte'][$page];
127 127
 				}
128 128
 				if (!isset($disponible[$type])) {
129
-					$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, (bool) $echafauder);
129
+					$disponible[$type] = z_contenu_disponible($prefix_path.$prepend, $z_contenu, $type, $ext, (bool) $echafauder);
130 130
 				}
131 131
 				if (is_string($disponible[$type])) {
132 132
 					$flux['data'] = $disponible[$type];
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
 					$flux['data'] = $echafauder($type, $is[0], $is[1], $is[2], $ext);
142 142
 				} else {
143 143
 					$flux['data'] = ($disponible['404'] = z_contenu_disponible(
144
-						$prefix_path . $prepend,
144
+						$prefix_path.$prepend,
145 145
 						$z_contenu,
146 146
 						'404',
147 147
 						$ext,
@@ -165,10 +165,10 @@  discard block
 block discarded – undo
165 165
 						$type = $flux['args']['contexte'][$page];
166 166
 					}
167 167
 					if ($type !== 'page' && !isset($disponible[$type])) {
168
-						$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, (bool) $echafauder);
168
+						$disponible[$type] = z_contenu_disponible($prefix_path.$prepend, $z_contenu, $type, $ext, (bool) $echafauder);
169 169
 					}
170 170
 					if ($type == 'page' || $disponible[$type]) {
171
-						$flux['data'] = z_trouver_bloc($prefix_path . $prepend, $dir, 'dist', $ext);
171
+						$flux['data'] = z_trouver_bloc($prefix_path.$prepend, $dir, 'dist', $ext);
172 172
 					}
173 173
 				}
174 174
 			}
@@ -185,8 +185,8 @@  discard block
 block discarded – undo
185 185
 			if (
186 186
 				isset($flux['args']['contexte']['type-page'])
187 187
 				&& (
188
-					isset($flux['args']['contexte']['composition']) && file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page'] . '-' . $flux['args']['contexte']['composition']) . ".$ext")
189
-					|| file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page']) . ".$ext")
188
+					isset($flux['args']['contexte']['composition']) && file_exists(($f = $squelette.'-'.$flux['args']['contexte']['type-page'].'-'.$flux['args']['contexte']['composition']).".$ext")
189
+					|| file_exists(($f = $squelette.'-'.$flux['args']['contexte']['type-page']).".$ext")
190 190
 				)
191 191
 			) {
192 192
 				$flux['data'] = $f;
@@ -194,7 +194,7 @@  discard block
 block discarded – undo
194 194
 		} elseif (
195 195
 			$fond == 'structure'
196 196
 			&& z_sanitize_var_zajax()
197
-			&& ($f = find_in_path($prefix_path . $prepend . 'ajax' . ".$ext"))
197
+			&& ($f = find_in_path($prefix_path.$prepend.'ajax'.".$ext"))
198 198
 		) {
199 199
 			$flux['data'] = substr((string) $f, 0, -strlen(".$ext"));
200 200
 		} elseif (
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
 			&& ($dir = explode('/', $dir))
206 206
 			&& ($dir = reset($dir))
207 207
 			&& in_array($dir, $z_blocs)
208
-			&& ($f = find_in_path($prefix_path . $prepend . $fond . '-' . $flux['args']['contexte']['composition'] . ".$ext"))
208
+			&& ($f = find_in_path($prefix_path.$prepend.$fond.'-'.$flux['args']['contexte']['composition'].".$ext"))
209 209
 		) {
210 210
 			$flux['data'] = substr((string) $f, 0, -strlen(".$ext"));
211 211
 		}
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
  *   `true` si on peut l'utiliser, `false` sinon.
266 266
  **/
267 267
 function z_fond_valide($squelette) {
268
-	return !_ZCORE_EXCLURE_PATH || !preg_match(',(' . _ZCORE_EXCLURE_PATH . ')/,', $squelette);
268
+	return !_ZCORE_EXCLURE_PATH || !preg_match(',('._ZCORE_EXCLURE_PATH.')/,', $squelette);
269 269
 }
270 270
 
271 271
 /**
@@ -380,23 +380,23 @@  discard block
 block discarded – undo
380 380
 		}
381 381
 		$dir = z_blocs(test_espace_prive());
382 382
 		$dir = reset($dir);
383
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/" . $fond . ',objet=' . $type . ',id_objet=#' . strtoupper((string) $primary) . ',env}>';
383
+		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/".$fond.',objet='.$type.',id_objet=#'.strtoupper((string) $primary).',env}>';
384 384
 	} // page objets
385 385
 	elseif (($type = $desc_exec) && !str_contains($type, '/')) {
386 386
 		$dir = z_blocs(test_espace_prive());
387 387
 		$dir = reset($dir);
388
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=" . $type . ',env} />';
388
+		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=".$type.',env} />';
389 389
 	}
390 390
 	// morceau d'objet : on fournit le fond de sibstitution dans $desc_exec
391 391
 	// et objet et tire de $table
392 392
 	elseif ($fond = $desc_exec) {
393 393
 		$dir = md5(dirname($fond));
394
-		$scaffold = "<INCLURE{fond=$fond,objet=" . objet_type($table) . ',env} />';
394
+		$scaffold = "<INCLURE{fond=$fond,objet=".objet_type($table).',env} />';
395 395
 	}
396 396
 
397 397
 	$base_dir = sous_repertoire(_DIR_CACHE, 'scaffold', false);
398 398
 	$base_dir = sous_repertoire($base_dir, $dir, false);
399
-	$f = $base_dir . "$exec";
399
+	$f = $base_dir."$exec";
400 400
 	ecrire_fichier("$f.$ext", $scaffold);
401 401
 
402 402
 	return $f;
Please login to merge, or discard this patch.
ecrire/public/decompiler.php 2 patches
Spacing   +18 added lines, -19 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
 	$type .= ($struct->type_requete ?: $struct->type_table_optionnelle);
31 31
 
32 32
 	if ($struct->jointures_explicites) {
33
-		$type .= ' ' . $struct->jointures_explicites;
33
+		$type .= ' '.$struct->jointures_explicites;
34 34
 	}
35 35
 	if ($struct->table_optionnelle) {
36 36
 		$type .= '?';
@@ -39,11 +39,11 @@  discard block
 block discarded – undo
39 39
 
40 40
 	$crit = $struct->param;
41 41
 	if ($crit && !is_array($crit[0])) {
42
-		$type = strtolower($type) . array_shift($crit);
42
+		$type = strtolower($type).array_shift($crit);
43 43
 	}
44 44
 	$crit = decompiler_criteres($struct, $fmt, $prof);
45 45
 
46
-	$f = 'format_boucle_' . $fmt;
46
+	$f = 'format_boucle_'.$fmt;
47 47
 
48 48
 	return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
49 49
 }
@@ -56,21 +56,20 @@  discard block
 block discarded – undo
56 56
 			$res[] = decompiler_($v, $fmt, $prof);
57 57
 		}
58 58
 	}
59
-	$file = is_string($struct->texte) ? $struct->texte :
60
-		decompiler_($struct->texte, $fmt, $prof);
61
-	$f = 'format_inclure_' . $fmt;
59
+	$file = is_string($struct->texte) ? $struct->texte : decompiler_($struct->texte, $fmt, $prof);
60
+	$f = 'format_inclure_'.$fmt;
62 61
 
63 62
 	return $f($file, $res, $prof);
64 63
 }
65 64
 
66 65
 function decompiler_texte($struct, $fmt = '', $prof = 0) {
67
-	$f = 'format_texte_' . $fmt;
66
+	$f = 'format_texte_'.$fmt;
68 67
 
69 68
 	return strlen((string) $struct->texte) ? $f($struct->texte, $prof) : '';
70 69
 }
71 70
 
72 71
 function decompiler_polyglotte($struct, $fmt = '', $prof = 0) {
73
-	$f = 'format_polyglotte_' . $fmt;
72
+	$f = 'format_polyglotte_'.$fmt;
74 73
 
75 74
 	return $f($struct->traductions, $prof);
76 75
 }
@@ -83,7 +82,7 @@  discard block
 block discarded – undo
83 82
 
84 83
 	$filtres = decompiler_liste($struct->param, $fmt, $prof);
85 84
 
86
-	$f = 'format_idiome_' . $fmt;
85
+	$f = 'format_idiome_'.$fmt;
87 86
 
88 87
 	return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
89 88
 }
@@ -98,7 +97,7 @@  discard block
 block discarded – undo
98 97
 		}
99 98
 		$filtres = decompiler_liste($p, $fmt, $prof);
100 99
 	}
101
-	$f = 'format_champ_' . $fmt;
100
+	$f = 'format_champ_'.$fmt;
102 101
 
103 102
 	return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
104 103
 }
@@ -107,7 +106,7 @@  discard block
 block discarded – undo
107 106
 	if (!is_array($sources)) {
108 107
 		return '';
109 108
 	}
110
-	$f = 'format_liste_' . $fmt;
109
+	$f = 'format_liste_'.$fmt;
111 110
 	$res = '';
112 111
 	foreach ($sources as $arg) {
113 112
 		if (!is_array($arg)) {
@@ -124,7 +123,7 @@  discard block
 block discarded – undo
124 123
 				&& strlen((string) $v[0]->apres) == 1
125 124
 				&& $v[0]->apres == $v[0]->avant
126 125
 			) {
127
-				$args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
126
+				$args[] = $v[0]->avant.$v[0]->texte.$v[0]->apres;
128 127
 			} else {
129 128
 				$args[] = decompiler_($v, $fmt, 0 - $prof);
130 129
 			}
@@ -147,7 +146,7 @@  discard block
 block discarded – undo
147 146
 		return '';
148 147
 	}
149 148
 	$res = '';
150
-	$f = 'format_critere_' . $fmt;
149
+	$f = 'format_critere_'.$fmt;
151 150
 	foreach ($sources as $crit) {
152 151
 		if (!is_array($crit)) {
153 152
 			continue;
@@ -160,13 +159,13 @@  discard block
 block discarded – undo
160 159
 				&& $v[0]->type == 'texte'
161 160
 				&& $v[0]->apres
162 161
 			) {
163
-				$args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
162
+				$args[] = [['texte', ($v[0]->apres.$v[0]->texte.$v[0]->apres)]];
164 163
 			} else {
165 164
 				$res2 = [];
166 165
 				foreach ($v as $k => $p) {
167 166
 					if (
168 167
 						isset($p->type)
169
-						&& function_exists($d = 'decompiler_' . $p->type)
168
+						&& function_exists($d = 'decompiler_'.$p->type)
170 169
 					) {
171 170
 						$r = $d($p, $fmt, (0 - $prof));
172 171
 						$res2[] = [$p->type, $r];
@@ -194,7 +193,7 @@  discard block
 block discarded – undo
194 193
 		if (!isset($p->type)) {
195 194
 			continue;
196 195
 		} #??????
197
-		$d = 'decompiler_' . $p->type;
196
+		$d = 'decompiler_'.$p->type;
198 197
 		$next = $liste[$k + 1] ?? false;
199 198
 		// Forcer le champ etendu si son source (pas les reecritures)
200 199
 		// contenait des args et s'il est suivi d'espaces,
@@ -219,16 +218,16 @@  discard block
 block discarded – undo
219 218
 		}
220 219
 		$contenu[] = [$d($p, $fmt, $prof2), $p->type];
221 220
 	}
222
-	$f = 'format_suite_' . $fmt;
221
+	$f = 'format_suite_'.$fmt;
223 222
 
224 223
 	return $f($contenu);
225 224
 }
226 225
 
227 226
 function public_decompiler($liste, $fmt = '', $prof = 0, $quoi = '') {
228
-	if (!include_spip('public/format_' . $fmt)) {
227
+	if (!include_spip('public/format_'.$fmt)) {
229 228
 		return "'$fmt'?";
230 229
 	}
231
-	$f = 'decompiler_' . $quoi;
230
+	$f = 'decompiler_'.$quoi;
232 231
 
233 232
 	return $f($liste, $fmt, $prof);
234 233
 }
Please login to merge, or discard this patch.
Indentation   +176 added lines, -176 removed lines patch added patch discarded remove patch
@@ -12,129 +12,129 @@  discard block
 block discarded – undo
12 12
 \***************************************************************************/
13 13
 
14 14
 if (!defined('_ECRIRE_INC_VERSION')) {
15
-	return;
15
+    return;
16 16
 }
17 17
 
18 18
 // Decompilation de l'arbre de syntaxe abstraite d'un squelette SPIP
19 19
 
20 20
 function decompiler_boucle($struct, $fmt = '', $prof = 0) {
21
-	$nom = $struct->id_boucle;
22
-	$preaff = decompiler_($struct->preaff, $fmt, $prof);
23
-	$avant = decompiler_($struct->avant, $fmt, $prof);
24
-	$apres = decompiler_($struct->apres, $fmt, $prof);
25
-	$altern = decompiler_($struct->altern, $fmt, $prof);
26
-	$milieu = decompiler_($struct->milieu, $fmt, $prof);
27
-	$postaff = decompiler_($struct->postaff, $fmt, $prof);
28
-
29
-	$type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
30
-	$type .= ($struct->type_requete ?: $struct->type_table_optionnelle);
31
-
32
-	if ($struct->jointures_explicites) {
33
-		$type .= ' ' . $struct->jointures_explicites;
34
-	}
35
-	if ($struct->table_optionnelle) {
36
-		$type .= '?';
37
-	}
38
-	// Revoir le cas de la boucle recursive
39
-
40
-	$crit = $struct->param;
41
-	if ($crit && !is_array($crit[0])) {
42
-		$type = strtolower($type) . array_shift($crit);
43
-	}
44
-	$crit = decompiler_criteres($struct, $fmt, $prof);
45
-
46
-	$f = 'format_boucle_' . $fmt;
47
-
48
-	return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
21
+    $nom = $struct->id_boucle;
22
+    $preaff = decompiler_($struct->preaff, $fmt, $prof);
23
+    $avant = decompiler_($struct->avant, $fmt, $prof);
24
+    $apres = decompiler_($struct->apres, $fmt, $prof);
25
+    $altern = decompiler_($struct->altern, $fmt, $prof);
26
+    $milieu = decompiler_($struct->milieu, $fmt, $prof);
27
+    $postaff = decompiler_($struct->postaff, $fmt, $prof);
28
+
29
+    $type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
30
+    $type .= ($struct->type_requete ?: $struct->type_table_optionnelle);
31
+
32
+    if ($struct->jointures_explicites) {
33
+        $type .= ' ' . $struct->jointures_explicites;
34
+    }
35
+    if ($struct->table_optionnelle) {
36
+        $type .= '?';
37
+    }
38
+    // Revoir le cas de la boucle recursive
39
+
40
+    $crit = $struct->param;
41
+    if ($crit && !is_array($crit[0])) {
42
+        $type = strtolower($type) . array_shift($crit);
43
+    }
44
+    $crit = decompiler_criteres($struct, $fmt, $prof);
45
+
46
+    $f = 'format_boucle_' . $fmt;
47
+
48
+    return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
49 49
 }
50 50
 
51 51
 function decompiler_include($struct, $fmt = '', $prof = 0) {
52
-	$res = [];
53
-	foreach ($struct->param ?: [] as $couple) {
54
-		array_shift($couple);
55
-		foreach ($couple as $v) {
56
-			$res[] = decompiler_($v, $fmt, $prof);
57
-		}
58
-	}
59
-	$file = is_string($struct->texte) ? $struct->texte :
60
-		decompiler_($struct->texte, $fmt, $prof);
61
-	$f = 'format_inclure_' . $fmt;
62
-
63
-	return $f($file, $res, $prof);
52
+    $res = [];
53
+    foreach ($struct->param ?: [] as $couple) {
54
+        array_shift($couple);
55
+        foreach ($couple as $v) {
56
+            $res[] = decompiler_($v, $fmt, $prof);
57
+        }
58
+    }
59
+    $file = is_string($struct->texte) ? $struct->texte :
60
+        decompiler_($struct->texte, $fmt, $prof);
61
+    $f = 'format_inclure_' . $fmt;
62
+
63
+    return $f($file, $res, $prof);
64 64
 }
65 65
 
66 66
 function decompiler_texte($struct, $fmt = '', $prof = 0) {
67
-	$f = 'format_texte_' . $fmt;
67
+    $f = 'format_texte_' . $fmt;
68 68
 
69
-	return strlen((string) $struct->texte) ? $f($struct->texte, $prof) : '';
69
+    return strlen((string) $struct->texte) ? $f($struct->texte, $prof) : '';
70 70
 }
71 71
 
72 72
 function decompiler_polyglotte($struct, $fmt = '', $prof = 0) {
73
-	$f = 'format_polyglotte_' . $fmt;
73
+    $f = 'format_polyglotte_' . $fmt;
74 74
 
75
-	return $f($struct->traductions, $prof);
75
+    return $f($struct->traductions, $prof);
76 76
 }
77 77
 
78 78
 function decompiler_idiome($struct, $fmt = '', $prof = 0) {
79
-	$args = [];
80
-	foreach ($struct->arg as $k => $v) {
81
-		$args[$k] = public_decompiler($v, $fmt, $prof);
82
-	}
79
+    $args = [];
80
+    foreach ($struct->arg as $k => $v) {
81
+        $args[$k] = public_decompiler($v, $fmt, $prof);
82
+    }
83 83
 
84
-	$filtres = decompiler_liste($struct->param, $fmt, $prof);
84
+    $filtres = decompiler_liste($struct->param, $fmt, $prof);
85 85
 
86
-	$f = 'format_idiome_' . $fmt;
86
+    $f = 'format_idiome_' . $fmt;
87 87
 
88
-	return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
88
+    return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
89 89
 }
90 90
 
91 91
 function decompiler_champ($struct, $fmt = '', $prof = 0) {
92
-	$avant = decompiler_($struct->avant, $fmt, $prof);
93
-	$apres = decompiler_($struct->apres, $fmt, $prof);
94
-	$args = $filtres = '';
95
-	if ($p = $struct->param) {
96
-		if ($p[0][0] === '') {
97
-			$args = decompiler_liste([array_shift($p)], $fmt, $prof);
98
-		}
99
-		$filtres = decompiler_liste($p, $fmt, $prof);
100
-	}
101
-	$f = 'format_champ_' . $fmt;
102
-
103
-	return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
92
+    $avant = decompiler_($struct->avant, $fmt, $prof);
93
+    $apres = decompiler_($struct->apres, $fmt, $prof);
94
+    $args = $filtres = '';
95
+    if ($p = $struct->param) {
96
+        if ($p[0][0] === '') {
97
+            $args = decompiler_liste([array_shift($p)], $fmt, $prof);
98
+        }
99
+        $filtres = decompiler_liste($p, $fmt, $prof);
100
+    }
101
+    $f = 'format_champ_' . $fmt;
102
+
103
+    return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
104 104
 }
105 105
 
106 106
 function decompiler_liste($sources, $fmt = '', $prof = 0) {
107
-	if (!is_array($sources)) {
108
-		return '';
109
-	}
110
-	$f = 'format_liste_' . $fmt;
111
-	$res = '';
112
-	foreach ($sources as $arg) {
113
-		if (!is_array($arg)) {
114
-			continue; // ne devrait pas arriver.
115
-		} else {
116
-			$r = array_shift($arg);
117
-		}
118
-		$args = [];
119
-		foreach ($arg as $v) {
120
-			// cas des arguments entoures de ' ou "
121
-			if (
122
-				(is_countable($v) ? count($v) : 0) == 1
123
-				&& $v[0]->type == 'texte'
124
-				&& strlen((string) $v[0]->apres) == 1
125
-				&& $v[0]->apres == $v[0]->avant
126
-			) {
127
-				$args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
128
-			} else {
129
-				$args[] = decompiler_($v, $fmt, 0 - $prof);
130
-			}
131
-		}
132
-		if ($r !== '' || $args) {
133
-			$res .= $f($r, $args, $prof);
134
-		}
135
-	}
136
-
137
-	return $res;
107
+    if (!is_array($sources)) {
108
+        return '';
109
+    }
110
+    $f = 'format_liste_' . $fmt;
111
+    $res = '';
112
+    foreach ($sources as $arg) {
113
+        if (!is_array($arg)) {
114
+            continue; // ne devrait pas arriver.
115
+        } else {
116
+            $r = array_shift($arg);
117
+        }
118
+        $args = [];
119
+        foreach ($arg as $v) {
120
+            // cas des arguments entoures de ' ou "
121
+            if (
122
+                (is_countable($v) ? count($v) : 0) == 1
123
+                && $v[0]->type == 'texte'
124
+                && strlen((string) $v[0]->apres) == 1
125
+                && $v[0]->apres == $v[0]->avant
126
+            ) {
127
+                $args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
128
+            } else {
129
+                $args[] = decompiler_($v, $fmt, 0 - $prof);
130
+            }
131
+        }
132
+        if ($r !== '' || $args) {
133
+            $res .= $f($r, $args, $prof);
134
+        }
135
+    }
136
+
137
+    return $res;
138 138
 }
139 139
 
140 140
 // Decompilation des criteres: on triche et on deroge:
@@ -142,93 +142,93 @@  discard block
 block discarded – undo
142 142
 // - le champ apres signale le critere {"separateur"} ou {'separateur'}
143 143
 // - les champs sont implicitement etendus (crochets implicites mais interdits)
144 144
 function decompiler_criteres($boucle, $fmt = '', $prof = 0) {
145
-	$sources = $boucle->param;
146
-	if (!is_array($sources)) {
147
-		return '';
148
-	}
149
-	$res = '';
150
-	$f = 'format_critere_' . $fmt;
151
-	foreach ($sources as $crit) {
152
-		if (!is_array($crit)) {
153
-			continue;
154
-		} // boucle recursive
155
-		array_shift($crit);
156
-		$args = [];
157
-		foreach ($crit as $i => $v) {
158
-			if (
159
-				(is_countable($v) ? count($v) : 0) == 1
160
-				&& $v[0]->type == 'texte'
161
-				&& $v[0]->apres
162
-			) {
163
-				$args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
164
-			} else {
165
-				$res2 = [];
166
-				foreach ($v as $k => $p) {
167
-					if (
168
-						isset($p->type)
169
-						&& function_exists($d = 'decompiler_' . $p->type)
170
-					) {
171
-						$r = $d($p, $fmt, (0 - $prof));
172
-						$res2[] = [$p->type, $r];
173
-					} else {
174
-						spip_logger()->info("critere $i / $k mal forme");
175
-					}
176
-				}
177
-				$args[] = $res2;
178
-			}
179
-		}
180
-		$res .= $f($args);
181
-	}
182
-
183
-	return $res;
145
+    $sources = $boucle->param;
146
+    if (!is_array($sources)) {
147
+        return '';
148
+    }
149
+    $res = '';
150
+    $f = 'format_critere_' . $fmt;
151
+    foreach ($sources as $crit) {
152
+        if (!is_array($crit)) {
153
+            continue;
154
+        } // boucle recursive
155
+        array_shift($crit);
156
+        $args = [];
157
+        foreach ($crit as $i => $v) {
158
+            if (
159
+                (is_countable($v) ? count($v) : 0) == 1
160
+                && $v[0]->type == 'texte'
161
+                && $v[0]->apres
162
+            ) {
163
+                $args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
164
+            } else {
165
+                $res2 = [];
166
+                foreach ($v as $k => $p) {
167
+                    if (
168
+                        isset($p->type)
169
+                        && function_exists($d = 'decompiler_' . $p->type)
170
+                    ) {
171
+                        $r = $d($p, $fmt, (0 - $prof));
172
+                        $res2[] = [$p->type, $r];
173
+                    } else {
174
+                        spip_logger()->info("critere $i / $k mal forme");
175
+                    }
176
+                }
177
+                $args[] = $res2;
178
+            }
179
+        }
180
+        $res .= $f($args);
181
+    }
182
+
183
+    return $res;
184 184
 }
185 185
 
186 186
 
187 187
 function decompiler_($liste, $fmt = '', $prof = 0) {
188
-	if (!is_array($liste)) {
189
-		return '';
190
-	}
191
-	$prof2 = ($prof < 0) ? ($prof - 1) : ($prof + 1);
192
-	$contenu = [];
193
-	foreach ($liste as $k => $p) {
194
-		if (!isset($p->type)) {
195
-			continue;
196
-		} #??????
197
-		$d = 'decompiler_' . $p->type;
198
-		$next = $liste[$k + 1] ?? false;
199
-		// Forcer le champ etendu si son source (pas les reecritures)
200
-		// contenait des args et s'il est suivi d'espaces,
201
-		// le champ simple les eliminant est un bug helas perenne.
202
-
203
-		if (
204
-			$next
205
-			&& $next->type == 'texte'
206
-			&& $p->type == 'champ'
207
-			&& !$p->apres
208
-			&& !$p->avant
209
-			&& $p->fonctions
210
-		) {
211
-			$n = strlen((string) $next->texte) - strlen(ltrim((string) $next->texte));
212
-			if ($n) {
213
-				$champ = new Texte();
214
-				$champ->texte = substr((string) $next->texte, 0, $n);
215
-				$champ->ligne = $p->ligne;
216
-				$p->apres = [$champ];
217
-				$next->texte = substr((string) $next->texte, $n);
218
-			}
219
-		}
220
-		$contenu[] = [$d($p, $fmt, $prof2), $p->type];
221
-	}
222
-	$f = 'format_suite_' . $fmt;
223
-
224
-	return $f($contenu);
188
+    if (!is_array($liste)) {
189
+        return '';
190
+    }
191
+    $prof2 = ($prof < 0) ? ($prof - 1) : ($prof + 1);
192
+    $contenu = [];
193
+    foreach ($liste as $k => $p) {
194
+        if (!isset($p->type)) {
195
+            continue;
196
+        } #??????
197
+        $d = 'decompiler_' . $p->type;
198
+        $next = $liste[$k + 1] ?? false;
199
+        // Forcer le champ etendu si son source (pas les reecritures)
200
+        // contenait des args et s'il est suivi d'espaces,
201
+        // le champ simple les eliminant est un bug helas perenne.
202
+
203
+        if (
204
+            $next
205
+            && $next->type == 'texte'
206
+            && $p->type == 'champ'
207
+            && !$p->apres
208
+            && !$p->avant
209
+            && $p->fonctions
210
+        ) {
211
+            $n = strlen((string) $next->texte) - strlen(ltrim((string) $next->texte));
212
+            if ($n) {
213
+                $champ = new Texte();
214
+                $champ->texte = substr((string) $next->texte, 0, $n);
215
+                $champ->ligne = $p->ligne;
216
+                $p->apres = [$champ];
217
+                $next->texte = substr((string) $next->texte, $n);
218
+            }
219
+        }
220
+        $contenu[] = [$d($p, $fmt, $prof2), $p->type];
221
+    }
222
+    $f = 'format_suite_' . $fmt;
223
+
224
+    return $f($contenu);
225 225
 }
226 226
 
227 227
 function public_decompiler($liste, $fmt = '', $prof = 0, $quoi = '') {
228
-	if (!include_spip('public/format_' . $fmt)) {
229
-		return "'$fmt'?";
230
-	}
231
-	$f = 'decompiler_' . $quoi;
228
+    if (!include_spip('public/format_' . $fmt)) {
229
+        return "'$fmt'?";
230
+    }
231
+    $f = 'decompiler_' . $quoi;
232 232
 
233
-	return $f($liste, $fmt, $prof);
233
+    return $f($liste, $fmt, $prof);
234 234
 }
Please login to merge, or discard this patch.
ecrire/public/evaluer_page.php 2 patches
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -28,50 +28,50 @@  discard block
 block discarded – undo
28 28
  * @return void
29 29
  */
30 30
 
31
- /** @var bool Évaluation réussie ? */
31
+    /** @var bool Évaluation réussie ? */
32 32
 $res = true;
33 33
 
34 34
 // Cas d'une page contenant du PHP :
35 35
 if (empty($page['process_ins']) || $page['process_ins'] != 'html') {
36
-	include_spip('inc/lang');
36
+    include_spip('inc/lang');
37 37
 
38
-	// restaurer l'etat des notes avant calcul
39
-	if (
40
-		isset($page['notes'])
41
-		&& $page['notes']
42
-		&& ($notes = charger_fonction('notes', 'inc', true))
43
-	) {
44
-		$notes($page['notes'], 'restaurer_etat');
45
-	}
46
-	ob_start();
47
-	if (str_contains((string) $page['texte'], '?xml')) {
48
-		$page['texte'] = str_replace('<?xml', "<\1?xml", (string) $page['texte']);
49
-	}
38
+    // restaurer l'etat des notes avant calcul
39
+    if (
40
+        isset($page['notes'])
41
+        && $page['notes']
42
+        && ($notes = charger_fonction('notes', 'inc', true))
43
+    ) {
44
+        $notes($page['notes'], 'restaurer_etat');
45
+    }
46
+    ob_start();
47
+    if (str_contains((string) $page['texte'], '?xml')) {
48
+        $page['texte'] = str_replace('<?xml', "<\1?xml", (string) $page['texte']);
49
+    }
50 50
 
51
-	try {
52
-		$res = eval('?' . '>' . $page['texte']);
53
-		$page['texte'] = ob_get_contents();
54
-	} catch (\Throwable $e) {
55
-		$code = $page['texte'];
56
-		$GLOBALS['numero_ligne_php'] = 1;
57
-		if (!function_exists('numerote_ligne_php')) {
58
-			function numerote_ligne_php($match) {
59
-				$GLOBALS['numero_ligne_php']++;
60
-				return "\n/*" . str_pad((string) $GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
61
-			}
62
-		}
63
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64
-		$code = trim(highlight_string($code, true));
65
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
66
-		$page['texte'] = '<!-- Erreur -->';
67
-	}
68
-	ob_end_clean();
51
+    try {
52
+        $res = eval('?' . '>' . $page['texte']);
53
+        $page['texte'] = ob_get_contents();
54
+    } catch (\Throwable $e) {
55
+        $code = $page['texte'];
56
+        $GLOBALS['numero_ligne_php'] = 1;
57
+        if (!function_exists('numerote_ligne_php')) {
58
+            function numerote_ligne_php($match) {
59
+                $GLOBALS['numero_ligne_php']++;
60
+                return "\n/*" . str_pad((string) $GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
61
+            }
62
+        }
63
+        $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64
+        $code = trim(highlight_string($code, true));
65
+        erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
66
+        $page['texte'] = '<!-- Erreur -->';
67
+    }
68
+    ob_end_clean();
69 69
 
70
-	$page['process_ins'] = 'html';
70
+    $page['process_ins'] = 'html';
71 71
 
72
-	if (str_contains((string) $page['texte'], '?xml')) {
73
-		$page['texte'] = str_replace("<\1?xml", '<?xml', (string) $page['texte']);
74
-	}
72
+    if (str_contains((string) $page['texte'], '?xml')) {
73
+        $page['texte'] = str_replace("<\1?xml", '<?xml', (string) $page['texte']);
74
+    }
75 75
 }
76 76
 
77 77
 // le résultat de calcul d'un squelette est toujours de type string
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
 	}
50 50
 
51 51
 	try {
52
-		$res = eval('?' . '>' . $page['texte']);
52
+		$res = eval('?'.'>'.$page['texte']);
53 53
 		$page['texte'] = ob_get_contents();
54 54
 	} catch (\Throwable $e) {
55 55
 		$code = $page['texte'];
@@ -57,12 +57,12 @@  discard block
 block discarded – undo
57 57
 		if (!function_exists('numerote_ligne_php')) {
58 58
 			function numerote_ligne_php($match) {
59 59
 				$GLOBALS['numero_ligne_php']++;
60
-				return "\n/*" . str_pad((string) $GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
60
+				return "\n/*".str_pad((string) $GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT).'*/';
61 61
 			}
62 62
 		}
63
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
63
+		$code = '/*001*/'.preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64 64
 		$code = trim(highlight_string($code, true));
65
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
65
+		erreur_squelette('L'.$e->getLine().': '.$e->getMessage().'<br />'.$code, [$page['source'], '', $e->getFile(), '', $GLOBALS['spip_lang']]);
66 66
 		$page['texte'] = '<!-- Erreur -->';
67 67
 	}
68 68
 	ob_end_clean();
Please login to merge, or discard this patch.
ecrire/public/phraser_html.php 3 patches
Indentation   +1060 added lines, -1060 removed lines patch added patch discarded remove patch
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
  **/
28 28
 
29 29
 if (!defined('_ECRIRE_INC_VERSION')) {
30
-	return;
30
+    return;
31 31
 }
32 32
 
33 33
 /** Début de la partie principale d'une boucle */
@@ -74,54 +74,54 @@  discard block
 block discarded – undo
74 74
  */
75 75
 function phraser_inclure(string $texte, int $ligne, array $result): array {
76 76
 
77
-	while (
78
-		(($p = strpos($texte, '<INC')) !== false)
79
-		&& preg_match(BALISE_INCLURE, $texte, $match, PREG_OFFSET_CAPTURE, $p)
80
-	) {
81
-		$poss = array_column($match, 1);
82
-		$match = array_column($match, 0);
83
-		$match = array_pad($match, 3, null);
84
-
85
-		$p = $poss[0];
86
-		$debut = substr($texte, 0, $p);
87
-		if ($p) {
88
-			$result = phraser_idiomes($debut, $ligne, $result);
89
-		}
90
-		$ligne += public_compte_ligne($debut);
91
-
92
-		$champ = new Inclure();
93
-		$champ->ligne = $ligne;
94
-		$ligne += public_compte_ligne((string) $match[0]);
95
-		$fichier = $match[2];
96
-		$champ->texte = $fichier;
97
-
98
-		$texte = substr($texte, $p + strlen((string) $match[0]));
99
-
100
-		// on assimile {var=val} a une liste de un argument sans fonction
101
-		$pos_apres = 0;
102
-		phraser_args($texte, '/>', '', $result, $champ, $pos_apres);
103
-		if (!$champ->texte || (is_countable($champ->param) ? count($champ->param) : 0) > 1) {
104
-			if (!function_exists('normaliser_inclure')) {
105
-				include_spip('public/normaliser');
106
-			}
107
-			normaliser_inclure($champ);
108
-		}
109
-		$pos_fin = strpos($texte, '>', $pos_apres) + 1;
110
-		if (
111
-			(strpos($texte, '</INCLUDE>', $pos_fin) === $pos_fin)
112
-			|| (strpos($texte, '</INCLURE>', $pos_fin) === $pos_fin)
113
-		) {
114
-			$pos_fin += 10;
115
-		}
116
-		$texte = substr($texte, $pos_fin);
117
-		$result[] = $champ;
118
-	}
119
-
120
-	if ($texte != '') {
121
-		$result = phraser_idiomes($texte, $ligne, $result);
122
-	}
123
-
124
-	return $result;
77
+    while (
78
+        (($p = strpos($texte, '<INC')) !== false)
79
+        && preg_match(BALISE_INCLURE, $texte, $match, PREG_OFFSET_CAPTURE, $p)
80
+    ) {
81
+        $poss = array_column($match, 1);
82
+        $match = array_column($match, 0);
83
+        $match = array_pad($match, 3, null);
84
+
85
+        $p = $poss[0];
86
+        $debut = substr($texte, 0, $p);
87
+        if ($p) {
88
+            $result = phraser_idiomes($debut, $ligne, $result);
89
+        }
90
+        $ligne += public_compte_ligne($debut);
91
+
92
+        $champ = new Inclure();
93
+        $champ->ligne = $ligne;
94
+        $ligne += public_compte_ligne((string) $match[0]);
95
+        $fichier = $match[2];
96
+        $champ->texte = $fichier;
97
+
98
+        $texte = substr($texte, $p + strlen((string) $match[0]));
99
+
100
+        // on assimile {var=val} a une liste de un argument sans fonction
101
+        $pos_apres = 0;
102
+        phraser_args($texte, '/>', '', $result, $champ, $pos_apres);
103
+        if (!$champ->texte || (is_countable($champ->param) ? count($champ->param) : 0) > 1) {
104
+            if (!function_exists('normaliser_inclure')) {
105
+                include_spip('public/normaliser');
106
+            }
107
+            normaliser_inclure($champ);
108
+        }
109
+        $pos_fin = strpos($texte, '>', $pos_apres) + 1;
110
+        if (
111
+            (strpos($texte, '</INCLUDE>', $pos_fin) === $pos_fin)
112
+            || (strpos($texte, '</INCLURE>', $pos_fin) === $pos_fin)
113
+        ) {
114
+            $pos_fin += 10;
115
+        }
116
+        $texte = substr($texte, $pos_fin);
117
+        $result[] = $champ;
118
+    }
119
+
120
+    if ($texte != '') {
121
+        $result = phraser_idiomes($texte, $ligne, $result);
122
+    }
123
+
124
+    return $result;
125 125
 }
126 126
 
127 127
 /**
@@ -133,38 +133,38 @@  discard block
 block discarded – undo
133 133
  */
134 134
 function phraser_polyglotte(string $texte, int $ligne, array $result): array {
135 135
 
136
-	$collecteur = new Spip\Texte\Collecteur\Multis();
137
-	$multis = $collecteur->collecter($texte);
138
-
139
-	if (!empty($multis)) {
140
-		$pos_prev = 0;
141
-		foreach ($multis as $multi) {
142
-			if ($multi['pos'] > $pos_prev) {
143
-				$champ = new Texte();
144
-				$champ->texte = substr($texte, $pos_prev, $multi['pos'] - $pos_prev);
145
-				$champ->ligne = $ligne;
146
-				$result[] = $champ;
147
-				$ligne += public_compte_ligne($champ->texte);
148
-			}
149
-
150
-			$champ = new Polyglotte();
151
-			$champ->ligne = $ligne;
152
-			$champ->traductions = $multi['trads'];
153
-			$result[] = $champ;
154
-			$ligne += public_compte_ligne($multi['raw']);
155
-			$pos_prev = $multi['pos'] + $multi['length'];
156
-		}
157
-		$texte = substr($texte, $pos_prev);
158
-	}
159
-
160
-	if ($texte !== '') {
161
-		$champ = new Texte();
162
-		$champ->texte = $texte;
163
-		$champ->ligne = $ligne;
164
-		$result[] = $champ;
165
-	}
166
-
167
-	return $result;
136
+    $collecteur = new Spip\Texte\Collecteur\Multis();
137
+    $multis = $collecteur->collecter($texte);
138
+
139
+    if (!empty($multis)) {
140
+        $pos_prev = 0;
141
+        foreach ($multis as $multi) {
142
+            if ($multi['pos'] > $pos_prev) {
143
+                $champ = new Texte();
144
+                $champ->texte = substr($texte, $pos_prev, $multi['pos'] - $pos_prev);
145
+                $champ->ligne = $ligne;
146
+                $result[] = $champ;
147
+                $ligne += public_compte_ligne($champ->texte);
148
+            }
149
+
150
+            $champ = new Polyglotte();
151
+            $champ->ligne = $ligne;
152
+            $champ->traductions = $multi['trads'];
153
+            $result[] = $champ;
154
+            $ligne += public_compte_ligne($multi['raw']);
155
+            $pos_prev = $multi['pos'] + $multi['length'];
156
+        }
157
+        $texte = substr($texte, $pos_prev);
158
+    }
159
+
160
+    if ($texte !== '') {
161
+        $champ = new Texte();
162
+        $champ->texte = $texte;
163
+        $champ->ligne = $ligne;
164
+        $result[] = $champ;
165
+    }
166
+
167
+    return $result;
168 168
 }
169 169
 
170 170
 
@@ -187,64 +187,64 @@  discard block
 block discarded – undo
187 187
  **/
188 188
 function phraser_idiomes(string $texte, int $ligne, array $result): array {
189 189
 
190
-	while (
191
-		(($p = strpos($texte, '<:')) !== false)
192
-		&& preg_match(BALISE_IDIOMES, $texte, $match, PREG_OFFSET_CAPTURE, $p)
193
-	) {
194
-		$poss = array_column($match, 1);
195
-		$match = array_column($match, 0);
196
-		$match = array_pad($match, 8, null);
197
-		$p = $poss[0];
198
-
199
-		$idiome = (string) $match[0];
200
-		// faux idiome ?
201
-		if (!$match[3] && (empty($match[5]) || $match[5][0] !== '=')) {
202
-			$debut = substr($texte, 0, $p + strlen($idiome));
203
-			$result = phraser_champs($debut, $ligne, $result);
204
-			$ligne += public_compte_ligne($debut);
205
-			continue;
206
-		}
207
-
208
-		$debut = substr($texte, 0, $p);
209
-		$result = phraser_champs($debut, $ligne, $result);
210
-		$ligne += public_compte_ligne($debut);
211
-
212
-		$texte = substr($texte, $p + strlen($idiome));
213
-
214
-		$champ = new Idiome();
215
-		$champ->ligne = $ligne;
216
-		$ligne += public_compte_ligne($idiome);
217
-		// Stocker les arguments de la balise de traduction
218
-		$args = [];
219
-		$largs = (string) $match[5];
220
-		while (
221
-			str_contains($largs, '=')
222
-			&& preg_match(BALISE_IDIOMES_ARGS, $largs, $r)
223
-		) {
224
-			$args[$r[1]] = phraser_champs($r[2], 0, []);
225
-			$largs = substr($largs, strlen($r[0]));
226
-		}
227
-		$champ->arg = $args;
228
-
229
-		// TODO : supprimer ce strtolower cf https://git.spip.net/spip/spip/issues/2536
230
-		$champ->nom_champ = strtolower((string) $match[3]);
231
-		$champ->module = $match[2];
232
-
233
-		// pas d'imbrication pour les filtres sur langue
234
-		$champ->apres = '';
235
-		if (!is_null($match[7])) {
236
-			$pos_apres = 0;
237
-			phraser_args($match[7], ':', '', [], $champ, $pos_apres);
238
-			$champ->apres = substr($match[7], $pos_apres);
239
-		}
240
-		$result[] = $champ;
241
-	}
242
-
243
-	if ($texte !== '') {
244
-		$result = phraser_champs($texte, $ligne, $result);
245
-	}
246
-
247
-	return $result;
190
+    while (
191
+        (($p = strpos($texte, '<:')) !== false)
192
+        && preg_match(BALISE_IDIOMES, $texte, $match, PREG_OFFSET_CAPTURE, $p)
193
+    ) {
194
+        $poss = array_column($match, 1);
195
+        $match = array_column($match, 0);
196
+        $match = array_pad($match, 8, null);
197
+        $p = $poss[0];
198
+
199
+        $idiome = (string) $match[0];
200
+        // faux idiome ?
201
+        if (!$match[3] && (empty($match[5]) || $match[5][0] !== '=')) {
202
+            $debut = substr($texte, 0, $p + strlen($idiome));
203
+            $result = phraser_champs($debut, $ligne, $result);
204
+            $ligne += public_compte_ligne($debut);
205
+            continue;
206
+        }
207
+
208
+        $debut = substr($texte, 0, $p);
209
+        $result = phraser_champs($debut, $ligne, $result);
210
+        $ligne += public_compte_ligne($debut);
211
+
212
+        $texte = substr($texte, $p + strlen($idiome));
213
+
214
+        $champ = new Idiome();
215
+        $champ->ligne = $ligne;
216
+        $ligne += public_compte_ligne($idiome);
217
+        // Stocker les arguments de la balise de traduction
218
+        $args = [];
219
+        $largs = (string) $match[5];
220
+        while (
221
+            str_contains($largs, '=')
222
+            && preg_match(BALISE_IDIOMES_ARGS, $largs, $r)
223
+        ) {
224
+            $args[$r[1]] = phraser_champs($r[2], 0, []);
225
+            $largs = substr($largs, strlen($r[0]));
226
+        }
227
+        $champ->arg = $args;
228
+
229
+        // TODO : supprimer ce strtolower cf https://git.spip.net/spip/spip/issues/2536
230
+        $champ->nom_champ = strtolower((string) $match[3]);
231
+        $champ->module = $match[2];
232
+
233
+        // pas d'imbrication pour les filtres sur langue
234
+        $champ->apres = '';
235
+        if (!is_null($match[7])) {
236
+            $pos_apres = 0;
237
+            phraser_args($match[7], ':', '', [], $champ, $pos_apres);
238
+            $champ->apres = substr($match[7], $pos_apres);
239
+        }
240
+        $result[] = $champ;
241
+    }
242
+
243
+    if ($texte !== '') {
244
+        $result = phraser_champs($texte, $ligne, $result);
245
+    }
246
+
247
+    return $result;
248 248
 }
249 249
 
250 250
 /**
@@ -263,53 +263,53 @@  discard block
 block discarded – undo
263 263
  **/
264 264
 function phraser_champs(string $texte, int $ligne, array $result): array {
265 265
 
266
-	while (
267
-		(($p = strpos($texte, '#')) !== false)
268
-		&& preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match, PREG_OFFSET_CAPTURE, $p)
269
-	) {
270
-		$poss = array_column($match, 1);
271
-		$match = array_column($match, 0);
272
-
273
-		$p = $poss[0];
274
-		if ($p) {
275
-			$debut = substr($texte, 0, $p);
276
-			$result = phraser_polyglotte($debut, $ligne, $result);
277
-			$ligne += public_compte_ligne($debut);
278
-		}
279
-
280
-		$champ = new Champ();
281
-		$champ->ligne = $ligne;
282
-		$ligne += public_compte_ligne($match[0]);
283
-		$champ->nom_boucle = $match[2];
284
-		$champ->nom_champ = $match[3];
285
-		$champ->etoile = $match[5];
286
-
287
-		// texte après la balise
288
-		$suite = substr($texte, $p + strlen($match[0]));
289
-		if ($suite && str_starts_with($suite, '{')) {
290
-			phraser_arg($suite, '', [], $champ);
291
-			// ce ltrim est une ereur de conception
292
-			// mais on le conserve par souci de compatibilite
293
-			$texte = ltrim((string) $suite);
294
-			// Il faudrait le normaliser dans l'arbre de syntaxe abstraite
295
-			// pour faire sauter ce cas particulier a la decompilation.
296
-			/* Ce qui suit est malheureusement incomplet pour cela:
266
+    while (
267
+        (($p = strpos($texte, '#')) !== false)
268
+        && preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match, PREG_OFFSET_CAPTURE, $p)
269
+    ) {
270
+        $poss = array_column($match, 1);
271
+        $match = array_column($match, 0);
272
+
273
+        $p = $poss[0];
274
+        if ($p) {
275
+            $debut = substr($texte, 0, $p);
276
+            $result = phraser_polyglotte($debut, $ligne, $result);
277
+            $ligne += public_compte_ligne($debut);
278
+        }
279
+
280
+        $champ = new Champ();
281
+        $champ->ligne = $ligne;
282
+        $ligne += public_compte_ligne($match[0]);
283
+        $champ->nom_boucle = $match[2];
284
+        $champ->nom_champ = $match[3];
285
+        $champ->etoile = $match[5];
286
+
287
+        // texte après la balise
288
+        $suite = substr($texte, $p + strlen($match[0]));
289
+        if ($suite && str_starts_with($suite, '{')) {
290
+            phraser_arg($suite, '', [], $champ);
291
+            // ce ltrim est une ereur de conception
292
+            // mais on le conserve par souci de compatibilite
293
+            $texte = ltrim((string) $suite);
294
+            // Il faudrait le normaliser dans l'arbre de syntaxe abstraite
295
+            // pour faire sauter ce cas particulier a la decompilation.
296
+            /* Ce qui suit est malheureusement incomplet pour cela:
297 297
 			if ($n = (strlen($suite) - strlen($texte))) {
298 298
 				$champ->apres = array(new Texte);
299 299
 				$champ->apres[0]->texte = substr($suite,0,$n);
300 300
 			}
301 301
 			*/
302
-		} else {
303
-			$texte = $suite;
304
-		}
305
-		phraser_vieux($champ);
306
-		$result[] = $champ;
307
-	}
308
-	if ($texte !== '') {
309
-		$result = phraser_polyglotte($texte, $ligne, $result);
310
-	}
311
-
312
-	return $result;
302
+        } else {
303
+            $texte = $suite;
304
+        }
305
+        phraser_vieux($champ);
306
+        $result[] = $champ;
307
+    }
308
+    if ($texte !== '') {
309
+        $result = phraser_polyglotte($texte, $ligne, $result);
310
+    }
311
+
312
+    return $result;
313 313
 }
314 314
 
315 315
 /**
@@ -324,17 +324,17 @@  discard block
 block discarded – undo
324 324
  * @see phraser_champs_interieurs()
325 325
  */
326 326
 function phraser_champs_etendus(string $texte, int $ligne, array $result): array {
327
-	if ($texte === '') {
328
-		return $result;
329
-	}
327
+    if ($texte === '') {
328
+        return $result;
329
+    }
330 330
 
331
-	$sep = '##';
332
-	while (str_contains($texte, $sep)) {
333
-		$sep .= '#';
334
-	}
331
+    $sep = '##';
332
+    while (str_contains($texte, $sep)) {
333
+        $sep .= '#';
334
+    }
335 335
 
336
-	$champs = phraser_champs_interieurs($texte, $ligne, $sep);
337
-	return array_merge($result, $champs);
336
+    $champs = phraser_champs_interieurs($texte, $ligne, $sep);
337
+    return array_merge($result, $champs);
338 338
 }
339 339
 
340 340
 /**
@@ -347,156 +347,156 @@  discard block
 block discarded – undo
347 347
  * @param Champ|Inclure|Idiome|Boucle $pointeur_champ
348 348
  */
349 349
 function phraser_args(string $texte, string $fin, string $sep, array $result, &$pointeur_champ, int &$pos_debut): array {
350
-	$length = strlen($texte);
351
-	while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
352
-		$pos_debut++;
353
-	}
354
-	while (($pos_debut < $length) && !str_contains($fin, $texte[$pos_debut])) {
355
-		// phraser_arg modifie directement le $texte, on fait donc avec ici en passant par une sous chaine
356
-		$st = substr($texte, $pos_debut);
357
-		$result = phraser_arg($st, $sep, $result, $pointeur_champ);
358
-		$pos_debut = $length - strlen((string) $st);
359
-		while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
360
-			$pos_debut++;
361
-		}
362
-	}
363
-
364
-	return $result;
350
+    $length = strlen($texte);
351
+    while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
352
+        $pos_debut++;
353
+    }
354
+    while (($pos_debut < $length) && !str_contains($fin, $texte[$pos_debut])) {
355
+        // phraser_arg modifie directement le $texte, on fait donc avec ici en passant par une sous chaine
356
+        $st = substr($texte, $pos_debut);
357
+        $result = phraser_arg($st, $sep, $result, $pointeur_champ);
358
+        $pos_debut = $length - strlen((string) $st);
359
+        while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
360
+            $pos_debut++;
361
+        }
362
+    }
363
+
364
+    return $result;
365 365
 }
366 366
 
367 367
 function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
368
-	preg_match(',^(\|?[^}{)|]*)(.*)$,ms', (string) $texte, $match);
369
-	$suite = ltrim($match[2]);
370
-	$fonc = trim($match[1]);
371
-	if ($fonc && $fonc[0] == '|') {
372
-		$fonc = ltrim(substr($fonc, 1));
373
-	}
374
-	$res = [$fonc];
375
-	$err_f = '';
376
-	// cas du filtre sans argument ou du critere /
377
-	if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) {
378
-		// si pas d'argument, alors il faut une fonction ou un double |
379
-		if (!$match[1]) {
380
-			$err_f = ['zbug_erreur_filtre', ['filtre' => $texte]];
381
-			erreur_squelette($err_f, $pointeur_champ);
382
-			$texte = '';
383
-		} else {
384
-			$texte = $suite;
385
-		}
386
-		if ($err_f) {
387
-			$pointeur_champ->param = false;
388
-		} elseif ($fonc !== '') {
389
-			$pointeur_champ->param[] = $res;
390
-		}
391
-		// pour les balises avec faux filtres qui boudent ce dur larbeur
392
-		$pointeur_champ->fonctions[] = [$fonc, ''];
393
-
394
-		return $result;
395
-	}
396
-	$args = ltrim(substr($suite, 1)); // virer le '(' initial
397
-	$collecte = [];
398
-	while ($args && $args[0] != '}') {
399
-		if ($args[0] == '"') {
400
-			preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
401
-		} elseif ($args[0] == "'") {
402
-			preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
403
-		} else {
404
-			preg_match('/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms', $args, $regs);
405
-			if (!isset($regs[2]) || !strlen($regs[2])) {
406
-				$err_f = ['zbug_erreur_filtre', ['filtre' => $args]];
407
-				erreur_squelette($err_f, $pointeur_champ);
408
-				$champ = new Texte();
409
-				$champ->apres = $champ->avant = $args = '';
410
-				break;
411
-			}
412
-		}
413
-		$arg = $regs[2];
414
-		if (trim($regs[1])) {
415
-			$champ = new Texte();
416
-			$champ->texte = $arg;
417
-			$champ->apres = $champ->avant = $regs[1];
418
-			$result[] = $champ;
419
-			$collecte[] = $champ;
420
-			$args = ltrim($regs[count($regs) - 1]);
421
-		} else {
422
-			if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
423
-				// 0 est un aveu d'impuissance. A completer
424
-				$arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
425
-
426
-				$args = ltrim($regs[count($regs) - 1]);
427
-				$collecte = array_merge($collecte, $arg);
428
-				$result = array_merge($result, $arg);
429
-			} else {
430
-				$n = strpos($args, (string) $r[0]);
431
-				$pred = substr($args, 0, $n);
432
-				$par = ',}';
433
-				if (preg_match('/^(.*)\($/', $pred, $m)) {
434
-					$pred = $m[1];
435
-					$par = ')';
436
-				}
437
-				if ($pred) {
438
-					$champ = new Texte();
439
-					$champ->texte = $pred;
440
-					$champ->apres = $champ->avant = '';
441
-					$result[] = $champ;
442
-					$collecte[] = $champ;
443
-				}
444
-				$rec = substr($args, $n + strlen($r[0]) - 1);
445
-				$champ = new Champ();
446
-				$champ->nom_boucle = $r[2];
447
-				$champ->nom_champ = $r[3];
448
-				$champ->etoile = $r[5];
449
-				$next = $r[6];
450
-				while ($next == '{') {
451
-					phraser_arg($rec, $sep, [], $champ);
452
-					$args = ltrim((string) $rec);
453
-					$next = $args[0] ?? '';
454
-				}
455
-				while ($next == '|') {
456
-					$pos_apres = 0;
457
-					phraser_args($rec, $par, $sep, [], $champ, $pos_apres);
458
-					$args = substr((string) $rec, $pos_apres);
459
-					$next = $args[0] ?? '';
460
-				}
461
-				// Si erreur de syntaxe dans un sous-argument, propager.
462
-				if ($champ->param === false) {
463
-					$err_f = true;
464
-				} else {
465
-					phraser_vieux($champ);
466
-				}
467
-				if ($par == ')') {
468
-					$args = substr($args, 1);
469
-				}
470
-				$collecte[] = $champ;
471
-				$result[] = $champ;
472
-			}
473
-		}
474
-		if (isset($args[0]) && $args[0] == ',') {
475
-			$args = ltrim(substr($args, 1));
476
-			if ($collecte) {
477
-				$res[] = $collecte;
478
-				$collecte = [];
479
-			}
480
-		}
481
-	}
482
-	if ($collecte) {
483
-		$res[] = $collecte;
484
-		$collecte = [];
485
-	}
486
-	$texte = substr($args, 1);
487
-	$source = substr($suite, 0, strlen($suite) - strlen($texte));
488
-	// propager les erreurs, et ignorer les param vides
489
-	if ($pointeur_champ->param !== false) {
490
-		if ($err_f) {
491
-			$pointeur_champ->param = false;
492
-		} elseif ($fonc !== '' || count($res) > 1) {
493
-			$pointeur_champ->param[] = $res;
494
-		}
495
-	}
496
-	// pour les balises avec faux filtres qui boudent ce dur larbeur
497
-	$pointeur_champ->fonctions[] = [$fonc, $source];
498
-
499
-	return $result;
368
+    preg_match(',^(\|?[^}{)|]*)(.*)$,ms', (string) $texte, $match);
369
+    $suite = ltrim($match[2]);
370
+    $fonc = trim($match[1]);
371
+    if ($fonc && $fonc[0] == '|') {
372
+        $fonc = ltrim(substr($fonc, 1));
373
+    }
374
+    $res = [$fonc];
375
+    $err_f = '';
376
+    // cas du filtre sans argument ou du critere /
377
+    if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) {
378
+        // si pas d'argument, alors il faut une fonction ou un double |
379
+        if (!$match[1]) {
380
+            $err_f = ['zbug_erreur_filtre', ['filtre' => $texte]];
381
+            erreur_squelette($err_f, $pointeur_champ);
382
+            $texte = '';
383
+        } else {
384
+            $texte = $suite;
385
+        }
386
+        if ($err_f) {
387
+            $pointeur_champ->param = false;
388
+        } elseif ($fonc !== '') {
389
+            $pointeur_champ->param[] = $res;
390
+        }
391
+        // pour les balises avec faux filtres qui boudent ce dur larbeur
392
+        $pointeur_champ->fonctions[] = [$fonc, ''];
393
+
394
+        return $result;
395
+    }
396
+    $args = ltrim(substr($suite, 1)); // virer le '(' initial
397
+    $collecte = [];
398
+    while ($args && $args[0] != '}') {
399
+        if ($args[0] == '"') {
400
+            preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
401
+        } elseif ($args[0] == "'") {
402
+            preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
403
+        } else {
404
+            preg_match('/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms', $args, $regs);
405
+            if (!isset($regs[2]) || !strlen($regs[2])) {
406
+                $err_f = ['zbug_erreur_filtre', ['filtre' => $args]];
407
+                erreur_squelette($err_f, $pointeur_champ);
408
+                $champ = new Texte();
409
+                $champ->apres = $champ->avant = $args = '';
410
+                break;
411
+            }
412
+        }
413
+        $arg = $regs[2];
414
+        if (trim($regs[1])) {
415
+            $champ = new Texte();
416
+            $champ->texte = $arg;
417
+            $champ->apres = $champ->avant = $regs[1];
418
+            $result[] = $champ;
419
+            $collecte[] = $champ;
420
+            $args = ltrim($regs[count($regs) - 1]);
421
+        } else {
422
+            if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
423
+                // 0 est un aveu d'impuissance. A completer
424
+                $arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
425
+
426
+                $args = ltrim($regs[count($regs) - 1]);
427
+                $collecte = array_merge($collecte, $arg);
428
+                $result = array_merge($result, $arg);
429
+            } else {
430
+                $n = strpos($args, (string) $r[0]);
431
+                $pred = substr($args, 0, $n);
432
+                $par = ',}';
433
+                if (preg_match('/^(.*)\($/', $pred, $m)) {
434
+                    $pred = $m[1];
435
+                    $par = ')';
436
+                }
437
+                if ($pred) {
438
+                    $champ = new Texte();
439
+                    $champ->texte = $pred;
440
+                    $champ->apres = $champ->avant = '';
441
+                    $result[] = $champ;
442
+                    $collecte[] = $champ;
443
+                }
444
+                $rec = substr($args, $n + strlen($r[0]) - 1);
445
+                $champ = new Champ();
446
+                $champ->nom_boucle = $r[2];
447
+                $champ->nom_champ = $r[3];
448
+                $champ->etoile = $r[5];
449
+                $next = $r[6];
450
+                while ($next == '{') {
451
+                    phraser_arg($rec, $sep, [], $champ);
452
+                    $args = ltrim((string) $rec);
453
+                    $next = $args[0] ?? '';
454
+                }
455
+                while ($next == '|') {
456
+                    $pos_apres = 0;
457
+                    phraser_args($rec, $par, $sep, [], $champ, $pos_apres);
458
+                    $args = substr((string) $rec, $pos_apres);
459
+                    $next = $args[0] ?? '';
460
+                }
461
+                // Si erreur de syntaxe dans un sous-argument, propager.
462
+                if ($champ->param === false) {
463
+                    $err_f = true;
464
+                } else {
465
+                    phraser_vieux($champ);
466
+                }
467
+                if ($par == ')') {
468
+                    $args = substr($args, 1);
469
+                }
470
+                $collecte[] = $champ;
471
+                $result[] = $champ;
472
+            }
473
+        }
474
+        if (isset($args[0]) && $args[0] == ',') {
475
+            $args = ltrim(substr($args, 1));
476
+            if ($collecte) {
477
+                $res[] = $collecte;
478
+                $collecte = [];
479
+            }
480
+        }
481
+    }
482
+    if ($collecte) {
483
+        $res[] = $collecte;
484
+        $collecte = [];
485
+    }
486
+    $texte = substr($args, 1);
487
+    $source = substr($suite, 0, strlen($suite) - strlen($texte));
488
+    // propager les erreurs, et ignorer les param vides
489
+    if ($pointeur_champ->param !== false) {
490
+        if ($err_f) {
491
+            $pointeur_champ->param = false;
492
+        } elseif ($fonc !== '' || count($res) > 1) {
493
+            $pointeur_champ->param[] = $res;
494
+        }
495
+    }
496
+    // pour les balises avec faux filtres qui boudent ce dur larbeur
497
+    $pointeur_champ->fonctions[] = [$fonc, $source];
498
+
499
+    return $result;
500 500
 }
501 501
 
502 502
 /**
@@ -504,28 +504,28 @@  discard block
 block discarded – undo
504 504
  * et phraser les inclure sur les morceaux intermédiaires
505 505
  */
506 506
 function phraser_champs_exterieurs(string $texte, int $ligne, string $sep, array $nested_res): array {
507
-	$res = [];
508
-	$preg = ',^%' . preg_quote($sep, ',') . '([0-9]+)(\n*)@,';
509
-	while (($p = strpos($texte, "%$sep")) !== false) {
510
-		$suite = substr($texte, $p);
511
-		if (!preg_match($preg, $suite, $m)) {
512
-			break;
513
-		}
514
-		if ($p) {
515
-			$debut = substr($texte, 0, $p);
516
-			$res = phraser_inclure($debut, $ligne, $res);
517
-			$ligne += public_compte_ligne($debut);
518
-		}
519
-		$res[] = $nested_res[$m[1]];
520
-		$ligne += strlen($m[2]);
521
-		$texte = substr($suite, strlen($m[0]));
522
-	}
523
-
524
-	if ($texte !== '') {
525
-		$res = phraser_inclure($texte, $ligne, $res);
526
-	}
527
-
528
-	return $res;
507
+    $res = [];
508
+    $preg = ',^%' . preg_quote($sep, ',') . '([0-9]+)(\n*)@,';
509
+    while (($p = strpos($texte, "%$sep")) !== false) {
510
+        $suite = substr($texte, $p);
511
+        if (!preg_match($preg, $suite, $m)) {
512
+            break;
513
+        }
514
+        if ($p) {
515
+            $debut = substr($texte, 0, $p);
516
+            $res = phraser_inclure($debut, $ligne, $res);
517
+            $ligne += public_compte_ligne($debut);
518
+        }
519
+        $res[] = $nested_res[$m[1]];
520
+        $ligne += strlen($m[2]);
521
+        $texte = substr($suite, strlen($m[0]));
522
+    }
523
+
524
+    if ($texte !== '') {
525
+        $res = phraser_inclure($texte, $ligne, $res);
526
+    }
527
+
528
+    return $res;
529 529
 }
530 530
 
531 531
 /**
@@ -542,75 +542,75 @@  discard block
 block discarded – undo
542 542
  */
543 543
 function phraser_champs_interieurs(string $texte, int $no_ligne, string $sep): array {
544 544
 
545
-	$champs_trouves = [];
546
-	do {
547
-		$parties = [];
548
-		$nbl = $no_ligne;
549
-		$search_pos = 0;
550
-
551
-		// trouver tous les champs intérieurs (sans autre champs imbriqués), les analyser, et les remplacer par un placehoder
552
-		// le $texte est découpé en parties qu'on re-parse ensuite jusqu'à ce qu'on ne trouve plus de nouveaux champs
553
-		while (
554
-			(($p = strpos($texte, '[', $search_pos)) !== false)
555
-			&& preg_match(CHAMP_ETENDU, $texte, $match, PREG_OFFSET_CAPTURE, $p)
556
-		) {
557
-			$poss = array_column($match, 1);
558
-			$match = array_column($match, 0);
559
-			// si jamais il y a une sous balise inclue dans la partie 7, alors on est pas dans le champ le plus interieur, on continue le search plus loin
560
-			if (str_contains($match[7], '[') && preg_match(CHAMP_ETENDU, $texte, $r, 0, $poss[7])) {
561
-				$search_pos = $poss[7];
562
-				continue;
563
-			}
564
-
565
-			$nbl_debut = 0;
566
-			if ($poss[0]) {
567
-				$nbl_debut = public_compte_ligne($texte, 0, $poss[0]);
568
-				$parties[] = substr($texte, 0, $poss[0]);
569
-			}
570
-			$nbl += $nbl_debut;
571
-
572
-			$champ = new Champ();
573
-			$champ->ligne = $nbl;
574
-			$champ->nom_boucle = $match[3];
575
-			$champ->nom_champ = $match[4];
576
-			$champ->etoile = $match[6];
577
-			$nbl_champ = public_compte_ligne($texte, $poss[0], $poss[0] + strlen($match[0]));
578
-
579
-			// phraser_args indiquera ou commence apres
580
-			$pos_apres = 0;
581
-			$champs_trouves = phraser_args($match[7], ')', $sep, $champs_trouves, $champ, $pos_apres);
582
-			phraser_vieux($champ);
583
-			$champ->avant =	phraser_champs_exterieurs($match[1], $nbl, $sep, $champs_trouves);
584
-			$apres = substr($match[7], $pos_apres + 1);
585
-
586
-			$nbl_debut_champ = 0;
587
-			if (!empty($apres)) {
588
-				$nbl_debut_champ = public_compte_ligne($texte, $poss[0], $poss[7] + $pos_apres + 1);
589
-			}
590
-			$champ->apres = phraser_champs_exterieurs($apres, $nbl + $nbl_debut_champ, $sep, $champs_trouves);
591
-
592
-			// reinjecter la boucle si c'en est une
593
-			phraser_boucle_placeholder($champ);
594
-
595
-			$champs_trouves[] = $champ;
596
-			$j = count($champs_trouves) - 1;
597
-			// on remplace ce champ par un placeholder
598
-			// ajouter $nbl_champ retour ligne pour que la partie conserve le nombre de lignes lors des itérations suivantes
599
-			$parties[] = ($t = "%{$sep}{$j}" . str_repeat("\n", $nbl_champ) . '@');
600
-			$nbl += $nbl_champ;
601
-
602
-			$texte = substr($texte, $poss[0] + strlen($match[0]));
603
-			$search_pos = 0;
604
-		}
605
-
606
-		// si on a trouvé des morceaux, il faut recommencer
607
-		if (count($parties)) {
608
-			// reprenons tous les morceaux qu'on a mis de côté car ne matchant pas (encore)
609
-			$texte = implode('', $parties) . $texte;
610
-		}
611
-	} while (count($parties));
612
-
613
-	return phraser_champs_exterieurs($texte, $no_ligne, $sep, $champs_trouves);
545
+    $champs_trouves = [];
546
+    do {
547
+        $parties = [];
548
+        $nbl = $no_ligne;
549
+        $search_pos = 0;
550
+
551
+        // trouver tous les champs intérieurs (sans autre champs imbriqués), les analyser, et les remplacer par un placehoder
552
+        // le $texte est découpé en parties qu'on re-parse ensuite jusqu'à ce qu'on ne trouve plus de nouveaux champs
553
+        while (
554
+            (($p = strpos($texte, '[', $search_pos)) !== false)
555
+            && preg_match(CHAMP_ETENDU, $texte, $match, PREG_OFFSET_CAPTURE, $p)
556
+        ) {
557
+            $poss = array_column($match, 1);
558
+            $match = array_column($match, 0);
559
+            // si jamais il y a une sous balise inclue dans la partie 7, alors on est pas dans le champ le plus interieur, on continue le search plus loin
560
+            if (str_contains($match[7], '[') && preg_match(CHAMP_ETENDU, $texte, $r, 0, $poss[7])) {
561
+                $search_pos = $poss[7];
562
+                continue;
563
+            }
564
+
565
+            $nbl_debut = 0;
566
+            if ($poss[0]) {
567
+                $nbl_debut = public_compte_ligne($texte, 0, $poss[0]);
568
+                $parties[] = substr($texte, 0, $poss[0]);
569
+            }
570
+            $nbl += $nbl_debut;
571
+
572
+            $champ = new Champ();
573
+            $champ->ligne = $nbl;
574
+            $champ->nom_boucle = $match[3];
575
+            $champ->nom_champ = $match[4];
576
+            $champ->etoile = $match[6];
577
+            $nbl_champ = public_compte_ligne($texte, $poss[0], $poss[0] + strlen($match[0]));
578
+
579
+            // phraser_args indiquera ou commence apres
580
+            $pos_apres = 0;
581
+            $champs_trouves = phraser_args($match[7], ')', $sep, $champs_trouves, $champ, $pos_apres);
582
+            phraser_vieux($champ);
583
+            $champ->avant =	phraser_champs_exterieurs($match[1], $nbl, $sep, $champs_trouves);
584
+            $apres = substr($match[7], $pos_apres + 1);
585
+
586
+            $nbl_debut_champ = 0;
587
+            if (!empty($apres)) {
588
+                $nbl_debut_champ = public_compte_ligne($texte, $poss[0], $poss[7] + $pos_apres + 1);
589
+            }
590
+            $champ->apres = phraser_champs_exterieurs($apres, $nbl + $nbl_debut_champ, $sep, $champs_trouves);
591
+
592
+            // reinjecter la boucle si c'en est une
593
+            phraser_boucle_placeholder($champ);
594
+
595
+            $champs_trouves[] = $champ;
596
+            $j = count($champs_trouves) - 1;
597
+            // on remplace ce champ par un placeholder
598
+            // ajouter $nbl_champ retour ligne pour que la partie conserve le nombre de lignes lors des itérations suivantes
599
+            $parties[] = ($t = "%{$sep}{$j}" . str_repeat("\n", $nbl_champ) . '@');
600
+            $nbl += $nbl_champ;
601
+
602
+            $texte = substr($texte, $poss[0] + strlen($match[0]));
603
+            $search_pos = 0;
604
+        }
605
+
606
+        // si on a trouvé des morceaux, il faut recommencer
607
+        if (count($parties)) {
608
+            // reprenons tous les morceaux qu'on a mis de côté car ne matchant pas (encore)
609
+            $texte = implode('', $parties) . $texte;
610
+        }
611
+    } while (count($parties));
612
+
613
+    return phraser_champs_exterieurs($texte, $no_ligne, $sep, $champs_trouves);
614 614
 }
615 615
 
616 616
 /**
@@ -621,20 +621,20 @@  discard block
 block discarded – undo
621 621
  * @return void
622 622
  */
623 623
 function phraser_vieux(&$champ) {
624
-	$nom = $champ->nom_champ;
625
-	if ($champ->param) {
626
-		if ($nom == 'MODELE') {
627
-			if (!function_exists('phraser_vieux_modele')) {
628
-				include_spip('public/normaliser');
629
-			}
630
-			phraser_vieux_modele($champ);
631
-		} elseif ($nom == 'INCLURE' || $nom == 'INCLUDE') {
632
-			if (!function_exists('phraser_vieux_inclu')) {
633
-				include_spip('public/normaliser');
634
-			}
635
-			phraser_vieux_inclu($champ);
636
-		}
637
-	}
624
+    $nom = $champ->nom_champ;
625
+    if ($champ->param) {
626
+        if ($nom == 'MODELE') {
627
+            if (!function_exists('phraser_vieux_modele')) {
628
+                include_spip('public/normaliser');
629
+            }
630
+            phraser_vieux_modele($champ);
631
+        } elseif ($nom == 'INCLURE' || $nom == 'INCLUDE') {
632
+            if (!function_exists('phraser_vieux_inclu')) {
633
+                include_spip('public/normaliser');
634
+            }
635
+            phraser_vieux_inclu($champ);
636
+        }
637
+    }
638 638
 }
639 639
 
640 640
 
@@ -662,199 +662,199 @@  discard block
 block discarded – undo
662 662
  **/
663 663
 function phraser_criteres($params, &$result) {
664 664
 
665
-	$err_ci = ''; // indiquera s'il y a eu une erreur
666
-	$args = [];
667
-	$type = $result->type_requete;
668
-	$doublons = [];
669
-	foreach ($params as $v) {
670
-		$var = $v[1][0];
671
-		$param = ($var->type != 'texte') ? '' : $var->texte;
672
-		if (((is_countable($v) ? count($v) : 0) > 2) && (!preg_match(',[^A-Za-z]IN[^A-Za-z],i', (string) $param))) {
673
-			// plus d'un argument et pas le critere IN:
674
-			// detecter comme on peut si c'est le critere implicite LIMIT debut, fin
675
-			if (
676
-				$var->type != 'texte' || preg_match('/^(n|n-|(n-)?\d+)$/S', (string) $param)
677
-			) {
678
-				$op = ',';
679
-				$not = false;
680
-				$cond = false;
681
-			} else {
682
-				// Le debut du premier argument est l'operateur
683
-				preg_match('/^([!]?)([a-zA-Z]\w*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms', (string) $param, $m);
684
-				$op = $m[2];
685
-				$not = (bool) $m[1];
686
-				$cond = (bool) $m[3];
687
-				// virer le premier argument,
688
-				// et mettre son reliquat eventuel
689
-				// Recopier pour ne pas alterer le texte source
690
-				// utile au debusqueur
691
-				if ($m[4]) {
692
-					// une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
693
-					if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
694
-						$c = null;
695
-						eval('$c = ' . $m[4] . ';');
696
-						if (isset($c)) {
697
-							$m[4] = $c;
698
-						}
699
-					}
700
-					$texte = new Texte();
701
-					$texte->texte = $m[4];
702
-					$v[1][0] = $texte;
703
-				} else {
704
-					array_shift($v[1]);
705
-				}
706
-			}
707
-			array_shift($v); // $v[O] est vide
708
-			$crit = new Critere();
709
-			$crit->op = $op;
710
-			$crit->not = $not;
711
-			$crit->cond = $cond;
712
-			$crit->exclus = '';
713
-			$crit->param = $v;
714
-			$args[] = $crit;
715
-		} else {
716
-			if ($var->type != 'texte') {
717
-				// cas 1 seul arg ne commencant pas par du texte brut:
718
-				// erreur ou critere infixe "/"
719
-				if (($v[1][1]->type != 'texte') || (trim((string) $v[1][1]->texte) != '/')) {
720
-					$err_ci = [
721
-						'zbug_critere_inconnu',
722
-						['critere' => $var->nom_champ]
723
-					];
724
-					erreur_squelette($err_ci, $result);
725
-				} else {
726
-					$crit = new Critere();
727
-					$crit->op = '/';
728
-					$crit->not = false;
729
-					$crit->exclus = '';
730
-					$crit->param = [[$v[1][0]], [$v[1][2]]];
731
-					$args[] = $crit;
732
-				}
733
-			} else {
734
-				// traiter qq lexemes particuliers pour faciliter la suite
735
-				// les separateurs
736
-				if ($var->apres) {
737
-					$result->separateur[] = $param;
738
-				} elseif ($param == 'tout' || $param == 'tous') {
739
-					$result->modificateur['tout'] = true;
740
-				} elseif ($param == 'plat') {
741
-					$result->modificateur['plat'] = true;
742
-				}
743
-
744
-				// Boucle hierarchie, analyser le critere id_rubrique
745
-				// et les autres critères {id_x} pour forcer {tout} sur
746
-				// ceux-ci pour avoir la rubrique mere...
747
-				// Les autres critères de la boucle hierarchie doivent être
748
-				// traités normalement.
749
-				elseif (
750
-					strcasecmp($type, 'hierarchie') == 0
751
-					&& !preg_match(",^id_rubrique\b,", (string) $param)
752
-					&& preg_match(',^id_\w+\s*$,', (string) $param)
753
-				) {
754
-					$result->modificateur['tout'] = true;
755
-				} elseif (strcasecmp($type, 'hierarchie') == 0 && $param == 'id_rubrique') {
756
-					// rien a faire sur {id_rubrique} tout seul
757
-				} else {
758
-					// pas d'emplacement statique, faut un dynamique
759
-					// mais il y a 2 cas qui ont les 2 !
760
-					if (($param == 'unique') || (preg_match(',^!?doublons *,', (string) $param))) {
761
-						// cette variable sera inseree dans le code
762
-						// et son nom sert d'indicateur des maintenant
763
-						$result->doublons = '$doublons_index';
764
-						if ($param == 'unique') {
765
-							$param = 'doublons';
766
-						}
767
-					} elseif ($param == 'recherche') {
768
-						// meme chose (a cause de #nom_de_boucle:URL_*)
769
-						$result->hash = ' ';
770
-					}
771
-
772
-					if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', (string) $param, $m)) {
773
-						$crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
774
-					} elseif (
775
-						preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
776
-						')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', (string) $param, $m)
777
-					) {
778
-						$a2 = trim($m[8]);
779
-						if ($a2 && ($a2[0] == "'" || $a2[0] == '"') && $a2[0] == substr($a2, -1)) {
780
-							$a2 = substr($a2, 1, -1);
781
-						}
782
-						$crit = phraser_critere_infixe(
783
-							$m[2],
784
-							$a2,
785
-							$v,
786
-							(($m[2] == 'lang_select') ? $m[2] : $m[7]),
787
-							$m[6],
788
-							$m[5]
789
-						);
790
-						$crit->exclus = $m[1];
791
-					} elseif (
792
-						preg_match('/^([!]?)\s*(' .
793
-						CHAMP_SQL_PLUS_FONC .
794
-						')\s*(\??)(.*)$/is', (string) $param, $m)
795
-					) {
796
-						// contient aussi les comparaisons implicites !
797
-						// Comme ci-dessus:
798
-						// le premier arg contient l'operateur
799
-						array_shift($v);
800
-						if ($m[6]) {
801
-							$v[0][0] = new Texte();
802
-							$v[0][0]->texte = $m[6];
803
-						} else {
804
-							array_shift($v[0]);
805
-							if (!$v[0]) {
806
-								array_shift($v);
807
-							}
808
-						}
809
-						$crit = new Critere();
810
-						$crit->op = $m[2];
811
-						$crit->param = $v;
812
-						$crit->not = (bool) $m[1];
813
-						$crit->cond = (bool) $m[5];
814
-					} else {
815
-						$err_ci = [
816
-							'zbug_critere_inconnu',
817
-							['critere' => $param]
818
-						];
819
-						erreur_squelette($err_ci, $result);
820
-					}
821
-
822
-					if ((!preg_match(',^!?doublons *,', (string) $param)) || $crit->not) {
823
-						$args[] = $crit;
824
-					} else {
825
-						$doublons[] = $crit;
826
-					}
827
-				}
828
-			}
829
-		}
830
-	}
831
-
832
-	// les doublons non nies doivent etre le dernier critere
833
-	// pour que la variable $doublon_index ait la bonne valeur
834
-	// cf critere_doublon
835
-	if ($doublons) {
836
-		$args = [...$args, ...$doublons];
837
-	}
838
-
839
-	// Si erreur, laisser la chaine dans ce champ pour le HTTP 503
840
-	if (!$err_ci) {
841
-		$result->criteres = $args;
842
-	}
665
+    $err_ci = ''; // indiquera s'il y a eu une erreur
666
+    $args = [];
667
+    $type = $result->type_requete;
668
+    $doublons = [];
669
+    foreach ($params as $v) {
670
+        $var = $v[1][0];
671
+        $param = ($var->type != 'texte') ? '' : $var->texte;
672
+        if (((is_countable($v) ? count($v) : 0) > 2) && (!preg_match(',[^A-Za-z]IN[^A-Za-z],i', (string) $param))) {
673
+            // plus d'un argument et pas le critere IN:
674
+            // detecter comme on peut si c'est le critere implicite LIMIT debut, fin
675
+            if (
676
+                $var->type != 'texte' || preg_match('/^(n|n-|(n-)?\d+)$/S', (string) $param)
677
+            ) {
678
+                $op = ',';
679
+                $not = false;
680
+                $cond = false;
681
+            } else {
682
+                // Le debut du premier argument est l'operateur
683
+                preg_match('/^([!]?)([a-zA-Z]\w*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms', (string) $param, $m);
684
+                $op = $m[2];
685
+                $not = (bool) $m[1];
686
+                $cond = (bool) $m[3];
687
+                // virer le premier argument,
688
+                // et mettre son reliquat eventuel
689
+                // Recopier pour ne pas alterer le texte source
690
+                // utile au debusqueur
691
+                if ($m[4]) {
692
+                    // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
693
+                    if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
694
+                        $c = null;
695
+                        eval('$c = ' . $m[4] . ';');
696
+                        if (isset($c)) {
697
+                            $m[4] = $c;
698
+                        }
699
+                    }
700
+                    $texte = new Texte();
701
+                    $texte->texte = $m[4];
702
+                    $v[1][0] = $texte;
703
+                } else {
704
+                    array_shift($v[1]);
705
+                }
706
+            }
707
+            array_shift($v); // $v[O] est vide
708
+            $crit = new Critere();
709
+            $crit->op = $op;
710
+            $crit->not = $not;
711
+            $crit->cond = $cond;
712
+            $crit->exclus = '';
713
+            $crit->param = $v;
714
+            $args[] = $crit;
715
+        } else {
716
+            if ($var->type != 'texte') {
717
+                // cas 1 seul arg ne commencant pas par du texte brut:
718
+                // erreur ou critere infixe "/"
719
+                if (($v[1][1]->type != 'texte') || (trim((string) $v[1][1]->texte) != '/')) {
720
+                    $err_ci = [
721
+                        'zbug_critere_inconnu',
722
+                        ['critere' => $var->nom_champ]
723
+                    ];
724
+                    erreur_squelette($err_ci, $result);
725
+                } else {
726
+                    $crit = new Critere();
727
+                    $crit->op = '/';
728
+                    $crit->not = false;
729
+                    $crit->exclus = '';
730
+                    $crit->param = [[$v[1][0]], [$v[1][2]]];
731
+                    $args[] = $crit;
732
+                }
733
+            } else {
734
+                // traiter qq lexemes particuliers pour faciliter la suite
735
+                // les separateurs
736
+                if ($var->apres) {
737
+                    $result->separateur[] = $param;
738
+                } elseif ($param == 'tout' || $param == 'tous') {
739
+                    $result->modificateur['tout'] = true;
740
+                } elseif ($param == 'plat') {
741
+                    $result->modificateur['plat'] = true;
742
+                }
743
+
744
+                // Boucle hierarchie, analyser le critere id_rubrique
745
+                // et les autres critères {id_x} pour forcer {tout} sur
746
+                // ceux-ci pour avoir la rubrique mere...
747
+                // Les autres critères de la boucle hierarchie doivent être
748
+                // traités normalement.
749
+                elseif (
750
+                    strcasecmp($type, 'hierarchie') == 0
751
+                    && !preg_match(",^id_rubrique\b,", (string) $param)
752
+                    && preg_match(',^id_\w+\s*$,', (string) $param)
753
+                ) {
754
+                    $result->modificateur['tout'] = true;
755
+                } elseif (strcasecmp($type, 'hierarchie') == 0 && $param == 'id_rubrique') {
756
+                    // rien a faire sur {id_rubrique} tout seul
757
+                } else {
758
+                    // pas d'emplacement statique, faut un dynamique
759
+                    // mais il y a 2 cas qui ont les 2 !
760
+                    if (($param == 'unique') || (preg_match(',^!?doublons *,', (string) $param))) {
761
+                        // cette variable sera inseree dans le code
762
+                        // et son nom sert d'indicateur des maintenant
763
+                        $result->doublons = '$doublons_index';
764
+                        if ($param == 'unique') {
765
+                            $param = 'doublons';
766
+                        }
767
+                    } elseif ($param == 'recherche') {
768
+                        // meme chose (a cause de #nom_de_boucle:URL_*)
769
+                        $result->hash = ' ';
770
+                    }
771
+
772
+                    if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', (string) $param, $m)) {
773
+                        $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
774
+                    } elseif (
775
+                        preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
776
+                        ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', (string) $param, $m)
777
+                    ) {
778
+                        $a2 = trim($m[8]);
779
+                        if ($a2 && ($a2[0] == "'" || $a2[0] == '"') && $a2[0] == substr($a2, -1)) {
780
+                            $a2 = substr($a2, 1, -1);
781
+                        }
782
+                        $crit = phraser_critere_infixe(
783
+                            $m[2],
784
+                            $a2,
785
+                            $v,
786
+                            (($m[2] == 'lang_select') ? $m[2] : $m[7]),
787
+                            $m[6],
788
+                            $m[5]
789
+                        );
790
+                        $crit->exclus = $m[1];
791
+                    } elseif (
792
+                        preg_match('/^([!]?)\s*(' .
793
+                        CHAMP_SQL_PLUS_FONC .
794
+                        ')\s*(\??)(.*)$/is', (string) $param, $m)
795
+                    ) {
796
+                        // contient aussi les comparaisons implicites !
797
+                        // Comme ci-dessus:
798
+                        // le premier arg contient l'operateur
799
+                        array_shift($v);
800
+                        if ($m[6]) {
801
+                            $v[0][0] = new Texte();
802
+                            $v[0][0]->texte = $m[6];
803
+                        } else {
804
+                            array_shift($v[0]);
805
+                            if (!$v[0]) {
806
+                                array_shift($v);
807
+                            }
808
+                        }
809
+                        $crit = new Critere();
810
+                        $crit->op = $m[2];
811
+                        $crit->param = $v;
812
+                        $crit->not = (bool) $m[1];
813
+                        $crit->cond = (bool) $m[5];
814
+                    } else {
815
+                        $err_ci = [
816
+                            'zbug_critere_inconnu',
817
+                            ['critere' => $param]
818
+                        ];
819
+                        erreur_squelette($err_ci, $result);
820
+                    }
821
+
822
+                    if ((!preg_match(',^!?doublons *,', (string) $param)) || $crit->not) {
823
+                        $args[] = $crit;
824
+                    } else {
825
+                        $doublons[] = $crit;
826
+                    }
827
+                }
828
+            }
829
+        }
830
+    }
831
+
832
+    // les doublons non nies doivent etre le dernier critere
833
+    // pour que la variable $doublon_index ait la bonne valeur
834
+    // cf critere_doublon
835
+    if ($doublons) {
836
+        $args = [...$args, ...$doublons];
837
+    }
838
+
839
+    // Si erreur, laisser la chaine dans ce champ pour le HTTP 503
840
+    if (!$err_ci) {
841
+        $result->criteres = $args;
842
+    }
843 843
 }
844 844
 
845 845
 function phraser_critere_infixe($arg1, $arg2, $args, $op, $not, $cond) {
846
-	$args[0] = new Texte();
847
-	$args[0]->texte = $arg1;
848
-	$args[0] = [$args[0]];
849
-	$args[1][0] = new Texte();
850
-	$args[1][0]->texte = $arg2;
851
-	$crit = new Critere();
852
-	$crit->op = $op;
853
-	$crit->not = (bool) $not;
854
-	$crit->cond = (bool) $cond;
855
-	$crit->param = $args;
856
-
857
-	return $crit;
846
+    $args[0] = new Texte();
847
+    $args[0]->texte = $arg1;
848
+    $args[0] = [$args[0]];
849
+    $args[1][0] = new Texte();
850
+    $args[1][0]->texte = $arg2;
851
+    $crit = new Critere();
852
+    $crit->op = $op;
853
+    $crit->not = (bool) $not;
854
+    $crit->cond = (bool) $cond;
855
+    $crit->param = $args;
856
+
857
+    return $crit;
858 858
 }
859 859
 
860 860
 /**
@@ -865,11 +865,11 @@  discard block
 block discarded – undo
865 865
  * @return int
866 866
  */
867 867
 function public_compte_ligne($texte, $debut = 0, $fin = null) {
868
-	if (is_null($fin)) {
869
-		return substr_count((string) $texte, "\n", $debut);
870
-	} else {
871
-		return substr_count((string) $texte, "\n", $debut, $fin - $debut);
872
-	}
868
+    if (is_null($fin)) {
869
+        return substr_count((string) $texte, "\n", $debut);
870
+    } else {
871
+        return substr_count((string) $texte, "\n", $debut, $fin - $debut);
872
+    }
873 873
 }
874 874
 
875 875
 
@@ -879,87 +879,87 @@  discard block
 block discarded – undo
879 879
  * et ensuite on regarde son vrai debut soit <B_xxx> soit <BB_xxx>
880 880
  */
881 881
 function public_trouver_premiere_boucle(string $texte, string $id_parent, array $descr, int $pos_debut_texte = 0): ?array {
882
-	$premiere_boucle = null;
883
-	$pos_derniere_boucle_anonyme = $pos_debut_texte;
884
-
885
-	$current_pos = $pos_debut_texte;
886
-	while (($pos_boucle = strpos((string) $texte, BALISE_BOUCLE, $current_pos)) !== false) {
887
-		$current_pos = $pos_boucle + 1;
888
-		$pos_parent = strpos((string) $texte, '(', $pos_boucle);
889
-
890
-		$id_boucle = '';
891
-		if ($pos_parent !== false) {
892
-			$id_boucle = trim(substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), $pos_parent - $pos_boucle - strlen(BALISE_BOUCLE)));
893
-		}
894
-		if (
895
-			$pos_parent === false
896
-			|| strlen($id_boucle) && (!is_numeric($id_boucle) && !str_starts_with($id_boucle, '_'))
897
-		) {
898
-			$result = new Boucle();
899
-			$result->id_parent = $id_parent;
900
-			$result->descr = $descr;
901
-
902
-			// un id_boucle pour l'affichage de l'erreur
903
-			if (!strlen($id_boucle)) {
904
-				$id_boucle = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
905
-			}
906
-			$result->id_boucle = $id_boucle;
907
-			$err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
908
-			erreur_squelette($err_b, $result);
909
-
910
-			continue;
911
-		}
912
-		else {
913
-			$boucle = [
914
-				'id_boucle' => $id_boucle,
915
-				'id_boucle_err' => $id_boucle,
916
-				'debut_boucle' => $pos_boucle,
917
-				'pos_boucle' => $pos_boucle,
918
-				'pos_parent' => $pos_parent,
919
-				'pos_precond' => false,
920
-				'pos_precond_inside' => false,
921
-				'pos_preaff' => false,
922
-				'pos_preaff_inside' => false,
923
-			];
924
-
925
-			// un id_boucle pour l'affichage de l'erreur sur les boucle anonymes
926
-			if (!strlen($id_boucle)) {
927
-				$boucle['id_boucle_err'] = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
928
-			}
929
-
930
-			// trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
931
-			$precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
932
-			$pos_precond = strpos((string) $texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
933
-			if (
934
-				$pos_precond !== false
935
-				&& $pos_precond < $boucle['debut_boucle']
936
-			) {
937
-				$boucle['debut_boucle'] = $pos_precond;
938
-				$boucle['pos_precond'] = $pos_precond;
939
-				$boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
940
-			}
941
-
942
-			$preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
943
-			$pos_preaff = strpos((string) $texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
944
-			if (
945
-				$pos_preaff !== false
946
-				&& $pos_preaff < $boucle['debut_boucle']
947
-			) {
948
-				$boucle['debut_boucle'] = $pos_preaff;
949
-				$boucle['pos_preaff'] = $pos_preaff;
950
-				$boucle['pos_preaff_inside'] = $pos_preaff + strlen($preaff_boucle);
951
-			}
952
-			if (!strlen($id_boucle)) {
953
-				$pos_derniere_boucle_anonyme = $pos_boucle;
954
-			}
955
-
956
-			if (is_null($premiere_boucle) || $premiere_boucle['debut_boucle'] > $boucle['debut_boucle']) {
957
-				$premiere_boucle = $boucle;
958
-			}
959
-		}
960
-	}
961
-
962
-	return $premiere_boucle;
882
+    $premiere_boucle = null;
883
+    $pos_derniere_boucle_anonyme = $pos_debut_texte;
884
+
885
+    $current_pos = $pos_debut_texte;
886
+    while (($pos_boucle = strpos((string) $texte, BALISE_BOUCLE, $current_pos)) !== false) {
887
+        $current_pos = $pos_boucle + 1;
888
+        $pos_parent = strpos((string) $texte, '(', $pos_boucle);
889
+
890
+        $id_boucle = '';
891
+        if ($pos_parent !== false) {
892
+            $id_boucle = trim(substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), $pos_parent - $pos_boucle - strlen(BALISE_BOUCLE)));
893
+        }
894
+        if (
895
+            $pos_parent === false
896
+            || strlen($id_boucle) && (!is_numeric($id_boucle) && !str_starts_with($id_boucle, '_'))
897
+        ) {
898
+            $result = new Boucle();
899
+            $result->id_parent = $id_parent;
900
+            $result->descr = $descr;
901
+
902
+            // un id_boucle pour l'affichage de l'erreur
903
+            if (!strlen($id_boucle)) {
904
+                $id_boucle = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
905
+            }
906
+            $result->id_boucle = $id_boucle;
907
+            $err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
908
+            erreur_squelette($err_b, $result);
909
+
910
+            continue;
911
+        }
912
+        else {
913
+            $boucle = [
914
+                'id_boucle' => $id_boucle,
915
+                'id_boucle_err' => $id_boucle,
916
+                'debut_boucle' => $pos_boucle,
917
+                'pos_boucle' => $pos_boucle,
918
+                'pos_parent' => $pos_parent,
919
+                'pos_precond' => false,
920
+                'pos_precond_inside' => false,
921
+                'pos_preaff' => false,
922
+                'pos_preaff_inside' => false,
923
+            ];
924
+
925
+            // un id_boucle pour l'affichage de l'erreur sur les boucle anonymes
926
+            if (!strlen($id_boucle)) {
927
+                $boucle['id_boucle_err'] = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
928
+            }
929
+
930
+            // trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
931
+            $precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
932
+            $pos_precond = strpos((string) $texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
933
+            if (
934
+                $pos_precond !== false
935
+                && $pos_precond < $boucle['debut_boucle']
936
+            ) {
937
+                $boucle['debut_boucle'] = $pos_precond;
938
+                $boucle['pos_precond'] = $pos_precond;
939
+                $boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
940
+            }
941
+
942
+            $preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
943
+            $pos_preaff = strpos((string) $texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
944
+            if (
945
+                $pos_preaff !== false
946
+                && $pos_preaff < $boucle['debut_boucle']
947
+            ) {
948
+                $boucle['debut_boucle'] = $pos_preaff;
949
+                $boucle['pos_preaff'] = $pos_preaff;
950
+                $boucle['pos_preaff_inside'] = $pos_preaff + strlen($preaff_boucle);
951
+            }
952
+            if (!strlen($id_boucle)) {
953
+                $pos_derniere_boucle_anonyme = $pos_boucle;
954
+            }
955
+
956
+            if (is_null($premiere_boucle) || $premiere_boucle['debut_boucle'] > $boucle['debut_boucle']) {
957
+                $premiere_boucle = $boucle;
958
+            }
959
+        }
960
+    }
961
+
962
+    return $premiere_boucle;
963 963
 }
964 964
 
965 965
 /**
@@ -975,68 +975,68 @@  discard block
 block discarded – undo
975 975
  *   la description de la boucle dans un tableau associatif
976 976
  */
977 977
 function public_trouver_fin_boucle(string $texte, string $id_parent, array $boucle, int $pos_debut_texte, $result): array {
978
-	$id_boucle = $boucle['id_boucle'];
979
-	$pos_courante = $pos_debut_texte;
980
-
981
-	$boucle['pos_postcond'] = false;
982
-	$boucle['pos_postcond_inside'] = false;
983
-	$boucle['pos_altern'] = false;
984
-	$boucle['pos_altern_inside'] = false;
985
-	$boucle['pos_postaff'] = false;
986
-	$boucle['pos_postaff_inside'] = false;
987
-
988
-	$pos_anonyme_next = null;
989
-	// si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
990
-	if (!strlen((string) $id_boucle)) {
991
-		$pos_anonyme_next = strpos((string) $texte, BALISE_BOUCLE . '(', $pos_courante);
992
-	}
993
-
994
-	//
995
-	// 1. Recuperer la partie conditionnelle apres
996
-	//
997
-	$apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
998
-	$pos_apres = strpos((string) $texte, $apres_boucle, $pos_courante);
999
-	if (
1000
-		$pos_apres !== false
1001
-		&& (!$pos_anonyme_next || $pos_apres < $pos_anonyme_next)
1002
-	) {
1003
-		$boucle['pos_postcond'] = $pos_apres;
1004
-		$pos_apres += strlen($apres_boucle);
1005
-		$boucle['pos_postcond_inside'] = $pos_apres;
1006
-		$pos_courante = $pos_apres ;
1007
-	}
1008
-
1009
-	//
1010
-	// 2. Récuperer la partie alternative apres
1011
-	//
1012
-	$altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
1013
-	$pos_altern = strpos((string) $texte, $altern_boucle, $pos_courante);
1014
-	if (
1015
-		$pos_altern !== false
1016
-		&& (!$pos_anonyme_next || $pos_altern < $pos_anonyme_next)
1017
-	) {
1018
-		$boucle['pos_altern'] = $pos_altern;
1019
-		$pos_altern += strlen($altern_boucle);
1020
-		$boucle['pos_altern_inside'] = $pos_altern;
1021
-		$pos_courante = $pos_altern;
1022
-	}
1023
-
1024
-	//
1025
-	// 3. Recuperer la partie footer non alternative
1026
-	//
1027
-	$postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
1028
-	$pos_postaff = strpos((string) $texte, $postaff_boucle, $pos_courante);
1029
-	if (
1030
-		$pos_postaff !== false
1031
-		&& (!$pos_anonyme_next || $pos_postaff < $pos_anonyme_next)
1032
-	) {
1033
-		$boucle['pos_postaff'] = $pos_postaff;
1034
-		$pos_postaff += strlen($postaff_boucle);
1035
-		$boucle['pos_postaff_inside'] = $pos_postaff;
1036
-		$pos_courante = $pos_postaff ;
1037
-	}
1038
-
1039
-	return $boucle;
978
+    $id_boucle = $boucle['id_boucle'];
979
+    $pos_courante = $pos_debut_texte;
980
+
981
+    $boucle['pos_postcond'] = false;
982
+    $boucle['pos_postcond_inside'] = false;
983
+    $boucle['pos_altern'] = false;
984
+    $boucle['pos_altern_inside'] = false;
985
+    $boucle['pos_postaff'] = false;
986
+    $boucle['pos_postaff_inside'] = false;
987
+
988
+    $pos_anonyme_next = null;
989
+    // si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
990
+    if (!strlen((string) $id_boucle)) {
991
+        $pos_anonyme_next = strpos((string) $texte, BALISE_BOUCLE . '(', $pos_courante);
992
+    }
993
+
994
+    //
995
+    // 1. Recuperer la partie conditionnelle apres
996
+    //
997
+    $apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
998
+    $pos_apres = strpos((string) $texte, $apres_boucle, $pos_courante);
999
+    if (
1000
+        $pos_apres !== false
1001
+        && (!$pos_anonyme_next || $pos_apres < $pos_anonyme_next)
1002
+    ) {
1003
+        $boucle['pos_postcond'] = $pos_apres;
1004
+        $pos_apres += strlen($apres_boucle);
1005
+        $boucle['pos_postcond_inside'] = $pos_apres;
1006
+        $pos_courante = $pos_apres ;
1007
+    }
1008
+
1009
+    //
1010
+    // 2. Récuperer la partie alternative apres
1011
+    //
1012
+    $altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
1013
+    $pos_altern = strpos((string) $texte, $altern_boucle, $pos_courante);
1014
+    if (
1015
+        $pos_altern !== false
1016
+        && (!$pos_anonyme_next || $pos_altern < $pos_anonyme_next)
1017
+    ) {
1018
+        $boucle['pos_altern'] = $pos_altern;
1019
+        $pos_altern += strlen($altern_boucle);
1020
+        $boucle['pos_altern_inside'] = $pos_altern;
1021
+        $pos_courante = $pos_altern;
1022
+    }
1023
+
1024
+    //
1025
+    // 3. Recuperer la partie footer non alternative
1026
+    //
1027
+    $postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
1028
+    $pos_postaff = strpos((string) $texte, $postaff_boucle, $pos_courante);
1029
+    if (
1030
+        $pos_postaff !== false
1031
+        && (!$pos_anonyme_next || $pos_postaff < $pos_anonyme_next)
1032
+    ) {
1033
+        $boucle['pos_postaff'] = $pos_postaff;
1034
+        $pos_postaff += strlen($postaff_boucle);
1035
+        $boucle['pos_postaff_inside'] = $pos_postaff;
1036
+        $pos_courante = $pos_postaff ;
1037
+    }
1038
+
1039
+    return $boucle;
1040 1040
 }
1041 1041
 
1042 1042
 
@@ -1045,21 +1045,21 @@  discard block
 block discarded – undo
1045 1045
  * @param null|object $boucle
1046 1046
  */
1047 1047
 function phraser_boucle_placeholder(&$champ, ?string $boucle_placeholder = null, $boucle = null) {
1048
-	static $boucles_connues = [];
1049
-	// si c'est un appel pour memoriser une boucle, memorisons la
1050
-	if (is_string($champ) && !empty($boucle_placeholder) && !empty($boucle)) {
1051
-		$boucles_connues[$boucle_placeholder][$champ] = &$boucle;
1052
-	}
1053
-	else {
1054
-		if (!empty($champ->nom_champ) && !empty($boucles_connues[$champ->nom_champ])) {
1055
-			$placeholder = $champ->nom_champ;
1056
-			$id = reset($champ->param[0][1]);
1057
-			$id = $id->texte;
1058
-			if (!empty($boucles_connues[$placeholder][$id])) {
1059
-				$champ = $boucles_connues[$placeholder][$id];
1060
-			}
1061
-		}
1062
-	}
1048
+    static $boucles_connues = [];
1049
+    // si c'est un appel pour memoriser une boucle, memorisons la
1050
+    if (is_string($champ) && !empty($boucle_placeholder) && !empty($boucle)) {
1051
+        $boucles_connues[$boucle_placeholder][$champ] = &$boucle;
1052
+    }
1053
+    else {
1054
+        if (!empty($champ->nom_champ) && !empty($boucles_connues[$champ->nom_champ])) {
1055
+            $placeholder = $champ->nom_champ;
1056
+            $id = reset($champ->param[0][1]);
1057
+            $id = $id->texte;
1058
+            if (!empty($boucles_connues[$placeholder][$id])) {
1059
+                $champ = $boucles_connues[$placeholder][$id];
1060
+            }
1061
+        }
1062
+    }
1063 1063
 }
1064 1064
 
1065 1065
 
@@ -1069,11 +1069,11 @@  discard block
 block discarded – undo
1069 1069
  * @return string
1070 1070
  */
1071 1071
 function public_generer_boucle_placeholder(string $id_boucle, &$boucle, string $boucle_placeholder, int $nb_lignes): string {
1072
-	$placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1073
-	//memoriser la boucle a reinjecter
1074
-	$id_boucle = "$id_boucle";
1075
-	phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
1076
-	return $placeholder;
1072
+    $placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1073
+    //memoriser la boucle a reinjecter
1074
+    $id_boucle = "$id_boucle";
1075
+    phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
1076
+    return $placeholder;
1077 1077
 }
1078 1078
 
1079 1079
 /**
@@ -1086,264 +1086,264 @@  discard block
 block discarded – undo
1086 1086
  */
1087 1087
 function public_phraser_html_dist(string $texte, string $id_parent, array &$boucles, array $descr, int $ligne_debut_texte = 1, ?string $boucle_placeholder = null): array {
1088 1088
 
1089
-	$all_res = [];
1090
-	// definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1091
-	if (is_null($boucle_placeholder)) {
1092
-		do {
1093
-			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1094
-		} while (str_contains((string) $texte, $boucle_placeholder));
1095
-	}
1096
-
1097
-	$ligne_debut_initial = $ligne_debut_texte;
1098
-	$pos_debut_texte = 0;
1099
-	while ($boucle = public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte)) {
1100
-		$err_b = ''; // indiquera s'il y a eu une erreur
1101
-		$result = new Boucle();
1102
-		$result->id_parent = $id_parent;
1103
-		$result->descr = $descr;
1104
-
1105
-		$pos_courante = $boucle['pos_boucle'];
1106
-		$pos_parent = $boucle['pos_parent'];
1107
-		$id_boucle_search = $id_boucle = $boucle['id_boucle'];
1108
-
1109
-		$ligne_preaff = $ligne_avant = $ligne_milieu = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_parent);
1110
-
1111
-		// boucle anonyme ?
1112
-		if (!strlen((string) $id_boucle)) {
1113
-			$id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1114
-		}
1115
-
1116
-		$pos_debut_boucle = $pos_courante;
1117
-
1118
-		$pos_milieu = $pos_parent;
1119
-
1120
-		// Regarder si on a une partie conditionnelle avant <B_xxx>
1121
-		if ($boucle['pos_precond'] !== false) {
1122
-			$pos_debut_boucle = $boucle['pos_precond'];
1123
-
1124
-			$pos_avant = $boucle['pos_precond_inside'];
1125
-			$result->avant = substr((string) $texte, $pos_avant, $pos_courante - $pos_avant);
1126
-			$ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1127
-		}
1128
-
1129
-		// Regarder si on a une partie inconditionnelle avant <BB_xxx>
1130
-		if ($boucle['pos_preaff'] !== false) {
1131
-			$end_preaff = $pos_debut_boucle;
1132
-
1133
-			$pos_preaff = $boucle['pos_preaff_inside'];
1134
-			$result->preaff = substr((string) $texte, $pos_preaff, $end_preaff - $pos_preaff);
1135
-			$ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1136
-		}
1137
-
1138
-		$result->id_boucle = $id_boucle;
1139
-
1140
-		if (
1141
-			!preg_match(SPEC_BOUCLE, (string) $texte, $match, 0, $pos_milieu)
1142
-			|| ($pos_match = strpos((string) $texte, (string) $match[0], $pos_milieu)) === false
1143
-			|| $pos_match > $pos_milieu
1144
-		) {
1145
-			$err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
1146
-			erreur_squelette($err_b, $result);
1147
-
1148
-			$ligne_debut_texte += public_compte_ligne($texte, $pos_debut_texte, $pos_courante + 1);
1149
-			$pos_debut_texte = $pos_courante + 1;
1150
-			continue;
1151
-		}
1152
-
1153
-		$result->type_requete = $match[0];
1154
-		$pos_milieu += strlen($match[0]);
1155
-		$pos_courante = $pos_milieu; // on s'en sert pour compter les lignes plus precisemment
1156
-
1157
-		$type = $match[1];
1158
-		$jointures = trim($match[2]);
1159
-		$table_optionnelle = ($match[3]);
1160
-		if ($jointures) {
1161
-			// on affecte pas ici les jointures explicites, mais dans la compilation
1162
-			// ou elles seront completees des jointures declarees
1163
-			$result->jointures_explicites = $jointures;
1164
-		}
1165
-
1166
-		if ($table_optionnelle) {
1167
-			$result->table_optionnelle = true;
1168
-			$result->type_table_optionnelle = $type;
1169
-		}
1170
-
1171
-		// 1ere passe sur les criteres, vu comme des arguments sans fct
1172
-		// Resultat mis dans result->param
1173
-		$pos_fin_criteres = $pos_milieu;
1174
-		phraser_args($texte, '/>', '', $all_res, $result, $pos_fin_criteres);
1175
-
1176
-		// En 2e passe result->criteres contiendra un tableau
1177
-		// pour l'instant on met le source (chaine) :
1178
-		// si elle reste ici au final, c'est qu'elle contient une erreur
1179
-		$pos_courante = $pos_fin_criteres; // on s'en sert pour compter les lignes plus precisemment
1180
-		$result->criteres = substr((string) $texte, $pos_milieu, $pos_fin_criteres - $pos_milieu);
1181
-		$pos_milieu = $pos_fin_criteres;
1182
-
1183
-		//
1184
-		// Recuperer la fin :
1185
-		//
1186
-		if ($texte[$pos_milieu] === '/') {
1187
-			// boucle autofermante : pas de partie conditionnelle apres
1188
-			$pos_courante += 2;
1189
-			$result->milieu = '';
1190
-		} else {
1191
-			$pos_milieu += 1;
1192
-
1193
-			$fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1194
-			$pos_fin = strpos((string) $texte, $fin_boucle, $pos_milieu);
1195
-			if ($pos_fin === false) {
1196
-				$err_b = [
1197
-					'zbug_erreur_boucle_fermant',
1198
-					['id' => $id_boucle]
1199
-				];
1200
-				erreur_squelette($err_b, $result);
1201
-				$pos_courante += strlen($fin_boucle);
1202
-			}
1203
-			else {
1204
-				// verifier une eventuelle imbrication d'une boucle homonyme
1205
-				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1206
-				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1207
-				$search_from = $pos_milieu;
1208
-				$nb_open = 1;
1209
-				$nb_close = 1;
1210
-				$maxiter = 0;
1211
-				do {
1212
-					while (
1213
-						$nb_close < $nb_open
1214
-						&& ($p = strpos((string) $texte, $fin_boucle, $pos_fin + 1))
1215
-					) {
1216
-						$nb_close++;
1217
-						$pos_fin = $p;
1218
-					}
1219
-					// si on a pas trouve assez de boucles fermantes, sortir de la, on a fait de notre mieux
1220
-					if ($nb_close < $nb_open) {
1221
-						break;
1222
-					}
1223
-					while (
1224
-						($p = strpos((string) $texte, $search_debut_boucle, $search_from))
1225
-						&& $p < $pos_fin
1226
-					) {
1227
-						$nb_open++;
1228
-						$search_from = $p + 1;
1229
-					}
1230
-				} while ($nb_close < $nb_open && $maxiter++ < 5);
1231
-
1232
-				$pos_courante = $pos_fin + strlen($fin_boucle);
1233
-			}
1234
-			$result->milieu = substr((string) $texte, $pos_milieu, $pos_fin - $pos_milieu);
1235
-		}
1236
-
1237
-		$ligne_suite = $ligne_apres = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_courante);
1238
-		$boucle = public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_courante, $result);
1239
-
1240
-		//
1241
-		// 1. Partie conditionnelle apres ?
1242
-		//
1243
-		if ($boucle['pos_postcond']) {
1244
-			$result->apres = substr((string) $texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1245
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1246
-			$pos_courante = $boucle['pos_postcond_inside'] ;
1247
-		}
1248
-
1249
-
1250
-		//
1251
-		// 2. Partie alternative apres ?
1252
-		//
1253
-		$ligne_altern = $ligne_suite;
1254
-		if ($boucle['pos_altern']) {
1255
-			$result->altern = substr((string) $texte, $pos_courante, $boucle['pos_altern'] - $pos_courante);
1256
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_altern_inside']);
1257
-			$pos_courante = $boucle['pos_altern_inside'];
1258
-		}
1259
-
1260
-		//
1261
-		// 3. Partie footer non alternative ?
1262
-		//
1263
-		$ligne_postaff = $ligne_suite;
1264
-		if ($boucle['pos_postaff']) {
1265
-			$result->postaff = substr((string) $texte, $pos_courante, $boucle['pos_postaff'] - $pos_courante);
1266
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postaff_inside']);
1267
-			$pos_courante = $boucle['pos_postaff_inside'];
1268
-		}
1269
-
1270
-		$result->ligne = $ligne_preaff;
1271
-
1272
-		if ($p = strpos($type, ':')) {
1273
-			$result->sql_serveur = substr($type, 0, $p);
1274
-			$type = substr($type, $p + 1);
1275
-		}
1276
-		$soustype = strtolower($type);
1277
-
1278
-		if (!isset($GLOBALS['table_des_tables'][$soustype])) {
1279
-			$soustype = $type;
1280
-		}
1281
-
1282
-		$result->type_requete = $soustype;
1283
-		// Lancer la 2e passe sur les criteres si la 1ere etait bonne
1284
-		if (!is_array($result->param)) {
1285
-			$err_b = true;
1286
-		} else {
1287
-			phraser_criteres($result->param, $result);
1288
-			if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
1289
-				$result->type_requete = TYPE_RECURSIF;
1290
-				$args = $result->param;
1291
-				array_unshift(
1292
-					$args,
1293
-					substr($type, strlen(TYPE_RECURSIF))
1294
-				);
1295
-				$result->param = $args;
1296
-			}
1297
-		}
1298
-
1299
-		$descr['id_mere_contexte'] = $id_boucle;
1300
-		$result->milieu = public_phraser_html_dist($result->milieu, $id_boucle, $boucles, $descr, $ligne_milieu, $boucle_placeholder);
1301
-		// reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre
1302
-		// ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle
1303
-		// si il y a deja une boucle de ce nom, cela declenchera une erreur ensuite
1304
-		if (empty($boucles[$id_boucle])) {
1305
-			$boucles[$id_boucle] = null;
1306
-		}
1307
-		$result->preaff = public_phraser_html_dist($result->preaff, $id_parent, $boucles, $descr, $ligne_preaff, $boucle_placeholder);
1308
-		$result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $ligne_avant, $boucle_placeholder);
1309
-		$result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $ligne_apres, $boucle_placeholder);
1310
-		$result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $ligne_altern, $boucle_placeholder);
1311
-		$result->postaff = public_phraser_html_dist($result->postaff, $id_parent, $boucles, $descr, $ligne_postaff, $boucle_placeholder);
1312
-
1313
-		// Prevenir le generateur de code que le squelette est faux
1314
-		if ($err_b) {
1315
-			$result->type_requete = false;
1316
-		}
1317
-
1318
-		// Verifier qu'il n'y a pas double definition
1319
-		// apres analyse des sous-parties (pas avant).
1320
-		if (!empty($boucles[$id_boucle])) {
1321
-			if ($boucles[$id_boucle]->type_requete !== false) {
1322
-				$err_b_d = [
1323
-					'zbug_erreur_boucle_double',
1324
-					['id' => $id_boucle]
1325
-				];
1326
-				erreur_squelette($err_b_d, $result);
1327
-				// Prevenir le generateur de code que le squelette est faux
1328
-				$boucles[$id_boucle]->type_requete = false;
1329
-			}
1330
-		} else {
1331
-			$boucles[$id_boucle] = $result;
1332
-		}
1333
-
1334
-		// remplacer la boucle par un placeholder qui compte le meme nombre de lignes
1335
-		$placeholder = public_generer_boucle_placeholder($id_boucle, $boucles[$id_boucle], $boucle_placeholder, $ligne_suite - $ligne_debut_texte);
1336
-		$longueur_boucle = $pos_courante - $boucle['debut_boucle'];
1337
-		$texte = substr_replace((string) $texte, $placeholder, $boucle['debut_boucle'], $longueur_boucle);
1338
-		$pos_courante = $pos_courante - $longueur_boucle + strlen($placeholder);
1339
-
1340
-		// phraser la partie avant le debut de la boucle
1341
-		#$all_res = phraser_champs_etendus(substr($texte, $pos_debut_texte, $boucle['debut_boucle'] - $pos_debut_texte), $ligne_debut_texte, $all_res);
1342
-		#$all_res[] = &$boucles[$id_boucle];
1343
-
1344
-		$ligne_debut_texte = $ligne_suite;
1345
-		$pos_debut_texte = $pos_courante;
1346
-	}
1347
-
1348
-	return phraser_champs_etendus($texte, $ligne_debut_initial, $all_res);
1089
+    $all_res = [];
1090
+    // definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1091
+    if (is_null($boucle_placeholder)) {
1092
+        do {
1093
+            $boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1094
+        } while (str_contains((string) $texte, $boucle_placeholder));
1095
+    }
1096
+
1097
+    $ligne_debut_initial = $ligne_debut_texte;
1098
+    $pos_debut_texte = 0;
1099
+    while ($boucle = public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte)) {
1100
+        $err_b = ''; // indiquera s'il y a eu une erreur
1101
+        $result = new Boucle();
1102
+        $result->id_parent = $id_parent;
1103
+        $result->descr = $descr;
1104
+
1105
+        $pos_courante = $boucle['pos_boucle'];
1106
+        $pos_parent = $boucle['pos_parent'];
1107
+        $id_boucle_search = $id_boucle = $boucle['id_boucle'];
1108
+
1109
+        $ligne_preaff = $ligne_avant = $ligne_milieu = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_parent);
1110
+
1111
+        // boucle anonyme ?
1112
+        if (!strlen((string) $id_boucle)) {
1113
+            $id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1114
+        }
1115
+
1116
+        $pos_debut_boucle = $pos_courante;
1117
+
1118
+        $pos_milieu = $pos_parent;
1119
+
1120
+        // Regarder si on a une partie conditionnelle avant <B_xxx>
1121
+        if ($boucle['pos_precond'] !== false) {
1122
+            $pos_debut_boucle = $boucle['pos_precond'];
1123
+
1124
+            $pos_avant = $boucle['pos_precond_inside'];
1125
+            $result->avant = substr((string) $texte, $pos_avant, $pos_courante - $pos_avant);
1126
+            $ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1127
+        }
1128
+
1129
+        // Regarder si on a une partie inconditionnelle avant <BB_xxx>
1130
+        if ($boucle['pos_preaff'] !== false) {
1131
+            $end_preaff = $pos_debut_boucle;
1132
+
1133
+            $pos_preaff = $boucle['pos_preaff_inside'];
1134
+            $result->preaff = substr((string) $texte, $pos_preaff, $end_preaff - $pos_preaff);
1135
+            $ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1136
+        }
1137
+
1138
+        $result->id_boucle = $id_boucle;
1139
+
1140
+        if (
1141
+            !preg_match(SPEC_BOUCLE, (string) $texte, $match, 0, $pos_milieu)
1142
+            || ($pos_match = strpos((string) $texte, (string) $match[0], $pos_milieu)) === false
1143
+            || $pos_match > $pos_milieu
1144
+        ) {
1145
+            $err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
1146
+            erreur_squelette($err_b, $result);
1147
+
1148
+            $ligne_debut_texte += public_compte_ligne($texte, $pos_debut_texte, $pos_courante + 1);
1149
+            $pos_debut_texte = $pos_courante + 1;
1150
+            continue;
1151
+        }
1152
+
1153
+        $result->type_requete = $match[0];
1154
+        $pos_milieu += strlen($match[0]);
1155
+        $pos_courante = $pos_milieu; // on s'en sert pour compter les lignes plus precisemment
1156
+
1157
+        $type = $match[1];
1158
+        $jointures = trim($match[2]);
1159
+        $table_optionnelle = ($match[3]);
1160
+        if ($jointures) {
1161
+            // on affecte pas ici les jointures explicites, mais dans la compilation
1162
+            // ou elles seront completees des jointures declarees
1163
+            $result->jointures_explicites = $jointures;
1164
+        }
1165
+
1166
+        if ($table_optionnelle) {
1167
+            $result->table_optionnelle = true;
1168
+            $result->type_table_optionnelle = $type;
1169
+        }
1170
+
1171
+        // 1ere passe sur les criteres, vu comme des arguments sans fct
1172
+        // Resultat mis dans result->param
1173
+        $pos_fin_criteres = $pos_milieu;
1174
+        phraser_args($texte, '/>', '', $all_res, $result, $pos_fin_criteres);
1175
+
1176
+        // En 2e passe result->criteres contiendra un tableau
1177
+        // pour l'instant on met le source (chaine) :
1178
+        // si elle reste ici au final, c'est qu'elle contient une erreur
1179
+        $pos_courante = $pos_fin_criteres; // on s'en sert pour compter les lignes plus precisemment
1180
+        $result->criteres = substr((string) $texte, $pos_milieu, $pos_fin_criteres - $pos_milieu);
1181
+        $pos_milieu = $pos_fin_criteres;
1182
+
1183
+        //
1184
+        // Recuperer la fin :
1185
+        //
1186
+        if ($texte[$pos_milieu] === '/') {
1187
+            // boucle autofermante : pas de partie conditionnelle apres
1188
+            $pos_courante += 2;
1189
+            $result->milieu = '';
1190
+        } else {
1191
+            $pos_milieu += 1;
1192
+
1193
+            $fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1194
+            $pos_fin = strpos((string) $texte, $fin_boucle, $pos_milieu);
1195
+            if ($pos_fin === false) {
1196
+                $err_b = [
1197
+                    'zbug_erreur_boucle_fermant',
1198
+                    ['id' => $id_boucle]
1199
+                ];
1200
+                erreur_squelette($err_b, $result);
1201
+                $pos_courante += strlen($fin_boucle);
1202
+            }
1203
+            else {
1204
+                // verifier une eventuelle imbrication d'une boucle homonyme
1205
+                // (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1206
+                $search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1207
+                $search_from = $pos_milieu;
1208
+                $nb_open = 1;
1209
+                $nb_close = 1;
1210
+                $maxiter = 0;
1211
+                do {
1212
+                    while (
1213
+                        $nb_close < $nb_open
1214
+                        && ($p = strpos((string) $texte, $fin_boucle, $pos_fin + 1))
1215
+                    ) {
1216
+                        $nb_close++;
1217
+                        $pos_fin = $p;
1218
+                    }
1219
+                    // si on a pas trouve assez de boucles fermantes, sortir de la, on a fait de notre mieux
1220
+                    if ($nb_close < $nb_open) {
1221
+                        break;
1222
+                    }
1223
+                    while (
1224
+                        ($p = strpos((string) $texte, $search_debut_boucle, $search_from))
1225
+                        && $p < $pos_fin
1226
+                    ) {
1227
+                        $nb_open++;
1228
+                        $search_from = $p + 1;
1229
+                    }
1230
+                } while ($nb_close < $nb_open && $maxiter++ < 5);
1231
+
1232
+                $pos_courante = $pos_fin + strlen($fin_boucle);
1233
+            }
1234
+            $result->milieu = substr((string) $texte, $pos_milieu, $pos_fin - $pos_milieu);
1235
+        }
1236
+
1237
+        $ligne_suite = $ligne_apres = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_courante);
1238
+        $boucle = public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_courante, $result);
1239
+
1240
+        //
1241
+        // 1. Partie conditionnelle apres ?
1242
+        //
1243
+        if ($boucle['pos_postcond']) {
1244
+            $result->apres = substr((string) $texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1245
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1246
+            $pos_courante = $boucle['pos_postcond_inside'] ;
1247
+        }
1248
+
1249
+
1250
+        //
1251
+        // 2. Partie alternative apres ?
1252
+        //
1253
+        $ligne_altern = $ligne_suite;
1254
+        if ($boucle['pos_altern']) {
1255
+            $result->altern = substr((string) $texte, $pos_courante, $boucle['pos_altern'] - $pos_courante);
1256
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_altern_inside']);
1257
+            $pos_courante = $boucle['pos_altern_inside'];
1258
+        }
1259
+
1260
+        //
1261
+        // 3. Partie footer non alternative ?
1262
+        //
1263
+        $ligne_postaff = $ligne_suite;
1264
+        if ($boucle['pos_postaff']) {
1265
+            $result->postaff = substr((string) $texte, $pos_courante, $boucle['pos_postaff'] - $pos_courante);
1266
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postaff_inside']);
1267
+            $pos_courante = $boucle['pos_postaff_inside'];
1268
+        }
1269
+
1270
+        $result->ligne = $ligne_preaff;
1271
+
1272
+        if ($p = strpos($type, ':')) {
1273
+            $result->sql_serveur = substr($type, 0, $p);
1274
+            $type = substr($type, $p + 1);
1275
+        }
1276
+        $soustype = strtolower($type);
1277
+
1278
+        if (!isset($GLOBALS['table_des_tables'][$soustype])) {
1279
+            $soustype = $type;
1280
+        }
1281
+
1282
+        $result->type_requete = $soustype;
1283
+        // Lancer la 2e passe sur les criteres si la 1ere etait bonne
1284
+        if (!is_array($result->param)) {
1285
+            $err_b = true;
1286
+        } else {
1287
+            phraser_criteres($result->param, $result);
1288
+            if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
1289
+                $result->type_requete = TYPE_RECURSIF;
1290
+                $args = $result->param;
1291
+                array_unshift(
1292
+                    $args,
1293
+                    substr($type, strlen(TYPE_RECURSIF))
1294
+                );
1295
+                $result->param = $args;
1296
+            }
1297
+        }
1298
+
1299
+        $descr['id_mere_contexte'] = $id_boucle;
1300
+        $result->milieu = public_phraser_html_dist($result->milieu, $id_boucle, $boucles, $descr, $ligne_milieu, $boucle_placeholder);
1301
+        // reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre
1302
+        // ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle
1303
+        // si il y a deja une boucle de ce nom, cela declenchera une erreur ensuite
1304
+        if (empty($boucles[$id_boucle])) {
1305
+            $boucles[$id_boucle] = null;
1306
+        }
1307
+        $result->preaff = public_phraser_html_dist($result->preaff, $id_parent, $boucles, $descr, $ligne_preaff, $boucle_placeholder);
1308
+        $result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $ligne_avant, $boucle_placeholder);
1309
+        $result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $ligne_apres, $boucle_placeholder);
1310
+        $result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $ligne_altern, $boucle_placeholder);
1311
+        $result->postaff = public_phraser_html_dist($result->postaff, $id_parent, $boucles, $descr, $ligne_postaff, $boucle_placeholder);
1312
+
1313
+        // Prevenir le generateur de code que le squelette est faux
1314
+        if ($err_b) {
1315
+            $result->type_requete = false;
1316
+        }
1317
+
1318
+        // Verifier qu'il n'y a pas double definition
1319
+        // apres analyse des sous-parties (pas avant).
1320
+        if (!empty($boucles[$id_boucle])) {
1321
+            if ($boucles[$id_boucle]->type_requete !== false) {
1322
+                $err_b_d = [
1323
+                    'zbug_erreur_boucle_double',
1324
+                    ['id' => $id_boucle]
1325
+                ];
1326
+                erreur_squelette($err_b_d, $result);
1327
+                // Prevenir le generateur de code que le squelette est faux
1328
+                $boucles[$id_boucle]->type_requete = false;
1329
+            }
1330
+        } else {
1331
+            $boucles[$id_boucle] = $result;
1332
+        }
1333
+
1334
+        // remplacer la boucle par un placeholder qui compte le meme nombre de lignes
1335
+        $placeholder = public_generer_boucle_placeholder($id_boucle, $boucles[$id_boucle], $boucle_placeholder, $ligne_suite - $ligne_debut_texte);
1336
+        $longueur_boucle = $pos_courante - $boucle['debut_boucle'];
1337
+        $texte = substr_replace((string) $texte, $placeholder, $boucle['debut_boucle'], $longueur_boucle);
1338
+        $pos_courante = $pos_courante - $longueur_boucle + strlen($placeholder);
1339
+
1340
+        // phraser la partie avant le debut de la boucle
1341
+        #$all_res = phraser_champs_etendus(substr($texte, $pos_debut_texte, $boucle['debut_boucle'] - $pos_debut_texte), $ligne_debut_texte, $all_res);
1342
+        #$all_res[] = &$boucles[$id_boucle];
1343
+
1344
+        $ligne_debut_texte = $ligne_suite;
1345
+        $pos_debut_texte = $pos_courante;
1346
+    }
1347
+
1348
+    return phraser_champs_etendus($texte, $ligne_debut_initial, $all_res);
1349 1349
 }
Please login to merge, or discard this patch.
Spacing   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -55,19 +55,19 @@  discard block
 block discarded – undo
55 55
  * Nom d'une balise #TOTO
56 56
  *
57 57
  * Écriture alambiquée pour rester compatible avec les hexadecimaux des vieux squelettes */
58
-define('NOM_DE_CHAMP', '#((' . NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)\b(\*{0,2})");
58
+define('NOM_DE_CHAMP', '#(('.NOM_DE_BOUCLE."):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)\b(\*{0,2})");
59 59
 /** Balise complète [...(#TOTO) ... ] */
60
-define('CHAMP_ETENDU', '/\[([^\[]*?)\(' . NOM_DE_CHAMP . '([^)]*\)[^]]*)\]/S');
60
+define('CHAMP_ETENDU', '/\[([^\[]*?)\('.NOM_DE_CHAMP.'([^)]*\)[^]]*)\]/S');
61 61
 
62 62
 define('BALISE_INCLURE', '/<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?/S');
63 63
 define('BALISE_POLYGLOTTE', ',<multi>(.*)</multi>,Uims');
64 64
 define('BALISE_IDIOMES', ',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:/?>),iS');
65
-define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*((' . NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s');
65
+define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*(('.NOM_DE_CHAMP.'[{][^}]*})?[^,]*)\s*,?\s*@s');
66 66
 
67 67
 /** Champ sql dans parenthèse ex: (id_article) */
68 68
 define('SQL_ARGS', '(\([^)]*\))');
69 69
 /** Fonction SQL sur un champ ex: SUM(visites) */
70
-define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_\/][A-Z_\/0-9.]*)' . SQL_ARGS . '?`?');
70
+define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_\/][A-Z_\/0-9.]*)'.SQL_ARGS.'?`?');
71 71
 
72 72
 /**
73 73
  * Parser les <INCLURE> dans le texte
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
 
266 266
 	while (
267 267
 		(($p = strpos($texte, '#')) !== false)
268
-		&& preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match, PREG_OFFSET_CAPTURE, $p)
268
+		&& preg_match('/'.NOM_DE_CHAMP.'/S', $texte, $match, PREG_OFFSET_CAPTURE, $p)
269 269
 	) {
270 270
 		$poss = array_column($match, 1);
271 271
 		$match = array_column($match, 0);
@@ -419,7 +419,7 @@  discard block
 block discarded – undo
419 419
 			$collecte[] = $champ;
420 420
 			$args = ltrim($regs[count($regs) - 1]);
421 421
 		} else {
422
-			if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
422
+			if (!preg_match('/'.NOM_DE_CHAMP.'([{|])/', $arg, $r)) {
423 423
 				// 0 est un aveu d'impuissance. A completer
424 424
 				$arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
425 425
 
@@ -505,7 +505,7 @@  discard block
 block discarded – undo
505 505
  */
506 506
 function phraser_champs_exterieurs(string $texte, int $ligne, string $sep, array $nested_res): array {
507 507
 	$res = [];
508
-	$preg = ',^%' . preg_quote($sep, ',') . '([0-9]+)(\n*)@,';
508
+	$preg = ',^%'.preg_quote($sep, ',').'([0-9]+)(\n*)@,';
509 509
 	while (($p = strpos($texte, "%$sep")) !== false) {
510 510
 		$suite = substr($texte, $p);
511 511
 		if (!preg_match($preg, $suite, $m)) {
@@ -580,7 +580,7 @@  discard block
 block discarded – undo
580 580
 			$pos_apres = 0;
581 581
 			$champs_trouves = phraser_args($match[7], ')', $sep, $champs_trouves, $champ, $pos_apres);
582 582
 			phraser_vieux($champ);
583
-			$champ->avant =	phraser_champs_exterieurs($match[1], $nbl, $sep, $champs_trouves);
583
+			$champ->avant = phraser_champs_exterieurs($match[1], $nbl, $sep, $champs_trouves);
584 584
 			$apres = substr($match[7], $pos_apres + 1);
585 585
 
586 586
 			$nbl_debut_champ = 0;
@@ -596,7 +596,7 @@  discard block
 block discarded – undo
596 596
 			$j = count($champs_trouves) - 1;
597 597
 			// on remplace ce champ par un placeholder
598 598
 			// ajouter $nbl_champ retour ligne pour que la partie conserve le nombre de lignes lors des itérations suivantes
599
-			$parties[] = ($t = "%{$sep}{$j}" . str_repeat("\n", $nbl_champ) . '@');
599
+			$parties[] = ($t = "%{$sep}{$j}".str_repeat("\n", $nbl_champ).'@');
600 600
 			$nbl += $nbl_champ;
601 601
 
602 602
 			$texte = substr($texte, $poss[0] + strlen($match[0]));
@@ -606,7 +606,7 @@  discard block
 block discarded – undo
606 606
 		// si on a trouvé des morceaux, il faut recommencer
607 607
 		if (count($parties)) {
608 608
 			// reprenons tous les morceaux qu'on a mis de côté car ne matchant pas (encore)
609
-			$texte = implode('', $parties) . $texte;
609
+			$texte = implode('', $parties).$texte;
610 610
 		}
611 611
 	} while (count($parties));
612 612
 
@@ -692,7 +692,7 @@  discard block
 block discarded – undo
692 692
 					// une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
693 693
 					if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
694 694
 						$c = null;
695
-						eval('$c = ' . $m[4] . ';');
695
+						eval('$c = '.$m[4].';');
696 696
 						if (isset($c)) {
697 697
 							$m[4] = $c;
698 698
 						}
@@ -772,7 +772,7 @@  discard block
 block discarded – undo
772 772
 					if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', (string) $param, $m)) {
773 773
 						$crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
774 774
 					} elseif (
775
-						preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
775
+						preg_match(',^([!]?)('.CHAMP_SQL_PLUS_FONC.
776 776
 						')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', (string) $param, $m)
777 777
 					) {
778 778
 						$a2 = trim($m[8]);
@@ -789,8 +789,8 @@  discard block
 block discarded – undo
789 789
 						);
790 790
 						$crit->exclus = $m[1];
791 791
 					} elseif (
792
-						preg_match('/^([!]?)\s*(' .
793
-						CHAMP_SQL_PLUS_FONC .
792
+						preg_match('/^([!]?)\s*('.
793
+						CHAMP_SQL_PLUS_FONC.
794 794
 						')\s*(\??)(.*)$/is', (string) $param, $m)
795 795
 					) {
796 796
 						// contient aussi les comparaisons implicites !
@@ -928,7 +928,7 @@  discard block
 block discarded – undo
928 928
 			}
929 929
 
930 930
 			// trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
931
-			$precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
931
+			$precond_boucle = BALISE_PRECOND_BOUCLE.$id_boucle.'>';
932 932
 			$pos_precond = strpos((string) $texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
933 933
 			if (
934 934
 				$pos_precond !== false
@@ -939,7 +939,7 @@  discard block
 block discarded – undo
939 939
 				$boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
940 940
 			}
941 941
 
942
-			$preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
942
+			$preaff_boucle = BALISE_PREAFF_BOUCLE.$id_boucle.'>';
943 943
 			$pos_preaff = strpos((string) $texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
944 944
 			if (
945 945
 				$pos_preaff !== false
@@ -988,13 +988,13 @@  discard block
 block discarded – undo
988 988
 	$pos_anonyme_next = null;
989 989
 	// si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
990 990
 	if (!strlen((string) $id_boucle)) {
991
-		$pos_anonyme_next = strpos((string) $texte, BALISE_BOUCLE . '(', $pos_courante);
991
+		$pos_anonyme_next = strpos((string) $texte, BALISE_BOUCLE.'(', $pos_courante);
992 992
 	}
993 993
 
994 994
 	//
995 995
 	// 1. Recuperer la partie conditionnelle apres
996 996
 	//
997
-	$apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
997
+	$apres_boucle = BALISE_POSTCOND_BOUCLE.$id_boucle.'>';
998 998
 	$pos_apres = strpos((string) $texte, $apres_boucle, $pos_courante);
999 999
 	if (
1000 1000
 		$pos_apres !== false
@@ -1003,13 +1003,13 @@  discard block
 block discarded – undo
1003 1003
 		$boucle['pos_postcond'] = $pos_apres;
1004 1004
 		$pos_apres += strlen($apres_boucle);
1005 1005
 		$boucle['pos_postcond_inside'] = $pos_apres;
1006
-		$pos_courante = $pos_apres ;
1006
+		$pos_courante = $pos_apres;
1007 1007
 	}
1008 1008
 
1009 1009
 	//
1010 1010
 	// 2. Récuperer la partie alternative apres
1011 1011
 	//
1012
-	$altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
1012
+	$altern_boucle = BALISE_ALT_BOUCLE.$id_boucle.'>';
1013 1013
 	$pos_altern = strpos((string) $texte, $altern_boucle, $pos_courante);
1014 1014
 	if (
1015 1015
 		$pos_altern !== false
@@ -1024,7 +1024,7 @@  discard block
 block discarded – undo
1024 1024
 	//
1025 1025
 	// 3. Recuperer la partie footer non alternative
1026 1026
 	//
1027
-	$postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
1027
+	$postaff_boucle = BALISE_POSTAFF_BOUCLE.$id_boucle.'>';
1028 1028
 	$pos_postaff = strpos((string) $texte, $postaff_boucle, $pos_courante);
1029 1029
 	if (
1030 1030
 		$pos_postaff !== false
@@ -1033,7 +1033,7 @@  discard block
 block discarded – undo
1033 1033
 		$boucle['pos_postaff'] = $pos_postaff;
1034 1034
 		$pos_postaff += strlen($postaff_boucle);
1035 1035
 		$boucle['pos_postaff_inside'] = $pos_postaff;
1036
-		$pos_courante = $pos_postaff ;
1036
+		$pos_courante = $pos_postaff;
1037 1037
 	}
1038 1038
 
1039 1039
 	return $boucle;
@@ -1069,7 +1069,7 @@  discard block
 block discarded – undo
1069 1069
  * @return string
1070 1070
  */
1071 1071
 function public_generer_boucle_placeholder(string $id_boucle, &$boucle, string $boucle_placeholder, int $nb_lignes): string {
1072
-	$placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1072
+	$placeholder = "[(#{$boucle_placeholder}{".$id_boucle.'})'.str_pad('', $nb_lignes, "\n").']';
1073 1073
 	//memoriser la boucle a reinjecter
1074 1074
 	$id_boucle = "$id_boucle";
1075 1075
 	phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
@@ -1090,7 +1090,7 @@  discard block
 block discarded – undo
1090 1090
 	// definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1091 1091
 	if (is_null($boucle_placeholder)) {
1092 1092
 		do {
1093
-			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1093
+			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_'.strtoupper(md5(uniqid()));
1094 1094
 		} while (str_contains((string) $texte, $boucle_placeholder));
1095 1095
 	}
1096 1096
 
@@ -1110,7 +1110,7 @@  discard block
 block discarded – undo
1110 1110
 
1111 1111
 		// boucle anonyme ?
1112 1112
 		if (!strlen((string) $id_boucle)) {
1113
-			$id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1113
+			$id_boucle = '_anon_L'.$ligne_milieu.'_'.substr(md5('anonyme:'.$id_parent.':'.json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1114 1114
 		}
1115 1115
 
1116 1116
 		$pos_debut_boucle = $pos_courante;
@@ -1123,7 +1123,7 @@  discard block
 block discarded – undo
1123 1123
 
1124 1124
 			$pos_avant = $boucle['pos_precond_inside'];
1125 1125
 			$result->avant = substr((string) $texte, $pos_avant, $pos_courante - $pos_avant);
1126
-			$ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1126
+			$ligne_avant = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1127 1127
 		}
1128 1128
 
1129 1129
 		// Regarder si on a une partie inconditionnelle avant <BB_xxx>
@@ -1132,7 +1132,7 @@  discard block
 block discarded – undo
1132 1132
 
1133 1133
 			$pos_preaff = $boucle['pos_preaff_inside'];
1134 1134
 			$result->preaff = substr((string) $texte, $pos_preaff, $end_preaff - $pos_preaff);
1135
-			$ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1135
+			$ligne_preaff = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1136 1136
 		}
1137 1137
 
1138 1138
 		$result->id_boucle = $id_boucle;
@@ -1190,7 +1190,7 @@  discard block
 block discarded – undo
1190 1190
 		} else {
1191 1191
 			$pos_milieu += 1;
1192 1192
 
1193
-			$fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1193
+			$fin_boucle = BALISE_FIN_BOUCLE.$id_boucle_search.'>';
1194 1194
 			$pos_fin = strpos((string) $texte, $fin_boucle, $pos_milieu);
1195 1195
 			if ($pos_fin === false) {
1196 1196
 				$err_b = [
@@ -1203,7 +1203,7 @@  discard block
 block discarded – undo
1203 1203
 			else {
1204 1204
 				// verifier une eventuelle imbrication d'une boucle homonyme
1205 1205
 				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1206
-				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1206
+				$search_debut_boucle = BALISE_BOUCLE.$id_boucle_search.'(';
1207 1207
 				$search_from = $pos_milieu;
1208 1208
 				$nb_open = 1;
1209 1209
 				$nb_close = 1;
@@ -1243,7 +1243,7 @@  discard block
 block discarded – undo
1243 1243
 		if ($boucle['pos_postcond']) {
1244 1244
 			$result->apres = substr((string) $texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1245 1245
 			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1246
-			$pos_courante = $boucle['pos_postcond_inside'] ;
1246
+			$pos_courante = $boucle['pos_postcond_inside'];
1247 1247
 		}
1248 1248
 
1249 1249
 
Please login to merge, or discard this patch.
Braces   +3 added lines, -6 removed lines patch added patch discarded remove patch
@@ -908,8 +908,7 @@  discard block
 block discarded – undo
908 908
 			erreur_squelette($err_b, $result);
909 909
 
910 910
 			continue;
911
-		}
912
-		else {
911
+		} else {
913 912
 			$boucle = [
914 913
 				'id_boucle' => $id_boucle,
915 914
 				'id_boucle_err' => $id_boucle,
@@ -1049,8 +1048,7 @@  discard block
 block discarded – undo
1049 1048
 	// si c'est un appel pour memoriser une boucle, memorisons la
1050 1049
 	if (is_string($champ) && !empty($boucle_placeholder) && !empty($boucle)) {
1051 1050
 		$boucles_connues[$boucle_placeholder][$champ] = &$boucle;
1052
-	}
1053
-	else {
1051
+	} else {
1054 1052
 		if (!empty($champ->nom_champ) && !empty($boucles_connues[$champ->nom_champ])) {
1055 1053
 			$placeholder = $champ->nom_champ;
1056 1054
 			$id = reset($champ->param[0][1]);
@@ -1199,8 +1197,7 @@  discard block
 block discarded – undo
1199 1197
 				];
1200 1198
 				erreur_squelette($err_b, $result);
1201 1199
 				$pos_courante += strlen($fin_boucle);
1202
-			}
1203
-			else {
1200
+			} else {
1204 1201
 				// verifier une eventuelle imbrication d'une boucle homonyme
1205 1202
 				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1206 1203
 				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
Please login to merge, or discard this patch.
ecrire/lang/public_id.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -5,100 +5,100 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Halaman Depan', # MODIF
10
-	'articles' => 'Artikel-artikel',
11
-	'articles_auteur' => 'Artikel-artikel penulis ini',
12
-	'articles_populaires' => 'Artikel-artikel yang paling banyak dibaca',
13
-	'articles_rubrique' => 'Artikel-artikel bagian ini',
14
-	'aucun_article' => 'Tidak ada artikel di alamat ini',
15
-	'aucun_auteur' => 'Tidak ada penulis di alamat ini',
16
-	'aucun_site' => 'Tidak ada situs di alamat ini',
17
-	'aucune_breve' => 'Tidak ada berita di alamat ini',
18
-	'aucune_rubrique' => 'Tidak ada bagian di alamat ini',
19
-	'autres_breves' => 'Berita lainnya',
20
-	'autres_groupes_mots_clefs' => 'Kelompok-kelompok kata kunci lainnya',
21
-	'autres_sites' => 'Situs-situs lainnya',
8
+    // A
9
+    'accueil_site' => 'Halaman Depan', # MODIF
10
+    'articles' => 'Artikel-artikel',
11
+    'articles_auteur' => 'Artikel-artikel penulis ini',
12
+    'articles_populaires' => 'Artikel-artikel yang paling banyak dibaca',
13
+    'articles_rubrique' => 'Artikel-artikel bagian ini',
14
+    'aucun_article' => 'Tidak ada artikel di alamat ini',
15
+    'aucun_auteur' => 'Tidak ada penulis di alamat ini',
16
+    'aucun_site' => 'Tidak ada situs di alamat ini',
17
+    'aucune_breve' => 'Tidak ada berita di alamat ini',
18
+    'aucune_rubrique' => 'Tidak ada bagian di alamat ini',
19
+    'autres_breves' => 'Berita lainnya',
20
+    'autres_groupes_mots_clefs' => 'Kelompok-kelompok kata kunci lainnya',
21
+    'autres_sites' => 'Situs-situs lainnya',
22 22
 
23
-	// B
24
-	'bonjour' => 'Halo',
23
+    // B
24
+    'bonjour' => 'Halo',
25 25
 
26
-	// C
27
-	'commenter_site' => 'Komentar di situs ini',
26
+    // C
27
+    'commenter_site' => 'Komentar di situs ini',
28 28
 
29
-	// D
30
-	'date' => 'Tanggal',
31
-	'dernier_ajout' => 'Penambahan terbaru',
32
-	'dernieres_breves' => 'Berita terbaru',
33
-	'derniers_articles' => 'Artikel-artikel terbaru',
34
-	'derniers_commentaires' => 'Komentar-komentar terbaru',
35
-	'derniers_messages_forum' => 'Pesan-pesan terbaru yang dipublikasikan di forum ini',
29
+    // D
30
+    'date' => 'Tanggal',
31
+    'dernier_ajout' => 'Penambahan terbaru',
32
+    'dernieres_breves' => 'Berita terbaru',
33
+    'derniers_articles' => 'Artikel-artikel terbaru',
34
+    'derniers_commentaires' => 'Komentar-komentar terbaru',
35
+    'derniers_messages_forum' => 'Pesan-pesan terbaru yang dipublikasikan di forum ini',
36 36
 
37
-	// E
38
-	'edition_mode_texte' => 'Tampilan teks saja',
39
-	'en_reponse' => 'Membalas kepada:',
40
-	'en_resume' => 'Ringkasan',
41
-	'envoyer_message' => 'Untuk mengirimkan sebuah pesan',
42
-	'espace_prive' => 'Area pribadi',
37
+    // E
38
+    'edition_mode_texte' => 'Tampilan teks saja',
39
+    'en_reponse' => 'Membalas kepada:',
40
+    'en_resume' => 'Ringkasan',
41
+    'envoyer_message' => 'Untuk mengirimkan sebuah pesan',
42
+    'espace_prive' => 'Area pribadi',
43 43
 
44
-	// H
45
-	'hierarchie_site' => 'Hirarki situs',
44
+    // H
45
+    'hierarchie_site' => 'Hirarki situs',
46 46
 
47
-	// J
48
-	'jours' => 'hari',
47
+    // J
48
+    'jours' => 'hari',
49 49
 
50
-	// M
51
-	'meme_auteur' => 'Oleh penulis yang sama',
52
-	'meme_rubrique' => 'Dalam bagian yang sama',
53
-	'memes_auteurs' => 'Oleh penulis-penulis yang sama',
54
-	'message' => 'Pesan',
55
-	'messages_forum' => 'Pesan-pesan forum', # MODIF
56
-	'messages_recents' => 'Pesan-pesan forum terbaru',
57
-	'mots_clefs' => 'Kata-kata kunci',
58
-	'mots_clefs_meme_groupe' => 'Kata-kata kunci dalam kelompok yang sama',
50
+    // M
51
+    'meme_auteur' => 'Oleh penulis yang sama',
52
+    'meme_rubrique' => 'Dalam bagian yang sama',
53
+    'memes_auteurs' => 'Oleh penulis-penulis yang sama',
54
+    'message' => 'Pesan',
55
+    'messages_forum' => 'Pesan-pesan forum', # MODIF
56
+    'messages_recents' => 'Pesan-pesan forum terbaru',
57
+    'mots_clefs' => 'Kata-kata kunci',
58
+    'mots_clefs_meme_groupe' => 'Kata-kata kunci dalam kelompok yang sama',
59 59
 
60
-	// N
61
-	'navigation' => 'Navigasi',
62
-	'nom' => 'Nama',
63
-	'nouveautes' => 'Yang terbaru',
64
-	'nouveautes_web' => 'Yang terbaru di dunia Web',
65
-	'nouveaux_articles' => 'Artikel-artikel baru',
66
-	'nouvelles_breves' => 'Berita-berita baru',
60
+    // N
61
+    'navigation' => 'Navigasi',
62
+    'nom' => 'Nama',
63
+    'nouveautes' => 'Yang terbaru',
64
+    'nouveautes_web' => 'Yang terbaru di dunia Web',
65
+    'nouveaux_articles' => 'Artikel-artikel baru',
66
+    'nouvelles_breves' => 'Berita-berita baru',
67 67
 
68
-	// P
69
-	'page_precedente' => 'halaman sebelumnya',
70
-	'page_suivante' => 'halaman selanjutnya',
71
-	'par_auteur' => 'oleh ',
72
-	'participer_site' => 'Anda dapat berpartisipasi secara aktif di situs web ini dan menulis artikel anda sendiri dengan sebelumnya mendaftarkan diri di bawah ini. Anda akan menerima segera sebuah e-mail yang berisikan kode akses ke area pribadi situs ini.',
73
-	'plan_site' => 'Peta Situs',
74
-	'popularite' => 'Popularitas',
75
-	'poster_message' => 'Untuk mengirimkan sebuah pesan',
76
-	'proposer_site' => 'Anda dapat merekomendasikan sebuah situs untuk ditambahkan ke dalam bagian ini:',
68
+    // P
69
+    'page_precedente' => 'halaman sebelumnya',
70
+    'page_suivante' => 'halaman selanjutnya',
71
+    'par_auteur' => 'oleh ',
72
+    'participer_site' => 'Anda dapat berpartisipasi secara aktif di situs web ini dan menulis artikel anda sendiri dengan sebelumnya mendaftarkan diri di bawah ini. Anda akan menerima segera sebuah e-mail yang berisikan kode akses ke area pribadi situs ini.',
73
+    'plan_site' => 'Peta Situs',
74
+    'popularite' => 'Popularitas',
75
+    'poster_message' => 'Untuk mengirimkan sebuah pesan',
76
+    'proposer_site' => 'Anda dapat merekomendasikan sebuah situs untuk ditambahkan ke dalam bagian ini:',
77 77
 
78
-	// R
79
-	'repondre_article' => 'Balasan pada artikel ini',
80
-	'repondre_breve' => 'Balasan pada artikel berita ini',
81
-	'resultats_recherche' => 'Hasil pencarian',
82
-	'retour_debut_forums' => 'Kembali ke awal forum',
83
-	'rubrique' => 'Bagian',
84
-	'rubriques' => 'Bagian',
78
+    // R
79
+    'repondre_article' => 'Balasan pada artikel ini',
80
+    'repondre_breve' => 'Balasan pada artikel berita ini',
81
+    'resultats_recherche' => 'Hasil pencarian',
82
+    'retour_debut_forums' => 'Kembali ke awal forum',
83
+    'rubrique' => 'Bagian',
84
+    'rubriques' => 'Bagian',
85 85
 
86
-	// S
87
-	'signatures_petition' => 'Tanda tangan',
88
-	'site_realise_avec_spip' => 'Situs dibuat dengan SPIP',
89
-	'sites_web' => 'Situs-situs web',
90
-	'sous_rubriques' => 'Sub-sub bagian',
91
-	'suite' => 'lanjut',
92
-	'sur_web' => 'Di Web',
93
-	'syndiquer_rubrique' => 'Sindikasi bagian ini',
94
-	'syndiquer_site' => 'Sindikasi seluruh isi situs',
86
+    // S
87
+    'signatures_petition' => 'Tanda tangan',
88
+    'site_realise_avec_spip' => 'Situs dibuat dengan SPIP',
89
+    'sites_web' => 'Situs-situs web',
90
+    'sous_rubriques' => 'Sub-sub bagian',
91
+    'suite' => 'lanjut',
92
+    'sur_web' => 'Di Web',
93
+    'syndiquer_rubrique' => 'Sindikasi bagian ini',
94
+    'syndiquer_site' => 'Sindikasi seluruh isi situs',
95 95
 
96
-	// T
97
-	'texte_lettre_information' => 'Berikut adalah laporan berkala situs',
98
-	'texte_lettre_information_2' => 'Laporan ini memberikan ringkasan artikel-artikel dan berita-berita yang dipublikasikan sejak', # MODIF
96
+    // T
97
+    'texte_lettre_information' => 'Berikut adalah laporan berkala situs',
98
+    'texte_lettre_information_2' => 'Laporan ini memberikan ringkasan artikel-artikel dan berita-berita yang dipublikasikan sejak', # MODIF
99 99
 
100
-	// V
101
-	'ver_imprimer' => 'Versi cetak',
102
-	'voir_en_ligne' => 'Lihat secara online',
103
-	'voir_squelette' => 'ٍTampilkan templat halaman ini',
100
+    // V
101
+    'ver_imprimer' => 'Versi cetak',
102
+    'voir_en_ligne' => 'Lihat secara online',
103
+    'voir_squelette' => 'ٍTampilkan templat halaman ini',
104 104
 ];
Please login to merge, or discard this patch.
ecrire/lang/ecrire_oc_prv.php 1 patch
Indentation   +521 added lines, -521 removed lines patch added patch discarded remove patch
@@ -5,484 +5,484 @@  discard block
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'activer_plugin' => 'Activar l’ajuston',
10
-	'aide_non_disponible' => 'Aquela part de l’ajuda en linha es pas encara disponibla per aquesta lenga.',
11
-	'auteur' => 'Autor :',
12
-	'avis_acces_interdit' => 'Accès proïbit.',
13
-	'avis_article_modifie' => 'Atencion, @nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
14
-	'avis_aucun_resultat' => 'Ges de resultat.',
15
-	'avis_chemin_invalide_1' => 'Lo camin qu’avètz chausit',
16
-	'avis_chemin_invalide_2' => 'sembla pas valid. Vougatz tornar a la pagina anteriora per verificar leis informacions fornidas.',
17
-	'avis_connexion_echec_1' => 'La connexion au servidor SQL s’es encalada.', # MODIF
18
-	'avis_connexion_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas.',
19
-	'avis_connexion_echec_3' => '<b>N.B.</b> Sus fòrça servidors, devètz <b>demandar</b> qu’activen vòstre accès a la basa SQL avans de la poder utilizar. Se vos podètz pas connectar, verificatz qu’agatz ben realizat aqueu procediment.', # MODIF
20
-	'avis_connexion_ldap_echec_1' => 'La connexion au servidor LDAP s’es encalada.',
21
-	'avis_connexion_ldap_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas. ',
22
-	'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.',
23
-	'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz ben oscar aquela casa de confirmacion.',
24
-	'avis_erreur_connexion_mysql' => 'Error de connexion SQL',
25
-	'avis_espace_interdit' => '<b>Espaci proïbit</b><p>SPIP es ja installat.', # MODIF
26
-	'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir lei noms dei basas de donadas installadas.',
27
-	'avis_lecture_noms_bases_2' => 'Siá ges de basa es disponibla, siá la foncion que permet d’entierar lei basas es estada desactivada per de rasons de seguretat (aquò’s lo cas en cò de mai d’un aubergador).',
28
-	'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:',
29
-	'avis_non_acces_page' => 'Podètz pas accedir a aquela pagina.',
30
-	'avis_operation_echec' => 'L’operacion s’es encalada.',
31
-	'avis_suppression_base' => 'ATENCION, suprimir lei donadas es irreversible',
8
+    // A
9
+    'activer_plugin' => 'Activar l’ajuston',
10
+    'aide_non_disponible' => 'Aquela part de l’ajuda en linha es pas encara disponibla per aquesta lenga.',
11
+    'auteur' => 'Autor :',
12
+    'avis_acces_interdit' => 'Accès proïbit.',
13
+    'avis_article_modifie' => 'Atencion, @nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
14
+    'avis_aucun_resultat' => 'Ges de resultat.',
15
+    'avis_chemin_invalide_1' => 'Lo camin qu’avètz chausit',
16
+    'avis_chemin_invalide_2' => 'sembla pas valid. Vougatz tornar a la pagina anteriora per verificar leis informacions fornidas.',
17
+    'avis_connexion_echec_1' => 'La connexion au servidor SQL s’es encalada.', # MODIF
18
+    'avis_connexion_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas.',
19
+    'avis_connexion_echec_3' => '<b>N.B.</b> Sus fòrça servidors, devètz <b>demandar</b> qu’activen vòstre accès a la basa SQL avans de la poder utilizar. Se vos podètz pas connectar, verificatz qu’agatz ben realizat aqueu procediment.', # MODIF
20
+    'avis_connexion_ldap_echec_1' => 'La connexion au servidor LDAP s’es encalada.',
21
+    'avis_connexion_ldap_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas. ',
22
+    'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.',
23
+    'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz ben oscar aquela casa de confirmacion.',
24
+    'avis_erreur_connexion_mysql' => 'Error de connexion SQL',
25
+    'avis_espace_interdit' => '<b>Espaci proïbit</b><p>SPIP es ja installat.', # MODIF
26
+    'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir lei noms dei basas de donadas installadas.',
27
+    'avis_lecture_noms_bases_2' => 'Siá ges de basa es disponibla, siá la foncion que permet d’entierar lei basas es estada desactivada per de rasons de seguretat (aquò’s lo cas en cò de mai d’un aubergador).',
28
+    'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:',
29
+    'avis_non_acces_page' => 'Podètz pas accedir a aquela pagina.',
30
+    'avis_operation_echec' => 'L’operacion s’es encalada.',
31
+    'avis_suppression_base' => 'ATENCION, suprimir lei donadas es irreversible',
32 32
 
33
-	// B
34
-	'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>',
35
-	'bouton_ajouter' => 'Apondre',
36
-	'bouton_demande_publication' => 'Demandar la publicacion d’aquest article',
37
-	'bouton_desactive_tout' => 'Desactivar tot',
38
-	'bouton_effacer_tout' => 'O escafar tot',
39
-	'bouton_envoyer_message' => 'Messatge definitiu: mandar',
40
-	'bouton_modifier' => 'Modificar',
41
-	'bouton_radio_afficher' => 'Afichar',
42
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats',
43
-	'bouton_radio_envoi_annonces_adresse' => 'Mandar leis anoncis a l’adreiça:',
44
-	'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei novetats',
45
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera dei redactors',
46
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus',
47
-	'bouton_redirection' => 'TORNAR DIRIGIR',
48
-	'bouton_relancer_installation' => 'Tornar lançar l’installacion',
49
-	'bouton_suivant' => 'Seguent',
50
-	'bouton_tenter_recuperation' => 'Assajar de reparar',
51
-	'bouton_test_proxy' => 'Assajar lo proxy',
52
-	'bouton_vider_cache' => 'Vujar l’escondedor',
33
+    // B
34
+    'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>',
35
+    'bouton_ajouter' => 'Apondre',
36
+    'bouton_demande_publication' => 'Demandar la publicacion d’aquest article',
37
+    'bouton_desactive_tout' => 'Desactivar tot',
38
+    'bouton_effacer_tout' => 'O escafar tot',
39
+    'bouton_envoyer_message' => 'Messatge definitiu: mandar',
40
+    'bouton_modifier' => 'Modificar',
41
+    'bouton_radio_afficher' => 'Afichar',
42
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats',
43
+    'bouton_radio_envoi_annonces_adresse' => 'Mandar leis anoncis a l’adreiça:',
44
+    'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei novetats',
45
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera dei redactors',
46
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus',
47
+    'bouton_redirection' => 'TORNAR DIRIGIR',
48
+    'bouton_relancer_installation' => 'Tornar lançar l’installacion',
49
+    'bouton_suivant' => 'Seguent',
50
+    'bouton_tenter_recuperation' => 'Assajar de reparar',
51
+    'bouton_test_proxy' => 'Assajar lo proxy',
52
+    'bouton_vider_cache' => 'Vujar l’escondedor',
53 53
 
54
-	// C
55
-	'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestei paramètres.',
56
-	'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible <b>iCal</b>, lo podètz sincronizar amb leis informacions d’aquest sit.',
54
+    // C
55
+    'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestei paramètres.',
56
+    'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible <b>iCal</b>, lo podètz sincronizar amb leis informacions d’aquest sit.',
57 57
 
58
-	// D
59
-	'date_mot_heures' => 'oras',
58
+    // D
59
+    'date_mot_heures' => 'oras',
60 60
 
61
-	// E
62
-	'email' => 'e-mail',
63
-	'email_2' => 'e-mail:',
64
-	'entree_adresse_annuaire' => 'Adreiça de l’annuari',
65
-	'entree_adresse_email' => 'Vòstra adreiça e-mail',
66
-	'entree_base_donnee_1' => 'Adreiça de la basa de donadas',
67
-	'entree_base_donnee_2' => '(Sovent, aquela adreiça correspònd a la dau vòstre sit, de còps correspònd a la mençon "localhost", de còps, se laissa vueja completament.)',
68
-	'entree_biographie' => 'Biografia corta, en quauquei mots.',
69
-	'entree_chemin_acces' => '<b>Intrar</b> lo camin d’accès:',
70
-	'entree_cle_pgp' => 'Vòstra clau PGP',
71
-	'entree_contenu_rubrique' => '(Contengut de la rubrica en quauquei mots.)',
72
-	'entree_identifiants_connexion' => 'Vòstreis identificants de connexion...',
73
-	'entree_informations_connexion_ldap' => 'Vougatz intrar dins aqueu formulari leis informacions de connexion au vòstre annuari LDAP.
61
+    // E
62
+    'email' => 'e-mail',
63
+    'email_2' => 'e-mail:',
64
+    'entree_adresse_annuaire' => 'Adreiça de l’annuari',
65
+    'entree_adresse_email' => 'Vòstra adreiça e-mail',
66
+    'entree_base_donnee_1' => 'Adreiça de la basa de donadas',
67
+    'entree_base_donnee_2' => '(Sovent, aquela adreiça correspònd a la dau vòstre sit, de còps correspònd a la mençon "localhost", de còps, se laissa vueja completament.)',
68
+    'entree_biographie' => 'Biografia corta, en quauquei mots.',
69
+    'entree_chemin_acces' => '<b>Intrar</b> lo camin d’accès:',
70
+    'entree_cle_pgp' => 'Vòstra clau PGP',
71
+    'entree_contenu_rubrique' => '(Contengut de la rubrica en quauquei mots.)',
72
+    'entree_identifiants_connexion' => 'Vòstreis identificants de connexion...',
73
+    'entree_informations_connexion_ldap' => 'Vougatz intrar dins aqueu formulari leis informacions de connexion au vòstre annuari LDAP.
74 74
 L’administrator dau sistèma o de la ret vos deu poder fornir
75 75
  aqueleis informacions.',
76
-	'entree_infos_perso' => 'Quau siatz?',
77
-	'entree_interieur_rubrique' => 'Dintre la rubrica:',
78
-	'entree_liens_sites' => '<b>Liame ipertèxt</b> (referéncia, sit de vesitar...)',
79
-	'entree_login' => 'Lo vòstre login',
80
-	'entree_login_connexion_1' => 'Lo login de connexion',
81
-	'entree_login_connexion_2' => '(Correspònd de còps au vòstre login d’accès a l’FTP; de còps se laissa vuege)',
82
-	'entree_mot_passe' => 'Vòstre senhau',
83
-	'entree_mot_passe_1' => 'Senhau per la connexion',
84
-	'entree_mot_passe_2' => '(Correspònd de còps a vòstre senhau per l’FTP; de còps se laissa vuege)',
85
-	'entree_nom_fichier' => 'Vougatz intrar lo nom dau fichier @texte_compresse@:',
86
-	'entree_nom_pseudo' => 'Vòstre nom o vòstre pseudonim',
87
-	'entree_nom_pseudo_1' => '(Vòstre nom o vòstre pseudonim)',
88
-	'entree_nom_site' => 'Lo nom dau vòstre sit',
89
-	'entree_nouveau_passe' => 'Senhau novèu',
90
-	'entree_passe_ldap' => 'Senhau',
91
-	'entree_port_annuaire' => 'Lo numèro de pòrt de l’annuari',
92
-	'entree_signature' => 'Signatura',
93
-	'entree_titre_obligatoire' => '<b>Títol</b> [Obligatòri]<br />',
94
-	'entree_url' => 'L’adreiça (URL) dau vòstre sit',
76
+    'entree_infos_perso' => 'Quau siatz?',
77
+    'entree_interieur_rubrique' => 'Dintre la rubrica:',
78
+    'entree_liens_sites' => '<b>Liame ipertèxt</b> (referéncia, sit de vesitar...)',
79
+    'entree_login' => 'Lo vòstre login',
80
+    'entree_login_connexion_1' => 'Lo login de connexion',
81
+    'entree_login_connexion_2' => '(Correspònd de còps au vòstre login d’accès a l’FTP; de còps se laissa vuege)',
82
+    'entree_mot_passe' => 'Vòstre senhau',
83
+    'entree_mot_passe_1' => 'Senhau per la connexion',
84
+    'entree_mot_passe_2' => '(Correspònd de còps a vòstre senhau per l’FTP; de còps se laissa vuege)',
85
+    'entree_nom_fichier' => 'Vougatz intrar lo nom dau fichier @texte_compresse@:',
86
+    'entree_nom_pseudo' => 'Vòstre nom o vòstre pseudonim',
87
+    'entree_nom_pseudo_1' => '(Vòstre nom o vòstre pseudonim)',
88
+    'entree_nom_site' => 'Lo nom dau vòstre sit',
89
+    'entree_nouveau_passe' => 'Senhau novèu',
90
+    'entree_passe_ldap' => 'Senhau',
91
+    'entree_port_annuaire' => 'Lo numèro de pòrt de l’annuari',
92
+    'entree_signature' => 'Signatura',
93
+    'entree_titre_obligatoire' => '<b>Títol</b> [Obligatòri]<br />',
94
+    'entree_url' => 'L’adreiça (URL) dau vòstre sit',
95 95
 
96
-	// I
97
-	'ical_info1' => 'Aquela pagina mòstra de metòdes diferents per restar en contacte amb la vida d’aqueu sit.',
98
-	'ical_info2' => 'Per tenir mai d’informacions subre aquelei tecnicas, esitetz pas de consultar <a href="@spipnet@">la documentacion d’SPIP</a>.', # MODIF
99
-	'ical_info_calendrier' => 'I a dos calendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia totei leis articles publicats. Lo segond conten leis anoncis editoriaus en mai de vòstrei darriers messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre senhau. ',
100
-	'ical_methode_http' => 'Telecargament',
101
-	'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF
102
-	'ical_texte_prive' => 'Aqueu calendier, d’us estrictament personau, vos informa de l’activitat editoriala privada d’aqueu sit (òbras e rendètz-vos personaus, articles e brèvas prepausats...).',
103
-	'ical_texte_public' => 'Aqueu calendier vos permet de seguir l’activitat publica d’aqueu sit (articles e brèvas publicats).',
104
-	'ical_texte_rss' => 'Podètz sindicar lei novetats d’aquest sit dins quin legidor de fichiers que siá en format XML/RSS (Rich Site Summary). Es tanben lo format que permet a SPIP de legir lei novetats publicadas dins d’autrei sits en utilizant un format d’escambi compatible (sits sindicats). ',
105
-	'ical_titre_js' => 'Javascript',
106
-	'ical_titre_mailing' => 'Lista de corrier',
107
-	'ical_titre_rss' => 'Fichiers «backend»',
108
-	'icone_activer_cookie' => 'Activar lo cookie de correspondéncia',
109
-	'icone_admin_plugin' => 'Gestion deis ajustons',
110
-	'icone_afficher_auteurs' => 'Afichar leis autors',
111
-	'icone_afficher_visiteurs' => 'Afichar lei vesitaires',
112
-	'icone_arret_discussion' => 'Quitar aquela discussion',
113
-	'icone_calendrier' => 'Calendier',
114
-	'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article',
115
-	'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo liar a aquel article',
116
-	'icone_creer_rubrique_2' => 'Crear una rubrica nòva',
117
-	'icone_modifier_article' => 'Modificar aquel article',
118
-	'icone_modifier_rubrique' => 'Modificar aquela rubrica',
119
-	'icone_retour' => 'Tornar',
120
-	'icone_retour_article' => 'Tornar a l’article',
121
-	'icone_supprimer_cookie' => 'Suprimir lo cookie de correspondéncia',
122
-	'icone_supprimer_rubrique' => 'Suprimir aquela rubrica',
123
-	'icone_supprimer_signature' => 'Suprimir aquela signatura',
124
-	'icone_valider_signature' => 'Validar aquela signatura',
125
-	'image_administrer_rubrique' => 'Podètz administrar aquela rubrica',
126
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
127
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
128
-	'info_1_article' => '1 article',
129
-	'info_activer_cookie' => 'Podètz activar un <b>cookie de correspondéncia</b>; aquò vos permetrà de passar aisat dau sit public au sit privat.',
130
-	'info_administrateur' => 'Administrator',
131
-	'info_administrateur_1' => 'Administrator',
132
-	'info_administrateur_2' => 'dau sit(<i>d’utilizar amb precaucion</i>)',
133
-	'info_administrateur_site_01' => 'Se siatz administrator/tritz dau sit, vougatz',
134
-	'info_administrateur_site_02' => 'clicar aqueu liame',
135
-	'info_administrateurs' => 'Administrators',
136
-	'info_administrer_rubrique' => 'Podètz administrar aquela rubrica',
137
-	'info_adresse' => 'a l’adreiça:',
138
-	'info_adresse_url' => 'Adreiça (URL) dau sit public',
139
-	'info_aide_en_ligne' => 'Ajuda en linha SPIP',
140
-	'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonchs a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) deis imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.',
141
-	'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:',
142
-	'info_annonce_nouveautes' => 'Anonci dei novetats',
143
-	'info_article' => 'article',
144
-	'info_article_2' => 'articles',
145
-	'info_article_a_paraitre' => 'Leis articles pòstdatats per paréisser',
146
-	'info_articles_02' => 'articles',
147
-	'info_articles_2' => 'Articles',
148
-	'info_articles_auteur' => 'Los articles d’aquel autor',
149
-	'info_articles_trouves' => 'Articles trobats',
150
-	'info_attente_validation' => 'Vòstreis articles en espèra de validacion',
151
-	'info_aujourdhui' => 'uei:',
152
-	'info_auteurs' => 'Leis autors',
153
-	'info_auteurs_par_tri' => 'autors@partri@',
154
-	'info_auteurs_trouves' => 'Autors trobats',
155
-	'info_authentification_externe' => 'Autentificacion extèrna',
156
-	'info_avertissement' => 'Avís',
157
-	'info_base_installee' => 'L’estructura de vòstra basa de donadas es installada.',
158
-	'info_chapeau' => 'Capèu',
159
-	'info_chapeau_2' => 'Capèu:',
160
-	'info_chemin_acces_1' => 'Opcions: <b>camin d’accès dins l’annuari</b>',
161
-	'info_chemin_acces_2' => 'Ara devètz configurar lo camin d’accès ais informacions dins l’annuari.',
162
-	'info_chemin_acces_annuaire' => 'Opcions: <b>camin d’accès dins l’annuari',
163
-	'info_choix_base' => 'Tresena estapa:',
164
-	'info_classement_1' => '<sup>ier</sup> de @liste@',
165
-	'info_classement_2' => '<sup>nd</sup> de @liste@',
166
-	'info_code_acces' => 'Oblidetz pas vòstrei còdes d’accès pròpris!',
167
-	'info_config_suivi' => 'S’aquela adreiça correspònd a una lista de corrier, podètz indicar çai sota l’adreiça ont lei participants au sit se pòdon inscriure. Aquela adreiça pòt èstre una URL (per exemple la pagina d’inscripcion a la lista per lo web), o una adreiça e-mail tenent un subjècte especific (per exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):',
168
-	'info_config_suivi_explication' => 'Vos podètz abonar a la lista de difusion d’aquest sit. Alora recebretz per e-mail leis anoncis d’articles e de brèvas que se prepausa a la publicacion.',
169
-	'info_confirmer_passe' => 'Confirmar aqueu senhau novèu:',
170
-	'info_connexion_base' => 'Segonda estapa: <b>Assai de connexion a la basa</b>',
171
-	'info_connexion_ldap_ok' => 'La connexion LDAP a capitat.</b><p> Podètz passar a l’estapa seguenta.</p>', # MODIF
172
-	'info_connexion_mysql' => 'Primiera estapa: <b>Vòstra connexion SQL</b>',
173
-	'info_connexion_ok' => 'La connexion a capitat.',
174
-	'info_contact' => 'Contacte',
175
-	'info_contenu_articles' => 'Contengut deis articles',
176
-	'info_creation_paragraphe' => '(Per crear de paragrafs, basta que laissetz de linhas vuejas.)', # MODIF
177
-	'info_creation_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear aumens una rubrica.<br />',
178
-	'info_creation_tables' => 'Quatrena estapa: <b>Creacion dei taulas de la basa</b>',
179
-	'info_creer_base' => '<b>Crear</b> una basa de donadas novèla:',
180
-	'info_dans_rubrique' => 'Dins la rubrica:',
181
-	'info_date_publication_anterieure' => 'Data anteriora de publicacion:',
182
-	'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEU SIT:',
183
-	'info_derniere_etape' => 'Darriera estapa: <b>Es acabat!',
184
-	'info_descriptif' => 'Descriptiu:',
185
-	'info_discussion_cours' => 'Discussions en cors',
186
-	'info_ecrire_article' => 'Avans de poder escriure d’articles, vos cau crear aumens una rubrica.',
187
-	'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)',
188
-	'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar leis e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):',
189
-	'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF
190
-	'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics',
191
-	'info_envoyer_maintenant' => 'Mandar ara',
192
-	'info_etape_suivante' => 'Passar a l’estapa seguenta',
193
-	'info_etape_suivante_1' => 'Podètz passar a l’estapa seguenta.',
194
-	'info_etape_suivante_2' => 'Podètz passar a l’estapa seguenta.',
195
-	'info_exportation_base' => 'exportacion de la basa vèrs @archive@',
196
-	'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier dei redactors, l’anonci dei demandas de publicacion e dei validacions d’articles.', # MODIF
197
-	'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »',
198
-	'info_forums_abo_invites' => 'Vòstre sit web porgís de forums per leis abonats; dins lo sit public lei vesitaires son convidats a se registrar.',
199
-	'info_gauche_admin_tech' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
200
-	'info_gauche_admin_vider' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
201
-	'info_gauche_auteurs' => 'Trobaretz aicí totei leis autors dau sit. La color deis icònas n’indica l’estatut (administrator = verd; redactor = jaune).',
202
-	'info_gauche_auteurs_exterieurs' => 'Leis autors exteriors, sens accès au sit, son indicats per una icòna blava; leis autors escafats per un bordilhier.', # MODIF
203
-	'info_gauche_messagerie' => 'La messatjariá vos permet d’escambiar de messatges entre redactors, de servar de mementos (per vòstre usatge personau) o d’afichar d’anoncis sus la pagina d’acuelh de l’espaci privat (se siatz administrator/tritz).',
204
-	'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dei <i>referidors</i>, valent a dire dei sits que contenon de liames menant vèrs vòstre sit pròpri, mai unicament per ièr e uei: aquela lista s’actualiza cada 24 oras.',
205
-	'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lei vesitaires registrats
96
+    // I
97
+    'ical_info1' => 'Aquela pagina mòstra de metòdes diferents per restar en contacte amb la vida d’aqueu sit.',
98
+    'ical_info2' => 'Per tenir mai d’informacions subre aquelei tecnicas, esitetz pas de consultar <a href="@spipnet@">la documentacion d’SPIP</a>.', # MODIF
99
+    'ical_info_calendrier' => 'I a dos calendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia totei leis articles publicats. Lo segond conten leis anoncis editoriaus en mai de vòstrei darriers messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre senhau. ',
100
+    'ical_methode_http' => 'Telecargament',
101
+    'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF
102
+    'ical_texte_prive' => 'Aqueu calendier, d’us estrictament personau, vos informa de l’activitat editoriala privada d’aqueu sit (òbras e rendètz-vos personaus, articles e brèvas prepausats...).',
103
+    'ical_texte_public' => 'Aqueu calendier vos permet de seguir l’activitat publica d’aqueu sit (articles e brèvas publicats).',
104
+    'ical_texte_rss' => 'Podètz sindicar lei novetats d’aquest sit dins quin legidor de fichiers que siá en format XML/RSS (Rich Site Summary). Es tanben lo format que permet a SPIP de legir lei novetats publicadas dins d’autrei sits en utilizant un format d’escambi compatible (sits sindicats). ',
105
+    'ical_titre_js' => 'Javascript',
106
+    'ical_titre_mailing' => 'Lista de corrier',
107
+    'ical_titre_rss' => 'Fichiers «backend»',
108
+    'icone_activer_cookie' => 'Activar lo cookie de correspondéncia',
109
+    'icone_admin_plugin' => 'Gestion deis ajustons',
110
+    'icone_afficher_auteurs' => 'Afichar leis autors',
111
+    'icone_afficher_visiteurs' => 'Afichar lei vesitaires',
112
+    'icone_arret_discussion' => 'Quitar aquela discussion',
113
+    'icone_calendrier' => 'Calendier',
114
+    'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article',
115
+    'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo liar a aquel article',
116
+    'icone_creer_rubrique_2' => 'Crear una rubrica nòva',
117
+    'icone_modifier_article' => 'Modificar aquel article',
118
+    'icone_modifier_rubrique' => 'Modificar aquela rubrica',
119
+    'icone_retour' => 'Tornar',
120
+    'icone_retour_article' => 'Tornar a l’article',
121
+    'icone_supprimer_cookie' => 'Suprimir lo cookie de correspondéncia',
122
+    'icone_supprimer_rubrique' => 'Suprimir aquela rubrica',
123
+    'icone_supprimer_signature' => 'Suprimir aquela signatura',
124
+    'icone_valider_signature' => 'Validar aquela signatura',
125
+    'image_administrer_rubrique' => 'Podètz administrar aquela rubrica',
126
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
127
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
128
+    'info_1_article' => '1 article',
129
+    'info_activer_cookie' => 'Podètz activar un <b>cookie de correspondéncia</b>; aquò vos permetrà de passar aisat dau sit public au sit privat.',
130
+    'info_administrateur' => 'Administrator',
131
+    'info_administrateur_1' => 'Administrator',
132
+    'info_administrateur_2' => 'dau sit(<i>d’utilizar amb precaucion</i>)',
133
+    'info_administrateur_site_01' => 'Se siatz administrator/tritz dau sit, vougatz',
134
+    'info_administrateur_site_02' => 'clicar aqueu liame',
135
+    'info_administrateurs' => 'Administrators',
136
+    'info_administrer_rubrique' => 'Podètz administrar aquela rubrica',
137
+    'info_adresse' => 'a l’adreiça:',
138
+    'info_adresse_url' => 'Adreiça (URL) dau sit public',
139
+    'info_aide_en_ligne' => 'Ajuda en linha SPIP',
140
+    'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonchs a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) deis imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.',
141
+    'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:',
142
+    'info_annonce_nouveautes' => 'Anonci dei novetats',
143
+    'info_article' => 'article',
144
+    'info_article_2' => 'articles',
145
+    'info_article_a_paraitre' => 'Leis articles pòstdatats per paréisser',
146
+    'info_articles_02' => 'articles',
147
+    'info_articles_2' => 'Articles',
148
+    'info_articles_auteur' => 'Los articles d’aquel autor',
149
+    'info_articles_trouves' => 'Articles trobats',
150
+    'info_attente_validation' => 'Vòstreis articles en espèra de validacion',
151
+    'info_aujourdhui' => 'uei:',
152
+    'info_auteurs' => 'Leis autors',
153
+    'info_auteurs_par_tri' => 'autors@partri@',
154
+    'info_auteurs_trouves' => 'Autors trobats',
155
+    'info_authentification_externe' => 'Autentificacion extèrna',
156
+    'info_avertissement' => 'Avís',
157
+    'info_base_installee' => 'L’estructura de vòstra basa de donadas es installada.',
158
+    'info_chapeau' => 'Capèu',
159
+    'info_chapeau_2' => 'Capèu:',
160
+    'info_chemin_acces_1' => 'Opcions: <b>camin d’accès dins l’annuari</b>',
161
+    'info_chemin_acces_2' => 'Ara devètz configurar lo camin d’accès ais informacions dins l’annuari.',
162
+    'info_chemin_acces_annuaire' => 'Opcions: <b>camin d’accès dins l’annuari',
163
+    'info_choix_base' => 'Tresena estapa:',
164
+    'info_classement_1' => '<sup>ier</sup> de @liste@',
165
+    'info_classement_2' => '<sup>nd</sup> de @liste@',
166
+    'info_code_acces' => 'Oblidetz pas vòstrei còdes d’accès pròpris!',
167
+    'info_config_suivi' => 'S’aquela adreiça correspònd a una lista de corrier, podètz indicar çai sota l’adreiça ont lei participants au sit se pòdon inscriure. Aquela adreiça pòt èstre una URL (per exemple la pagina d’inscripcion a la lista per lo web), o una adreiça e-mail tenent un subjècte especific (per exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):',
168
+    'info_config_suivi_explication' => 'Vos podètz abonar a la lista de difusion d’aquest sit. Alora recebretz per e-mail leis anoncis d’articles e de brèvas que se prepausa a la publicacion.',
169
+    'info_confirmer_passe' => 'Confirmar aqueu senhau novèu:',
170
+    'info_connexion_base' => 'Segonda estapa: <b>Assai de connexion a la basa</b>',
171
+    'info_connexion_ldap_ok' => 'La connexion LDAP a capitat.</b><p> Podètz passar a l’estapa seguenta.</p>', # MODIF
172
+    'info_connexion_mysql' => 'Primiera estapa: <b>Vòstra connexion SQL</b>',
173
+    'info_connexion_ok' => 'La connexion a capitat.',
174
+    'info_contact' => 'Contacte',
175
+    'info_contenu_articles' => 'Contengut deis articles',
176
+    'info_creation_paragraphe' => '(Per crear de paragrafs, basta que laissetz de linhas vuejas.)', # MODIF
177
+    'info_creation_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear aumens una rubrica.<br />',
178
+    'info_creation_tables' => 'Quatrena estapa: <b>Creacion dei taulas de la basa</b>',
179
+    'info_creer_base' => '<b>Crear</b> una basa de donadas novèla:',
180
+    'info_dans_rubrique' => 'Dins la rubrica:',
181
+    'info_date_publication_anterieure' => 'Data anteriora de publicacion:',
182
+    'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEU SIT:',
183
+    'info_derniere_etape' => 'Darriera estapa: <b>Es acabat!',
184
+    'info_descriptif' => 'Descriptiu:',
185
+    'info_discussion_cours' => 'Discussions en cors',
186
+    'info_ecrire_article' => 'Avans de poder escriure d’articles, vos cau crear aumens una rubrica.',
187
+    'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)',
188
+    'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar leis e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):',
189
+    'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF
190
+    'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics',
191
+    'info_envoyer_maintenant' => 'Mandar ara',
192
+    'info_etape_suivante' => 'Passar a l’estapa seguenta',
193
+    'info_etape_suivante_1' => 'Podètz passar a l’estapa seguenta.',
194
+    'info_etape_suivante_2' => 'Podètz passar a l’estapa seguenta.',
195
+    'info_exportation_base' => 'exportacion de la basa vèrs @archive@',
196
+    'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier dei redactors, l’anonci dei demandas de publicacion e dei validacions d’articles.', # MODIF
197
+    'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »',
198
+    'info_forums_abo_invites' => 'Vòstre sit web porgís de forums per leis abonats; dins lo sit public lei vesitaires son convidats a se registrar.',
199
+    'info_gauche_admin_tech' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
200
+    'info_gauche_admin_vider' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
201
+    'info_gauche_auteurs' => 'Trobaretz aicí totei leis autors dau sit. La color deis icònas n’indica l’estatut (administrator = verd; redactor = jaune).',
202
+    'info_gauche_auteurs_exterieurs' => 'Leis autors exteriors, sens accès au sit, son indicats per una icòna blava; leis autors escafats per un bordilhier.', # MODIF
203
+    'info_gauche_messagerie' => 'La messatjariá vos permet d’escambiar de messatges entre redactors, de servar de mementos (per vòstre usatge personau) o d’afichar d’anoncis sus la pagina d’acuelh de l’espaci privat (se siatz administrator/tritz).',
204
+    'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dei <i>referidors</i>, valent a dire dei sits que contenon de liames menant vèrs vòstre sit pròpri, mai unicament per ièr e uei: aquela lista s’actualiza cada 24 oras.',
205
+    'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lei vesitaires registrats
206 206
  dins l’espaci public dau sit (forums amb abonament).',
207
-	'info_generation_miniatures_images' => 'Congreacion de miniaturas deis imatges',
208
-	'info_hebergeur_desactiver_envoi_email' => 'D’uneis aubergadors desactivan lo mandadís automatic
207
+    'info_generation_miniatures_images' => 'Congreacion de miniaturas deis imatges',
208
+    'info_hebergeur_desactiver_envoi_email' => 'D’uneis aubergadors desactivan lo mandadís automatic
209 209
  d’e-mails dempuei sei servidors. En aqueu cas, lei foncionalitats seguentas
210 210
  d’SPIP foncionaràn pas.',
211
-	'info_hier' => 'ièr:',
212
-	'info_identification_publique' => 'Vòstra identitat publica...',
213
-	'info_image_process' => 'Vougatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicant sus l’imatge correspondent.',
214
-	'info_images_auto' => 'Imatges calculats automaticament',
215
-	'info_informations_personnelles' => 'Cinquena estapa: <b>Informacions personalas</b>',
216
-	'info_inscription_automatique' => 'Inscripcion automatica de redactors novèus',
217
-	'info_jeu_caractere' => 'Jòc de caractèrs dau sit',
218
-	'info_jours' => 'jorns',
219
-	'info_laisser_champs_vides' => 'laissar aquelei camps vueges)',
220
-	'info_langues' => 'Lengas dau sit',
221
-	'info_ldap_ok' => 'L’autentificacion LDAP es installada.',
222
-	'info_lien_hypertexte' => 'Liame ipertèxt:',
223
-	'info_liste_redacteurs_connectes' => 'Tiera dei redactors connectats',
224
-	'info_login_existant' => 'Aqueu login ja existís.',
225
-	'info_login_trop_court' => 'Login tròp cort.',
226
-	'info_maximum' => 'maximum:',
227
-	'info_meme_rubrique' => 'Dins la meteissa rubrica',
228
-	'info_message_en_redaction' => 'Vòstrei messatges en cors de redaccion',
229
-	'info_message_technique' => 'Messatge tecnic:',
230
-	'info_messagerie_interne' => 'Messatjariá intèrna',
231
-	'info_mise_a_niveau_base' => 'Mesa a nivèu de vòstra basa SQL',
232
-	'info_mise_a_niveau_base_2' => '{{Atencion!}} Avètz installada una version
211
+    'info_hier' => 'ièr:',
212
+    'info_identification_publique' => 'Vòstra identitat publica...',
213
+    'info_image_process' => 'Vougatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicant sus l’imatge correspondent.',
214
+    'info_images_auto' => 'Imatges calculats automaticament',
215
+    'info_informations_personnelles' => 'Cinquena estapa: <b>Informacions personalas</b>',
216
+    'info_inscription_automatique' => 'Inscripcion automatica de redactors novèus',
217
+    'info_jeu_caractere' => 'Jòc de caractèrs dau sit',
218
+    'info_jours' => 'jorns',
219
+    'info_laisser_champs_vides' => 'laissar aquelei camps vueges)',
220
+    'info_langues' => 'Lengas dau sit',
221
+    'info_ldap_ok' => 'L’autentificacion LDAP es installada.',
222
+    'info_lien_hypertexte' => 'Liame ipertèxt:',
223
+    'info_liste_redacteurs_connectes' => 'Tiera dei redactors connectats',
224
+    'info_login_existant' => 'Aqueu login ja existís.',
225
+    'info_login_trop_court' => 'Login tròp cort.',
226
+    'info_maximum' => 'maximum:',
227
+    'info_meme_rubrique' => 'Dins la meteissa rubrica',
228
+    'info_message_en_redaction' => 'Vòstrei messatges en cors de redaccion',
229
+    'info_message_technique' => 'Messatge tecnic:',
230
+    'info_messagerie_interne' => 'Messatjariá intèrna',
231
+    'info_mise_a_niveau_base' => 'Mesa a nivèu de vòstra basa SQL',
232
+    'info_mise_a_niveau_base_2' => '{{Atencion!}} Avètz installada una version
233 233
   dei fichiers SPIP {anteriora} a la que i aviá
234 234
   avans sus aquest sit: riscatz de pèrdre vòstra basa de donadas
235 235
    e vòstre sit foncionarà pus.<br />{{Tornatz installar lei
236 236
   fichiers d’SPIP.}}',
237
-	'info_modifier_rubrique' => 'Modificar la rubrica:',
238
-	'info_modifier_titre' => 'Modificar: @titre@',
239
-	'info_mon_site_spip' => 'Mon sit SPIP',
240
-	'info_moyenne' => 'mejana:',
241
-	'info_multi_cet_article' => 'Lenga d’aquest article:',
242
-	'info_multi_langues_choisies' => 'Vougatz seleccionar çai sota lei lengas que son a posita dei redactors de vòstre sit.
237
+    'info_modifier_rubrique' => 'Modificar la rubrica:',
238
+    'info_modifier_titre' => 'Modificar: @titre@',
239
+    'info_mon_site_spip' => 'Mon sit SPIP',
240
+    'info_moyenne' => 'mejana:',
241
+    'info_multi_cet_article' => 'Lenga d’aquest article:',
242
+    'info_multi_langues_choisies' => 'Vougatz seleccionar çai sota lei lengas que son a posita dei redactors de vòstre sit.
243 243
   Lei lengas ja emplegadas dins vòstre sit (afichadas d’en primier) se pòdon pas desactivar.',
244
-	'info_multi_secteurs' => '... ren que per lei rubricas a la raiç dau sit?',
245
-	'info_nom' => 'Nom',
246
-	'info_nom_destinataire' => 'Nom dau destinatari',
247
-	'info_nom_site' => 'Nom dau vòstre sit',
248
-	'info_nombre_articles' => '@nb_articles@ articles,',
249
-	'info_nombre_rubriques' => '@nb_rubriques@ rubricas,',
250
-	'info_nombre_sites' => '@nb_sites@ sits,',
251
-	'info_non_deplacer' => 'De pas desplaçar...',
252
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP pòt mandar, regularament, l’anonci dei darrierei novetats dau sit
244
+    'info_multi_secteurs' => '... ren que per lei rubricas a la raiç dau sit?',
245
+    'info_nom' => 'Nom',
246
+    'info_nom_destinataire' => 'Nom dau destinatari',
247
+    'info_nom_site' => 'Nom dau vòstre sit',
248
+    'info_nombre_articles' => '@nb_articles@ articles,',
249
+    'info_nombre_rubriques' => '@nb_rubriques@ rubricas,',
250
+    'info_nombre_sites' => '@nb_sites@ sits,',
251
+    'info_non_deplacer' => 'De pas desplaçar...',
252
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP pòt mandar, regularament, l’anonci dei darrierei novetats dau sit
253 253
  (articles e brèvas publicats recentament).',
254
-	'info_non_envoi_liste_nouveautes' => 'Pas mandar la tiera dei novetats',
255
-	'info_non_modifiable' => 'se pòt pas modificar',
256
-	'info_non_suppression_mot_cle' => 'vòli pas suprimir aqueu mot clau.',
257
-	'info_notes' => 'Nòtas',
258
-	'info_nouvel_article' => 'Article nòu',
259
-	'info_nouvelle_traduction' => 'Revirada nòva:',
260
-	'info_numero_article' => 'ARTICLE NUMÈRO:',
261
-	'info_obligatoire_02' => '[Obligatòri]', # MODIF
262
-	'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei vesitaires dau sit public',
263
-	'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires',
264
-	'info_options_avancees' => 'OPCIONS AVANÇADAS',
265
-	'info_ou' => 'o... ',
266
-	'info_page_interdite' => 'Pagina proïbida',
267
-	'info_par_nombre_article' => '(per nombre d’articles)',
268
-	'info_passe_trop_court' => 'Mot de santa Clara tròp cort.',
269
-	'info_passes_identiques' => 'Lei dos mots de santa Clara son pas identics.',
270
-	'info_plus_cinq_car' => 'mai de 5 caractèrs',
271
-	'info_plus_cinq_car_2' => '(mai de 5 caractèrs)',
272
-	'info_plus_trois_car' => '(mai de 3 caractèrs)',
273
-	'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@',
274
-	'info_post_scriptum' => 'Post-scriptum',
275
-	'info_post_scriptum_2' => 'Post-scriptum:',
276
-	'info_pour' => 'per',
277
-	'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totei leis articles e brèvas (que tenon aumens l’estatut "prepausat"). La cau dobrir, aquela possibilitat, ren qu’ais administrators, a totei lei redactors, o en degun?', # MODIF
278
-	'info_procedez_par_etape' => 'procedissètz estapa per estapa',
279
-	'info_procedure_maj_version' => 'Cau lançar la procedura d’actualizacion per adaptar
254
+    'info_non_envoi_liste_nouveautes' => 'Pas mandar la tiera dei novetats',
255
+    'info_non_modifiable' => 'se pòt pas modificar',
256
+    'info_non_suppression_mot_cle' => 'vòli pas suprimir aqueu mot clau.',
257
+    'info_notes' => 'Nòtas',
258
+    'info_nouvel_article' => 'Article nòu',
259
+    'info_nouvelle_traduction' => 'Revirada nòva:',
260
+    'info_numero_article' => 'ARTICLE NUMÈRO:',
261
+    'info_obligatoire_02' => '[Obligatòri]', # MODIF
262
+    'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei vesitaires dau sit public',
263
+    'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires',
264
+    'info_options_avancees' => 'OPCIONS AVANÇADAS',
265
+    'info_ou' => 'o... ',
266
+    'info_page_interdite' => 'Pagina proïbida',
267
+    'info_par_nombre_article' => '(per nombre d’articles)',
268
+    'info_passe_trop_court' => 'Mot de santa Clara tròp cort.',
269
+    'info_passes_identiques' => 'Lei dos mots de santa Clara son pas identics.',
270
+    'info_plus_cinq_car' => 'mai de 5 caractèrs',
271
+    'info_plus_cinq_car_2' => '(mai de 5 caractèrs)',
272
+    'info_plus_trois_car' => '(mai de 3 caractèrs)',
273
+    'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@',
274
+    'info_post_scriptum' => 'Post-scriptum',
275
+    'info_post_scriptum_2' => 'Post-scriptum:',
276
+    'info_pour' => 'per',
277
+    'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totei leis articles e brèvas (que tenon aumens l’estatut "prepausat"). La cau dobrir, aquela possibilitat, ren qu’ais administrators, a totei lei redactors, o en degun?', # MODIF
278
+    'info_procedez_par_etape' => 'procedissètz estapa per estapa',
279
+    'info_procedure_maj_version' => 'Cau lançar la procedura d’actualizacion per adaptar
280 280
  la basa de donadas a la version novèla d’SPIP.',
281
-	'info_ps' => 'P.S.',
282
-	'info_publier' => 'publicar',
283
-	'info_publies' => 'Vòstreis articles publicats en linha',
284
-	'info_question_accepter_visiteurs' => 'S’ais esqueletas de vòstre sit web se prevei lo registrament de vesitaires sens accès a l’espaci privat, vougatz activar l’opcion seguenta:',
285
-	'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèus s’inscrigan
281
+    'info_ps' => 'P.S.',
282
+    'info_publier' => 'publicar',
283
+    'info_publies' => 'Vòstreis articles publicats en linha',
284
+    'info_question_accepter_visiteurs' => 'S’ais esqueletas de vòstre sit web se prevei lo registrament de vesitaires sens accès a l’espaci privat, vougatz activar l’opcion seguenta:',
285
+    'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèus s’inscrigan
286 286
  a partir dau sit public? S’o acceptatz, lei vesitaires se poiràn inscriure
287 287
  dieumercé un formulari automatizat e alora accediràn a l’espaci privat per
288 288
  prepausar d’articles.<blockquote><i> Durant la fasa d’inscripcion, leis utilizaires recebon un e-mail automatic
289 289
  que li baila un còde d’accès au sit privat.
290 290
 D’uneis aubergadors autorizan pas lo mandadís d’e-mails dempuei sei servidors: en aqueu cas, l’inscripcion automatica es
291 291
  impossibla.', # MODIF
292
-	'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
293
-	'info_racine_site' => 'Raiç dau sit',
294
-	'info_recharger_page' => 'Vougatz tornar cargar aquela pagina dins un momenton.',
295
-	'info_recherche_auteur_zero' => '<b>Ges de resultat trobat per "@cherche_auteur@".',
296
-	'info_recommencer' => 'Vougatz tornar començar.',
297
-	'info_redacteur_1' => 'Redactor',
298
-	'info_redacteur_2' => 'qu’accedís a l’espaci privat (<i>recomandat</i>)',
299
-	'info_redacteurs' => 'Redactors',
300
-	'info_redaction_en_cours' => 'EN CORS DE REDACCION',
301
-	'info_redirection' => 'Redireccion',
302
-	'info_refuses' => 'Vòstreis articles refusats',
303
-	'info_reglage_ldap' => 'Opcions: <b>Reglatge de l’importacion LDAP</b>',
304
-	'info_renvoi_article' => '<b>Redireccion.</b> Aquel article remanda a la pagina:',
305
-	'info_reserve_admin' => 'Ren que leis administrators pòdon modificar aquela adreiça.',
306
-	'info_restreindre_rubrique' => 'Restrénher la gestion a la rubrica:',
307
-	'info_resultat_recherche' => 'Resultats de la cèrca:',
308
-	'info_rubriques' => 'Rubricas',
309
-	'info_rubriques_02' => 'rubricas',
310
-	'info_rubriques_trouvees' => 'Rubricas trobadas',
311
-	'info_sans_titre' => 'Sensa títol',
312
-	'info_selection_chemin_acces' => '<b>Seleccionatz</b> çai sota lo camin d’accès dins l’annuari:',
313
-	'info_signatures' => 'signaturas',
314
-	'info_site' => 'Sit',
315
-	'info_site_2' => 'sit: ',
316
-	'info_site_min' => 'sit',
317
-	'info_site_reference_2' => 'Sit referenciat',
318
-	'info_site_web' => 'SIT WEB:', # MODIF
319
-	'info_sites' => 'sits',
320
-	'info_sites_lies_mot' => 'Lei sits referenciats ligats a aqueu mot clau',
321
-	'info_sites_proxy' => 'Utilizar un proxy',
322
-	'info_sites_trouves' => 'Sits trobats',
323
-	'info_sous_titre' => 'Sostítol:',
324
-	'info_statut_administrateur' => 'Administrator',
325
-	'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF
326
-	'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar',
327
-	'info_statut_auteur_autre' => 'Autre estatut :',
328
-	'info_statut_redacteur' => 'Redactor',
329
-	'info_statut_utilisateurs_1' => 'Estatut predefinit deis utilizaires importats',
330
-	'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir ai personas presentas dins l’annuari LDAP quora se connèctan per lo primier còp. Poiretz puei modificar aquel estatut per cada autor un cas per un.',
331
-	'info_suivi_activite' => 'Seguit de l’activitat editoriala',
332
-	'info_surtitre' => 'Subretítol:',
333
-	'info_taille_maximale_vignette' => 'Talha maximala dei vinhetas congreadas per lo sistèma:',
334
-	'info_terminer_installation' => 'Ara podètz acabar la procedura d’installacion estandard.',
335
-	'info_texte' => 'Tèxt',
336
-	'info_texte_explicatif' => 'Tèxt explicatiu',
337
-	'info_texte_long' => '(lo tèxt es lòng: apareis doncas en tròç distints que se tornaràn empegar un còp validats.)',
338
-	'info_texte_message' => 'Tèxt dau vòstre messatge:', # MODIF
339
-	'info_texte_message_02' => 'Tèxt dau messatge',
340
-	'info_titre' => 'Títol:',
341
-	'info_total' => 'totau: ',
342
-	'info_tous_articles_en_redaction' => 'Totei leis articles en cors de redaccion',
343
-	'info_tous_articles_presents' => 'Totei leis articles publicats dins aquela rubrica',
344
-	'info_tous_les' => 'totei lei:',
345
-	'info_tout_site' => 'Tot lo sit',
346
-	'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.',
347
-	'info_tout_site3' => 'An revirat l’article dins aquela lenga, mai an portat puei de modificacions a l’article de referéncia. Cau actualizar la revirada.',
348
-	'info_tout_site4' => 'An revirat l’article dins aquela lenga, e la revirada es actualizada.',
349
-	'info_tout_site5' => 'Article originau.',
350
-	'info_tout_site6' => '<b>Atencion:</b> ren que leis articles originaus s’afichan.
292
+    'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
293
+    'info_racine_site' => 'Raiç dau sit',
294
+    'info_recharger_page' => 'Vougatz tornar cargar aquela pagina dins un momenton.',
295
+    'info_recherche_auteur_zero' => '<b>Ges de resultat trobat per "@cherche_auteur@".',
296
+    'info_recommencer' => 'Vougatz tornar començar.',
297
+    'info_redacteur_1' => 'Redactor',
298
+    'info_redacteur_2' => 'qu’accedís a l’espaci privat (<i>recomandat</i>)',
299
+    'info_redacteurs' => 'Redactors',
300
+    'info_redaction_en_cours' => 'EN CORS DE REDACCION',
301
+    'info_redirection' => 'Redireccion',
302
+    'info_refuses' => 'Vòstreis articles refusats',
303
+    'info_reglage_ldap' => 'Opcions: <b>Reglatge de l’importacion LDAP</b>',
304
+    'info_renvoi_article' => '<b>Redireccion.</b> Aquel article remanda a la pagina:',
305
+    'info_reserve_admin' => 'Ren que leis administrators pòdon modificar aquela adreiça.',
306
+    'info_restreindre_rubrique' => 'Restrénher la gestion a la rubrica:',
307
+    'info_resultat_recherche' => 'Resultats de la cèrca:',
308
+    'info_rubriques' => 'Rubricas',
309
+    'info_rubriques_02' => 'rubricas',
310
+    'info_rubriques_trouvees' => 'Rubricas trobadas',
311
+    'info_sans_titre' => 'Sensa títol',
312
+    'info_selection_chemin_acces' => '<b>Seleccionatz</b> çai sota lo camin d’accès dins l’annuari:',
313
+    'info_signatures' => 'signaturas',
314
+    'info_site' => 'Sit',
315
+    'info_site_2' => 'sit: ',
316
+    'info_site_min' => 'sit',
317
+    'info_site_reference_2' => 'Sit referenciat',
318
+    'info_site_web' => 'SIT WEB:', # MODIF
319
+    'info_sites' => 'sits',
320
+    'info_sites_lies_mot' => 'Lei sits referenciats ligats a aqueu mot clau',
321
+    'info_sites_proxy' => 'Utilizar un proxy',
322
+    'info_sites_trouves' => 'Sits trobats',
323
+    'info_sous_titre' => 'Sostítol:',
324
+    'info_statut_administrateur' => 'Administrator',
325
+    'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF
326
+    'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar',
327
+    'info_statut_auteur_autre' => 'Autre estatut :',
328
+    'info_statut_redacteur' => 'Redactor',
329
+    'info_statut_utilisateurs_1' => 'Estatut predefinit deis utilizaires importats',
330
+    'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir ai personas presentas dins l’annuari LDAP quora se connèctan per lo primier còp. Poiretz puei modificar aquel estatut per cada autor un cas per un.',
331
+    'info_suivi_activite' => 'Seguit de l’activitat editoriala',
332
+    'info_surtitre' => 'Subretítol:',
333
+    'info_taille_maximale_vignette' => 'Talha maximala dei vinhetas congreadas per lo sistèma:',
334
+    'info_terminer_installation' => 'Ara podètz acabar la procedura d’installacion estandard.',
335
+    'info_texte' => 'Tèxt',
336
+    'info_texte_explicatif' => 'Tèxt explicatiu',
337
+    'info_texte_long' => '(lo tèxt es lòng: apareis doncas en tròç distints que se tornaràn empegar un còp validats.)',
338
+    'info_texte_message' => 'Tèxt dau vòstre messatge:', # MODIF
339
+    'info_texte_message_02' => 'Tèxt dau messatge',
340
+    'info_titre' => 'Títol:',
341
+    'info_total' => 'totau: ',
342
+    'info_tous_articles_en_redaction' => 'Totei leis articles en cors de redaccion',
343
+    'info_tous_articles_presents' => 'Totei leis articles publicats dins aquela rubrica',
344
+    'info_tous_les' => 'totei lei:',
345
+    'info_tout_site' => 'Tot lo sit',
346
+    'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.',
347
+    'info_tout_site3' => 'An revirat l’article dins aquela lenga, mai an portat puei de modificacions a l’article de referéncia. Cau actualizar la revirada.',
348
+    'info_tout_site4' => 'An revirat l’article dins aquela lenga, e la revirada es actualizada.',
349
+    'info_tout_site5' => 'Article originau.',
350
+    'info_tout_site6' => '<b>Atencion:</b> ren que leis articles originaus s’afichan.
351 351
 Lei reviradas s’assòcian a l’originau,
352 352
 una color indica lor estat:',
353
-	'info_travail_colaboratif' => 'Trabalh collaboratiu subre leis articles',
354
-	'info_un_article' => 'un article, ',
355
-	'info_un_site' => 'un sit, ',
356
-	'info_une_rubrique' => 'una rubrica, ',
357
-	'info_une_rubrique_02' => '1 rubrica',
358
-	'info_url' => 'URL:',
359
-	'info_urlref' => 'Liame ipertèxt:',
360
-	'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...',
361
-	'info_visites_par_mois' => 'Afichatge per mes:',
362
-	'info_visiteur_1' => 'Vesitaire',
363
-	'info_visiteur_2' => 'dau sit public',
364
-	'info_visiteurs' => 'Vesitaires',
365
-	'info_visiteurs_02' => 'Vesitaires dau sit public',
366
-	'install_echec_annonce' => 'L’installacion capitarà mau, o abotirà a un sit non foncionau...',
367
-	'install_extension_php_obligatoire' => 'SPIP exigís l’extension php:',
368
-	'install_select_langue' => 'Seleccionatz una lenga puei clicatz lo boton «seguent» per amodar la procedura d’installacion.',
369
-	'intem_redacteur' => 'redactor',
370
-	'item_accepter_inscriptions' => 'Acceptar leis inscripcions',
371
-	'item_activer_messages_avertissement' => 'Activar lei messatges d’avertiment',
372
-	'item_administrateur_2' => 'administrator',
373
-	'item_afficher_calendrier' => 'Afichar dins lo calendier',
374
-	'item_choix_administrateurs' => 'leis administrators',
375
-	'item_choix_generation_miniature' => 'Congrear automaticament lei miniaturas deis imatges.',
376
-	'item_choix_non_generation_miniature' => 'Congrear ges de miniaturas deis imatges.',
377
-	'item_choix_redacteurs' => 'lei redactors',
378
-	'item_choix_visiteurs' => 'lei vesitaires dau sit public',
379
-	'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd',
380
-	'item_login' => 'Login',
381
-	'item_mots_cles_association_articles' => 'ais articles',
382
-	'item_mots_cles_association_rubriques' => 'ai rubricas',
383
-	'item_mots_cles_association_sites' => 'ai sits referenciats o sindicats',
384
-	'item_non' => 'Non',
385
-	'item_non_accepter_inscriptions' => 'Pas acceptar leis inscripcions',
386
-	'item_non_activer_messages_avertissement' => 'Ges de messatge d’avertiment',
387
-	'item_non_afficher_calendrier' => 'De pas afichar dins lo calendier',
388
-	'item_non_creer_fichiers_authent' => 'Pas crear aquelei fichiers',
389
-	'item_non_publier_articles' => 'Pas publicar leis articles avans la data de publicacion prevista.',
390
-	'item_nouvel_auteur' => 'Autor nòu',
391
-	'item_nouvelle_rubrique' => 'Rubrica nòva',
392
-	'item_oui' => 'Òc',
393
-	'item_publier_articles' => 'Publicar leis articles, quina que siá sa data de publicacion',
394
-	'item_reponse_article' => 'Respònsa a l’article',
395
-	'item_visiteur' => 'vesitaire',
353
+    'info_travail_colaboratif' => 'Trabalh collaboratiu subre leis articles',
354
+    'info_un_article' => 'un article, ',
355
+    'info_un_site' => 'un sit, ',
356
+    'info_une_rubrique' => 'una rubrica, ',
357
+    'info_une_rubrique_02' => '1 rubrica',
358
+    'info_url' => 'URL:',
359
+    'info_urlref' => 'Liame ipertèxt:',
360
+    'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...',
361
+    'info_visites_par_mois' => 'Afichatge per mes:',
362
+    'info_visiteur_1' => 'Vesitaire',
363
+    'info_visiteur_2' => 'dau sit public',
364
+    'info_visiteurs' => 'Vesitaires',
365
+    'info_visiteurs_02' => 'Vesitaires dau sit public',
366
+    'install_echec_annonce' => 'L’installacion capitarà mau, o abotirà a un sit non foncionau...',
367
+    'install_extension_php_obligatoire' => 'SPIP exigís l’extension php:',
368
+    'install_select_langue' => 'Seleccionatz una lenga puei clicatz lo boton «seguent» per amodar la procedura d’installacion.',
369
+    'intem_redacteur' => 'redactor',
370
+    'item_accepter_inscriptions' => 'Acceptar leis inscripcions',
371
+    'item_activer_messages_avertissement' => 'Activar lei messatges d’avertiment',
372
+    'item_administrateur_2' => 'administrator',
373
+    'item_afficher_calendrier' => 'Afichar dins lo calendier',
374
+    'item_choix_administrateurs' => 'leis administrators',
375
+    'item_choix_generation_miniature' => 'Congrear automaticament lei miniaturas deis imatges.',
376
+    'item_choix_non_generation_miniature' => 'Congrear ges de miniaturas deis imatges.',
377
+    'item_choix_redacteurs' => 'lei redactors',
378
+    'item_choix_visiteurs' => 'lei vesitaires dau sit public',
379
+    'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd',
380
+    'item_login' => 'Login',
381
+    'item_mots_cles_association_articles' => 'ais articles',
382
+    'item_mots_cles_association_rubriques' => 'ai rubricas',
383
+    'item_mots_cles_association_sites' => 'ai sits referenciats o sindicats',
384
+    'item_non' => 'Non',
385
+    'item_non_accepter_inscriptions' => 'Pas acceptar leis inscripcions',
386
+    'item_non_activer_messages_avertissement' => 'Ges de messatge d’avertiment',
387
+    'item_non_afficher_calendrier' => 'De pas afichar dins lo calendier',
388
+    'item_non_creer_fichiers_authent' => 'Pas crear aquelei fichiers',
389
+    'item_non_publier_articles' => 'Pas publicar leis articles avans la data de publicacion prevista.',
390
+    'item_nouvel_auteur' => 'Autor nòu',
391
+    'item_nouvelle_rubrique' => 'Rubrica nòva',
392
+    'item_oui' => 'Òc',
393
+    'item_publier_articles' => 'Publicar leis articles, quina que siá sa data de publicacion',
394
+    'item_reponse_article' => 'Respònsa a l’article',
395
+    'item_visiteur' => 'vesitaire',
396 396
 
397
-	// J
398
-	'jour_non_connu_nc' => 'n.c.',
397
+    // J
398
+    'jour_non_connu_nc' => 'n.c.',
399 399
 
400
-	// L
401
-	'lien_ajouter_auteur' => 'Apondre aquel autor',
402
-	'lien_email' => 'e-mail',
403
-	'lien_nom_site' => 'NOM DAU SIT:',
404
-	'lien_retirer_auteur' => 'Levar l’autor',
405
-	'lien_site' => 'sit',
406
-	'lien_tout_deplier' => 'Desplegar tot',
407
-	'lien_tout_replier' => 'Tornar plegar',
408
-	'lien_trier_nom' => 'Triar per nom',
409
-	'lien_trier_nombre_articles' => 'Triar per nombre d’articles',
410
-	'lien_trier_statut' => 'Triar per estatut',
411
-	'lien_voir_en_ligne' => 'VEIRE EN LINHA:',
412
-	'logo_article' => 'LÒGO DE L’ARTICLE', # MODIF
413
-	'logo_auteur' => 'LÒGO DE L’AUTOR', # MODIF
414
-	'logo_rubrique' => 'LÒGO DE LA RUBRICA', # MODIF
415
-	'logo_site' => 'LÒGO D’AQUEU SIT', # MODIF
416
-	'logo_standard_rubrique' => 'LÒGO ESTANDARD DEI RUBRICAS', # MODIF
417
-	'logo_survol' => 'LÒGO PER LO SUBREVÒU', # MODIF
400
+    // L
401
+    'lien_ajouter_auteur' => 'Apondre aquel autor',
402
+    'lien_email' => 'e-mail',
403
+    'lien_nom_site' => 'NOM DAU SIT:',
404
+    'lien_retirer_auteur' => 'Levar l’autor',
405
+    'lien_site' => 'sit',
406
+    'lien_tout_deplier' => 'Desplegar tot',
407
+    'lien_tout_replier' => 'Tornar plegar',
408
+    'lien_trier_nom' => 'Triar per nom',
409
+    'lien_trier_nombre_articles' => 'Triar per nombre d’articles',
410
+    'lien_trier_statut' => 'Triar per estatut',
411
+    'lien_voir_en_ligne' => 'VEIRE EN LINHA:',
412
+    'logo_article' => 'LÒGO DE L’ARTICLE', # MODIF
413
+    'logo_auteur' => 'LÒGO DE L’AUTOR', # MODIF
414
+    'logo_rubrique' => 'LÒGO DE LA RUBRICA', # MODIF
415
+    'logo_site' => 'LÒGO D’AQUEU SIT', # MODIF
416
+    'logo_standard_rubrique' => 'LÒGO ESTANDARD DEI RUBRICAS', # MODIF
417
+    'logo_survol' => 'LÒGO PER LO SUBREVÒU', # MODIF
418 418
 
419
-	// M
420
-	'menu_aide_installation_choix_base' => 'Chausida de vòstra basa',
421
-	'module_fichier_langue' => 'Fichier de lenga',
422
-	'module_raccourci' => 'Acorcha',
423
-	'module_texte_affiche' => 'Tèxt afichat',
424
-	'module_texte_explicatif' => 'Podètz inserir leis acorchas seguentas dins leis esqueletas de vòstre sit public. Se reviraràn automaticament  dins lei diferentei lengas per lei qualas existís un fichier de lenga.',
425
-	'module_texte_traduction' => 'Lo fichier de lenga «@module@» es disponible en:',
426
-	'mois_non_connu' => 'non conegut',
419
+    // M
420
+    'menu_aide_installation_choix_base' => 'Chausida de vòstra basa',
421
+    'module_fichier_langue' => 'Fichier de lenga',
422
+    'module_raccourci' => 'Acorcha',
423
+    'module_texte_affiche' => 'Tèxt afichat',
424
+    'module_texte_explicatif' => 'Podètz inserir leis acorchas seguentas dins leis esqueletas de vòstre sit public. Se reviraràn automaticament  dins lei diferentei lengas per lei qualas existís un fichier de lenga.',
425
+    'module_texte_traduction' => 'Lo fichier de lenga «@module@» es disponible en:',
426
+    'mois_non_connu' => 'non conegut',
427 427
 
428
-	// O
429
-	'onglet_repartition_actuelle' => 'd’aquesta passa',
428
+    // O
429
+    'onglet_repartition_actuelle' => 'd’aquesta passa',
430 430
 
431
-	// P
432
-	'plugin_etat_developpement' => 'en cors de desvolopament',
433
-	'plugin_etat_experimental' => 'experimentau',
434
-	'plugin_etat_stable' => 'estable',
435
-	'plugin_etat_test' => 'a l’ensag',
436
-	'plugins_liste' => 'Tièra deis ajustons',
431
+    // P
432
+    'plugin_etat_developpement' => 'en cors de desvolopament',
433
+    'plugin_etat_experimental' => 'experimentau',
434
+    'plugin_etat_stable' => 'estable',
435
+    'plugin_etat_test' => 'a l’ensag',
436
+    'plugins_liste' => 'Tièra deis ajustons',
437 437
 
438
-	// R
439
-	'repertoire_plugins' => 'Repertòri :',
440
-	'required' => '[Obligatòri]', # MODIF
438
+    // R
439
+    'repertoire_plugins' => 'Repertòri :',
440
+    'required' => '[Obligatòri]', # MODIF
441 441
 
442
-	// S
443
-	'statut_admin_restreint' => '(admin. restrench)', # MODIF
442
+    // S
443
+    'statut_admin_restreint' => '(admin. restrench)', # MODIF
444 444
 
445
-	// T
446
-	'taille_cache_image' => 'Leis imatges qu’SPIP a calculat automaticament (vinhetas dei documents, títols presentats en forma grafica, foncions matematicas en format TeX...) ocupan dins lo repertòri @dir@ un totau de @taille@.',
447
-	'taille_cache_octets' => 'Ara la talha de l’escondedor compassa @octets@.', # MODIF
448
-	'taille_cache_vide' => 'L’escondedor es vuege.',
449
-	'taille_repertoire_cache' => 'Talha dau repertòri escondedor',
450
-	'text_article_propose_publication' => 'Article prepausat per la publicacion. Esitetz pas de donar vòstre vejaire gràcias au forum estacat a aquel article (en bas de pagina).', # MODIF
451
-	'texte_acces_ldap_anonyme_1' => 'D’unei servidors LDAP accèptan ges d’accès anonim. En aqueu cas, cau especificar un identificant d’accès iniciau per poder puei cercar d’informacions dins l’annuari. Pasmens, lei camps seguents se poiràn laissar vueges dins la màger part dei cas.',
452
-	'texte_admin_effacer_01' => 'Aquela comanda escafa <i>tot</i> lo contengut de la basa de donadas,
445
+    // T
446
+    'taille_cache_image' => 'Leis imatges qu’SPIP a calculat automaticament (vinhetas dei documents, títols presentats en forma grafica, foncions matematicas en format TeX...) ocupan dins lo repertòri @dir@ un totau de @taille@.',
447
+    'taille_cache_octets' => 'Ara la talha de l’escondedor compassa @octets@.', # MODIF
448
+    'taille_cache_vide' => 'L’escondedor es vuege.',
449
+    'taille_repertoire_cache' => 'Talha dau repertòri escondedor',
450
+    'text_article_propose_publication' => 'Article prepausat per la publicacion. Esitetz pas de donar vòstre vejaire gràcias au forum estacat a aquel article (en bas de pagina).', # MODIF
451
+    'texte_acces_ldap_anonyme_1' => 'D’unei servidors LDAP accèptan ges d’accès anonim. En aqueu cas, cau especificar un identificant d’accès iniciau per poder puei cercar d’informacions dins l’annuari. Pasmens, lei camps seguents se poiràn laissar vueges dins la màger part dei cas.',
452
+    'texte_admin_effacer_01' => 'Aquela comanda escafa <i>tot</i> lo contengut de la basa de donadas,
453 453
  inclús <i>totei</i> leis accès redactors e administrators. Un còp que l’auretz executada, auretz de tornar lançar l’installacion d’SPIP per tornar crear una basa novèla e mai un primier accès administrator.',
454
-	'texte_adresse_annuaire_1' => '(Se vòstre annuari es installat sus la meteissa maquina qu’aqueu sit web, s’agís probable de "localhost".)',
455
-	'texte_ajout_auteur' => 'L’autor seguent es estat apondut a l’article:',
456
-	'texte_annuaire_ldap_1' => 'S’accedissètz a un annuari (LDAP), lo podètz utilizar per importar automaticament d’utilizaires sota SPIP.',
457
-	'texte_article_statut' => 'Aquel article es:',
458
-	'texte_article_virtuel' => 'Article virtuau',
459
-	'texte_article_virtuel_reference' => '<b>Article virtuau:</b> article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL. Per suprimir la redireccion, escafatz l’URL çai subre.',
460
-	'texte_aucun_resultat_auteur' => 'Ges de resultat per "@cherche_auteur@"',
461
-	'texte_auteur_messagerie' => 'Aquest sit vos pòt indicar de contunha la tiera dei redactors connectats, çò que vos permet d’escambiar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela lista (siatz "invisible/a" per leis autreis utilizaires).',
462
-	'texte_auteurs' => 'LEIS AUTORS',
463
-	'texte_choix_base_1' => 'Chausissètz vòstra basa:',
464
-	'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.',
465
-	'texte_choix_base_3' => '<b>Chausissètz</b> çai sota la que vòstre aubergador vos a atribuida:',
466
-	'texte_compte_element' => '@count@ element',
467
-	'texte_compte_elements' => '@count@ elements',
468
-	'texte_connexion_mysql' => 'Consultatz leis informacions que vòstre aubergador fornís: i devètz trobar, se vòstre aubergador supòrta SQL, lei còdes de connexion au servidor SQL.', # MODIF
469
-	'texte_contenu_article' => '(Contengut de l’article en quauquei mots.)',
470
-	'texte_contenu_articles' => 'Segon la maqueta que vòstre sit a adoptada, podètz decidir
454
+    'texte_adresse_annuaire_1' => '(Se vòstre annuari es installat sus la meteissa maquina qu’aqueu sit web, s’agís probable de "localhost".)',
455
+    'texte_ajout_auteur' => 'L’autor seguent es estat apondut a l’article:',
456
+    'texte_annuaire_ldap_1' => 'S’accedissètz a un annuari (LDAP), lo podètz utilizar per importar automaticament d’utilizaires sota SPIP.',
457
+    'texte_article_statut' => 'Aquel article es:',
458
+    'texte_article_virtuel' => 'Article virtuau',
459
+    'texte_article_virtuel_reference' => '<b>Article virtuau:</b> article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL. Per suprimir la redireccion, escafatz l’URL çai subre.',
460
+    'texte_aucun_resultat_auteur' => 'Ges de resultat per "@cherche_auteur@"',
461
+    'texte_auteur_messagerie' => 'Aquest sit vos pòt indicar de contunha la tiera dei redactors connectats, çò que vos permet d’escambiar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela lista (siatz "invisible/a" per leis autreis utilizaires).',
462
+    'texte_auteurs' => 'LEIS AUTORS',
463
+    'texte_choix_base_1' => 'Chausissètz vòstra basa:',
464
+    'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.',
465
+    'texte_choix_base_3' => '<b>Chausissètz</b> çai sota la que vòstre aubergador vos a atribuida:',
466
+    'texte_compte_element' => '@count@ element',
467
+    'texte_compte_elements' => '@count@ elements',
468
+    'texte_connexion_mysql' => 'Consultatz leis informacions que vòstre aubergador fornís: i devètz trobar, se vòstre aubergador supòrta SQL, lei còdes de connexion au servidor SQL.', # MODIF
469
+    'texte_contenu_article' => '(Contengut de l’article en quauquei mots.)',
470
+    'texte_contenu_articles' => 'Segon la maqueta que vòstre sit a adoptada, podètz decidir
471 471
  que certaneis elements deis articles s’utilizen pas.
472 472
  Utilizatz la tiera çai sota per indicar quineis elements son disponibles.',
473
-	'texte_crash_base' => 'Se vòstra basa de donadas s’es
473
+    'texte_crash_base' => 'Se vòstra basa de donadas s’es
474 474
  encalada, podètz assajar una reparacion
475 475
  automatica.',
476
-	'texte_creer_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear una rubrica.',
477
-	'texte_date_creation_article' => 'DATA DE CREACION DE L’ARTICLE:',
478
-	'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :',
479
-	'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.',
480
-	'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :',
481
-	'texte_descriptif_rapide' => 'Descriptiu rapid',
482
-	'texte_effacer_base' => 'Escafar la basa de donadas SPIP',
483
-	'texte_en_cours_validation' => 'Se prepausa de publicar leis articles e brèvas çai sota. Esitetz pas de donar vòstre vejaire gràcias ai forums que i son estacats.', # MODIF
484
-	'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion de vòstre tèxt en utilizant d’"acorchas tipograficas".',
485
-	'texte_fichier_authent' => '<b>Deu crear, SPIP, de fichiers especiaus  <tt>.htpasswd</tt>
476
+    'texte_creer_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear una rubrica.',
477
+    'texte_date_creation_article' => 'DATA DE CREACION DE L’ARTICLE:',
478
+    'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :',
479
+    'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.',
480
+    'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :',
481
+    'texte_descriptif_rapide' => 'Descriptiu rapid',
482
+    'texte_effacer_base' => 'Escafar la basa de donadas SPIP',
483
+    'texte_en_cours_validation' => 'Se prepausa de publicar leis articles e brèvas çai sota. Esitetz pas de donar vòstre vejaire gràcias ai forums que i son estacats.', # MODIF
484
+    'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion de vòstre tèxt en utilizant d’"acorchas tipograficas".',
485
+    'texte_fichier_authent' => '<b>Deu crear, SPIP, de fichiers especiaus  <tt>.htpasswd</tt>
486 486
   e <tt>.htpasswd-admin</tt> dins lo repertòri @dossier@?</b><p>
487 487
   Aquelei fichiers vos pòdon servir per restrénher l’accès ais autors
488 488
   e administrators alhors dins vòstre sit
@@ -490,46 +490,46 @@  discard block
 block discarded – undo
490 490
  Se vos sèrv pas, podètz laissar aquesta opcion
491 491
   a sa valor predefinida (ges de creacion
492 492
   dei fichiers).</p>', # MODIF
493
-	'texte_informations_personnelles_1' => 'Ara lo sistèma vos crearà un accès personalizat au sit.',
494
-	'texte_informations_personnelles_2' => '(Nòta: se s’agís d’una reïnstallacion, e se vòstre accès fonciona encara, podètz', # MODIF
495
-	'texte_introductif_article' => '(Tèxt introductiu de l’article.)',
496
-	'texte_jeu_caractere' => 'Aquesta opcion es utila se vòstre sit deu afichar d’alfabets
493
+    'texte_informations_personnelles_1' => 'Ara lo sistèma vos crearà un accès personalizat au sit.',
494
+    'texte_informations_personnelles_2' => '(Nòta: se s’agís d’una reïnstallacion, e se vòstre accès fonciona encara, podètz', # MODIF
495
+    'texte_introductif_article' => '(Tèxt introductiu de l’article.)',
496
+    'texte_jeu_caractere' => 'Aquesta opcion es utila se vòstre sit deu afichar d’alfabets
497 497
  diferents de l’alfabet latin (o "occidentau") e sei derivats.
498 498
  En aqueu cas, cau cambiar lo reglatge predefinit per fin d’utilizar
499 499
  un jòc de caractèrs apropriat. Oblidetz pas tanpauc d’adaptar
500 500
  lo sit public en consequéncia (balisa <tt>#CHARSET</tt>).',
501
-	'texte_jeu_caractere_3' => 'Vòstre sit es per ara installat amb lo jòc de caractèrs :',
502
-	'texte_login_ldap_1' => '(Laissar vuege per un accès anonim, o picar lo camin complet, per exemple «<tt>uid=fabre, ou=usanciers, dc=mon-domeni, dc=com</tt>».)',
503
-	'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo quau siatz ara connectat/ada. 
501
+    'texte_jeu_caractere_3' => 'Vòstre sit es per ara installat amb lo jòc de caractèrs :',
502
+    'texte_login_ldap_1' => '(Laissar vuege per un accès anonim, o picar lo camin complet, per exemple «<tt>uid=fabre, ou=usanciers, dc=mon-domeni, dc=com</tt>».)',
503
+    'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo quau siatz ara connectat/ada. 
504 504
  Utilizatz aquest formulari amb precaucion...',
505
-	'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar lei fichiers SPIP.
505
+    'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar lei fichiers SPIP.
506 506
  Ara cau metre a nivèu la basa de donadas
507 507
  dau sit.',
508
-	'texte_modifier_article' => 'Modificar l’article:',
509
-	'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, podètz apondre un menut per chausir la lenga deis articles e/o dei rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF
510
-	'texte_multilinguisme_trad' => 'Podètz tanben activar un sistèma de gestion dei liames entre lei diferentei reviradas d’un article.', # MODIF
511
-	'texte_non_compresse' => '<i>non comprimit</i> (per amòr que vòstre servidor supòrta pas aquela foncionalitat)',
512
-	'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.',
513
-	'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, vougatz escafar lo fichier <tt>inc_connect.php3</tt> dau repertòri <tt>ecrire</tt> e tornar prene l’installacion per fin d’actualizar vòstrei paramètres de connexion a la basa de donadas.<p> (NB: s’avètz demembrat vòstrei paramètres de connexion, espepissatz lo fichier  <tt>inc_connect.php3</tt> avans de lo suprimir...)</p>', # MODIF
514
-	'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz leis informacions que vòstre aubergador a fornidas.',
515
-	'texte_plus_trois_car' => 'mai de 3 caractèrs',
516
-	'texte_plusieurs_articles' => 'Mai d’un autor trobat per "@cherche_auteur@":',
517
-	'texte_port_annuaire' => '(La valor indicada coma predefinida conven en generau.)',
518
-	'texte_proposer_publication' => 'Quora auretz acabat vòstre article,<br /> poiretz prepausar que siá publicat.',
519
-	'texte_proxy' => 'Dins d’unei cas (intranet, rets protegidas...),
508
+    'texte_modifier_article' => 'Modificar l’article:',
509
+    'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, podètz apondre un menut per chausir la lenga deis articles e/o dei rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF
510
+    'texte_multilinguisme_trad' => 'Podètz tanben activar un sistèma de gestion dei liames entre lei diferentei reviradas d’un article.', # MODIF
511
+    'texte_non_compresse' => '<i>non comprimit</i> (per amòr que vòstre servidor supòrta pas aquela foncionalitat)',
512
+    'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.',
513
+    'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, vougatz escafar lo fichier <tt>inc_connect.php3</tt> dau repertòri <tt>ecrire</tt> e tornar prene l’installacion per fin d’actualizar vòstrei paramètres de connexion a la basa de donadas.<p> (NB: s’avètz demembrat vòstrei paramètres de connexion, espepissatz lo fichier  <tt>inc_connect.php3</tt> avans de lo suprimir...)</p>', # MODIF
514
+    'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz leis informacions que vòstre aubergador a fornidas.',
515
+    'texte_plus_trois_car' => 'mai de 3 caractèrs',
516
+    'texte_plusieurs_articles' => 'Mai d’un autor trobat per "@cherche_auteur@":',
517
+    'texte_port_annuaire' => '(La valor indicada coma predefinida conven en generau.)',
518
+    'texte_proposer_publication' => 'Quora auretz acabat vòstre article,<br /> poiretz prepausar que siá publicat.',
519
+    'texte_proxy' => 'Dins d’unei cas (intranet, rets protegidas...),
520 520
   se pòt que cauga utilizar un <i>proxy HTTP</i> per aténher lei sits sindicats.
521 521
   En aqueu cas, marcatz çai sota son adreiça, sota la forma
522 522
   <tt><html>http://proxy:8080</html></tt>. En generau,
523 523
   laissaretz vueja aquela casa.',
524
-	'texte_publication_articles_post_dates' => 'Coma SPIP se deu comportar fàcia ais articles que sa
524
+    'texte_publication_articles_post_dates' => 'Coma SPIP se deu comportar fàcia ais articles que sa
525 525
   data de publicacion es fixada a una 
526 526
   escasença futura?',
527
-	'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aqueu camp correctament.]',
528
-	'texte_recalcul_page' => 'Se volètz
527
+    'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aqueu camp correctament.]',
528
+    'texte_recalcul_page' => 'Se volètz
529 529
 tornar calcular ren qu’una pagina, passatz puslèu per l’espaci public e utilizatz lo  boton "tornar calcular".',
530
-	'texte_recuperer_base' => 'Reparar la basa de donadas',
531
-	'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL.',
532
-	'texte_requetes_echouent' => '<b>Quora d’unei requistas SQL s’encalan
530
+    'texte_recuperer_base' => 'Reparar la basa de donadas',
531
+    'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL.',
532
+    'texte_requetes_echouent' => '<b>Quora d’unei requistas SQL s’encalan
533 533
   sistematicament e sensa rason aparenta, se pòt
534 534
   qu’aquò venga ben de la basa de donadas.  </b><p>
535 535
   SQL ten la facultat de reparar sei
@@ -539,73 +539,73 @@  discard block
 block discarded – undo
539 539
  benlèu d’indicis de çò que va pas...</p><p>
540 540
   Se lo problèma persistís, contactatz vòstre
541 541
   aubergador.</p>', # MODIF
542
-	'texte_selection_langue_principale' => 'Podètz seleccionar çai sota la "lenga principala" dau sit. Aquela chausida vos obliga pas -grand gaug- d’escriure vòstreis articles dins la lenga seleccionada, mai permet de determinar:
542
+    'texte_selection_langue_principale' => 'Podètz seleccionar çai sota la "lenga principala" dau sit. Aquela chausida vos obliga pas -grand gaug- d’escriure vòstreis articles dins la lenga seleccionada, mai permet de determinar:
543 543
  <ul><li> lo format predefinit dei datas sus lo sit public;</li>
544 544
  <li> la natura dau motor tipografic que SPIP deu utilizar per lo rendut dei tèxts;</li>
545 545
  <li> la lenga utilizada dins lei formularis dau sit public;</li>
546 546
  <li> la lenga presentada coma predefinida dins l’espaci privat.</li></ul>',
547
-	'texte_sous_titre' => 'Sostítol',
548
-	'texte_statistiques_visites' => '(barras escuras:  dimenge / corba escura: evolucion de la mejana)',
549
-	'texte_statut_attente_validation' => 'en espèra de validacion',
550
-	'texte_statut_publies' => 'publicats en linha',
551
-	'texte_statut_refuses' => 'refusats',
552
-	'texte_suppression_fichiers' => 'Utilizatz aquela comanda per suprimir totei lei fichiers que se tròban
547
+    'texte_sous_titre' => 'Sostítol',
548
+    'texte_statistiques_visites' => '(barras escuras:  dimenge / corba escura: evolucion de la mejana)',
549
+    'texte_statut_attente_validation' => 'en espèra de validacion',
550
+    'texte_statut_publies' => 'publicats en linha',
551
+    'texte_statut_refuses' => 'refusats',
552
+    'texte_suppression_fichiers' => 'Utilizatz aquela comanda per suprimir totei lei fichiers que se tròban
553 553
 dins l’escondedor SPIP. Aquò permet per exemple de forçar un calcul nòu de totei lei paginas
554 554
 s’avètz bravament modificat lo grafisme o l’estructura dau sit.',
555
-	'texte_sur_titre' => 'Subretítol',
556
-	'texte_table_ok' => ': aquesta taula es condrecha.',
557
-	'texte_tentative_recuperation' => 'Assai de reparacion',
558
-	'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas',
559
-	'texte_test_proxy' => 'Per assajar aqueu proxy, indicatz aicí l’adreiça d’un sit web
555
+    'texte_sur_titre' => 'Subretítol',
556
+    'texte_table_ok' => ': aquesta taula es condrecha.',
557
+    'texte_tentative_recuperation' => 'Assai de reparacion',
558
+    'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas',
559
+    'texte_test_proxy' => 'Per assajar aqueu proxy, indicatz aicí l’adreiça d’un sit web
560 560
     que lo voudriatz esprovar.',
561
-	'texte_titre_02' => 'Títol:',
562
-	'texte_titre_obligatoire' => '<b>Títol</b> [Obligatòri]',
563
-	'texte_travail_article' => '@nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
564
-	'texte_travail_collaboratif' => 'Quora es frequent que mai d’un redactor 
561
+    'texte_titre_02' => 'Títol:',
562
+    'texte_titre_obligatoire' => '<b>Títol</b> [Obligatòri]',
563
+    'texte_travail_article' => '@nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
564
+    'texte_travail_collaboratif' => 'Quora es frequent que mai d’un redactor 
565 565
   trabalhe sus lo meteis article, lo sistèma
566 566
   pòt afichar leis articles recentament "dobèrts"
567 567
   per fin d’evitar lei modificacions simultanèas.
568 568
   Aquela opcion es desactivada de maniera predefinida
569 569
   per fin d’evitar d’afichar de messatges d’avertiment
570 570
   intempestius.',
571
-	'texte_vide' => 'vuege',
572
-	'texte_vider_cache' => 'Vujar l’escondedor',
573
-	'titre_admin_tech' => 'Mantenença tecnica',
574
-	'titre_admin_vider' => 'Mantenença tecnica',
575
-	'titre_cadre_afficher_article' => 'Afichar leis articles',
576
-	'titre_cadre_afficher_traductions' => 'Afichar l’estat dei reviradas per aquela lenga',
577
-	'titre_cadre_ajouter_auteur' => 'APONDRE UN AUTOR:',
578
-	'titre_cadre_interieur_rubrique' => 'Dintre la rubrica',
579
-	'titre_cadre_numero_auteur' => 'AUTOR NUMÈRO',
580
-	'titre_cadre_signature_obligatoire' => '<b>Signatura</b> [Obligatòria]<br />',
581
-	'titre_config_fonctions' => 'Configuracion dau sit',
582
-	'titre_configuration' => 'Configuracion dau sit',
583
-	'titre_connexion_ldap' => 'Opcions: <b>Vòstra connexion LDAP</b>',
584
-	'titre_groupe_mots' => 'GROP DE MOTS:',
585
-	'titre_langue_article' => 'LENGA DE L’ARTICLE', # MODIF
586
-	'titre_langue_rubrique' => 'LENGA DE LA RUBRICA', # MODIF
587
-	'titre_langue_trad_article' => 'LENGA E REVIRADAS DE L’ARTICLE',
588
-	'titre_les_articles' => 'LEIS ARTICLES',
589
-	'titre_naviguer_dans_le_site' => 'Navigar per lo sit...',
590
-	'titre_nouvelle_rubrique' => 'Rubrica novèla',
591
-	'titre_numero_rubrique' => 'RUBRICA NUMÈRO:',
592
-	'titre_page_articles_edit' => 'Modificar: @titre@',
593
-	'titre_page_articles_page' => 'Leis articles',
594
-	'titre_page_articles_tous' => 'Tot lo sit',
595
-	'titre_page_calendrier' => 'Calendier @nom_mois@ de @annee@',
596
-	'titre_page_config_contenu' => 'Configuracion dau sit',
597
-	'titre_page_delete_all' => 'supression totala e irreversibla',
598
-	'titre_page_recherche' => 'Resultats de la cèrca @recherche@',
599
-	'titre_page_statistiques_referers' => 'Estadisticas (liames intrants)',
600
-	'titre_page_upgrade' => 'Mesa a nivèu d’SPIP',
601
-	'titre_publication_articles_post_dates' => 'Publicacion deis articles pòstdatats',
602
-	'titre_reparation' => 'Reparacion',
603
-	'titre_suivi_petition' => 'Seguit dei peticions',
604
-	'trad_article_traduction' => 'Totei lei versions d’aquel article:',
605
-	'trad_delier' => 'Cessar de liar aquest article a sei reviradas ', # MODIF
606
-	'trad_lier' => 'Aquest article es una revirada de l’article numèro:',
607
-	'trad_new' => 'Escriure una revirada novèla d’aquest article', # MODIF
571
+    'texte_vide' => 'vuege',
572
+    'texte_vider_cache' => 'Vujar l’escondedor',
573
+    'titre_admin_tech' => 'Mantenença tecnica',
574
+    'titre_admin_vider' => 'Mantenença tecnica',
575
+    'titre_cadre_afficher_article' => 'Afichar leis articles',
576
+    'titre_cadre_afficher_traductions' => 'Afichar l’estat dei reviradas per aquela lenga',
577
+    'titre_cadre_ajouter_auteur' => 'APONDRE UN AUTOR:',
578
+    'titre_cadre_interieur_rubrique' => 'Dintre la rubrica',
579
+    'titre_cadre_numero_auteur' => 'AUTOR NUMÈRO',
580
+    'titre_cadre_signature_obligatoire' => '<b>Signatura</b> [Obligatòria]<br />',
581
+    'titre_config_fonctions' => 'Configuracion dau sit',
582
+    'titre_configuration' => 'Configuracion dau sit',
583
+    'titre_connexion_ldap' => 'Opcions: <b>Vòstra connexion LDAP</b>',
584
+    'titre_groupe_mots' => 'GROP DE MOTS:',
585
+    'titre_langue_article' => 'LENGA DE L’ARTICLE', # MODIF
586
+    'titre_langue_rubrique' => 'LENGA DE LA RUBRICA', # MODIF
587
+    'titre_langue_trad_article' => 'LENGA E REVIRADAS DE L’ARTICLE',
588
+    'titre_les_articles' => 'LEIS ARTICLES',
589
+    'titre_naviguer_dans_le_site' => 'Navigar per lo sit...',
590
+    'titre_nouvelle_rubrique' => 'Rubrica novèla',
591
+    'titre_numero_rubrique' => 'RUBRICA NUMÈRO:',
592
+    'titre_page_articles_edit' => 'Modificar: @titre@',
593
+    'titre_page_articles_page' => 'Leis articles',
594
+    'titre_page_articles_tous' => 'Tot lo sit',
595
+    'titre_page_calendrier' => 'Calendier @nom_mois@ de @annee@',
596
+    'titre_page_config_contenu' => 'Configuracion dau sit',
597
+    'titre_page_delete_all' => 'supression totala e irreversibla',
598
+    'titre_page_recherche' => 'Resultats de la cèrca @recherche@',
599
+    'titre_page_statistiques_referers' => 'Estadisticas (liames intrants)',
600
+    'titre_page_upgrade' => 'Mesa a nivèu d’SPIP',
601
+    'titre_publication_articles_post_dates' => 'Publicacion deis articles pòstdatats',
602
+    'titre_reparation' => 'Reparacion',
603
+    'titre_suivi_petition' => 'Seguit dei peticions',
604
+    'trad_article_traduction' => 'Totei lei versions d’aquel article:',
605
+    'trad_delier' => 'Cessar de liar aquest article a sei reviradas ', # MODIF
606
+    'trad_lier' => 'Aquest article es una revirada de l’article numèro:',
607
+    'trad_new' => 'Escriure una revirada novèla d’aquest article', # MODIF
608 608
 
609
-	// V
610
-	'version' => 'Version :',
609
+    // V
610
+    'version' => 'Version :',
611 611
 ];
Please login to merge, or discard this patch.
ecrire/lang/public_da.php 1 patch
Indentation   +82 added lines, -82 removed lines patch added patch discarded remove patch
@@ -5,99 +5,99 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Hjemmeside', # MODIF
10
-	'articles' => 'Artikler',
11
-	'articles_auteur' => 'Denne forfatters artikler',
12
-	'articles_populaires' => 'De mest læste artikler',
13
-	'articles_rubrique' => 'Dette områdes artikler',
14
-	'aucun_article' => 'Der er ingen artikel på denne adresse',
15
-	'aucun_auteur' => 'Der er ingen forfatter på denne adresse',
16
-	'aucun_site' => 'Der er intet websted på denne adresse',
17
-	'aucune_breve' => 'Der er ingen nyhed på denne adresse',
18
-	'aucune_rubrique' => 'Der er ikke noget afsnit på denne adresse',
19
-	'autres_breves' => 'Andre nyheder',
20
-	'autres_groupes_mots_clefs' => 'Andre grupper af nøgleord',
21
-	'autres_sites' => 'Andre websteder',
8
+    // A
9
+    'accueil_site' => 'Hjemmeside', # MODIF
10
+    'articles' => 'Artikler',
11
+    'articles_auteur' => 'Denne forfatters artikler',
12
+    'articles_populaires' => 'De mest læste artikler',
13
+    'articles_rubrique' => 'Dette områdes artikler',
14
+    'aucun_article' => 'Der er ingen artikel på denne adresse',
15
+    'aucun_auteur' => 'Der er ingen forfatter på denne adresse',
16
+    'aucun_site' => 'Der er intet websted på denne adresse',
17
+    'aucune_breve' => 'Der er ingen nyhed på denne adresse',
18
+    'aucune_rubrique' => 'Der er ikke noget afsnit på denne adresse',
19
+    'autres_breves' => 'Andre nyheder',
20
+    'autres_groupes_mots_clefs' => 'Andre grupper af nøgleord',
21
+    'autres_sites' => 'Andre websteder',
22 22
 
23
-	// B
24
-	'bonjour' => 'Hej',
23
+    // B
24
+    'bonjour' => 'Hej',
25 25
 
26
-	// C
27
-	'commenter_site' => 'Kommentar til dette websted',
26
+    // C
27
+    'commenter_site' => 'Kommentar til dette websted',
28 28
 
29
-	// D
30
-	'date' => 'Dato',
31
-	'dernier_ajout' => 'Seneste tilføjelse',
32
-	'dernieres_breves' => 'Seneste nyhed',
33
-	'derniers_articles' => 'Seneste artikler',
34
-	'derniers_commentaires' => 'Seneste kommentarer',
35
-	'derniers_messages_forum' => 'Seneste indlæg offentliggjort i forummer',
29
+    // D
30
+    'date' => 'Dato',
31
+    'dernier_ajout' => 'Seneste tilføjelse',
32
+    'dernieres_breves' => 'Seneste nyhed',
33
+    'derniers_articles' => 'Seneste artikler',
34
+    'derniers_commentaires' => 'Seneste kommentarer',
35
+    'derniers_messages_forum' => 'Seneste indlæg offentliggjort i forummer',
36 36
 
37
-	// E
38
-	'edition_mode_texte' => 'Tekstudgave',
39
-	'en_reponse' => 'Svaradresse:',
40
-	'en_resume' => 'Opsummering',
41
-	'envoyer_message' => 'Lav indlæg',
42
-	'espace_prive' => 'Privat område',
37
+    // E
38
+    'edition_mode_texte' => 'Tekstudgave',
39
+    'en_reponse' => 'Svaradresse:',
40
+    'en_resume' => 'Opsummering',
41
+    'envoyer_message' => 'Lav indlæg',
42
+    'espace_prive' => 'Privat område',
43 43
 
44
-	// H
45
-	'hierarchie_site' => 'Webstedets struktur',
44
+    // H
45
+    'hierarchie_site' => 'Webstedets struktur',
46 46
 
47
-	// J
48
-	'jours' => 'dage',
47
+    // J
48
+    'jours' => 'dage',
49 49
 
50
-	// M
51
-	'meme_auteur' => 'Af samme forfatter',
52
-	'meme_rubrique' => 'I samme afsnit',
53
-	'memes_auteurs' => 'Af samme forfattere',
54
-	'message' => 'Indlæg',
55
-	'messages_forum' => 'Forumindlæg', # MODIF
56
-	'messages_recents' => 'Seneste forumindlæg',
57
-	'mots_clefs' => 'Nøgleord',
58
-	'mots_clefs_meme_groupe' => 'Nøgleord i samme gruppe',
50
+    // M
51
+    'meme_auteur' => 'Af samme forfatter',
52
+    'meme_rubrique' => 'I samme afsnit',
53
+    'memes_auteurs' => 'Af samme forfattere',
54
+    'message' => 'Indlæg',
55
+    'messages_forum' => 'Forumindlæg', # MODIF
56
+    'messages_recents' => 'Seneste forumindlæg',
57
+    'mots_clefs' => 'Nøgleord',
58
+    'mots_clefs_meme_groupe' => 'Nøgleord i samme gruppe',
59 59
 
60
-	// N
61
-	'navigation' => 'Navigering',
62
-	'nom' => 'Navn',
63
-	'nouveautes' => 'Hvad nyt',
64
-	'nouveautes_web' => 'Hvad nyt på Internettet',
65
-	'nouveaux_articles' => 'Nye artikler',
66
-	'nouvelles_breves' => 'Nyheder',
60
+    // N
61
+    'navigation' => 'Navigering',
62
+    'nom' => 'Navn',
63
+    'nouveautes' => 'Hvad nyt',
64
+    'nouveautes_web' => 'Hvad nyt på Internettet',
65
+    'nouveaux_articles' => 'Nye artikler',
66
+    'nouvelles_breves' => 'Nyheder',
67 67
 
68
-	// P
69
-	'page_precedente' => 'foregående side',
70
-	'page_suivante' => 'næste side',
71
-	'par_auteur' => 'af',
72
-	'participer_site' => 'Du kan deltage aktivt på dette websted og skrive dine egne artikler ved at tilmelde dig nedenfor. Du vil da straks modtage en email med en adgangskode til webstedets private område.',
73
-	'plan_site' => 'Indholdsoversigt',
74
-	'popularite' => 'Popularitet',
75
-	'poster_message' => 'Indlæg',
68
+    // P
69
+    'page_precedente' => 'foregående side',
70
+    'page_suivante' => 'næste side',
71
+    'par_auteur' => 'af',
72
+    'participer_site' => 'Du kan deltage aktivt på dette websted og skrive dine egne artikler ved at tilmelde dig nedenfor. Du vil da straks modtage en email med en adgangskode til webstedets private område.',
73
+    'plan_site' => 'Indholdsoversigt',
74
+    'popularite' => 'Popularitet',
75
+    'poster_message' => 'Indlæg',
76 76
 
77
-	// R
78
-	'repondre_article' => 'Lav et svar til denne artikel',
79
-	'repondre_breve' => 'Lav et svar på denne nyhed',
80
-	'resultats_recherche' => 'Søgeresultater',
81
-	'retour_debut_forums' => 'Tilbage til starten på forummet',
82
-	'rubrique' => 'Afsnit',
83
-	'rubriques' => 'Afsnit',
77
+    // R
78
+    'repondre_article' => 'Lav et svar til denne artikel',
79
+    'repondre_breve' => 'Lav et svar på denne nyhed',
80
+    'resultats_recherche' => 'Søgeresultater',
81
+    'retour_debut_forums' => 'Tilbage til starten på forummet',
82
+    'rubrique' => 'Afsnit',
83
+    'rubriques' => 'Afsnit',
84 84
 
85
-	// S
86
-	'signatures_petition' => 'Underskrifter',
87
-	'site_realise_avec_spip' => 'Websted lavet med SPIP',
88
-	'sites_web' => 'Websteder',
89
-	'sous_rubriques' => 'Underafsnit',
90
-	'suite' => 'fortsæt',
91
-	'sur_web' => 'På Internettet',
92
-	'syndiquer_rubrique' => 'Syndiker dette afsnit',
93
-	'syndiquer_site' => 'Syndiker hele webstedet',
85
+    // S
86
+    'signatures_petition' => 'Underskrifter',
87
+    'site_realise_avec_spip' => 'Websted lavet med SPIP',
88
+    'sites_web' => 'Websteder',
89
+    'sous_rubriques' => 'Underafsnit',
90
+    'suite' => 'fortsæt',
91
+    'sur_web' => 'På Internettet',
92
+    'syndiquer_rubrique' => 'Syndiker dette afsnit',
93
+    'syndiquer_site' => 'Syndiker hele webstedet',
94 94
 
95
-	// T
96
-	'texte_lettre_information' => 'Her er webstedets nyhedsbrev',
97
-	'texte_lettre_information_2' => 'Dette brev opsummerer artikler og nyheder offentlliggjort siden', # MODIF
95
+    // T
96
+    'texte_lettre_information' => 'Her er webstedets nyhedsbrev',
97
+    'texte_lettre_information_2' => 'Dette brev opsummerer artikler og nyheder offentlliggjort siden', # MODIF
98 98
 
99
-	// V
100
-	'ver_imprimer' => 'Printbar version',
101
-	'voir_en_ligne' => 'Se online',
102
-	'voir_squelette' => 'Hent skabelonen til denne side',
99
+    // V
100
+    'ver_imprimer' => 'Printbar version',
101
+    'voir_en_ligne' => 'Se online',
102
+    'voir_squelette' => 'Hent skabelonen til denne side',
103 103
 ];
Please login to merge, or discard this patch.
ecrire/lang/public_cpf_hat.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -5,100 +5,100 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Akey sit la', # MODIF
10
-	'articles' => 'Atik yo',
11
-	'articles_auteur' => 'Tout atik lotè a',
12
-	'articles_populaires' => 'Atik yo ki plis popilè',
13
-	'articles_rubrique' => 'Atik yo nan ribrik sa-a',
14
-	'aucun_article' => 'Gen pa oken atik sou ladrès la',
15
-	'aucun_auteur' => 'Gen pa oken lotè sou ladrès la',
16
-	'aucun_site' => 'Gen pa oken sit sou ladrès la',
17
-	'aucune_breve' => 'Gen pa oken tinouvèl sou ladrès la',
18
-	'aucune_rubrique' => 'Gen pa oken ribrik sou ladrès la',
19
-	'autres_breves' => 'Lòt tinouvèl yo',
20
-	'autres_groupes_mots_clefs' => 'Lòt gwoup mokle yo',
21
-	'autres_sites' => 'Lòt sit yo',
8
+    // A
9
+    'accueil_site' => 'Akey sit la', # MODIF
10
+    'articles' => 'Atik yo',
11
+    'articles_auteur' => 'Tout atik lotè a',
12
+    'articles_populaires' => 'Atik yo ki plis popilè',
13
+    'articles_rubrique' => 'Atik yo nan ribrik sa-a',
14
+    'aucun_article' => 'Gen pa oken atik sou ladrès la',
15
+    'aucun_auteur' => 'Gen pa oken lotè sou ladrès la',
16
+    'aucun_site' => 'Gen pa oken sit sou ladrès la',
17
+    'aucune_breve' => 'Gen pa oken tinouvèl sou ladrès la',
18
+    'aucune_rubrique' => 'Gen pa oken ribrik sou ladrès la',
19
+    'autres_breves' => 'Lòt tinouvèl yo',
20
+    'autres_groupes_mots_clefs' => 'Lòt gwoup mokle yo',
21
+    'autres_sites' => 'Lòt sit yo',
22 22
 
23
-	// B
24
-	'bonjour' => 'Bonjou',
23
+    // B
24
+    'bonjour' => 'Bonjou',
25 25
 
26
-	// C
27
-	'commenter_site' => 'Lès yon komantè sou sit la',
26
+    // C
27
+    'commenter_site' => 'Lès yon komantè sou sit la',
28 28
 
29
-	// D
30
-	'date' => 'Dat',
31
-	'dernier_ajout' => 'Dènye bagay ki ajoute',
32
-	'dernieres_breves' => 'Dènye tinouvèl yo',
33
-	'derniers_articles' => 'Dènye atik yo',
34
-	'derniers_commentaires' => 'Dènye komantè yo',
35
-	'derniers_messages_forum' => 'Dènye mesaj yo ki te piblye nan fowom yo',
29
+    // D
30
+    'date' => 'Dat',
31
+    'dernier_ajout' => 'Dènye bagay ki ajoute',
32
+    'dernieres_breves' => 'Dènye tinouvèl yo',
33
+    'derniers_articles' => 'Dènye atik yo',
34
+    'derniers_commentaires' => 'Dènye komantè yo',
35
+    'derniers_messages_forum' => 'Dènye mesaj yo ki te piblye nan fowom yo',
36 36
 
37
-	// E
38
-	'edition_mode_texte' => 'Ledisyon modtèks pou',
39
-	'en_reponse' => 'Pou réponn a :',
40
-	'en_resume' => 'Nan kèk mo',
41
-	'envoyer_message' => 'Voye yon mesaj',
42
-	'espace_prive' => 'Espas privé',
37
+    // E
38
+    'edition_mode_texte' => 'Ledisyon modtèks pou',
39
+    'en_reponse' => 'Pou réponn a :',
40
+    'en_resume' => 'Nan kèk mo',
41
+    'envoyer_message' => 'Voye yon mesaj',
42
+    'espace_prive' => 'Espas privé',
43 43
 
44
-	// H
45
-	'hierarchie_site' => 'Estrikti sit sa-a',
44
+    // H
45
+    'hierarchie_site' => 'Estrikti sit sa-a',
46 46
 
47
-	// J
48
-	'jours' => 'jou yo',
47
+    // J
48
+    'jours' => 'jou yo',
49 49
 
50
-	// M
51
-	'meme_auteur' => 'Mèm lotè ki ekri ankò',
52
-	'meme_rubrique' => 'Andan mèm ribrik',
53
-	'memes_auteurs' => 'Mèm lotè yo ki ekri ankò',
54
-	'message' => 'Mesaj',
55
-	'messages_forum' => 'Mesaj yo nan fowom ', # MODIF
56
-	'messages_recents' => 'Mesaj yo nan fowom ki plis resan',
57
-	'mots_clefs' => 'Mokle yo',
58
-	'mots_clefs_meme_groupe' => 'Mokle yo nan mèm gwoup',
50
+    // M
51
+    'meme_auteur' => 'Mèm lotè ki ekri ankò',
52
+    'meme_rubrique' => 'Andan mèm ribrik',
53
+    'memes_auteurs' => 'Mèm lotè yo ki ekri ankò',
54
+    'message' => 'Mesaj',
55
+    'messages_forum' => 'Mesaj yo nan fowom ', # MODIF
56
+    'messages_recents' => 'Mesaj yo nan fowom ki plis resan',
57
+    'mots_clefs' => 'Mokle yo',
58
+    'mots_clefs_meme_groupe' => 'Mokle yo nan mèm gwoup',
59 59
 
60
-	// N
61
-	'navigation' => 'Toune-vire',
62
-	'nom' => 'Kouman rele',
63
-	'nouveautes' => 'Nouvèlté yo',
64
-	'nouveautes_web' => 'Kisa nouvo sou wèb la',
65
-	'nouveaux_articles' => 'Nouvo atik yo',
66
-	'nouvelles_breves' => 'Nouvo tinouvèl yo',
60
+    // N
61
+    'navigation' => 'Toune-vire',
62
+    'nom' => 'Kouman rele',
63
+    'nouveautes' => 'Nouvèlté yo',
64
+    'nouveautes_web' => 'Kisa nouvo sou wèb la',
65
+    'nouveaux_articles' => 'Nouvo atik yo',
66
+    'nouvelles_breves' => 'Nouvo tinouvèl yo',
67 67
 
68
-	// P
69
-	'page_precedente' => 'paj dèyè',
70
-	'page_suivante' => 'paj swivan',
71
-	'par_auteur' => 'pa',
72
-	'participer_site' => 'Ou se kapab soutni vi sit la ek pwopoze ou pwop atik aw. Pou soutni kon sa enskri a w isit anba. Ou ke gen touswit ou kod laksè nan espas privé sit la.',
73
-	'plan_site' => 'Kat sit la',
74
-	'popularite' => 'Kouman se popilè',
75
-	'poster_message' => 'Voye yon mesaj',
76
-	'proposer_site' => 'Ou se kapab pwopoze yon sit pou ajoute nan ribrik la :',
68
+    // P
69
+    'page_precedente' => 'paj dèyè',
70
+    'page_suivante' => 'paj swivan',
71
+    'par_auteur' => 'pa',
72
+    'participer_site' => 'Ou se kapab soutni vi sit la ek pwopoze ou pwop atik aw. Pou soutni kon sa enskri a w isit anba. Ou ke gen touswit ou kod laksè nan espas privé sit la.',
73
+    'plan_site' => 'Kat sit la',
74
+    'popularite' => 'Kouman se popilè',
75
+    'poster_message' => 'Voye yon mesaj',
76
+    'proposer_site' => 'Ou se kapab pwopoze yon sit pou ajoute nan ribrik la :',
77 77
 
78
-	// R
79
-	'repondre_article' => 'Reponn sou atik la',
80
-	'repondre_breve' => 'Reponn sou tinouvèl la',
81
-	'resultats_recherche' => 'Rezilta pou ou chèche',
82
-	'retour_debut_forums' => 'Tounyen nan koumansman fowom sa-yo',
83
-	'rubrique' => 'Ribrik',
84
-	'rubriques' => 'Ribrik yo',
78
+    // R
79
+    'repondre_article' => 'Reponn sou atik la',
80
+    'repondre_breve' => 'Reponn sou tinouvèl la',
81
+    'resultats_recherche' => 'Rezilta pou ou chèche',
82
+    'retour_debut_forums' => 'Tounyen nan koumansman fowom sa-yo',
83
+    'rubrique' => 'Ribrik',
84
+    'rubriques' => 'Ribrik yo',
85 85
 
86
-	// S
87
-	'signatures_petition' => 'Siyati yo',
88
-	'site_realise_avec_spip' => 'Sit la  se sit ki te fè ak SPIP',
89
-	'sites_web' => 'Sitwèb yo',
90
-	'sous_rubriques' => 'Souribrik yo',
91
-	'suite' => 'swit',
92
-	'sur_web' => 'Sou wèb',
93
-	'syndiquer_rubrique' => 'Sindike ribrik la',
94
-	'syndiquer_site' => 'Sindike tout sit la mèm',
86
+    // S
87
+    'signatures_petition' => 'Siyati yo',
88
+    'site_realise_avec_spip' => 'Sit la  se sit ki te fè ak SPIP',
89
+    'sites_web' => 'Sitwèb yo',
90
+    'sous_rubriques' => 'Souribrik yo',
91
+    'suite' => 'swit',
92
+    'sur_web' => 'Sou wèb',
93
+    'syndiquer_rubrique' => 'Sindike ribrik la',
94
+    'syndiquer_site' => 'Sindike tout sit la mèm',
95 95
 
96
-	// T
97
-	'texte_lettre_information' => 'Tala lèt-enfòmasyon sit la ',
98
-	'texte_lettre_information_2' => 'Lèt la ka ramase tout atik ek tinouvèl yo  te pibliye depi', # MODIF
96
+    // T
97
+    'texte_lettre_information' => 'Tala lèt-enfòmasyon sit la ',
98
+    'texte_lettre_information_2' => 'Lèt la ka ramase tout atik ek tinouvèl yo  te pibliye depi', # MODIF
99 99
 
100
-	// V
101
-	'ver_imprimer' => 'Vèsyon pou enprime',
102
-	'voir_en_ligne' => 'Gad an liy',
103
-	'voir_squelette' => 'kou je sou léskelèt paj-la',
100
+    // V
101
+    'ver_imprimer' => 'Vèsyon pou enprime',
102
+    'voir_en_ligne' => 'Gad an liy',
103
+    'voir_squelette' => 'kou je sou léskelèt paj-la',
104 104
 ];
Please login to merge, or discard this patch.