Utilisation de la librairie wikirenderer de Laurent Jouaneau pour convertir le texte wiki en xhtml, librairie disponible ici :
Wikirenderer.
Tester avec la version 2.0.6 de Wikirenderer et la version 0.4.2 de wikini.
Installation
Télécharger l'archive disponible sur le site (
Lien direct), et recopier les fichiers suivant :
- WikiRenderer.lib.php dans le répertoire /wikini/formatters
- WikiRenderer.conf.php dans le répertoire /wikini/formatters
Création du formatteur
Créer un fichier wikirenderer.php (ou tout autre nom...) dans le répertoire /wikini/formatters, qui se résumera à :
<?php
/* Peut être modifier le test ici, je ne suis pas un pro du php... */
if (!class_exists("WikiTag"))
{
include('WikiRenderer.lib.php');
class ConfWikiRenderer extends WikiRendererConfig {
var $checkWikiWord = true;
var $checkWikiWordFunction = 'evalWikiWord';
}
function evalWikiWord($wikiWordList){
global $wiki;
$result=array();
foreach($wikiWordList as $word){
$result[] = $wiki->Link($word);
}
return $result;
}
}
$wkr = new WikiRenderer(new ConfWikiRenderer());
$text = $wkr->render($text);
echo $text ;
?>
Modification des fichiers
Il faut maintenant modifier les fichiers suivants :
- /wikini/handler/page/show.php : pour la visualisation des pages et des commentaires
Remplacer la ligne 125 par :
echo $this->Format($comment["body"], "wikirenderer"),"\n" ;
Remplacer la ligne 61 par :
echo $this->Format($this->page["body"], "wikirenderer");
- /wikini/handler/page/diff.php : pour la visualisation des différences de versions
Remplacer la ligne 197 par :
$out=$this->Format($output,"wikirenderer");
- /wikini/handler/page/slide-show.php : pour la visualisation des slide-shos (
Non testé)
Remplacer la ligne 93 par :
$body_f = $this->format($this->page["body"],"wikirenderer");
et normalement, ça devrait marcher...
Customisation possible
Un des gros points noir de wikirenderer, c'est qu'il ne saute pas de ligne automatiquement, il faut lui mettre la balise %%%. Vu que c'est un comportement que je n'aime pas trop, j'ai modifier un peu le fichier wikirenderer.php (celui que l'on a créé), pour qu'il saute des lignes :
<?php
if (!class_exists("WikiTag"))
{
include('WikiRenderer.lib.php');
class ConfWikiRenderer extends WikiRendererConfig {
var $checkWikiWord = true;
var $checkWikiWordFunction = 'evalWikiWord';
var $bloctags = array('title'=>true, 'list'=>true,
'pre'=>true,'hr'=>true, 'blockquote'=>true,'definition'=>true,'table'=>true, 'pwikini'=>true);
}
function evalWikiWord($wikiWordList){
global $wiki;
$result=array();
foreach($wikiWordList as $word){
$result[] = $wiki->Link($word);
}
return $result;
}
class WRB_pwikini extends WRB_p {
var $type='pwikini';
var $regexp="/(.*)/";
var $_openTag='<p>';
var $_closeTag='</p>';
function open(){
$this->_firstLine = true;
return '<p>';
}
function getRenderedLine(){
if($this->_firstLine)
$this->_firstLine=false;
else
$str='<br />';
return $str.$this->_renderInlineTag($this->_detectMatch[1]);
}
}
}
$wkr = new WikiRenderer(new ConfWikiRenderer());
$text = $wkr->render($text);
echo $text ;
?>
et voilà, il prend en compte les sauts de ligne maintenant.
Bugs connus
Différence de versions
Les tags utilisés pour les différences de version ne sont pas reconnus par wikini. Mais ça va venir.
Quelques remarques aux développeurs de wikini
Pourquoi ne pas mettre le formatteur dans le fichier de config ?
J'ai l'impression qu'il ne faut modifier que les quatres endroits que j'ai indiqué (il y a d'autres appellent à la fonction Format(), mais qui sont apparemment liés aux en-tête et pied de page..., et il faut donc garder le formatteur wakka.
On paurrait avoir dans le fichier wakka.config.php une ligne du style :
"formatter" => "wakka",
et on irait lire la configuration aux trois endroits indiquer plus haut.
Avantages : beaucoup plus simple de modifier le formatteur, si il y a d'autres fichiers qui sont inclus et qui utilise la fonction Format, ils iront lire directement la configuration (fichier du style de slide-show.php)
Inconvénient : je ne vois pas, mais peut être qu'il y en a.
Pourquoi mettre la syntaxe utilisé pour les diffs en dur ?
Dans le fichier /wikini/page/handler/diff.php, la syntaxe utilisé pour les diffs est gérée en directement dans le fichier, avec par exemple ligne 176 :
$output .="@@";
Est-ce que là encore on ne pourrait pas déplacer ces tags dans le fichier de configuration, ou alors à un autre endroit, pour pouvoir les modifier ?
Avantage : beaucoup plus simple de changer de formatteur
Inconvénient : là encore, je ne vois pas...
Bravo!!
Une petite note positive : bravo pour le travail sur wikini. J'ai pû faire cette modif en à peine 1 heure, sans rien connaître ni de wikini, ni de wikirenderer (au niveau code bien sûr)
Question: Comment se comporte wikirenderer avec les listes? Une des particularité de
WikiNi est que les niveaux d'imbrication des liste est fonction de l'indentation. J'ai vaguement testé wikirenderer et il utilise les classiques * pour indiquer le niveau de l'élément de la liste. --
GarfieldFr