Ajuda:ParserFunctions

Origem: Wikipédia, a enciclopédia livre.

Guia de edição
Criar uma conta
Menus e ferramentas
Como começar uma página
Formatar artigos
Usar o acordo ortográfico
Ligar artigos entre si
Ligar artigos a outras Wikipedias
Ligar artigos a projectos relacionados
Ligar artigos a páginas externas
Como usar imagens
Categorizar
Usar tabelas
Usar fórmulas matemáticas
Usar predefinições
Criar predefinições
Fazer notas de rodapé
Renomear uma página
Reverter edições
Fundir artigos
Tamanho de páginas
Dividir artigos
Redireccionar páginas
Desambiguar termos
Traduzir artigos
Assinar mensagens
Arquivar discussões
Editar com um editor externo
Usar robôs/bots
Dicas e truques
FAQ de edição
Outros guias
Portal de ajuda
Primeiros passos
Livro de estilo
Guia de consulta rápida
Guia de consulta e reprodução
Guia de eliminação
editar

Esta extensão do MediaWiki é uma coleção de funções de análise sintática (ParserFunctions). Essas funções possuem uma cerquilha (#) na frente de seus nomes, adquirindo, portanto, a seguinte sintaxe:

{{#nomedafunção: argumento 1 | argumento 2 | argumento 3...}}

Índice

[editar] Funções

Este módulo define sete funções existentes atualmente: expr, if, ifeq, ifexist, ifexpr, switch, and time.

[editar] #expr:

A função expr computa matematicamente expressões baseadas na permutação de números (ou variáveis/parâmetros que resultam em números) e operadores. Ele não funciona com strings (cadeias de caracteres); para tal propósito, utilize a função ifeq. A sintaxe é:

{{ #expr: expressão }}

Segue abaixo uma lista de operadores suportados. Para maiores detalhes sobre a precedência de operadores, veja m:Help:Calculation.

De maneira geral: (1) grupos (parênteses), (2) unários (sinais +/- e NOT lógico), (3) multiplicativo (*, /, div, mod), (4) aditivo (+ e -), (5) round, (6) comparativo (=, !=, <, >, etc.), (7) AND lógico, (8) OR lógico. Quando existirem operadores com a mesma classe de precedência, os cálculos são resolvidos os da esquerda para direita. Como sempre, alguns parênteses redundantes são melhores do que um código conciso e errado.

Operador Operação Exemplo
nenhum {{#expr: 123456789012345}} = 123456789012340
{{#expr: 0.000001}} = 1.0E-6
( ) Operadores de grupos {{#expr: (30 + 7) * 7 }} = 259
+ Sinal unário + {{#expr: +30 * +7}} = 210
- Sinal unário - (negação) {{#expr: -30 * -7}} = 210
not NOT unário, NOT lógico {{#expr: not 0 * 7}} = 7
{{#expr: not 30+7}} = 7
* Multiplicação {{#expr: 30 * 7}} = 210
/ Divisão, o mesmo que div {{#expr: 30 / 7}} = 4.2857142857143
div Divisão, o mesmo que /,
sem divisão por inteiro
{{#expr: 30 div 7}} = 4.2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2}} = 6
mod "Módulo", resto da divisão após "truncar" ambos operadores em números inteiros.
Atenção, div e mod são diferentes das demais linguagens de programação.
{{#expr: 30 mod 7}} = 2
{{#expr: -8 mod -3}} = -2
{{#expr: -8 mod +3}} = -2
{{#expr: 8 mod 2.7}} = 0
{{#expr: 8 mod 3.2}} = 2
{{#expr: 8.9 mod 3}} = 2
+ Adição {{#expr: 30 + 7}} = 37
- Subtração {{#expr: 30 - 7}} = 23
round Arredonda o número a esquerda para a potência de 1/10 dada a direita {{#expr: 30 / 7 round 3}} = 4.286
{{#expr: 30 / 7 round 0}} = 4
{{#expr: 3456 round -2}} = 3500
= Igualdade {{#expr: 30 = 7}} = 0
<> Desigualdade, o mesmo que != {{#expr: 30 <> 7}} = 1
 != Desigualdade, o mesmo que <>, xor lógico {{#expr: 1 != 0}} = 1
< Menor que {{#expr: 30 < 7}} = 0
> Maior que {{#expr: 30 > 7}} = 1
<= Menor ou igual a {{#expr: 30 <= 7}} = 0
>= Maior ou igual a {{#expr: 30 >= 7}} = 1
and E lógico {{#expr: 4<5 and 4 mod 2}} = 0
or OU lógico {{#expr: 4<5 or 4 mod 2}} = 1

Os operadores booleanos consideram 0 como "falso" e qualquer outro número como "verdadeiro"; uma saída "verdadeira" é mostrada como 1.

Números utilizam "." como símbolo decimal. A função formatnum: pode ser utilizada para mudar o ponto decimal para uma vírgula nos países e locais onde isto for apropriado. A notação científica com E mais expoente ainda não é suportada como entrada de expressões, mas é utilizada nas saídas; para maiores detalhes veja m:Help:Calculation.

[editar] #if:

A função if é uma estrutura do tipo se-então-senão. A sintaxe é:

{{ #if: <condição> | <então texto> | <senão texto> }}

Se a condição é uma string vazia ou consiste apenas de espaços em branco, então é considerada como falsa, e a função retorna senão texto. Caso contrário, a função retorna então texto. O senão texto pode ser omitido; assim, a condição for falsa, a função devolve um texto vazio.

Um exemplo:

                     {{Predefinição|parâmetro=algo}} {{Predefinição}} {{Predefinição|parâmetro=}}
                                   |                        |                |
                                   |                        |                |
                                   |                        |                |
{{ #if: {{{parâmetro|}}} | Parâmetro é definido. | Parâmetro não definido ou vazio}} 

Note que a função if não suporta sinais de "=" ou expressões matemáticas. {{#if: 1 = 2|sim|não}} irá devolver "sim", porque a string "1 = 2" não é vazia.

[editar] #ifeq:

ifeq compara duas strings ou números, e retorna outra string dependendo do resultado da comparação. A sintaxe é:

{{ #ifeq: <texto 1> | <texto 2> | <igual texto> | <não igual texto> }}

Ambas strings podem ser interpretadas como números como se a comparação fosse numérica. Para forçar a comparação de uma cadeira de caracteres que não podem ser intepretadas como números deve-se adicionar aspas a elas:

{{ #ifeq: +07 | 007 | 1 | 0 }} resulta 1
{{ #ifeq:"+07"|"007"| 1 | 0 }} resulta 0

A comparação de uma string é caso-sensitivo:

{{ #ifeq: A | a | 1 | 0 }} resulta 0

[editar] #ifexist:

ifexist retorna um de dois resultados, baseado se existe ou não um artigo ou página com o título especificado. Exemplos:

{{#ifexist:Wikipédia|Sim|Não}} resulta Sim, porque Wikipédia existe
{{#ifexist:wikipédia|Sim|Não}} resulta Sim, porque wikipédia é a forma canônica do artigo Wikipédia
{{#ifexist:WiKiPeDiA|Sim|Não}} resulta Não porque o artigo WiKiPeDiA não existe
{{#ifexist:m:Help:Calculation|Sim|Não}} resulta Não entretanto m:Help:Calculation existe, porque a função não interpreta o prefixo de interwiki.

O primeiro parâmetro é o título a ser checado, o segundo é o resultado positivo e o terceiro, o negativo. Se o parâmetro passado não produz um objeto com título válido, então o resultado é negativo.

[editar] #ifexpr:

ifexpr computa uma expressão matemática e retorna uma de duas strings como resultado

{{#ifexpr: <expressão> | <então texto> | <senão texto> }}

Se a expressão calculada resulta em zero, então o senão texto é mostrado, do contrário, o então texto é mostrado. A sintaxe da expressão é a mesma utilizada por expr.

O senão texto também é mostrado para expressões vazias:
{{#ifexpr: {{ns:0}}|Presente|'''ou então'''}} resulta ou então
Omitindo ambos então texto e senão texto não resulta em nenhuma saída exceto uma possível mensagem de erro; isso pode ser utilizada para checar a correção de uma expressão, ou para checar a palavra da mensagem de erro (emulando afirmação, erros forçados):
{{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|1|0}}}} Divisão por zero
{{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|0|1}}}}
{{#if:{{#ifexpr: 1=2}}|wrong|correct}} correct
{{#if:{{#ifexpr: 1E2}}|wrong|correct}} correct
{{#if:{{#ifexpr: 1/0}}|wrong|correct}} wrong
{{#if:{{#ifexpr: a=b}}|wrong|correct}} wrong

[editar] #switch:

switch compara um único valor de comparação com vários outros, retornando uma string se encontrar um valor igual. A sintaxe é basicamente:

{{ #switch: <valor de comparação>
| <valor1> = <resultado1>
| <valor2> = <resultado2>
| ...
| <valorn> = <resultadon>
| <resultado padrão>
}}

switch irá procurar por cada valor passado até que um valor coincida com o valor de comparação. Quando encontrado, o resultado para aquele valor é retornado (o texto escrito após o sinal de igual). Se nenhum resultado for encontrado e o último item não possuir sinal de igualdade, a função então o retornará como resultado padrão. Se o seu resultado necessitar obrigatoriamente de um sinal de igualdade, você poderá utilizar #default:

{{ #switch: <valor de comparação>
| <valor> = <resultado>
| #default = <default resultado>
}}

Note que é possível também abortar valores (reduzindo a necessidade de resultados duplicados). Por exemplo:

{{ #switch: <valor de comparação>
| <valor1>
| <valor2>
| <valor3> = <resultado3>
| ...
| <valorn> = <resultadon>
| <resultado padrão>
}}

Note que o valor1 e valor2 não possuem o sinal de igualdade. Se eles forem encontrados, eles darão o resultado do valor3 (isto é, o que está no resultado3).

Assim como para #ifeq:, a comparação é numérica quando possível:
{{ #switch: +07 | 7 = Sim | 007 = Bond | Não }} resulta Sim
{{ #switch:"+07"|"7"= Sim |"007"= Bond | Não }} resulta Não
O valor encontrado pode ser vazio; assim sendo, as seguintes estruturas são equivalentes:
{{ #if: {{ns:0}} | não vazio | vazio }} resulta vazio
{{ #switch:{{ns:0}}|=vazio|não vazio }} resulta vazio

Comparação entre strings são caso-sensitivo:

{{ #switch: A | a=0 | A=1 }} resulta 1
{{ #switch: A | a=0 | 1 }} resulta 1

Não se deve confundir isso com o fato de que as funções de análise sintática são caso-sensitivo:

{{ #switch: A | a=0 | 1 }} resulta 1
Exemplos
Código Descrição

{{ #switch: {{FULLPAGENAME}}
| Wikipedia:Esplanada/geral = Está a ver a página geral da esplanada
| Ajuda:Página principal
| Wikipedia:Boas-vindas = Está a ver a página de ajuda ou boas-vindas
| Está a ver outra página qualquer
}}

Este código que é normalmente usado em predefinições ou outras páginas especiais. Começa por determinar o nome completo da página em que está a ser mostrada a predefinição com o código {{FULLPAGENAME}}, de seguida compara esse valor obtido com os descritos na predefinição em "Wikipedia:Esplanada/geral", "Ajuda:Página principal" e "Wikipedia:Boas-vindas". Caso o resultado de {{FULLPAGENAME}} não se encontre em nenhum desses valores é mostrado o último valor onde diz "Está a ver outra página qualquer". Notar que a mensagem em "Ajuda:Página principal" e "Wikipedia:Boas-vindas" é a mesma porque no final de "Ajuda:Página principal" não existe "=".
{{ #switch: {{PAGENAME}} | Wikipedia:Esplanada/geral = Está a ver a página geral da esplanada | Ajuda:Página principal | Wikipedia:Boas-vindas = Está a ver a página de ajuda ou boas-vindas | Está a ver outra página qualquer }} Código igual ao anterior, mas sem parágrafos. Esta formatação do código é necessária em alguns casos nos quais pode ser adicionado um parágrafo na mensagem mostrada ou quando ocorre um erro ao utilizar outros códigos dentro do #switch. Deve-se utilizar esta formatação apenas quando necessário devido à dificuldade de ler o código.

{{ #switch: {{NAMESPACE}}
| {{NS:0}} = Artigos enciclopédicos
| {{NS:2}} = Página de usuário
| #default = outro domínio qualquer
}}

Outro exemplo que começa por determinar o nome do domínio com {{NAMESPACE}}. Caso a página esteja em {{NS:0}} (domínio principal) é mostrada a mensagem "Artigos enciclopédicos". Se estiver em {{NS:2}} (domínio Usuário) é mostrada a mensagem "Página de usuário". Se for outro domínio é mostrada a mensagem "outro domínio qualquer". Notar que neste exemplo é usado | #default = outro domínio qualquer que tem o mesmo resultado se for usado | = outro domínio qualquer. O #default é necessário apenas em alguns casos.

{{ #switch: olá
| olá = Isto é um olá
| cinco = São cinco
| #default = outra coisa
}}

Este exemplo não faz sentido nem tem utilidade. Como o valor "#switch: olá" nunca muda, o resultado é sempre o mesmo. As mensagens "São cinco" e "outra coisa" nunca são mostradas.

{{ #switch: {{{1}}}
| protegida = Está protegida
| semi = Está semiprotegida
| #default = Não está protegida
}}

Este exemplo deve ser utilizado apenas em predefinições que requerem o preenchimento de um campo "1". Por exemplo, pode-se utilizar este código em {{protegida}}, e quando um usuário usar essa predefinição numa página, deverá utilizar o código {{protegida|semi}} ou {{protegida|1=semi}} para mostrar a mensagem "Está semiprotegida" nessa página.

{{ #switch: {{{prot}}}
| protegida = Está protegida
| semi = Está semiprotegida
| #default = Não está protegida
}}

Exemplo igual ao anterior mas que define e requer o preenchimento de um campo com o nome "prot". Por exemplo, pode-se utilizar este código em {{protegida}}, e quando um usuário usar essa predefinição numa página, deverá utilizar o código {{protegida|prot=semi}} para mostrar a mensagem "Está semiprotegida" nessa página. Notar que neste exemplo, se fosse utilizado na página o código {{protegida|semi}}, seria mostrada a mensagem "Não está protegida" porque o valor de "prod" não foi definido.

Notas:

  • para determinar qual é o valor obtido com os códigos {{FULLPAGENAME}}, {{NAMESPACE}}, {{NS:2}} e similares para se poder utilizar em #switch, pode-se editar a página onde se quer determinar qual é o valor nessa página e colocar o código respectivo, fazendo de seguida a pré-visualização. Por exemplo pode-se editar a Wikipedia:Página de testes e colocar nessa página {{NAMESPACE}}, fazendo de seguida a pré-visualização. É mostrado então o valor "Wikipedia". Pode-se então usar o valor "Wikipedia" na predefinição com o #switch. Notar no entanto, que por questões de compatibilidade, caso ocorram mudanças no nome dos domínios (raro, no entanto possível), para este caso específico pode-se usar o código {{NS:4}} no switch em vez de "Wikipedia" que o resultado é o mesmo. Para saber os números de domínios ver a página Wikipedia:Domínio.
  • para mais informações sobre {{FULLPAGENAME}}, {{NAMESPACE}}, {{NS:}} e códigos similares, muito utilizados em #switch, ver Ajuda:Palavras mágicas.

[editar] #time:

#time é uma função de formatação de tempo e data. A sintaxe é

{{ #time: formato }}

ou

{{ #time: formato | tempo }}

Se o tempo não é especificado, o tempo em cada artigo é convertido para o HTML que é utilizado. O parâmetro formato é um formato de string similar ao utilizado pelas datas PHP.

Os seguintes formatos possuem o mesmo significado que em PHP. Diferenças significantes do comportamento do PHP, tal como internacionalização (i.e. idioma e diferenças locais), devem ser consideradas como erro das ParserFunctions e deverão ser reportadas. Todos os códigos de formato numérico retornam números de acordo com o idioma local, use o xn código descrito abaixo para verificar isso.

Código Descrição Saída de exemplo Saída real
d O dia do mês, acompanhado de zero. 04 10
D Uma abreviação do dia da semana. Seg Sex
j O dia do mês, não acompanhado de zero. 3 10
l O nome completo do dia da semana. Segunda-feira sexta-feira
N O dia da semana segundo cód. ISO 8601 1 (para Segunda) a 7 (para o Domingo) 5
w Número do dia da semana 0 (para Domingo) até 6 (para o Sábado) 5
z O dia do ano (iniciando do 0) 0 até 365 190
W Número da semana (ISO 8601) 28
F O nome completo do mês. Janeiro julho
m O número do mês, acompanhado de zero. 01 até 12 07
M A abreviação do nome do mês. Jan Jul
n O número do mês, não acompanhado de zero 1 até 12 7
t Número de dias do mês 28 até 31 31
L Ano bissexto 1 se sim, senão 0 0
Y O ano com 4 dígitos 2006 2009
y O ano com 2 dígitos. 06 09
a am ou pm am
A AM ou PM AM
g horas (formato de 12 horas) sem acompanhar zero 1 até 12 3
G horas (formato de 24 horas) sem acompanhar zero 0 até 23 3
h horas (formato de 12 horas) acompanhada por zero 01 até 12 03
H A hora do dia, acompanhada por zero 00 até 23 03
i O minuto, acompanhado de zero. 00 até 59 31
s O segundo, acompanhado de zero 00 até 59 25
c data no formato ISO 8601 2009-07-10T03:31:25+00:00
r data formatada RFC 2822 Fri, 10 Jul 2009 03:31:25 +0000
U segundos desde 1 de Janeiro de 1970 00:00:00 GMT 1247196685

Qualquer caractere não reconhecido será passado direto para a saída sem ser modificado. Há também duas convenções de aspas que podem ser utilizadas para produzir uma saída literal com caracteres.

  • Caracteres dentro de aspas fechadas será considerado uma saída literal (no qual as próprias aspas serão removidas). Aspas não fechadas são consideradas aspas literais. Exemplo:
    • {{ #time: "O mês é" F}} → O mês é Janeiro
    • {{ #time:i's"}} → 20'11"
  • Barras invertidas como em PHP's date() são suportadas. \H produz um literal H, \" produz um literal ".

[editar] Exemplos

  • {{#time:j F Y|-14 days}} resulta 26 junho 2009 (14 dias atrás)
  • {{#time:H:i|+6 hours}} resulta 09:31 (6 horas depois que o UTC)
  • {{#time:H:i|8:15 +6 hours}} resulta 14:15
  • {{#time:m/Y|-1 months}}resulta 06/2009 (1 mês atrás)

[editar] Faixa

A faixa de funcionamento correto é 1-1-1970 00:00:01 até 19-1-2038 03:14:07 (1 até 231 1 segundos após o início de 1970). Veja também Problema do ano 2038.

[editar] Advertências

[editar] Tabelas

Atualmente as barras verticais nas sintaxes de tabelas não funcionam dentro de condicionais. Há duas maneiras de contornar o problema.

  • Utilizar uma predefinição que seja constituída apenas de uma barra vertical, tal como {{!}}.
  • Utilizar sintaxe html.

[editar] Expressões

  • div não é a divisão inteira, utilize / para divisão de números reais.
  • mod utiliza o operador PHP %, que é diferente do operador módulo em outras linguagens de programação
  • mod algumas vezes retornas resultados errados para a mesma entrada de valores, veja 6356 e m:ParserFunctions/MOD10000. valores menores que 1E+12 aparentemente não são afetadas.
  • Resultados válidos de #expr: como 1.0E-7 ainda não são suportados como valor de entrada
    {{#expr:1.0E-7}} resulta 1.0E-7.
  • Sob certas condições, round 0 resulta em -0 ao invés de 0. Para uma expressão x, utilizando 0+(x) conserta essa falha.

[editar] Espaços brancos de condicionais

Se você apenas deseja inserir espaços em brancos, você pode utilizar a entidade do HTML &#32;, que insere " ".

se você deseja novas linhas ou outros espaços em branco, você pode inserir caracteres não imprimíveis entre a barra vertical e o espaço em branco:

primeiro parágrafo. {{#if:{{{paragráfo}}}|<nowiki /> 

segundo parágrafo.}}

primeiro parágrafo.

segundo parágrafo.

[editar] Veja também

[editar] Ligações externas

Ferramentas pessoais
Criar um livro