Valider 1cc9bbb8 rédigé par esj's avatar esj
Parcourir les fichiers

Caption, CSV & signatures. Trois choses dans ce dépot

	* le format CSV utilisé par OpenOffice est très différent de celui d'un autre tableur dont j'ai oublié le nom, mais respecte, lui, le RFC officiel (http://www.rfc-editor.org/rfc/rfc4180.txt) où s'est bien une virgule qui sépare les valeurs (Coma Separated Value on a dit), et l'usage des sauts lignes ou du dit séparateur est possible en utilisant des guillemets (à doubler quand on en veut un). La fonction '''filtre_text_csv''' accepte à présent aussi toutes ces spécifications. Elle analyse plus finement le début de fichier, et produit une balise Caption lorsqu'il commence par une ligne où seule la première colonne n'est pas vide.

	* le raccourci || en début de tableau pour produire une balise Caption n'était plus reconnu depuis une éternité;

	* petit blindage du script des signatures au cas où un article à pétition aurait disparu mais pas elle.
parent 41de099a
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+28 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -42,14 +42,37 @@ function filtre_text_txt_dist($t) {
// http://doc.spip.org/@filtre_text_csv_dist
function filtre_text_csv_dist($t)
{
	list($entete, $corps) = preg_split('/\r?\n/',$t,2);

	return propre(
	$virg = substr_count($t, ',');
	$pvirg = substr_count($t, ';');
	if ($virg > $pvirg)
		{ $sep = ','; $hs = ',';}
	else	{ $sep = ';'; $hs = '&#59;';}

	$t = str_replace('""','"', preg_replace('/\r?\n/', "\n", $t));
	preg_match_all('/"[^"]*"/', $t, $r);
	foreach($r[0] as $cell) 
		$t = str_replace($cell, 
			str_replace($sep, $hs,
				str_replace("\n", "<br />", 
					    substr($cell,1,-1))),
			$t);
	list($entete, $corps) = split("\n",$t,2);
	$caption = '';
	// sauter la ligne de separateur en tete
	if (substr_count($entete, $sep) == strlen($entete)) {
		list($entete, $corps) = split("\n",$corps,2);
	}
	// si une seule colonne, en faire le titre
	if (preg_match("/^([^$sep]*)$sep+\$/", $entete, $l)) {
			$caption = "\n||" .  $l[1] . "|";
			list($entete, $corps) = split("\n",$corps,2);
	}
	return propre($caption .
		"\n|{{" .
		str_replace(';','}}|{{',$entete) .
		str_replace($sep,'}}|{{',$entete) .
		"}}|" .
		"\n|" .
		str_replace(';','|',preg_replace('/\r?\n/', "|\n|",$corps)) .
		str_replace($sep,'|',str_replace("\n", "|\n|",$corps)) .
		"|\n");
}

+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -114,7 +114,7 @@ function signatures_edit($script, $id, $debut, $row, $type) {
	$res .= '<br />' . message_de_signature($row);
		
	if (!$id) {
			$r = sql_fetsel("titre, id_rubrique, statut", "spip_articles", "id_article=$id_article");
		if ($r = sql_fetsel("titre, id_rubrique, statut", "spip_articles", "id_article=$id_article")) {
			$id_rubrique = $r['id_rubrique'];
			$publie = ($r['statut'] == 'publie');
			$titre_a = $r['titre'];
@@ -130,6 +130,7 @@ function signatures_edit($script, $id, $debut, $row, $type) {
			  . typo($titre_a)
			  . "</a>";
		}
	}
	$res .= "</td></tr></table>";
		
	if ($statut=="poubelle"){
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -669,7 +669,7 @@ function traiter_tableau($bloc) {
		if ($l == 1) {
		// - <caption> et summary dans la premiere ligne :
		//   || caption | summary || (|summary est optionnel)
			if (preg_match(',^\|\|([^|]*)(\|(.*))?\|$,sS', $ligne, $cap)) {
			if (preg_match(',^\|\|([^|]*)(\|(.*))?$,sS', $ligne, $cap)) {
				$l = 0;
				if ($caption = trim($cap[1]))
					$debut_table .= "<caption>".$caption."</caption>\n";