Help:Extension:ParserFunctions/fr

L'extension ParserFunctions fournit 11 fonctions parseur, qui viennent en complément des mots magiques 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 Scribunto 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.

Strings
Expressions only work with number-like values, they cannot compare strings or characters. can be used instead.



#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. Au moins 7 niveaux d'imbrication sont possibles, bien que cela puisse dépendre du wiki ou d'une limite de la mémoire.
 * Exemple:

You can also use a parameter as the test string in your #if statement. You need to ensure you add the | (pipe symbol) after the name of the variable.



Voir Help:Parser functions in templates 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 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 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é.



Invalid syntax, such as  or , is ignored. Since no more than two consecutive full stops are permitted, sequences such as these can be used to separate successive statements:



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

Exemples :




 * 1) switch with partial transclusion tags can effect a configuration file that enables an editor unfamiliar with template coding to view and edit configurable elements.

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éfault peut aussi être explicitement déclaré par la chaine " ".

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



Si aucune valeur par défaut n'est défini 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.

Comparison behavior
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 :

Raw equal signs
"Case" strings cannot contain raw equals signs. To work around this, create a template = containing a single equals sign:.

Example:



For a simple real life example of the use of this function, check Template:NBA color. Two complex examples can be found at and Template:BOTREQ.

Replacing #ifeq
can be used to reduce expansion depth.

Par exemple : is equivalent to i.e.

#time
This parser function takes a date and/or time (in the Gregorian calendar) and formats it according to the syntax given. A date/time object can be specified; the default is the value of the magic word  – that is, the time the page was last rendered into HTML.



The list of accepted formatting codes is given in the table to the right. Any character in the formatting string that is not recognized is passed through unaltered; this applies also to blank spaces (the system does not need them for interpreting the codes). There are also two ways to escape characters within the formatting string: In addition, the digraph  is interpreted as a single literal "x".
 * 1) A backslash followed by a formatting character is interpreted as a single literal character
 * 2) Characters enclosed in double quotes are considered literal characters, and the quotes are removed.



The  can be in any format accepted by PHP's strtotime function. Both absolute (eg ) and relative (eg  ) times are accepted.


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

The language code in ISO 639-3 (?) allows the string to be displayed in the chosen language

If you've calculated a Unix timestamp, you may use it in date calculations by pre-pending an  symbol.



Full or partial absolute dates can be specified; the function will "fill in" parts of the date that are not specified using the current values:



With MediaWiki r86805 - Code Review, a four-digit number is always interpreted as a year, never as hours and minutes:

A six-digit number is interpreted as hours, minutes and seconds if possible, but otherwise as an error (not, for instance, a year and month):
 * →  Input is treated as a time rather than a year+month code.
 * →  Although 19:60:09 is not a valid time, 196009 is not interpreted as September 1960.

The function performs a certain amount of date mathematics:



The total length of the format strings of the calls of  is limited to 6000 characters.

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) The list of substrings is not cleaned up hierarchically (unlike with the   and   relative path segments are left intact by #titleparts):
 * 2) 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) The list of substrings is not cleaned up hierarchically (unlike with the   and   relative path segments are left intact by #titleparts):
 * 2) 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 redirects to pages including dates, but this does not work.

Escaping pipe characters in tables
Parser functions will mangle wikitable 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   magic word 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 m:Template:If. Some people achieve this by using &lt; nowiki &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