Help:Extension:ParserFunctions/fr

L'extension fournit 11 fonctions parseur, qui viennent en complément des  intégrés à MediaWiki. (Elle peut être configurée de manière à fournir également des fonctions parseur pour la manipulation de chaînes de caractères, lesquelles sont documentées .) Toutes les fonctions parseur fournies par cette extension ont la syntaxe suivante :

#expr
La fonction #expr: évalue une expression mathématique, et renvoie la valeur calculée. Cette fonction est également disponible dans avec la fonction



Les opérateurs utilisables dans les calculs avec #expr: sont listés ci-contre, par ordre de précédence. Voir pour plus de détails sur un opérateur. La précision et le format du résultat renvoyé dépendent du système d'exploitation du serveur sur lequel est installé le Wiki, ainsi que du format de nombre du langage du site.

Dans un calcul, zéro équivaut à  et toute autre valeur différente de zéro (positive ou négative) équivaut à un   :



S'il n'y a aucune expression en entrée (ou une expression vide), la fonction renverra une chaîne vide. Toute expression invalide causera le renvoi du message d'erreur correspondant, que l'on peut capturer avec la fonction  :



L'ordre des opérandes d'additions et soustractions avant ou après un nombre est important, un signe mal placé peut ne pas être considéré comme une erreur mais comme l'indicateur que le nombre est positif ou négatif :



Note : si vous utilisez le résultat d'un mot magique dans une expression, vous devrez utiliser le format "raw" de ce résultat pour en retirer les séparateurs de milliers, et traduire les nombres. Par exemple : le mot magique donne, alors que nous voulons 0, que l'on peut obtenir par. Ceci est particulièrement important dans certaines langues où les nombres sont traduits, comme en Bengali où donne ৩০,০৬১.



Arrondir
Rounds arrondit le nombre à sa gauche en un multiple d'une puissance de 1/10, l'exposant étant égal à la valeur tronquée du nombre donné à sa droite.

Pour arrondir au supérieur ou à l'inférieur, utilisez respectivement les opérateurs unaires  et.

Chaines
Les expressions ne fonctionnent qu'avec des valeurs numériques, elles ne peuvent pas comparer des caractères ou des chaînes de caractères. peut être utilisé à la place.



#if
La fonction #if: évalue une chaîne de test et détermine si elle est vide ou non. Une chaîne de test contenant seulement des espaces est considérée comme vide.





La fonction #if: teste d'abord si le premier paramètre n'est pas vide. S'il n'est pas vide, la fonction affiche le deuxième paramètre. Si le premier paramètre est vide ou ne contient que des caractères d'espacement (espaces, retour à la ligne, etc...), elle affiche le troisième paramètre.



La chaîne test est toujours interprétée comme du texte pur, ainsi les expressions mathématiques ne sont pas évaluées :



Le dernier paramètre (false) peut être omis



La fonction peut être imbriquée. Pour cela, imbriquez la fonction #if interne dans sa forme complète à la place d'un paramètre de la fonction #if externe. Jusqu'à 7 niveaux d'imbrication sont possibles, bien que cela puisse dépendre du wiki ou d'une limite de la mémoire.

Vous pouvez également utiliser un paramètre en tant que chaîne testée dans votre condition #if. Vous devez vous assurer que vous ajoutez le symbole  (barre verticale) après le nom de la variable.



Voir pour plus d'exemples de cette fonction.

#ifeq
La fonction #ifeq: compare deux chaînes de caractères et détermine si elles sont identiques.



Si les deux chaînes sont des valeurs numériques valides, les chaînes sont comparées numériquement :



Sinon la comparaison s'effectue comme du texte ; cette comparaison est sensible à la casse :


 * →  (comparer à l'exemple similaire ci-dessus, sans les quotes)
 * →  (comparer à l'exemple similaire ci-dessus, avec  )
 * →  (comparer à l'exemple similaire ci-dessus, sans les quotes)
 * →  (comparer à l'exemple similaire ci-dessus, avec  )

Comme exemple pratique, étant donné un template existant  utilisé pour définir des tailles standards courte et longue, défini ainsi :



il en résulte ce qui suit :


 * → 20
 * → 40
 * → 40

#iferror
La fonction #iferror: prend une chaîne en entrée et renvoie un des deux résultats : la fonction s'évalue à  si la chaîne d'entrée contient un objet HTML avec , tel que généré par d'autres fonctions du parseur comme  ,   et  , des erreurs de templates comme des boucles ou récursions, et d'autres erreurs "failsoft" du parseur.



L'une ou l'autre des chaînes de retour, ou les deux, peuvent être omises. Si la chaîne  est omise, la chaîne   est retournée si elle n'est pas erronée. Si la chaîne  est aussi omise, une chaîne vide est retournée en erreur :


 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;

#ifexpr
La fonction #ifexpr: évalue une expression mathématique, et renvoie une des deux chaînes selon la valeur booléenne du résultat :



L'  d'entrée est évaluée exactement comme pour   plus haut, avec les mêmes opérateurs disponibles. Le résultat est alors évalué comme expression booléenne.

Une expression vide en entrée s'évalue à  :



Comme mentionné plus haut, zéro est évalué à  et toute valeur non-zéro est évaluée à , ainsi cette fonction est équivalente à cette autre utilisant seulement   et   :



sauf pour une expression d'entrée vide ou erronnée (un message d'erreur est traité comme une chaîne vide ; il n'est pas égal à zéro, donc on obtient ) :

à comparer à :

L'une ou l'autre des valeurs de retour peut être omise, ou les deux ; on n'a aucune sortie quand la branche appropriée est laissée vide :



#ifexist
La fonction #ifexist: prend une chaîne en entrée, l'interprète comme titre de page, et renvoie une des deux valeurs selon que la page existe ou non sur le wiki local.



La fonction s'évalue à  si la page existe, qu'elle ait un contenu, ou qu'elle soit visiblement blanche (mais contenant des méta-données telles que des liens vers des catégories ou des mots magiques, mais aucun contenu visible), ou qu'elle soit complètement vide, ou qu'il s'agisse d'une redirection. Seules les pages en liens rouges s'évaluent à, y compris si la page a existé autrefois mais a été supprimée.



La fonction s'évalue à  pour les system messages that have been customized, and for Special:MyLanguage/Help:Special pages|special pages that are defined by the software.



Si une page vérifie une page cible par, alors cette page apparaîtra dans la liste  de la page cible. Ainsi, si le code  était inclus et actif sur cette page, /Foo listerait.

Sur les wikis utilisant un dépôt de médias partagé,  peut être utilisé pour vérifier si un fichier a été chargé dans ce dépôt, mais pas sur le wiki lui-même :

Si une page de description locale a été créée pour le fichier, le résultat est exists for tous les cas ci-dessus.

ne fonctionne pas avec des liens interwiki.

limitations de ifexist
est considéré comme "fonction du parseur coûteuse" ; on ne peut en inclure qu'un nombre limité sur chaque page (en comptant les fonctions internes aux modèles transclus). Quand cette limite est dépassée, toutes les fonctions  surnuméraires retourneront automatiquement false, que la page cible existe ou non, et la page est catégorisée dans Category:. Le nom de la Special:MyLanguage/Help:Tracking categories|catégorie de traçage peut dépendre de la langue du contenu de votre wiki.

Dans quelques cas, il est possible d'émuler l'effet de ifexist par css, avec les sélecteurs  (pour sélectionner les liens vers des pages inexistantes) ou   (pour sélectionner les liens vers des pages existantes). De plus, puisque le nombre de fonctions du parseur coûteuses utilisables sur une page est contrôlé par, on peut aussi augmenter la limite dans LocalSettings.php si besoin.

#rel2abs
La fonction #rel2abs: convertit un chemin relatif de fichier en chemin absolu.



Dans le  en entrée, la syntaxe suivante est valide :
 * → le niveau courant
 * → "remonter d'in niveau"
 * → "descendre d'un niveau dans le sous-répertoire /foo"

Le nom complet de la page est utilisé par défaut si  n'est pas spécifié.



Une syntaxe invalide, comme  ou , sera ignorée. Étant donné que seuls deux full stops consécutifs sont autorisés, les séquences de ce type peuvent être utilisées pour séparer les éléments successifs :



#switch
Cette fonction compare une donnée à une liste de valeur, et retourne le résultat associé à la valeur correspondante.

Exemples :




 * 1) switch avec des balises de transclusion partielle peuvent engendrer un fichier de configuration qui autorise un éditeur qui n'est pas familier avec le codage des modèles à visualiser et éditer les éléments configurables.

Valeurs par défaut
La fonction retourne le résultat par défaut si aucune des valeurs  ne correspond à la donnée à comparer  :



Le résultat par défaut doit être le dernier paramètre et ne doit pas contenir de signe égal.



La valeur par défaut peut aussi être explicitement déclarée par la chaine " ".

Dans ce cas, la valeur par défaut peut être placée à n'importe quelle position :



Si aucune valeur par défaut n'est définie et qu'aucune valeur ne correspond à la donnée entrée, la fonction ne retourne rien :



Groupe de valeurs
Il est possible de regrouper plusieurs valeurs ayant un même résultat, et ainsi n'avoir à fournir qu'une fois ce résultat.

Ici les valeurs,   et   retournent toutes   ;   et   retournent.

Comportement de comparaison
Comme pour, la comparaison est numérique si la donnée à comparer et la valeur sont numérique ; sinon c'est une comparaison de chaine sensible à la casse :





Il est possible de comparer avec un valeur vide :

Si une correspondance est trouvé avec la donnée à comparer, les valeur suivantes sont ignorées :

Signes égal bruts
Les chaînes de caractères "Case" ne peuvent pas contenir de signes "égal" bruts. Pour contourner ce comportement, créez un modèle = contenant un simple signe égal :, ou remplacez les signes "égal" par le code html correspondant.

Exemple :





Pour une utilisation simple de cette fonction en conditions réelles, regardez Template:NBA Color. Deux exemples complexes peuvent être trouvés à et Template:BOTREQ.

Remplacement de #ifeq
peut être utilisé la profondeur d’expansion.

Par exemple : est équivalent à : i.e. deep nesting, linear:

On the other hand, the switch replacement could be complicated/impractical for IFs nested in both branches (shown with alternatives of indentation, indented on both sides), making full symmetrical tree:

#time
Cette fonction prend une date ou une heure (selon le calendrier grégorien) et la formate selon la syntaxe donnée. Une date et/ou une heure peuvent être spécifiées ; par défaut, la valeur du mot magique  est utilisée – c'est-à-dire, le moment à laquelle la page a été transformée en HTML pour la dernière fois.



La liste des codes de formatage acceptés figure dans la table à droite. Tout caractère non reconnu est passé tel quel sans altération ; ceci s’applique aussi aux espaces (le système n’en a pas besoin pour interpréter les codes). Il y a deux façons d’échapper à l’interprétation des caractères dans la chaîne de format : De plus, le digraphe  est interprété comme un simple littéral « x ».
 * 1) une barre oblique inverse  suivie d’un caractère de format est interprété comme un simple caractère littéral, la barre oblique est simplement supprimée ;
 * 2) les caractères encadrés de guillemets doubles ASCII  sont considérés comme des caractères littéraux, les guillemets sont simplement supprimés.



L’ peut être dans tout format accepté par la fonction strtotime de PHP. Aussi bien des dates absolues (par ex., ) et relatives (par ex.,  ) sont acceptées.


 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 

Un code langue de la norme ISO 639-3 (?) permet à la chaîne d’être affichée dans la langue choisie

Si vous avez calculé un horodatage Unix, vous pouvez l’utiliser dans les calculs de date en préfixant le symbole.



{{ {{TNTN|Warning}} |L’étendue des entrées acceptables est du 1er janvier 0111 au 31 décembre 9999. Le résultat est inconsistant pour les années 100 à 110 concernant les années bissextiles et r, D, I et U semblent interpréter ces années de la même façon que les années 2000 à 2010.

→ {{#time: d F Y | 29 Feb 0100 }} (correct, année non bissextile), mais

→ {{#time: r | 29 Feb 0100 }} (faux, même si 100 est interprété comme 2000, car c’était bien une année bissextile)

→ {{#time: d F Y | 15 April 10000 }}

→ {{#time: r | 10000-4-15 }}

Les années 0 à 99 sont interprétées comme 2000 à 2069 et 1970 à 1999, sauf lorsqu’elles sont écrites dans un format à 4 chiffres avec des zéros initiaux :

→ {{#time: d F Y | 1 Jan 6 }}

→ {{#time: d F Y | 1 Jan 06 }}

→ {{#time: d F Y | 1 Jan 006 }}

→ {{#time: d F Y | 1 Jan 0006 }} (4-digit format)

Le jour de la semaine est correctement fourni pour les années 100 à 110 ; mais pour les années 111 à 1752, le format de sortie brut  produit   produit   → {{#time: Y | January 1 }}

{{ {{TNTN|Warning}} |La fonction de remplissage n'est pas cohérente ; certaines parties sont remplies à l'aide des valeurs actuelles, d'autres ne le sont pas :

→ {{#time: Y m d H:i:s | June }} Gives the start of the day, but the current day of the month and the current year. → {{#time: Y m d H:i:s | 2003 }} Gives the start of the day, but the current day of the year. }}

Un nombre à quatre chiffres est toujours interprété comme une année, jamais comme des heures et minutes :
 * → {{#time: Y m d H:i:s | 1959 }}

Un nombre à six chiffres est interprété comme heures, minutes et secondes dans la mesure du possible, sinon comme erreur (non, par exemple, comme année et mois) :
 * → {{#time: Y m d H:i:s | 195909 }} L'entrée est traitée comme un code de temps plutôt qu'un code d'année+mois.
 * → {{#time: Y m d H:i:s | 196009 }} Bien que 19:60:09 ne soit pas une heure valide, 196009 n'est pas interprété comme septembre 1960.

La fonction exécute un certain nombre de calculs de dates :


 * → {{#time: d F Y | January 0 2008 }}
 * → {{#time: d F | January 32 }}
 * → {{#time: d F | February 29 2008 }}
 * → {{#time: d F | February 29 2007 }}
 * → {{#time:Y-F|now -1 months}}

La longueur totale des chaînes de format des appels de  est limitée à 6 000 caractères.

Time Zone issue
There is a bug in this #time parser function (more specifically in PHP DateTime) that does not allow the passing-in of non-integers as relative time zone offsets. This issue does not apply when using an on-the-hour time zone, such as EDT. For example:

However, Venezuela is on a -4.5 hours time offset from UTC, and thus using its time zone will not normally allow the correct calculation of a relative time zone offset. Here's what happens: To workaround this issue, simply convert the time into minutes or seconds, like this:

(Tim Starling, the developer of this function, provided the exact syntax for this solution.)

#timel
This function is identical to, except that it uses the local time of the wiki (as set in ) when no date is given.





#titleparts
This function separates a page title into segments based on slashes, then returns some of those segments as output.



If the number of segments to return parameter is not specified, it defaults to "0", which returns all the segments from the first segment to return (included). If the first segment to return parameter is not specified or is "0", it defaults to "1":


 * →  See also.
 * →  See also.

Negative values are accepted for both values. Negative values for the number of segments to return parameter effectively 'strips' segments from the end of the string. Negative values for the first segment to return translates to "start with this segment counting from the right":


 * →  Strips one segment from the end of the string. See also.
 * →   Strips all 4 segments from the end of the string
 * →   Strips 5 segments from the end of the string (more than exist)
 * →   Returns last segment. See also.
 * →   Strips one segment from the end of the string, then returns the second segment and beyond
 * →   Start copying at the second last element; strip one segment from the end of the string

Before processing, the pagename parameter is HTML-decoded: if it contains some standard HTML character entities, they will be converted to plain characters (internally encoded with UTF-8, i.e. the same encoding as in the MediaWiki source page using this parser function).


 * For example, any occurence of,  , or   in pagename will be replaced by.
 * No other conversion from HTML to plain text is performed, so HTML tags are left intact at this initial step even if they are invalid in page titles.

Then the decoded pagename is canonicalized into a standard page title supported by MediaWiki, as much as possible:


 * 1) All underscores are automatically replaced with spaces:
 * →  Not bah_boo, despite the underscore in the original.
 * 1) The string is split a maximum of 25 times; further slashes are ignored and the 25th element will contain the rest of the string. The string is also limited to 255 characters, as it is treated as a page title:
 * If for whatever reason you needed to push this function to its limit, although very unlikely, it is possible to bypass the 25 split limit by nesting function calls:
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).

{{ | 1 = Certain characters that are illegal in a page title will cause #titleparts to not parse the string:


 * → {{#titleparts: {one/two} | 1 | 1 }}. Does not produce the expected: {one
 * → {{#titleparts: page/123 | 1 | 2 }}. Does not work because brackets are illegal in page titles and this parser function does not process links embedded in its input pagename parameter, even when they use the MediaWiki syntax, or any other HTML or MediaWiki tags.
 * → "{{#titleparts: red/#00FF00/blue| 1 | 3 }}". Does not work because "#" is also illegal in page titles.

}}

{{ {{TNTN|Warning}}| 1 = This function does not degrade gracefully if your input exceeds 255 characters. If the inputted string is 256 characters long or more, this function will simply toss the string back at you. }}

Substitution
Parser functions can be substituted by prefixing the hash character with :


 * → the code   will be inserted in the wikitext since the page exists.

Substitution does not work within, you can use &hellip;  for this purpose.

Redirects
Especially   could be handy in  to pages including dates, but this does not work.

Escaping pipe characters in tables
Parser functions will mangle syntax and pipe characters, treating all the raw pipe characters as parameter dividers. To avoid this, most wikis used a template    :! with its contents only a raw pipe character, since MW 1.24 a  replaced this kludge. This 'hides' the pipe from the MediaWiki parser, ensuring that it is not considered until after all the templates and variables on a page have been expanded. It will then be interpreted as a table row or column separator. Alternatively, raw HTML table syntax can be used, although this is less intuitive and more error-prone.

You can also escape the pipe character for display as a plain, uninterpreted character using an HTML entity:.

Stripping whitespace
Whitespace, including newlines, tabs, and spaces, is stripped from the beginning and end of all the parameters of these parser functions. If this is not desirable, comparison of strings can be done after putting them in quotation marks.



To prevent the trimming of then and else parts, see. Some people achieve this by using &lt; &gt;  &lt; /nowiki &gt; instead of spaces.


 * → foofoo
 * → foofoo

Cependant, cette méthode peut être utilisée pour rendre un caractère unique, car l'analyseur extrait plusieurs caractères d'une ligne en une seule.


 * →  foofoo 

In this example, the  style is used to force the whitespace to be preserved by the browser, but even with it the spaces are not shown. This happens because the spaces are stripped by the software, before being sent to the browser.

It is possible to workaround this behavior replacing whitespaces with  (breakable space) or   (non-breakable space), since they are not modified by the software:


 * →  foofoo 
 * → foofoo

Voir aussi

 * Help:Calculation (on Meta)
 * on Meta
 * on Meta
 * Module:String obsoleting Extension:StringFunctions
 * Module:String obsoleting Extension:StringFunctions
 * Module:String obsoleting Extension:StringFunctions