Help:Extension:ParserFunctions/pt

= Extensao:ParserFunctions = Se a extensao foi instalada na sua wiki, ela fornece onze funçoes adicionais ao analisador sintáctico, que suplementam as palavras mágicas já presentes no MediaWiki. Todas as funçoes fornecidas pela extensao tem a forma:

#expr


Esta funçao calcula a expressao matemática e retorna o resultado. Portanto:


 *   &rarr; 

Os operadores matemáticos disponíveis estao listados na tabela da direita, por ordem crescente de precedencia. Para mais detalhes sobre cada operador, consulte.

A precisao e formato do resultado variam de acordo com o sistema operativo do servidor que está a executar 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 de 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 expressao de entrada vazia retorna uma expressao de saída vazia:


 *  </tt> &rarr;  

Expressoes inválidas retornam uma ou várias mensagens de erro, que podem ser apanhadas usando a funçao #iferror</tt>:


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

Algumas expressoes podem resultar em erros de vírgula flutuante (floating-point) quando sao 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çoes e a configuraçao do servidor que executa a wiki (ver ).

#if
Esta funçao determina se a expressao 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 expressao é sempre interpretada como texto puro, portanto expressoes matemáticas nao sao calculadas:


 *  </tt> &rarr; 

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


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

Também é possível intercalar funçoes #if, ou seja, testar uma dentro da outra. Pode ser feito mais ou menos desta forma:


 *  </tt>

Para mais exemplos do uso desta funçao, consulte funçoes do analisador sintáctico nas predefiniçoes.

#ifeq
Esta funçao determina se as duas expressoes sao identicas.

Se ambas resultarem em valores numéricos válidos, sao comparadas numericamente:


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

Caso contrário, sao comparadas como texto:


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

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


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


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

Se uma expressao 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çao determina se ocorre um erro no cálculo da expressao. Se ocorrer um erro, retorna o <tt>valor se verdadeiro</tt>. Se nao, 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 objecto HTML com <tt>class="error"</tt>. Este objecto pode ser gerado por outras funçoes do analisador sintáctico, como <tt>#expr</tt>, <tt>#time</tt> e <tt>#rel2abs</tt>, por erros em predefiniçoes como ciclos e recursao, 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 <tt>valor se falso</tt> e nao ocorrer um erro, é retornado o resultado da <tt>expressao</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 expressao vazia:


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

#ifexpr
Esta funçao determina se a expressao matemática é diferente de zero. Primeiro, calcula a expressao da mesma forma que <tt>#expr</tt> acima, com os mesmos operadores. O resultado numérico do cálculo é entao 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 expressao de entrada vazia retorna o <tt>valor se falso</tt>:


 * <tt> </tt> &rarr; 

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


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

excepto nos casos em que a expressao de entrada esteja vazia ou seja incorrecta (uma mensagem de erro é tratada como um trecho de texto normal; nao é 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 expressao 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çao determina se a página especificada existe na wiki.

A funçao 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 efectivamente vazia, ou seja uma página de redireccionamento. 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çao 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çao <tt>#ifexist</tt> é considerada «exigente» e só um número limitado destas funçoes pode ser colocado numa página (incluindo funçoes dentro de páginas transcluídas nessa página). Quando este número é excedido, a página é colocada na categoria Category:, e quaisquer funçoes <tt>#ifexist:</tt> que ainda restem executar, retornam automaticamente o <tt>valor se falso</tt> quer a sua página alvo exista ou nao.

Se uma página verifica a existencia de outra página alvo usando <tt>#ifexist:</tt>, entao 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 «»), entao     :/Xpto listará «».

Nas wikis que usam um repositório partilhado de ficheiros multimédia, <tt>#ifexist</tt> pode ser usado para verificar se um ficheiro foi carregado no repositório, mas nao na própria wiki:


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

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

#rel2abs
Esta funçao 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 <tt>deslocamento relativo</tt>, os seguintes sao válidos:
 * <tt>.</tt> - o nível actual
 * <tt>..</tt> - subir um nível
 * <tt>/xpto</tt> - descer um nível para o sub-directó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> nao 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çao faz uma comparaçao 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 omissao
Se nao for encontrada nenhuma correspondencia, é retornado o <tt>valor por omissao</tt>:


 * <tt> </tt> &rarr; 

Nesta forma, o <tt>valor por omissao</tt> nao 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 omissao</tt> pode ser declarado explicitamente usando <tt>#default</tt> como caso.

Desta forma, pode ser colocado em qualquer posiçao:


 * <tt> </tt> &rarr; 

Se o <tt>valor por omissao</tt> for omitido e nao for encontrada nenhuma correspondencia, nao é retornado nenhum valor:


 * <tt> </tt> &rarr;   

Agrupamento dos valores
Quando vários casos tem 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çao
Tal como <tt>#ifeq</tt>, a comparaçao é feita numericamente se tanto o <tt>texto</tt> como o <tt>caso</tt> forem números. Se nao, sao 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 nao podem conter sinais de igual (<tt>=</tt>). No entanto, é possível inserir sinais de igual usando uma predefiniçao = que contenha unicamente um sinal de igual:


 * <tt> </tt> &rarr; 

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

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

Esta funçao formata uma data e/ou hora de acordo com a sintaxe fornecida. Por omissao, 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 objecto <tt>data/hora</tt>:


 * <tt> </tt> &rarr; 

A lista de códigos de formataçao válidos é apresentada na tabela da direita. Qualquer carácter no texto de formataçao que nao seja reconhecido, é passado inalterado para o resultado. Existem duas formas de escapar caracteres no texto de formataçao, impedindo que sejam interpretados:


 * Uma barra invertida (<tt>\</tt>) seguida de um carácter de formataçao sao interpretados como o carácter literal, sem formataçao.


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


 * Caracteres envoltos em aspas duplas (<tt>"</tt>) sao considerados caracteres literais e nao caracteres de formataçao e as aspas sao 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 objecto <tt>data/hora</tt> pode ter qualquer formato aceite pela funçao strtotime do PHP. Sao aceites objectos 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 de Unix, pode usá-la em cálculos de datas precedendo-a com uma arroba <tt>@</tt>.


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

A gama de datas aceites é desde 1 de Janeiro de 0100 até 31 de Dezembro de 9999. Valores fora desta gama serao interpretados incorrectamente:


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


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

Datas absolutas podem ser especificadas de forma completa ou parcial; a funçao preenche as partes que nao tenham sido especificadas usando os valores actuais:


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

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


 * <tt> </tt> &rarr; '''
 * (1959 é considerado uma hora e nao um ano)
 * <tt> </tt> &rarr; '''
 * (como 19:60 nao é 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 nao (nao é nunca tratado, por exemplo, como ano e mes):


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

A funcionalidade de preenchimento de datas parciais nao é consistente; algumas partes sao preenchidas usando valores actuais, outras nao:


 * <tt> </tt> &rarr; '''
 * <tt> </tt> &rarr; '''
 * (vai para o início do mes, nao para o dia actual)

A funçao faz alguns cálculos matemáticos:


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

#timel
Esta funçao é identica a <tt> </tt>, excepto por usar, como valor por omissao, a hora local do servidor da wiki (tal como definido em ) quando nao é fornecida uma data:


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


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

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

Esta funçao 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>no segmentos</tt> for omitido, por omissao será zero e sao retornados todos os segmentos. Se o parâmetro <tt>1o segmento</tt> for omitido ou for zero, por omissao, 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>no segmentos</tt> efectivamente «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>1o segmento</tt> efectivamente 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>) sao 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 usar <tt>#titleparts:</tt> como um pequeno «analisador e conversor sintáctico», mas considere que, quando a funçao 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çao
As funçoes do analisador sintáctico podem ser substituídas. Isto significa que, quando a página é gravada, a chamada para a funçao é substituída pelo resultado dessa funçao. Para substituir uma funçao, 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 nao. Quando o código é colocado numa página, sempre que a página é apresentada ao utilizador o código é executado e resultará em <tt>sim</tt> se a página existir e, mais tarde, em <tt>nao</tt> se entretanto ela tiver sido apagada. Se a funçao 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çao (o código desaparece no conteúdo da página, sendo substituído pelo resultado). A partir daí, a funçao deixa de ser executada porque o código já nao existe.

O resultado de uma substituiçao é indefinido, se as expressoes contiverem código volátil (como palavras mágicas ou outras funçoes do analisador sintáctico) que nao seja também substituído. Para que o resultado da substituiçao 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; nao
 * <tt> sim </tt> &rarr; sim

Para mais detalhes consulte Help:Substitution.

Tabelas
As funçoes do analisador sintáctico 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çao, o analisador sintáctico nao consegue distinguir que barras pertencem a funçao e que barras pertencem a tabela:

resulta em:

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

resulta em:

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

Remoçao de espaço vazio
O espaço vazio, incluindo quebras de linha, tabulaçoes e espaços, é removido do início e fim de todos os parâmetros das funçoes do analisador sintáctico. Se este comportamento nao for desejado, a inclusao de quaisquer caracteres que nao correspondem a espaço vazio impede a remoçao. Incluem-se nestes caracteres a codificaçao HTML para um carácter vazio (<tt> &amp;nbsp; </tt>), os caracteres Unicode invisíveis (como o espaço de largura zero e as marcas de direcçao), ou os elementos que sao reconhecidos e removidos pelo analisador sintáctico 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çoes nas predefiniçoes