La traduction des balises PmWiki est définie par un ensemble de règles; chaque règle fait une recherche sur une syntaxe spécifique dans le texte avec balises et remplace celui-ci par un autre texte. De manière interne, ceci est fait en utilisant la fonction PHP "preg_replace".
Les règles sont ajoutées au moteur de traduction via la fonction de PmWiki Markup(), qui est définie comme
Markup($name,$when,$pattern,$replace)
ou $name
est un nom unique (une chaîne) donnée àla règle, $when
dit àquel moment la règle doit être appliquée relativement aux autres règles, $pattern
est la syntaxe àrechercher dans le texte àbalises, et $replace
est ce qui doit remplacer la syntaxe trouvée.
Par exemple, le code qui crée la règle pour ''l'emphase d'un texte''
(dans scripts/stdmarkup.php):
Markup("em","inline","/''(.*?)''/","<em>$1</em>");
Cette définition crée une règle appelée "em" qui sera exécutée avec les autres balises "inline", et la règle remplace tout texte entre deux paires de guillemets simples avec le même texte ($1) encadré par <em>
et </em>
.
Les deux premiers paramètres de la fonction Markup() sont utilisés pour spécifier l'ordre dans laquelle les règles doivent s'appliquer. Le premier paramètre fournit un nom pour la règle -- "em
" dans l'exemple ci-dessus. Nous aurions pu choisirs d'autres noms comme "''
", ou même "deuxguillemetssimples
". En général PmWiki utilise la balise elle-même pour nommer la règle (c.a.d., PmWiki utilise "''
" au lieu de "em
"), mais pour faciliter la lecture de cet exemple, on utilise un nom mémorisable.
Le second paramètre dit que la règle doit être utilisée en même temps que les autres règles de balises "inline". PmWiki découpe la méthode de traduction en un certain nombre de phases:
_begin début de la traduction fulltext la traduction est faite sur tout le texte split découpage du texte àbalises en lignes directives exécution des directives inline balises 'inline' links conversion des [[liens]], liens-url, et MotsWiki block balises de blocs style manipulation du style _end fin de la traduction
Donc, spécifier "inline" pour le second paramètre dit que cette règle doit être appliquée dans la même phase que les autres règles "inline". Si nous voulons une règle qui soit exécutée avec les directives -- c.a.d., avant que les règles 'inline' soient exécutées, nous aurions spécifié "directives" pour le second paramètre.
Ici une règle pour le texte @@monospaced@@
Markup("@@","inline","/@@(.*?)@@/","<code>$1</code>");
et pour une directive (:comment ...:)
qui est simplement enlevée de la sortie:
Markup("comment","directives","/\\[:comment .*?:\\]/",'');
Ok, maintenant àpropos de la règle pour '''strong emphasis'''
? Nous devons être prudents ici, parce que même si cette règle est appliquée dans la même séquence que les autres balises 'inline', nous devons aussi être surs que la règle pour '''
est exécutée avant la règle pour ''
, parce que '''
contient aussi ''
. Le second paramètre de Markup() peut être utilisé pour spécifier les relations de cette nouvelle règle par rapport aux autres:
Markup("strong","<em","/'''(.*?)'''/","<strong>$1</strong>");
Ceci crée un règle appelée "strong", et le second paramètre "<em" dit que cette règle doit être exécutée avant la règle "em" définie plus haut. Si nous voulons exécuter une chose après la règle "em", nous utilisons ">em" àla place. Donc, il est possible d'ajouter des règles àtout moment dans la séquence de traduction de balises de PmWiki, ceci d'une manière extensive. (En fait, les séquences "inline", "block", "directives", etc., sont justes des règles de positionnement utilisées pour donner une séquence générale pour les autres règles. Donc on peut utiliser "<inline" pour spécifier les règles qui doivent être exécutées avant les autres règles "inline".).
Si vous voulez désactiver les balises disponibles, créez une ligne du genre :
Markup("strong","<em");
L'absence de paramètres de syntaxe indique que vous voulez désactiver la balise.
Les règles de balises par défaut de PmWiki sont définies dans le fichier scripts/stdmarkup.php. Pour voir la table de traduction complète pendant que le programme tourne, le module scripts/diag.php fournit "?action=ruleset
", qui affiche l'ensemble des règles de balises dans l'ordre d'exécution. Vous pouvez voir ceci dans BalisesPersonnalisées?action=ruleset.
Voici deux exemples que beaucoup de sites doivent se poser et qu'il n'est pas facile de résoudre. Dans ces deux cas, j'ai commencé par autoriser les balises HTML nécessaires, mais cela créait un trou dans la sécurité. Je suis donc venu aux balises personnalisées.
Balise Xiti
Xiti est un système de statistiques mis àdisposition des internautes gratuitement (pour les sites sans but très lucratif, ou en cours de démarrage), qui repose sur l'affichage d'un logo. L'appel de ce logo contient, entre autres, le nom de la page que l'on souhaite tracer.
Si le navigateur n'accepte pas les Javascripts, il s'agit d'un simple appel <IMG>. Si les scripts sont acceptés, d'autres informations sont récupérées (taille de l'écran, page d'origine…).
Dans les pages àtracer, ajouter l'instruction (:xiti `{$FullName}:). Noter que $FullName est le nom complet de la page (on peut mettre autre chose, si l'on veut). Important : Ne pas oublier l'anti-quote avant l'accolade (sinon, c'est interprété comme un lien et des balises HTML sont rajoutées) ! Astuce : Mettre cette instruction dans la barre de navigation évite de mettre la balise dans toutes les pages…
Dans le fichier config.php, inclure le code suivant (remplacer XXXXXX par le code client fourni par Xiti) : Note Certaines lignes ont été coupées… Merci de recoller les morceaux !
Markup('xiti', '>block', '/\\(:xiti (.*?):\\)/', ' <a href="http://www.xiti.com/xiti.asp?s=XXXXXX" title="Mesurez votre audience"> <script type="text/javascript"> <!-- Xt_param = \'s=210790&p=$1\'; Xt_r = document.referrer; Xt_h = new Date(); Xt_i = \'<img width="39" height="25" border="0" \'; Xt_i += \'src="http://logv28.xiti.com/hit.xiti?\'+Xt_param; Xt_i += \'&hl=\'+Xt_h.getHours()+\'x\'+Xt_h.getMinutes()+\'x\'+Xt_h.getSeconds(); if(parseFloat(navigator.appVersion)>=4) {Xt_s=screen;Xt_i+=\'&r=\'+Xt_s.width+\'x\'+Xt_s.height+\'x\'+Xt_s.pixelDepth+\'x\'+X t_s.colorDepth;} document.write(Xt_i+\'&ref=\'+Xt_r.replace(/[<>"]/g, \'\').replace(/&/g, \'$\')+\'" t itle="Analyse d\\\'audience">\'); //--> </script> <noscript> <img width="39" height="25" src="http://logv28.xiti.com/hit.xiti?s=XXXXXX&p=$1" alt="A nalyse d\'audience"> </noscript> </a>');
Pour la partie JavaScript, l'on peut s'en sortir ainsi :
Xt_i += \'src="http://logv28.xiti.com/hit.xiti?\'+Xt_param.replace(/`/, \'\');
Balise PayPal
PayPal France est la division française de PayPal et permet d'effectuer des transferts électroniques d'argent en toute (?) sécurité. Il est très fréquent de mettre un bouton "Faire un don" qui permet, sur un site gratuit, de laisser une contribution.
Lorsque l'on souhaite faire un don, PayPal fournit un code <FORM> pour déclencher l'affichage de la page ad hoc sur leur site, en ayant déjàprérempli les informations utiles.
Voici l'exemple que j'ai mis sur mon site (merci àHans, l'auteur de FixFlow, qui m'a envoyé sa version) :
Markup('paypal', '>block', '/\\(:paypal consowiki:\\)/', ' <form action="https://www.paypal.com/cgi-bin/webscr" method="post" /> <input type="hidden" name="cmd" value="_xclick" /> <input type="hidden" name="business" value="Finance@consowiki.org" /> <input type="hidden" name="item_name" value="ConsoWiki" /> <input type="hidden" name="page_style" value="PayPal" /> <input type="hidden" name="no_shipping" value="1" /> <input type="hidden" name="return" value="http://ConsoWiki.org/index.php?n=ConsoWiki.M erci" /> <input type="hidden" name="cancel_return" value="http://ConsoWiki.org/index.php?n=Cons oWiki.Dommage" /> <input type="hidden" name="currency_code" value="EUR" /> <input type="hidden" name="tax" value="0" /> <input type="hidden" name="lc" value="FR" /> <input type="hidden" name="bn" value="PP-DonationsBF" /> <input type="image" src="https://www.paypal.com/fr_FR/i/btn/x-click-but04.gif" border=" 0" name="submit" alt="Effectuez vos paiements via PayPal : une solution rapide, gr atuite et sécurisée !" /> </form />');
Les questions et mises àjour au sujet de cette page sont vivement appréciées, vous pouvez les envoyer àPm?, pmwiki-users (en anglais).
<< Configurer les liens InterMap | Index de la documentation | Styles Wiki personnalisés >>
Traduction de PmWiki.CustomMarkup
Page originale sur PmWikiFr.CustomMarkup - Rétroliens
Dernières modifications:
PmWikiFr.CustomMarkup: 24 août 2009 Ã 05h46
PmWiki.CustomMarkup: 22 septembre 2017 Ã 15h55