Magazine

Faire des tableaux XTHML en Wiki dans Dotclear 1

Publié le 14 avril 2008 par Zenstyle

Les ingrédients

Pour cela, il va être nécessaire de modifier un seul et même fichier, class.wiki2xhtml.basic.php qui se trouve dans le dossier /inc/classes/. Il va falloir le modifier en plusieurs points :

1. On crée la syntaxe qui va entourer notre tableau en wiki. Pour cela, trouvez la ligne contenant :
'em' => array("",""),

et ajoutez avant :

'table' => array('[[',']]'),
2. On défini le masque afin de repérer cette syntaxe. Trouvez alors les lignes contenant :
# Paragraphe
else {
	$type = 'p';
	$line = trim($line);
}

et ajoutez avant :

elseif (preg_match('/^\[{2}(.*)\]{2}$/',$line,$cap)){
	$type = 'table';
}
3. On défini la fonction qui va s'exécuter lorsque l'on rencontrera cette syntaxe. Trouvez alors les lignes contenant :
case 'a':
	$res = $this->__parseLink($res,$tag,$attr,$type);
	break;

et ajoutez avant :

case 'table':
	$res = $this->__parseTable($res,$attr);
	break;
4. Enfin, on créer la fonction qui va modifier notre syntaxe en tableau XHTML. Trouvez donc les lignes contenant :
# Mots wiki (pour héritage)
function parseWikiWord($str,&$tag,&$attr,&$type)

et ajoutez avant :

function __parseTable($str,&$attr)
{

	  $res = $align = '';
	  $tab = explode('||',$str);
	  $lines = explode('::',$tab[0]);
	  
 	  if (!empty($tab[2])) {
 		$tab[2] = strtoupper($tab[2]);
		if ($tab[2] == 'G' || $tab[2] == 'L') {
			$align .= ' style="float:left; margin: 0 1em 1em 0;"';
		} elseif ($tab[2] == 'D' || $tab[2] == 'R') {
			$align .= ' style="float:right; margin: 0 0 1em 1em;"';
		} elseif ($tab[2] == 'C') {
			$align .= ' style="margin-left:auto; margin-right: auto;"';
		}
	  }
		
	  if(!empty($tab[1])){
		$attr .= ' summary="'.$tab[1].'"';
		$res .= '<caption'.
? $align : ''). '>'.$tab[1].'</caption>'."\n"; } $attr .= $align; foreach($lines as $num => $line) { $cols = ''; $tblock = ($num == 0) ? '<thead>%s</thead>'."\n" : '<tbody>%s</tbody>'."\n"; $tcol = ($num == 0) ? '<th>%s</th>'."\n" : '<td>%s</td>'."\n"; $datas = $this->__splitTagsAttr($line); foreach($datas as $data) { $cols .= sprintf($tcol,trim($data)); } $res .= sprintf($tblock,'<tr>'.$cols.'</tr>'."\n"); } return $res; }

La recette

C'est bien beau tout ça mais comment on les fait concrètement nos tableaux hein? Rien de plus simple voilà la syntaxe à utiliser [1]

[[ Légende 1|Légende 2 :: Donnée 1 ligne 1|Donnée2 ligne 1 :: Donnée 1 ligne 2|Donnée2 ligne 2 || Voilà la description du tableau (pour le summary et le caption) || C (ou G OU D) ]]

Vous voyez, c'est pas vraiment compliqué? Le dernier argument avec le C ou D, c'est exactement comme pour les images, cela permet de placer le tableau à gauche, au centre ou à droite mais il est optionnel. Il en va de même pour la description du tableau.

Je crois que je n'ai rien oublié, si vous constatez des problèmes / défauts, vous pouvez m'en parler dans les commentaires que je mette éventuellement à jour

Notes

[1] je vous la fais courte hein


Retour à La Une de Logo Paperblog

A propos de l’auteur


Zenstyle 1 partage Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte