Wikini

FormatterWikirenderer

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-3-145-165-8.us-east-2.compute.amazonaws.com
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
Commentaires [Cacher commentaires/formulaire]