Ajuda:Funció Parser
De Viquipèdia
|
|||||
Consultar | |||||
Editar | |||||
Manteniment i organització | |||||
Establir contacte | |||||
Edita |
Les funcions d'anàlisi sintàctic (parser) tenen la següent sintaxi:
- {{{{#nomfunció: argument 1 | argument 2 | argument 3...}}
Taula de continguts |
[edita] Funcions
Aquest mòdul defineix actualment cinc funcions: expr, if, ifeq, ifexpr, i switch.
[edita] #expr:
La funció expr calcula expressions matemàtiques. La sintaxi és:
{{ #expr: expressió }}
Els operadors que es poden fer servir són:
-
Operador Operació Exemple * Multiplicació {{#expr: 30 * 7}} = 210 / o div Divisió {{#expr: 30 / 7}} = 4.2857142857143 + Suma {{#expr: 30 + 7}} = 37 - Resta (o signe negatiu) {{#expr: 30 - 7}} = 23 mod Mòdul, dóna com a resultat el residu de la divisió {{#expr: 30 mod 7}} = 2 round Arrodoneix el nombre de l'esquerra al nombre especificat de dígits després del punt decimal, cap a la dreta {{#expr: 30 / 7 round 7}} = 4.2857143 = Igualtat {{#expr: 30 = 7}} = 0 <> or != Desigualtat (o és diferent) {{#expr: 30 <> 7}} = 1 < Menor que {{#expr: 30 < 7}} = 0 > Major que {{#expr: 30 > 7}} = 1 <= Menor o igual que {{#expr: 30 <= 7}} = 0 >= Major o igual que {{#expr: 30 >= 7}} = 1 and 'I' lògic {{#expr: 30 and 7}} = 1 or 'O' lògic {{#expr: 30 or 7}} = 1 not 'NO ÉS' lògic {{#expr: not 7}} = 0 ( ) Operadors d'agrupació {{#expr: (30 + 7) * 7 }} = 259
Els operadors booleans (cert/fals) consideren el 0 com a fals i l'1 com a cert. Els nombres es donen en decimals des del punt decimal ".". No es pot fer servir la sintaxi d'estil FORTRAN.
Exemple:
{{ #expr: (100 - 32) / 9 * 5 round 0 }}
dóna com a resultat:
38
[edita] #if:
La funció if segueix l'estructura de if-then-else. (si - aleshores - en cas contrari). La sintaxi és:
{{ #if: <condició> | <text then> | <text else> }}
Si es compleix la condició aleshores s'aplica la funció (o el text) del then. En cas que no es compleixi aleshores s'aplica la funció else.
Si la condició és una cadena buida o només té espais en blanc, aleshores es considera falsa, i la funció dóna com a resultat el text else. En cas contrari, el resultat que retorna és el text then. El text else es podria ometre, de manera que si la condició és falsa el resultat seria en blanc.
Un exemple:
{{Plantilla|paràmetre=alguna cosa}} {{Plantilla}} {{Plantilla|paràmetre=}} | | | | | | | | | {{ #if: {{{parameter|}}} | Paràmetre definit. | Paràmetre indefinit, o buit }}
Cal tenir present que la funció if no accepta signes de "=" o expressions matemàtiques. {{#if: 1 = 2|sí|no}} dóna com a resultat "sí", perque la cadena "1 = 2" no és en blanc. Té la consideració d'estructura "if definida". Per a comparar cadenes, s'ha de fer servir ifeq. Per a comparar nombres, s'ha de fer servir ifexpr.
[edita] #ifeq:
ifeq compara dues cadenes, i dóna com a resultat una altra cadena en funció del resultat d'aquesta comparació. La sintaxi és:
{{ #ifeq: <text de comparació 1> | <text de comparació 2> | <text igual> | <text desigual> }}
[edita] #ifexpr:
ifexpr evalua una expressió matemàtica i dóna com a resultat una cadena entre dues possibles en funció de la comparació.
{{ #ifexpr: <expressió> | <text then> | <text else> }}
Si l'expressió evalua zero, aleshores dóna com a resultat el text else, i en cas contrari aleshores el resultat és el text then. La sintaxi de l'expressió és la mateixa que la de expr.
[edita] #switch:
switch
compara un únic valor amb altres diversos, donant com a resultat una cadena si troba un valor igual. La sintaxi és bàsicament:
{{ #switch: <valor de comparació> | <valor1> = <resultat1> | <valor2> = <resultat2> | ... | <valorn> = <resultatn> | <resultat per defecte> }}
switch
cercarà en cadascun dels valors donats fins que en trobi un d'igual. Un cop trobat, la funció dóna el resultat corresponent (la cadena de text trobada després del signe d'igual). Si no en troba cap d'igual, però el darrer element no té un signe igual, aleshores dóna el resultat per defecte (default). Si el resultat per defecte "ha de tenir" un signe d'igual, es pot fer servir l'etiqueta #default
:
{{ #switch: <valor de comparació> | <valor> = <resultat> | #default = <resultat per defecte> }}
S'ha de tenir en compte que també és possible tenir valors "permeables" (reduïnt així la necessitat de duplicar resultats). Per exemple:
{{ #switch: <valor de comparació> | <valor1> | <valor2> | <valor3> = <resultat3> | ... | <valorn> = <resultatn> | <resultat per defecte> }}
També s'ha de tenir en compte que valor1 i valor2 no tenen un signe igual. Si coincideixen en la comparació, s'obté el resultat de valor3 (és a dir, qualsevol cosa que hi hagi com a resultat3)
[edita] Sustitució
- Vegeu també: m:Help:Substitution.
Aplicant "subst:" a una Funció d'Anàlisi Sintàctic sí funciona, sempre que no hi hagi espais entre "subst:" i "#".
Cal observar que a no ser que es faci servir una tècnica com la sustitució recursiva opcional, substituir una plantilla (template) que faci servir una Funció d'Anàlisi Sintàctic no substitueix aquesta función amb el seu resultat. Això s'ha d'evitar. Vegeu a meta:bugzilla:2777 una proposta ("substall:") que podria solucionar-ho.
[edita] Advertiments
[edita] Taules
Actualment la sintaxi de taules tipus pipe no funciona dins de condicionals. Existeixen dues maneres de contrarrestar-ho.
- amagar el pipe de les funcions d'anàlisi sintàctic posant-lo en una plantilla. Per exemple: Template:! (talk, backlinks) com a w:en:
- fer servir la sintaxi d'una taula d'estil html en comptes d'aquesta.
[edita] Problemes Coneguts
- #ifeq: compara números com a números si s'aplica, vegeu mediazilla:5693
- Les funcions #if poden corrompre la forma literal de paràmetres indefinits, en especial {{{1}}}
- Paràmetres definits i el mecanisme paràmetre default no queden afectats
- Es poden veure exemples de mediazilla:5678 a la pàgina de prova 5678
[edita] Instal.lació
Descarregueu ambdós fitxers i poseu-los en un directori nou anomenat ParserFunctions del vostre directori d' extensions
Després afegiu el següent al final del vostre LocalSettings.php:
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );
També es pot veure l'arbre de codi aquí:
[edita] 1.6
A MediaWiki 1.6, la sintaxi de les Funcions d'Anàlisi Sintàctic no té el caràcter '#'. Si voleu fer servir el caràcter '#', s'ha de canviar el codi de Parser.php tal com es mostra a continuació:
$wgParser->setFunctionHook( 'expr', array( &$wgExtParserFunctions, 'expr' ) ); to $wgParser->setFunctionHook( '#expr', array( &$wgExtParserFunctions, 'expr' ) ); $wgParser->setFunctionHook( 'if', array( &$wgExtParserFunctions, 'ifHook' ) ); to $wgParser->setFunctionHook( '#if', array( &$wgExtParserFunctions, 'ifHook' ) ); $wgParser->setFunctionHook( 'ifeq', array( &$wgExtParserFunctions, 'ifeq' ) ); to $wgParser->setFunctionHook( '#ifeq', array( &$wgExtParserFunctions, 'ifeq' ) ); $wgParser->setFunctionHook( 'ifexpr', array( &$wgExtParserFunctions, 'ifexpr' ) ); to $wgParser->setFunctionHook( '#ifexpr', array( &$wgExtParserFunctions, 'ifexpr' ) ); $wgParser->setFunctionHook( 'switch', array( &$wgExtParserFunctions, 'switchHook' ) ); to $wgParser->setFunctionHook( '#switch', array( &$wgExtParserFunctions, 'switchHook' ) );
[edita] Vegeu també
- m:ParserFunctions (anglès)
- m:Help:Calculation (anglès)