La version 2.0 est obsolète et n'est plus maintenue..
Dernière mise à jour le 16/05/2004
include('WikiRenderer.lib.php');
$wkr = new WikiRenderer();
$monTexteXHTML = $wkr->render($monTexteWiki);
Il suffit d'instancier l'objet WikiRendererConfig et de modifier ses propriétés :
include('WikiRenderer.lib.php');
$config = new WikiRendererConfig();
// exemple de désactivation de l'interpretation des balises wiki pour les tableaux
$config->bloctags['table']=false;
// exemple de désactivation de l'interpretation des balises wiki pour les citations
unset($config->inlinetags['cite']);
// ajout de l'interpretation d'un smiley
$config->simpletags[';-)']='<img src="smiley_clindoeil.png" alt=""/>';
$wkr = new WikiRenderer($config);
$monTexteXHTML = $wkr->render($monTexteWiki);
Il est possible de savoir si lors de la transformation, WikiRenderer a rencontré
des erreurs (balises wikis malformée, imbriquée...). Il suffit, aprés la
transformation, de regarder le contenu de la propriété errors
. Exemple :
include('WikiRenderer.lib.php');
$wkr = new WikiRenderer();
$monTexteXHTML = $wkr->render($monTexteWiki);
if($wkr->errors){
echo '<p style="color:red;">Il y a des erreurs wiki aux lignes : ';
echo implode(',',array_keys($wkr->errors)),'</p>' ;
}
La propriété errors
est un tableau d'élements dont la clé
est un numéro de ligne, et la valeur le contenu de la ligne en question. On peut
donc si on le désire, afficher aussi les lignes en erreur.
WikiRenderer ne s'arrete pas à la première erreur rencontrée. Les tags wiki qui posent problèmes ne sont pas interpretés, ni enlevés dans le texte résultat.
Ils sont situés dans l'objet WikiRendererConfig
inlinetags
bloctags
true
ou false
suivant si on active ou non la détection du bloc. Voir
la partie configuration avançée.simpletags
minHeaderLevel
<Hx>
.
Par exemple, si on met 3, !!! donnera <H3>
, !! donnera <H4>
et ! donnera <H5>
.
headerOrder
inlineTagSeparator
|
checkWikiWord
checkWikiWordFunction
escapeSpecialChars
(version >= 2.0.5)====
(4 signes "égale" ou plus) + saut de ligne*
ou -
(liste simple) ou
#
(liste numérotée) par item + saut de ligne| texte | texte
. |
encadré par des espaces
(sauf pour le premier) = caractere séparateur de colonne, chaque ligne écrite =
une ligne de tableau!!!
titre + saut de ligne!!
titre + saut de ligne!
titre + saut de ligne>
+ texte + saut de ligne;
terme :
définition + saut de ligne
(le :
doit être encadré par des espaces)__
texte__
(2 underscores)''
texte''
(deux apostrophes)%%%
[
nomdulien |
lien |
langue |
déscription (title)]
((
lien vers l'image |
textalternatif
|
position |
longue déscription ))
.
valeurs de position : l/L/g/G => gauche, r/R/d/D =>droite,
rien : en ligne. Dans le code généré, c'est une balise style qui est crée, et non un attribut align (obsolète).@@
code@@
^^
phrase|
langue|
lien source^^
{{
reference}}
??
acronyme|
signification??
~~
monancre~~
Dans un texte wiki, on peut désactiver l'interpretation d'un tag wiki
en mettant un antislash devant la balise d'ouverture (et de fermeture
pour les tags en lignes). Exemple : \__emphase\__
.
Si le balisage wiki proposée par défaut ne vous convient pas, il faut le redéfinir. Voici comment.
Il faut :
Voir l'exemple avec le fichier WikiRenderer_w2x.conf.php, qui redefinit un balisage compatible avec wiki2xhtml :
include('WikiRenderer.lib.php');
include('WikiRenderer_w2x.conf.php');
$wkr = new WikiRenderer(new Wiki2XhtmlConfig());
$monTexteXHTML = $wkr->render($monTexteWiki);
Les tags wiki inlines sont les tags que l'on utilise à l'interieur des textes :
liens, emphases (gras, italique...), acronymes etc.. Ils sont définis dans la
variable inlinetags
de la classe de configuration
WikiRendererConfig.
inlinetags
est un tableau d'élements définissant chaque tag wiki :
array(
'nomtagwiki'=>array( propriétés du tag...),
'nomtagwiki2'=>array( propriétés du tag...),
...);
Les propriétés du tag sont, dans l'ordre :
Quand il n'y a pas de fonction indiquée pour générer la balise xhtml, WikiRenderer la générera automatiquement. Il prendra le nom du tag wiki comme nom de balise xhtml.
Définissons par exemple une balise wiki pour faire une emphase
(balise html strong
)
avec pour délimiteurs __
:
var $inlinetags= array(
'strong' =>array('__','__', null,null),
...
);
Si on écrit donc __mon emphase__
, cela prendra strong
comme
nom de balise, et sera transformé alors en <strong>mon emphase</strong>
.
On a vu que l'on pouvait indiquer une liste d'attributs xhtml dans les propriétés du tag.
Dans ce cas, WikiRenderer récuperera chaque chaîne se trouvant entre le séparateur
|
(séparateur configurable) dans le tag wiki, et
seront utilisées comme valeur aux attributs indiqués.
Par exemple, admettons que l'on définisse ceci :
var $inlinetags= array(
'acronym'=>array('??','??', array('lang','title'),null),
...
);
Si on écrit alors ??aaaa|bbbb|cccc??
:
aaaa
sera utilisée comme valeur entre la balise ouvrante et fermante XHTML,bbbb
sera la valeur de l'attribut lang
cccc
sera la valeur de l'attribut title
Le code XHTML résultant sera donc
<acronym lang="bbbb" title="cccc">aaaa</acronym>.
.
Quand la génération par défaut ne suffit pas, qu'il faille un traitement particulier, il faut alors indiquer une fonction de génération xhtml. Dans ce cas, le nom du tag importe peu, voir même la liste des attributs. Il faut juste que le nom soit différent des autres. Cette fonction devra accepter en paramètre deux tableaux :
Par exemple, si les propriétés d'un tag sont :
var $inlinetags= array(
'link' =>array('[',']', array('href','lang','title'),'wikibuildlink'),
...
);
Et si on écrit [aaaa|bbbb|cccc|dddd]
, la fonction wikibuildlink
sera appelée avec les paramètres suivants :
array('aaaa','bbbb','cccc','dddd')
array('href','lang','title')
La fonction devra retourner une chaîne contenant le code XHTML généré.
Vous pouvez voir des exemples de telles fonctions dans WikiRenderer.conf.php : wikibuildlink
,
wikibuildimage
, wikibuildanchor
.
Les tags wiki de blocs permettent d'indiquer la nature d'un bloc de texte : titre, paragraphe,
liste, citation etc.. Pour prendre en charge un type de bloc de texte, il faut
développer une classe dérivant de WikiRendererBloc
. Et ensuite indiquer
cette classe dans la classe de configuration.
Si vous voulez seulement modifier quelques propriétés d'un bloc existant dans la configuration par défaut (par exemple redéfinir l'expression régulière, donc le tag du bloc), vous pouvez simplement écrire une classe dérivant du blog d'origine et indiquer la nouvelle expression régulière, comme ceci :
class WRB_monTitleAMoi extends WRB_title {
var $type='titleamoi';
var $regexp="/^(\={1,3})(.*)/"; // et non plus /^(\!{1,3})(.*)/
}
Voici les propriétés de WikiRendererBloc que vous pouvez modifier dans votre propre classe :
type
regexp
_openTag
open
n'est pas redéfinie
ou si la propriété _closeNow
est à false et/ou que vous n'avez pas redefini getRenderedLine
._closeTag
close
n'est pas redéfinie ou
si la propriété _closeNow
est à false et/ou que vous n'avez pas redefini getRenderedLine
._closeNow
true
ou false
), qui indique si le bloc doit être
fermée immediatement aprés son ouverture. On mettra donc true
si le
bloc ne fait qu'une ligne, comme c'est le cas pour les titres ou les séparateurs
HTML <hr />
. (Propriété obligatoire).Il existe également une propriété, _detectMatch
, qui contient ce
qui a été trouvée par l'expression régulière, si celle-ci a des parenthèses capturantes.
Vous pourrez donc faire appel à cette propriété dans les méthodes open
ou getRenderedLine
pour éviter éventuellement d'avoir à refaire une analyse
de la ligne de texte pour la transformer.
constructeur
WRB_title
, vous devrez
débuter la déclaration du constructeur comme ceci: function WRB_title(&$wr){
.WikiRenderer
en paramètre vous permet
d'accéder éventuellement à la configuration. Ex: $this->_minlevel = $wr->config->minHeaderLevel;
.WikiRendererBloc
comme ceci : parent::WikiRendererBloc($wr);
.
detect
open
<ul>
pour une liste par exemple). Par défaut,
renvoi la valeur de la propriété _openTag
. Vous
pouvez redefinir cette méthode si vous voulez éffectuer d'autres
traitements à ce moment là.close
</ul>
pour une liste par exemple). Par défaut,
renvoi la valeur de la propriété _closeTag
. Vous
pouvez redefinir cette méthode si vous voulez effectuer d'autres
traitements à ce moment là.closeNow
_closeNow
(un booléen).
Elle indique donc au moteur de WikiRenderer si il faut fermer
immediatement le bloc juste aprés l'ouverture. En temps normal, vous ne devriez pas avoir
à redefinir cette méthode.getRenderedLine
_renderInlineTag
.
(Note : Avant la version 2.0 finale, getRenderedLine
acceptait
en paramètre la ligne de texte courante. Ce n'est plus le cas pour des raisons
d'optimisation. En effet, on trouve celle ci dans le premier élement de
_detectMatch
: $ligneOriginale=$this->_detectMatch[0]
).return $this->_renderInlineTag($this->_detectMatch[1]);
._detectMatch
contenant le résultat de l'évaluation de l'expression régulière
regexp
de votre bloc, cela signifie donc qu'il doit y avoir au moins
une parenthèse capturante dans l'expression. Si il y a plus d'une parenthèse capturante
ou pas du tout, il vous faudra donc redéfinir getRenderedLine pour en tenir compte.<li>
et
</li>
, avant et aprés le texte transformé. Cela donnerait :
return '<li>'.$this->_renderInlineTag($this->_detectMatch[1]).'</li>';
.
<hr />
:
return '<hr />';
.
_renderInlineTag
Le nom de votre classe doit commencer par WRB_
et se finir
par un nom que vous indiquerez dans la propriété bloctags
de la configuration. Ainsi, si vous nommez votre classe WRB_titre
,
vous mettrez dans la configuration :
var $blogtags = array( ... , 'titre'=>true, ... );
Voici quelques informations qui vont vous permettre de mieux comprendre comment est utilisé un objet WikiRendererBloc par le moteur WikiRenderer.
detect
du bloc courant.true
, c'est que la ligne fait encore partie du bloc.
Il va donc demander au bloc de transformer la ligne en XHTML en appelant getRenderedLine
.close
du bloc), et va appeler la méthode detect
de chaque type de bloc qui sont
référencés dans la propriété bloctags
de la configuration.open
sera appelé, ainsi que getRenderedLine
.Regardez comment sont développés les blocs par défaut, dans le fichier
WikiRenderer.conf.php
.
Les mots Wiki sont des mots qui commencent par
une majuscule et en contiennent au moins 2. Ex : CeciEstUnMotWiki
. Cela est utilisé
dans les systèmes wiki, pour faire automatiquement des liens vers les pages qui portent
le même nom.
WikiRenderer permet de détecter ces mots Wiki, mais ce n'est pas activé par défaut, car le traitement des mots Wiki est spécifique à l'usage que vous en faites. Pour utiliser les mots wiki vous devez donc :
checkWikiWord
(activer la détection)
et checkWikiWordFunction
(indiquant la fonction de traitement des mots wiki).Voici un exemple de configuration :
class ConfWikiRenderer extends CopixWikiRendererConfig {
var $checkWikiWord = true;
var $checkWikiWordFunction = 'evalWikiWord';
}
Ici WikiRenderer fera appel à la fonction evalWikiWord
.
La fonction que vous indiquerez devra accepter en paramètre une liste de mots wiki qui ont été trouvé dans la ligne de texte courante. Et devra retourner une liste de chaine qui remplaceront ces mots wiki dans le texte. Le contenu de cette liste est dans le même ordre que la liste des mots wiki : la première chaîne correspond au premier mot wiki, la deuxième au deuxième mot wiki etc.
Exemple de fonction pour un système d'edition wiki, qui retourne des liens HTML pour chaque mot wiki, liens qui sont différents si ces mots correspondent ou pas à des pages wiki :
function evalWikiWord($wikiWordList){
$result=array();
foreach($wikiWordList as $word){
// findWikiPage = fonction imaginaire, qui tenterait de trouver dans un système wiki, la page correspondante au mot
if(findWikiPage($word))
// page wiki trouvée
$result[]='<a href="wiki.php?wiki='.$word.'" class="wikiword">'.$word.'</a>';
else
// page wiki non trouvée
$result[]='<a href="wiki.php?wiki='.$word.'&action=edit" class="unknowwikiword">'.$word.'</a>';
}
return $result;
}