Help:Extension:ParserFunctions/pt-br

= Extensão:Funções Sintáticas = Se a extensão foi instalada na sua wiki, ela fornece onze funções adicionais ao analisador sintático, que suplementam as palavras mágicas já presentes no MediaWiki. Todas as funções fornecidas pela extensão têm a forma:

#expr


Esta função calcula a expressão matemática e retorna o resultado. Portanto:


 *   &rarr; 

Os operadores matemáticos disponíveis estão listados na tabela da direita, por ordem crescente de precedência. Para mais detalhes sobre cada operador, consulte.

A precisão e formato do resultado variam de acordo com o sistema operacional do servidor que está executando o MediaWiki e com o formato numérico da língua do site.

Nos operadores de, o número zero assume o valor lógico «falso» (0). Qualquer outro número, positivo ou negativo, assume o valor lógico «verdadeiro» (1).

Assim, os seguintes exemplos demonstram uma tabela-verdade para o operador booleano E (AND):


 *   &rarr;       (falso e falso = falso)
 *   &rarr;       ''(falso e verdadeiro = falso)
 *   &rarr;       ''(verdadeiro e falso = falso)
 *  </tt> &rarr;       ''(verdadeiro e verdadeiro = verdadeiro)

Uma expressão de entrada vazia retorna uma expressão de saída vazia:


 *  </tt> &rarr;  

Expressões inválidas retornam uma ou várias mensagens de erro, que podem ser apanhadas usando a função #iferror</tt>:


 *  </tt> &rarr; 
 *  </tt> &rarr; 

Algumas expressões podem resultar em erros de ponto flutuante (floating-point) quando são usados números muito grandes ou muito pequenos:


 *  </tt> &rarr; 

retorna 3259 na maioria das vezes, mas ocasionalmente retorna -6357. Isto varia com as especificações e a configuração do servidor que executa a wiki (ver ).

#if
Esta função determina se a expressão tem conteúdo ou está vazia. Se tem conteúdo, retorna o valor se verdadeiro</tt>. Se está vazia, ou só contém caracteres em branco (espaços, linhas novas, etc.), retorna o valor se falso</tt>.


 *  </tt> &rarr; 
 *  </tt> &rarr; 
 *  </tt> &rarr; 
 *  </tt> &rarr; 

A expressão é sempre interpretada como texto puro, portanto expressões matemáticas não são calculadas:


 *  </tt> &rarr; 

Qualquer um dos valores a retornar, ou ambos, podem ser omitidos:


 *  </tt> &rarr;  
 *  </tt> &rarr;  
 *  </tt> &rarr;  

Também é possível utilizar funções #if aninhadas, ou seja, testar uma dentro da outra. Isso pode ser feito mais ou menos desta forma:


 *  </tt>

Para mais exemplos do uso desta função, consulte funções do analisador sintático nas predefinições.

#ifeq
Esta função determina se as duas expressões são idênticas.

Se ambas resultarem em valores numéricos válidos, são comparadas numericamente:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Caso contrário, são comparadas como texto:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

A comparação de texto é sensível a maiúsculas e minúsculas:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr;  
 * <tt> </tt> &rarr;  

Se uma expressão resulta em texto e a outra num número, é sempre retornado o <tt>valor se falso</tt>:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

#iferror
Esta função determina se ocorre um erro no cálculo da expressão. Se ocorrer um erro, retorna o <tt>valor se verdadeiro</tt>. Se não, retorna o <tt>valor se falso</tt>.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * porque <tt> </tt> &rarr; 

Um erro ocorre quando o resultado do cálculo contém um objeto HTML com <tt>class="error"</tt>. Este objeto pode ser gerado por outras funções do analisador sintático, como <tt>#expr</tt>, <tt>#time</tt> e <tt>#rel2abs</tt>, por erros em predefinições como ciclos e recursão, ou por outros erros failsoft detectados pelo analisador sintático.

Qualquer um dos valores a retornar, ou ambos, podem ser omitidos. Se for omitido o <tt>valor se falso</tt> e não ocorrer um erro, é retornado o resultado da <tt>expressão</tt>.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr;  

Se também for omitido o <tt>valor se verdadeiro</tt> e ocorrer um erro, é retornada uma expressão vazia:


 * <tt> </tt> &rarr;  
 * <tt> </tt> &rarr;  
 * <tt> </tt> &rarr;  

#ifexpr
Esta função determina se a expressão matemática é diferente de zero. Primeiro, calcula a expressão da mesma forma que <tt>#expr</tt> acima, com os mesmos operadores. O resultado numérico do cálculo é então avaliado com lógica Booleana. Portanto, se for diferente de zero, retorna <tt>valor se verdadeiro</tt>. Se for zero, retorna <tt>valor se falso</tt>.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Uma expressão de entrada vazia retorna o <tt>valor se falso</tt>:


 * <tt> </tt> &rarr; 

O inverso desta função pode ser obtido com <tt>#ifeq</tt>, comparando <tt>#expr</tt> com zero:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

exceto nos casos em que a expressão de entrada esteja vazia ou seja incorreta (uma mensagem de erro é tratada como um trecho de texto normal; não é igual a zero, portanto resulta em <tt>valor se verdadeiro</tt>).

Qualquer um dos valores de retorno, ou ambos, podem ser omitidos. Se o valor de retorno for omitido, é retornada uma expressão vazia:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr;  


 * <tt> </tt> &rarr;  
 * <tt> </tt> &rarr;  


 * <tt> </tt> &rarr;  
 * <tt> </tt> &rarr;  

Alguns resultados inesperados:


 * <tt> </tt> &rarr;  


 * <tt> </tt> &rarr;  
 * <tt> </tt> &rarr;  

#ifexist
Esta função determina se a página especificada existe na wiki.

A função retorna o <tt>valor se verdadeiro</tt> se a página existir, quer esta tenha conteúdo, esteja aparentemente vazia (isto é, contenha metadados como links de categorias ou palavras mágicas, mas nenhum conteúdo visível), esteja efetivamente vazia, ou seja uma página de redirecionamento. Só para páginas cujo link estaria a vermelho é retornado o <tt>valor se falso</tt>, incluindo páginas que já existiram mas tenham sido eliminadas.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

A função retorna o <tt>valor se verdadeiro</tt> para mensagens de sistema que tenham sido alteradas na wiki e para páginas especiais que existam.


 * <tt> </tt> &rarr;
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr;

A função <tt>#ifexist</tt> é considerada «exigente» e só um número limitado destas funções pode ser colocado numa página (incluindo funções dentro de páginas transcluídas nessa página). Quando este número é excedido, a página é colocada na categoria Category:, e quaisquer funções <tt>#ifexist:</tt> que ainda serão executadas, retornam automaticamente o <tt>valor se falso</tt> quer a sua página alvo exista ou não.

Se uma página verifica a existência de outra página alvo usando <tt>#ifexist:</tt>, então a página que verifica aparece na lista    : da página alvo. Portanto, se o código <tt> </tt> existir ao vivo nesta página (que se chama «»), então     :/Xpto listará «».

Nas wikis que usam um repositório compartilhado de arquivos multimídia, <tt>#ifexist</tt> pode ser usado para verificar se um ficheiro foi carregado no repositório, mas não na própria wiki:


 * <tt> </tt>  &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Se tiver sido criada uma página de descrição do arquivo, é retornado o <tt>valor se verdadeiro</tt> para todas as entradas acima.

#rel2abs
Esta função cria um endereço completo, para uma página ou para um arquivo, com base num deslocamento relativo a partir de um endereço base. No parâmetro de entrada <tt>deslocamento relativo</tt>, os seguintes são válidos:
 * <tt>.</tt> - o nível actual
 * <tt>..</tt> - subir um nível
 * <tt>/xpto</tt> - descer um nível para o sub-diretório <tt>/xpto</tt>

Assim:


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''

Se o parâmetro <tt>endereço base</tt> não for especificado, será usado o nome completo da página:


 * <tt> </tt> &rarr; '''

Sintaxe inválida, como <tt>/.</tt> ou <tt>/./</tt>, é ignorada.


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''

#switch
Esta função faz uma comparação entre <tt>texto</tt> e cada um dos casos de teste, e retorna o <tt>valor</tt> associado ao <tt>caso</tt> que seja igual ao <tt>texto</tt>:


 * <tt> </tt> &rarr; 

Valor por omissão
Se não for encontrada nenhuma correspondência, é retornado o <tt>valor por omissão</tt>:


 * <tt> </tt> &rarr; 

Nesta forma, o <tt>valor por omissão</tt> não pode conter um sinal de igual (<tt>=</tt>) e tem de ser o último parâmetro:


 * <tt> </tt> &rarr;   
 * <tt> </tt> &rarr;   

Em alternativa, o <tt>valor por omissão</tt> pode ser declarado explicitamente usando <tt>#default</tt> como caso.

Desta forma, pode ser colocado em qualquer posição:


 * <tt> </tt> &rarr; 

Se o <tt>valor por omissão</tt> for omitido e não for encontrada nenhuma correspondência, não é retornado nenhum valor:


 * <tt> </tt> &rarr;   

Agrupamento dos valores
Quando vários casos têm o mesmo <tt>valor</tt>, em vez de repetir esse valor para todos eles, é possível agrupá-los, da seguinte forma:

Aqui, os casos 2 e 3 retornam o <tt>valor2</tt>; os casos 4, 9 e 6 retornam o <tt>valor3</tt>. Por exemplo:


 * <tt> </tt> &rarr;   

Características da comparação
Tal como <tt>#ifeq</tt>, a comparação é feita numericamente se tanto o <tt>texto</tt> como o <tt>caso</tt> forem números. Se não, são comparados como texto, sensível a maiúsculas e minúsculas:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Um <tt>caso</tt> pode ser o vazio:


 * <tt> </tt> &rarr; 

Se dois ou mais casos forem iguais, só o primeiro será retornado:


 * <tt> </tt> &rarr; 

Uso de sinais de igual no caso
Os casos não podem conter sinais de igual (<tt>=</tt>). No entanto, é possível inserir sinais de igual usando uma predefinição = que contenha unicamente um sinal de igual:


 * <tt> </tt> &rarr; 

Um exemplo simples do uso real desta função pode ser encontrado em. Um exemplo complexo pode ser encontrado em.

#time
<pre style="overflow:auto;">

Esta função formata uma data e/ou hora de acordo com a sintaxe fornecida. Por omissão, será usada a palavra mágica <tt> </tt>, isto é, a hora da última vez em que a página foi apresentada em HTML.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Pode ser especificado um objeto <tt>data/hora</tt>:


 * <tt> </tt> &rarr; 

A lista de códigos de formatação válidos é apresentada na tabela da direita. Qualquer caracter 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 (<tt>\</tt>) seguida de um caracter de formatação são interpretados como o caracter literal, sem formatação.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 


 * Caracteres envoltos em aspas duplas (<tt>"</tt>) são considerados caracteres literais e não caracteres de formatação e as aspas são removidas no resultado. Adicionalmente, o dígrafo (dois caracteres interpretados como um só) <tt>xx</tt> é interpretado como o carácter literal <tt>x</tt>.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr; 

O objeto <tt>data/hora</tt> pode ter qualquer formato aceito pela função strtotime do PHP. São aceitos objetos absolutos (<tt>20 December 2000</tt>) e relativos (<tt>+20 hours</tt>).


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''

Se calculou uma timestamp do Unix, pode-se usá-la em cálculos de datas precedendo-a com uma arroba <tt>@</tt>.


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''

A gama de datas aceitas é desde 1 de Janeiro de 0100 até 31 de Dezembro de 9999. Valores fora desta gama serão interpretados incorretamente:


 * <tt> </tt> &rarr; '''


 * <tt> </tt> &rarr; '''

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 atuais:


 * <tt> </tt> &rarr; '''

Um número de quatro algarismos é interpretado como horas e minutos, se possível, e como um ano, se não:


 * <tt> </tt> &rarr; '''
 * (1959 é considerado uma hora e não um ano)
 * <tt> </tt> &rarr; '''
 * (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):


 * <tt> </tt> &rarr; '''
 * (195909 é considerado uma hora e não ano + mês)
 * <tt> </tt> &rarr; '''
 * (embora 19:60:09 não seja uma hora válida, 196009 não é interpretado como Setembro de 1960)

A funcionalidade de preenchimento de datas parciais não é consistente; algumas partes são preenchidas usando valores atuais, outras não:


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * (vai para o início do mês, não para o dia actual)

A função faz alguns cálculos matemáticos:


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''

#timel
Esta função é idêntica a <tt> </tt>, exceto por usar, como valor por omissão, a hora local do servidor da wiki (tal como definido em ) quando não é fornecida uma data:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

#titleparts
<pre style="overflow:auto;">

Esta função separa um título de página em segmentos com base nas barras (<tt>/</tt>, e retorna alguns desses segmentos. Se o parâmetro <tt>nº segmentos</tt> for omitido, por omissão será zero e são retornados todos os segmentos. Se o parâmetro <tt>1º segmento</tt> for omitido ou for zero, por omissão, toma o valor 1:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Ambos os parâmetros aceitam valores negativos. Valores negativos no parâmetro <tt>nº segmentos</tt> efetivamente «retira» segmentos do fim do título:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr;   

Valores negativos no parâmetro <tt>1º segmento</tt> efetivamente deixam no título só esse número de elementos, contados a partir da direita:


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

O título é dividido um máximo de 25 vezes; quaisquer mais barras (<tt>/</tt>) são ignoradas. O primeiro parâmetro também está limitado a 255 caracteres, porque é tratado como um título de página:


 * <tt> </tt> &rarr; 

Pode-se usar <tt>#titleparts:</tt> como um pequeno «analisador e conversor sintático», 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 <tt>lc:</tt> para controlar o resultado.


 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 
 * <tt> </tt> &rarr; 

Substituição
As funções do analisador sintático 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 <tt>subst:</tt> antes do cardinal (<tt>#</tt>). Por exemplo, o código:


 * <tt> </tt> &rarr; 

demonstra se a página <tt>Help:Contents/pt</tt> existe ou não. Quando o código é colocado numa página, sempre que a página é apresentada ao usuário o código é executado e resultará em <tt>sim</tt> se a página existir e, mais tarde, em <tt>não</tt> se entretanto ela tiver sido apagada. Se a função for substituída:


 * <tt> sim </tt> &rarr; 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.

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ático) 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 <tt>subst:</tt>:


 * <tt> </tt> &rarr; 
 * <tt> sim </tt> &rarr; não
 * <tt> sim </tt> &rarr; sim

Para mais detalhes consulte Help:Substitution.

Tabelas
As funções do analisador sintático frequentemente corrompem a sintaxe das tabelas, devido a ambas usarem a barra vertical (<tt>|</tt>) para separar elementos da sua sintaxe. Por exemplo, quando se pretende criar uma célula de uma tabela com características que podem variar, e é necessário passar a barra vertical no valor retornado por uma função, o analisador sintático não consegue distinguir que barras pertencem à função e que barras pertencem à tabela:

resulta em:

Para solucionar este problema, muitas wikis criam a predefinição ! cujo conteúdo é unicamente uma barra vertical. Isto permite "esconder" as barras indesejadas do analisador sintático, de forma que não sejam consideradas até que todas as predefinições e variáveis da página tenham sido expandidas:

resulta em:

Outra forma de resolver o problema é construir a tabela usando sintaxe HTML, embora esta solução resulte em código muito menos intuitivo e propenso a erros.

Remoção de espaço vazio
O espaço vazio, incluindo quebras de linha, tabulações e espaços, é removido do início e fim de todos os parâmetros das funções do analisador sintático. Se este comportamento não for desejado, a inclusão de quaisquer caracteres que não correspondam a espaço vazio impede a remoção. Incluem-se nestes caracteres a codificação HTML para um caracter vazio (<tt> &amp;nbsp; </tt>), os caracteres Unicode invisíveis (como o espaço de largura zero e as marcas de direcção), ou os elementos que são reconhecidos e removidos pelo analisador sintático do MediaWiki (como <tt>  </tt>):


 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr; 


 * <tt> </tt> &rarr; 

Ver também

 * :Palavras mágicas
 * :Parâmetros de funções nas predefinições