Ajuda:Funções sintáticas
Esta extensão do MediaWiki é uma coleção de funções de análise sintática (em inglês: ParserFunctions, que verificam a "estrutura gramatical" de um argumento seguindo os padrões de uma gramática formal computacional. Essas funções possuem uma cerquilha (#) na frente de seus nomes, adquirindo a seguinte sintaxe:
{{#nomedafunção: argumento 1 | argumento 2 | argumento 3...}}
Funções
[editar | editar código-fonte]#expr:
[editar | editar código-fonte]Tipo | Operadores |
---|---|
Agrupamento (parênteses) | ( ) |
Números | 1234.5 2.4E5 e (2.718) pi (3.142)
|
Lógicos | or |
and | |
= != <> > < <= >= | |
Arredondamento | round |
Binários | + - mod |
* / div | |
^
| |
Unários | not ceil trunc floor abs ln sin cos tan acos asin atan |
e + - |
A função#expr
possui a sintaxe:
{{#expr: expressão matemática }}
A função #expr
realiza cálculos matemáticos em expressões de permutação de números (ou parâmetros que resultam em números) e operadores. Ela não funciona com strings (cadeias de caracteres / texto); para tal propósito, use a função ifeq
. Portanto:
{{#expr: 1 + 1 }}
→ 2
Segue abaixo uma lista de operadores suportados nesta função. Para maiores detalhes sobre a precedência de operadores (ordem em que devem ser realizadas as operações) veja m:Help:Calculation. De maneira geral: (1) grupos (entre 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 da esquerda para a direita. Como sempre, alguns parênteses apesar de redundantes, são melhores do que um código conciso porém errado.
Números utilizam "." (ponto) 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 nos resultados (para maiores detalhes veja m:Help:Calculation).
Nos operadores de lógica Booleana, o número zero assume o valor lógico «falso» (0
) e, qualquer outro número (positivo ou negativo) assume o valor lógico «verdadeiro» (1
):
{{#expr: 0 and 0 }}
→ 0{{#expr: 0 and 1 }}
→ 0{{#expr: -1 and 0 }}
→ 0{{#expr: 2 and -2 }}
→ 1
Uma expressão de entrada vazia retorna uma expressão com resultado vazio:
{{#expr: }}
→
Expressões inválidas retornam uma ou várias mensagens de erro, que podem ser apanhadas usando a função #iferror
:
{{#expr: 1+ }}
→ Erro de expressão: Falta operando para +{{#expr: 1 xpto 2 }}
→ Erro de expressão: Palavra "xpto" não reconhecida
Aviso: Algumas expressões podem resultar em erros de vírgula flutuante (floating-point) quando são usados números muito grandes ou muito pequenos:
{{#expr: 20060618093259 mod 10000}}
→ 3259
Este retorna 3259 na maioria das vezes, mas ocasionalmente retorna -6357. Isto varia de acordo com a implementação da linguagem PHP, que executa a operação no servidor, se for de 32 ou 64 bits (ver bugzilla phabricator:6356).
Exemplos
[editar | editar código-fonte]Operador | Operação | Exemplo |
---|---|---|
nenhum | {{#expr: 123456789012345}} = 1.2345678901234E+14 | |
{{#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 |
#se: ou #if:
[editar | editar código-fonte]A funçãose
ouif
é uma estrutura de seleção do tipo se-então-senão. A sintaxe é:
- {{ #se: <condição> | <então texto> | <senão texto> }}
- {{ #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, se 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=}} | | | | | | | | | {{ #se: {{{parâmetro|}}} | Parâmetro é definido. | Parâmetro não definido ou vazio}}
Note que a funçãose
esta não suporta sinais de "=" ou expressões matemáticas. {{#se: 1 = 2|sim|não}} irá devolver "sim", porque a string "1 = 2" não é vazia.
#seigual: ou #ifeq:
[editar | editar código-fonte]seigual
(ou ifeq
) compara duas strings ou números, e retorna outra string dependendo do resultado da comparação. A sintaxe é:
{{ #seigual: <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 cadeia de caracteres que não podem ser intepretadas como números deve-se adicionar aspas a elas:
{{ #seigual: +07 | 007 | 1 | 0 }}
resulta 1{{ #seigual:"+07"|"007"| 1 | 0 }}
resulta 0
A comparação de uma string é caso-sensitivo:
{{ #seigual: A | a | 1 | 0 }}
resulta 0
#seerro ou #iferror
[editar | editar código-fonte]{{#seerro: expressão | valor se verdadeiro | valor se falso }}
{{#iferror: expressão | valor se verdadeiro | valor se falso }}
Esta função determina se ocorre um erro no cálculo da expressão. Se ocorrer um erro, retorna o valor se verdadeiro
. Se não, retorna o valor se falso
.
{{#seerro: {{#expr: 1 + 2 }} | verdadeiro | falso}}
→ falso{{#seerro: {{#expr: 1 + X }} | verdadeiro | falso}}
→ verdadeiro- porque
{{#expr: 1 + X }}
→ Erro de expressão: Palavra "x" não reconhecida
- porque
Um erro ocorre quando o resultado do cálculo contém um objecto HTML com class="error"
. Este objecto pode ser gerado por outras funções do analisador sintáctico, como #expr
, #time
e #rel2abs
, por erros em predefinições como ciclos e recursão, ou por outros erros (failsoft) detectados pelo analisador sintáctico.
Qualquer um dos valores a retornar, ou ambos, podem ser omitidos. Se for omitido o valor se falso
e não ocorrer um erro, é retornado o resultado da expressão
.
{{#seerro: {{#expr: 1 + 2 }} | verdadeiro }}
→ 3{{#seerro: {{#expr: 1 + X }} | verdadeiro }}
→ verdadeiro
Se também for omitido o valor se verdadeiro
e ocorrer um erro, é retornada uma expressão vazia:
{{#seerro: {{#expr: 1 + 2 }} }}
→ 3{{#seerro: {{#expr: 1 + X }} }}
→
#seexiste ou #ifexist:
[editar | editar código-fonte]seexiste
(ou ifexist
) retorna um de dois resultados, baseado se existe ou não um artigo ou página com o título especificado. Exemplos:
{{#seexiste:Wikipédia|Sim|Não}}
resulta Sim, porque Wikipédia existe{{#seexiste:wikipédia|Sim|Não}}
resulta Sim, porque wikipédia é a forma canônica do artigo Wikipédia{{#seexiste:WiKiPeDiA|Sim|Não}}
resulta Não porque o artigo WiKiPeDiA não existe{{#seexiste: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.
#rel2abs
[editar | editar código-fonte]{{#rel2abs: deslocamento relativo}}
{{#rel2abs: deslocamento relativo | endereço base}}
Esta função cria um endereço completo, para uma página ou para um ficheiro, com base num deslocamento relativo a partir de um endereço base. No parâmetro de entrada deslocamento relativo
, os seguintes são válidos:
.
- o nível actual..
- subir um nível/xpto
- descer um nível para o sub-directório/xpto
Assim:
{{#rel2abs: /quatro | Ajuda:Um/dois/três}}
→ Ajuda:Um/dois/três/quatro{{#rel2abs: ./quatro | Ajuda:Um/dois/três}}
→ Ajuda:Um/dois/três/quatro{{#rel2abs: ../quatro | Ajuda:Um/dois/três}}
→ Ajuda:Um/dois/quatro{{#rel2abs: ../. | Ajuda:Um/dois/três}}
→ Ajuda:Um/dois
Se o parâmetro endereço base
não for especificado, será usado o nome completo da página:
{{#rel2abs: /quatro}}
→ Ajuda:Funções sintáticas/quatro
Sintaxe inválida, como /.
ou /./
, é ignorada.
{{#rel2abs: ../quatro/. | Ajuda:Um/dois/três}}
→ Ajuda:Um/dois/quatro{{#rel2abs: ../.././quatro | Ajuda:Um/dois/três}}
→ Ajuda:Um/quatro{{#rel2abs: ../../../quatro | Ajuda:Um/dois/três}}
→ quatro{{#rel2abs: ../../../../quatro | Ajuda:Um/dois/três}}
→ Erro: Profundidade inválida no caminho: "Ajuda:Um/dois/três/../../../../quatro" (foi tentado o acesso a um nó acima do nó raiz)
#seexpr: ou #ifexpr:
[editar | editar código-fonte]seexpr
(ou ifexpr
) computa uma expressão matemática e retorna uma de duas strings como resultado
{{#seexpr: <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:
{{#seexpr: {{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):
{{#seexpr: 1/{{#seigual: {{ns:4}}|Meta|1|0}}}}
Divisão por zero{{#seexpr: 1/{{#seigual: {{ns:4}}|Meta|0|1}}}}
{{#se:{{#seexpr: 1=2}}|errado|correto}}
correto{{#se:{{#seexpr: 1E2}}|errado|correto}}
correto{{#se:{{#seexpr: 1/0}}|errado|correto}}
errado{{#se:{{#seexpr: a=b}}|errado|correto}}
errado
#switch:
[editar | editar código-fonte]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}} |
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}} |
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á |
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}}} |
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}}} |
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.
#time:
[editar | editar código-fonte]Código | Descrição | Resultado actual |
---|---|---|
Ano | ||
Y | Ano com 4 algarismos. | 2024 |
y | Ano com 2 algarismos. | 24 |
L | 1 se o ano é bissexto (Leap), 0 se não. | 1 |
o | Ano no ISO-8601. ¹ | 2024 ² |
¹ Tem o mesmo valor que Y, excepto quando o número ISO da semana (W) pertence ao ano anterior ou ao seguinte, em que é usado esse ano e não Y. | ||
Mês | ||
n | Mês, sem zeros à esquerda. | 8 |
m | Mês, com zeros à esquerda. | 08 |
M | Nome abreviado do mês, na língua do site. | ago. |
F | Nome completo do mês, na língua do site. | agosto |
Semana | ||
W | Número da semana no ISO-8601, com zeros à esquerda. | 34 |
Dia | ||
j | Dia do mês, sem zeros à esquerda. | 25 |
d | Dia do mês, com zeros à esquerda. | 25 |
z | Dia do ano (1 de Janeiro = 0). | 237 |
D | Nome abreviado do dia. Raramente internacionalizado. | dom |
l | Nome completo do dia. Raramente internacionalizado. | domingo |
N | Dia da semana no ISO-8601. | 7 |
w | Número do dia da semana (Segunda-Feira = 1). | 0 |
Hora | ||
a | "am" durante a manhã (00:00:00 → 11:59:59), "pm" à tarde e noite (12:00:00 → 23:59:59) | pm |
A | Versão em maiúsculas de a acima.
|
PM |
g | Hora no formato 12 horas, sem zeros à esquerda. | 8 |
h | Hora no formato 12 horas, com zeros à esquerda. | 08 |
G | Hora no formato 24 horas, sem zeros à esquerda. | 20 |
H | Hora no formato 24 horas, com zeros à esquerda. | 20 |
Minutos e segundos | ||
i | Minutos após a hora, com zeros à esquerda. | 49 |
s | Segundos após o minuto, com zeros à esquerda. | 51 |
U | Segundos desde 1 de Janeiro de 1970 00:00:00 GMT. | 1724618991 |
Miscelânea | ||
L | 1 se este ano é bissexto no calendário Gregoriano, 0 se não. | 1 |
t | Número de dias no mês presente. | 31 |
c | Data no formato ISO-8601, equivalente a Y-m-dTH:i:s+00:00 .
|
2024-08-25T20:49:51+00:00 |
r | Data no formato RFC 2822, equivalente a D, j M Y H:i:s +0000 , com o nome do dia e o nome do mês não internacionalizados.
|
Sun, 25 Aug 2024 20:49:51 +0000 |
Calendários não Gregorianos | ||
Iraniano | ||
xij | Dia do mês. | 4 |
xiF | Nome completo do mês. | Shahrivar |
xin | Número do mês. | 6 |
xiY | Ano completo. | 1403 |
Hebraico | ||
xjj | Dia do mês. | 21 |
xjF | Nome completo do mês. | Av |
xjx | Forma genitiva do nome do mês. | Av |
xjn | Número do mês. | 11 |
xjY | Ano completo. | 5784 |
Solar Tailandês | ||
xkY | Ano completo. | 2567 |
Formatação | ||
xn | Formatar o próximo código numérico como um número ASCII. | Em Hindú, {{#time:H, xnH}} produz ०६, 06
|
xN | Como xn , mas activa e desactiva conforme é repetido, e dura até ao fim do texto ou até que seja encontrado xN no texto.
| |
xr | Formatar o próximo número como um número romano. Só funciona para números até 3000. | {{#time:xrY}} → MMXXIV
|
xg | Antes de uma formatação para o mês (n , m , M , F ), produzir a forma genitiva se a língua do site distingue entre a forma genitiva e nominativa.
|
{{#time: formato }}
{{#time: formato | data/hora }}
Esta função formata uma data e/ou hora de acordo com a sintaxe fornecida. Por omissão, será usada a palavra mágica {{CURRENTTIMESTAMP}}
, isto é, a hora da última vez em que a página foi apresentada em HTML.
{{#time: d-m-Y }}
→ 25-08-2024{{#time: d M [[Y]] }}
→ 25 ago. 2024
Pode ser especificado um objecto data/hora
:
{{#time: d-m-Y | 2001-01-01}}
→ 01-01-2001
A lista de códigos de formatação válidos é apresentada na tabela da direita. Qualquer carácter no texto de formatação que não seja reconhecido, é passado inalterado para o resultado. Existem duas formas de escapar caracteres no texto de formatação, impedindo que sejam interpretados:
- Uma barra invertida (
\
) seguida de um carácter de formatação são interpretados como o carácter literal, sem formatação.
{{#time: j de F de Y}}
→ 25 25UTC agosto 25UTC 2024{{#time: j \de F \de Y}}
→ 25 dUTC agosto dUTC 2024
- Caracteres envolvidos em aspas duplas (
"
) são considerados caracteres literais e não de formatação, e as aspas são removidas no resultado. Adicionalmente, o dígrafo (dois caracteres interpretados como um só)xx
é intrepretado como o carácter literalx
.
{{#time: [[Y (ano)]] }}
→ 2024 (pm82024){{#time: [[Y "(ano)"]] }}
→ 2024 (ano)
{{#time: i's" }}
→ 49'51"
O objecto data/hora
pode ter qualquer formato aceite pela função strtotime() do PHP. São aceites objectos absolutos (20 December 2000
) e relativos (+20 hours
).
Aviso: A gama de datas aceites é desde 1 de Janeiro de 0100 até 31 de Dezembro de 9999. Valores fora desta gama serão interpretados incorretamente:
{{#time: d F Y | 15 April 0099 }}
→ 15 abril 0099{{#time: d F Y | 15 abril 0099 }}
→ 15 abril 0099{{#time: d F Y | 15 Abril 0099 }}
→ 15 abril 0099{{#time: d F Y | 15 April 10000 }}
→ Erro: tempo inválido
Datas absolutas podem ser especificadas de forma completa ou parcial; a função preenche as partes que não tenham sido especificadas usando os valores actuais:
{{#time: Y | January 1 }}
→ 2024{{#time: Y | janeiro 1 }}
→ Erro: tempo inválido{{#time: Y | 1 Janeiro }}
→ Erro: tempo inválido{{#time: Y | 1 de janeiro }}
→ Erro: tempo inválido
Um número de quatro algarismos é interpretado como horas e minutos, se possível, e como um ano, se não:
{{#time: Y m d H:i:s | 1959 }}
→ 1959 08 25 00:00:00- (1959 é considerado uma hora e não um ano)
{{#time: Y m d H:i:s | 1960 }}
→ 1960 08 25 00:00:00- (como 19:60 não é uma hora válida, 1960 é considerado um ano)
Um número de seis algarismos é interpretado como horas, minutos e segundos, se possível, e como um erro, se não (não é nunca tratado, por exemplo, como ano e mês):
{{#time: Y m d H:i:s | 195909 }}
→ 2024 08 25 19:59:09- (195909 é considerado uma hora e não ano + mês)
{{#time: Y m d H:i:s | 196009 }}
→ Erro: tempo inválido- (embora 19:60:09 não seja uma hora válida, 196009 não é interpretado como Setembro de 1960)
Aviso: A funcionalidade de preenchimento de datas parciais não é consistente; algumas partes são preenchidas usando valores actuais, outras não:
{{#time: Y m d H:i:s | January 1 }}
→ 2024 01 01 00:00:00{{#time: Y m d H:i:s | February 2007 }}
→ 2007 02 01 00:00:00{{#time: Y m d H:i:s | fevereiro 2007 }}
→ Erro: tempo inválido- (vai para o início do mês, não para o dia actual)
A função faz alguns cálculos matemáticos:
{{#time: d F Y | January 0 2008 }}
→ 31 dezembro 2007{{#time: d F | January 32 }}
→ Erro: tempo inválido{{#time: d F | February 29 2007 }}
→ 01 março{{#time:j F Y|-14 days}}
→ 11 agosto 2024 (14 dias atrás){{#time:H:i|+6 hours}}
→ 02:49 (6 horas depois que o UTC){{#time:H:i|8:15 +6 hours}}
→ 14:15{{#time:m/Y|-1 months}}
→ 07/2024 (1 mês atrás)
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 ".
Faixa
[editar | editar código-fonte]A faixa de funcionamento correta é 1-1-1970 00:00:01 até 19-1-2038 03:14:07 (1 até 1 segundos após o início de 1970). Veja também Problema do ano 2038.
#timel
[editar | editar código-fonte]Esta função é idêntica a {{#time: ... }}
, excepto por usar, como valor por omissão, a hora local do servidor da wiki (tal como definido em $wgLocaltimezone) quando não é fornecida uma data:
{{#time: Y-m-d }}
→ 2024-08-25{{#timel: Y-m-d }}
→ 2024-08-25
{{#time: Y F d h:i:s}}
→ 2024 agosto 25 08:49:51{{#timel: Y F d h:i:s}}
→ 2024 agosto 25 08:49:51
#titleparts
[editar | editar código-fonte]{{#titleparts: página | n.º segmentos | n.º primeiro segmento }}
Esta função separa um título de página em segmentos com base nas barras (/
, e retorna alguns desses segmentos. Se o parâmetro n.º segmentos
for omitido, por omissão será zero e são retornados todos os segmentos. Se o parâmetro 1.º segmento
for omitido ou for zero, por omissão, toma o valor 1:
{{#titleparts: Discussão:Um/dois/três }}
→ Discussão:Um/dois/três{{#titleparts: Discussão:Um/dois/três | 1 }}
→ Discussão:Um{{#titleparts: Discussão:Um/dois/três | 2 }}
→ Discussão:Um/dois{{#titleparts: Discussão:Um/dois/três | 2 | 2 }}
→ dois/três
Ambos os parãmetros aceitam valores negativos. Valores negativos no parâmetro n.º segmentos
efectivamente «retira» segmentos do fim do título:
{{#titleparts: Discussão:Um/dois/três | -1 }}
→ Discussão:Um/dois{{#titleparts: Discussão:Um/dois/três | -1 | 1 }}
→ Discussão:Um/dois{{#titleparts: Discussão:Um/dois/três | -1 | 2 }}
→ dois{{#titleparts: Discussão:Um/dois/três | -1 | 3 }}
→
Valores negativos no parâmetro 1.º segmento
efectivamente deixam no título só esse número de elementos, contados a partir da direita:
{{#titleparts: Discussão:Um/dois/três | | -2 }}
→ dois/três{{#titleparts: Discussão:Um/dois/três | 1 | -2 }}
→ dois{{#titleparts: Discussão:Um/dois/três | 2 | -2 }}
→ dois/três{{#titleparts: Discussão:Um/dois/três | 3 | -2 }}
→ dois/três
O título é dividido um máximo de 25 vezes; quaisquer mais barras (/
) são ignoradas. O primeiro parâmetro também está limitado a 255 caracteres, porque é tratado como um título de página:
{{#titleparts: 1/2/3/4/5/6/7/8/9/10/11/12/
→ 25/26/27/28/29/30/31
13/14/15/16/17/18/19/20/21/22/23/24/25/26/
27/28/29/30/31 | 1 | 25 }}
Aviso: Pode usar
#titleparts:
como um pequeno «analisador e conversor sintáctico», mas considere que, quando a função retorna o primeiro segmento, retorna-o com a primeira letra em maiúsculas. Se esta característica for indesejada, use a palavra mágica lc:
para controlar o resultado.
{{#titleparts: um/dois/três/quatro | 1 | 1 }}
→ Um{{#titleparts: um/dois/três/quatro | 1 | 2 }}
→ dois{{lc:{{#titleparts: um/dois/três/quatro | 1 | 1 }} }}
→ um
Notas gerais
[editar | editar código-fonte]Substituição
[editar | editar código-fonte]As funções do analisador sintáctico podem ser substituídas. Isto significa que, quando a página é gravada, a chamada para a função é substituída pelo resultado dessa função. Para substituir uma função, coloque subst:
antes do cardinal (#
). Por exemplo, o código:
{{#ifexist: Help:Contents/pt | sim | não }}
→ não
demonstra se a página Help:Contents/pt
existe ou não. Quando o código é colocado numa página, sempre que a página é apresentada ao utilizador o código é executado e resultará em sim
se a página existir e, mais tarde, em não
se entretanto ela tiver sido apagada. Se a função for substituída:
{{subst:#ifexist: Help:Contents/pt | sim | não }}
→ sim
quando a página for gravada o código será executado e substituído pelo resultado da função (o código desaparece no conteúdo da página, sendo substituído pelo resultado). A partir daí, a função deixa de ser executada porque o código já não existe.
Aviso: O resultado de uma substituição é indefinido, se as expressões contiverem código volátil (como palavras mágicas ou outras funções do analisador sintáctico) que não seja também substituído. Para que o resultado da substituição seja consistente, todo o código volátil tem também de ser substituído usando
subst:
:
{{#ifexist: {{PAGENAME}} | sim | não }}
→ sim{{subst:#ifexist: {{PAGENAME}} | sim | não }}
→ não{{subst:#ifexist: {{subst:PAGENAME}} | sim | não }}
→ sim
Para mais detalhes consulte Help:Substitution.
Tabelas
[editar | editar código-fonte]Atualmente as barras verticais nas sintaxes de tabelas não funcionam dentro de condicionais. Há duas maneiras de contornar o problema.
- Utilizar a palavra mágica {{!}}.
- Utilizar sintaxe html.
Expressões
[editar | editar código-fonte]- 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.
Espaços brancos de condicionais
[editar | editar código-fonte]Se você apenas deseja inserir espaços em brancos, você pode utilizar a entidade do HTML  
, 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.
Ver também
[editar | editar código-fonte]- Ajuda:Palavras mágicas
- mw:Help:Extension:ParserFunctions
- m:Help:Calculation
- m:Category:Templates using ParserFunctions