Ayuda:Funciones del analizador sintáctico

De Wikilibros, la colección de libros de texto de contenido libre.

Esta extensión de MediaWiki es una colección de funciones de análisis sintáctico. Las funciones de análisis sintáctico tienen la siguiente sintaxis:

{{#nombrefunción: argumento 1 | argumento 2 | argumento 3...}}

Funciones[editar]

Este módulo actualmente define diez funciones: expr, if, ifeq, iferror, ifexpr, ifexist, rel2abs, switch, time y titleparts.

#expr:[editar]

La función expr computa expresiones matemáticas. La sintáxis es:

{{ #expr: expresión }}

Los operadores utilizables son (en orden holgado de precedencia):

Operador Operación Ejemplo
* Multiplicación {{#expr: 30 * 7}} = 210
/ o div División {{#expr: 30 / 7}} = 4.2857142857143
+ Suma {{#expr: 30 + 7}} = 37
- Resta (o negación) {{#expr: 30 - 7}} = 23
mod Módulo, da como resultado el resto de la división {{#expr: 30 mod 7}} = 2
round Redondea el número de la izquierda al número especificado de dígitos después del punto decimal, dado a la derecha {{#expr: 30 / 7 round 7}} = 4.2857143
= Igualdad {{#expr: 30 = 7}} = 0
<> or != Desigualdad {{#expr: 30 <> 7}} = 1
< Menor que {{#expr: 30 < 7}} = 0
> Mayor que {{#expr: 30 > 7}} = 1
<= Menor o igual que {{#expr: 30 <= 7}} = 0
>= Mayor o igual que {{#expr: 30 >= 7}} = 1
and 'Y' Lógico {{#expr: 30 and 7}} = 1
or 'O' Lógico {{#expr: 30 or 7}} = 1
not 'NO ES' Lógico {{#expr: not 7}} = 0
( ) Operadores de Agrupación {{#expr: (30 + 7) * 7 }} = 259


Los operadores booleanos (verdadero/falso) consideran el 0 como falso y el 1 como verdadero. Los números se dan en decimales desde el punto decimal ".". No es posible usar la sintaxis de estilo FORTRAN.

Ejemplo:

{{ #expr: (100 - 32) / 9 * 5 round 0 }}

da como resultado:

38

el cual es 100 °F en °C, redondeado al número entero más cercano.

#if:[editar]

La función if es de construcción if-then-else. La sintaxis es:

{{ #if: <condición> | <texto then> | <texto else> }}


Si la condición es una cadena vacía o consiste sólo de espacios en blanco, entonces se considera falsa, y la función da como resultado el texto else. De lo contrario, da como resultado el texto then. El texto else podría omitirse, por lo cual el resultado será en blanco si la condición es falsa.

Un ejemplo:

                      {{Template|parameter=algo}}  {{Template}} {{Template|parameter=}}
                                     |                        |                |
                                     |                        |                |
                                     |                        |                |
{{ #if: {{{parameter|}}} | Parámetro definido. | Parámetro indefinido, o vacío }}


Nótese que la función if no acepta signos de "=" o expresiones matemáticas. {{#if: 1 = 2|sí|no}} da como resultado "sí", porque la cadena "1 = 2" no está en blanco. Se le considera como una estructura "if definida". Para comparar cadenas, utilice ifeq. Para comparar números, utilice ifexpr.

#ifeq:[editar]

ifeq compara dos cadenas, y da como resultado otra cadena dependiendo del resultado de esa comparación. La sintaxis es:

{{ #ifeq: <texto de comparación 1> | <texto de comparación 2> | <texto igual> | <texto desigual> }}

#ifexpr:[editar]

ifexpr evalúa una expresión matemática y da como resultado una de dos cadenas dependiendo de la comparación.

{{ #ifexpr: <expresión> | <texto then> | <texto else> }}

Si la expresión evalúa cero, entonces da como resultado el texto else, de lo contrario el texto then. La sintaxis de la expresión es la misma que la de expr.

#ifexist:[editar]

ifexist toma una cadena de texto, y la evalúa como el título de un artículo en la wikipedia, y devuelve uno de dos valores, dependiendo de que exista o no, la página en la wikipedia local, donde se ejecuta la función.

{{#ifexist: título_de_página | valor_si_existe | valor_si_no_existe }}

La función devuelve verdadero, si la página existe, o apunta a una redirección, o sólo contiene meta-datos. La función sólo devuelve falso, en caso que la página que se pasa como primer parámetro, es evaluada como enlace en rojo.

{{#ifexist: Help:Extension:ParserFunctions | existe | no existe }} → existe
{{#ifexist: XXXHelp:Extension:ParserFunctionsXXX | existe | no existe }} → no existe

#switch:[editar]

switch compara un sólo valor con varios otros, dando como resultado una cadena si es que se encuentra un valor igual. La sintaxis es básicamente:

{{ #switch: <valor de comparación>
| <valor1> = <resultado1>
| <valor2> = <resultado2>
| ...
| <valorn> = <resultadon>
| <default result>
}}

switch buscará en cada uno de los valores dados hasta que se encuentre uno que sea igual. Una vez encontrado, la función da el resultado correspondiente (la cadena de texto eoncontrada después del signo de igual). Si no se encuentra uno igual, pero el último item no tiene un signo igual, se da el resultado por defecto (default). Si tu resultado por defecto debe tener un signo de igual, puedes utilizar #default:

{{ #switch: <valor de comparación>
| <value> = <resultado>
| #default = <resultado por defecto>
}}

Nótese que también es posible tener valores "permeables" (reduciendo así la necesidad de duplicar resultados). Por ejemplo:

{{ #switch: <valor de comparación>
| <value1>
| <value2>
| <value3> = <resultado3>
| ...
| <valuen> = <resultadon>
| <resultado por defecto>
}}

Nótese cómo valor1 y valor2 no contienen un signo igual. Si se les encuentra como valores iguales en la comparación, se da el resultado de valor3 (es decir, lo que sea que esté como resultado3)

Sustitución[editar]

Ver también: m:Help:Substitution.

Aplicando "subst:" a una Función de Análisis Sintáctico sí funciona, siempre y cuando no haya espacios entre "subst:" y "#".

Nótese que a menos que se utilice una técnica como la sustitución recursiva opcional, sustituir una plantilla (template) que utilice una Función de Análisis Sintáctico no reemplaza esa función con su resultado. Esto se debe tratar de evitar. Véase en meta:bugzilla:2777 una propuesta ("substall:") que podría solucionarlo.

Advertencias[editar]

Tablas[editar]

Actualmente la sintaxis de tablas tipo pipe no funciona dentro de condicionales. Existen dos maneras de contrarrestarlo.

  • esconde el pipe | (tubo) de las funciones de análisis sintáctico poniéndolo en una plantilla. Por ejemplo: Template:! (talk, backlinks) como en w:en:
  • utiliza la sintaxis de una tabla de estilo html en su lugar.

Problemas Conocidos[editar]

  1. #ifeq: compara números como números si se aplica, ver mediazilla:5693
  2. Las funciones #if pueden corromper la forma literal de parámetros indefinidos, en especial {{{1}}}

Instalación[editar]

Descarga ambos archivos y pónlos en un nuevo directorio llamado ParserFunctions en tu directorio de extensiones

Luego coloca lo siguiente al final de tu LocalSettings.php:

require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );

También puedes darle una mirada al árbol de código aquí:

1.6[editar]

En MediaWiki 1.6, la sintaxis de las Funciones de Análisis Sintáctico no tiene el carácter '#'. Si quieres usar el carácter '#', cambia el código de Parser.php a continuación:

 $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' ) );

Véase también[editar]

Enlaces externos[editar]


meta:ParserFunctions/fr wikipedia:de:Hilfe:Vorlagenprogrammierung wikipedia:en:Help:Calculation wikipedia:fr:Aide:Fonctions parseur wikipedia:hsb:Pomoc:Předłohowe programowanje wikipedia:it:Aiuto:Funzioni parser wikipedia:ja:条件文 wikipedia:nl:Help:Parserfuncties wikipedia:pl:Pomoc:Funkcje parsera wikipedia:sl:Pomoč:ParserFunctions wikipedia:vi:Trợ giúp:Tính toán wikipedia:zh:Help:解析器函数