Módulo:Testes/Gkiyoshinishimoto/Pagetype

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Este módulo é usado para detectar o tipo de página de uma determinada página. Ele detecta páginas de redirecionamento [en] automaticamente e é altamente personalizável. Ele pode ser usado sozinho ou como um metamódulo para criar outras predefinições de detecção de tipo de página. Este módulo também pode ser acessado usando {{Teste/Gkiyoshinishimoto/Pagetype}}.

Sintaxe[editar código-fonte]

Uso básico
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main}}
Todos os parâmetros
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main
| page              = 
| defaultns         = 
| main              = 
| user              = 
| wikipedia         = 
| project           = 
| wp                = 
| file              = 
| image             = 
| mediawiki         = 
| template          = 
| help              = 
| category          = 
| portal            = 
| draft             = 
| timedtext         = 
| module            = 
| topic             = 
| special           = 
| media             = 
| talk              = 
| redirect          = 
| dab               = 
| na                = 
| other             = 
| plural            = 
}}

Uso básico[editar código-fonte]

Para detecção simples do tipo de página da página atual, use as configurações padrão:

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main}}

Isso irá produzir os seguintes resultados, dependendo do tipo de página ou do espaço nomeado:

Tipo de página / espaço nomeado Saída
Redirecionamentos (em qualquer espaço nomeado) redirect
Espaço nomeado principal article
Espaço nomeado de arquivo file
Espaço nomeado de predefinição template
Espaço nomeado de categoria category
Espaço nomeado de módulo module
Outros espaços nomeados page

Se o módulo for usado em uma página de discussão, ele detectará o tipo de página para a página de assunto correspondente.

Exemplo
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main}} module

O parâmetro "page"[editar código-fonte]

Você pode usar o parâmetro page para fazer o módulo agir como se tivesse sido chamado a partir de determinada página.

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=nome da página}}
Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=United Kingdom}} redirect
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Ficheiro:Example.svg}} file
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb Áudio.ogg.pt.srt}} page

Adicionando e removendo espaços nomeados[editar código-fonte]

É possível especificar um comportamento diferente para cada espaço nomeado do que o descrito na seção uso básico. Por exemplo, você pode querer que o módulo mostre "user page" ("página do usuário") para páginas no espaço nomeado de usuário, em vez do "page" ("página") padrão. Para fazer isso, você pode usar o código |user=yes. Isso procura o nome típico usado para páginas no namespace do usuário, neste caso "página do usuário", e usa esse texto quando o módulo é usado com uma página no espaço nomeado de usuário. Para usar isso com outros espaços nomeados, use o nome do espaço nomeado em letras minúsculas como parâmetro:

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main
| user              = yes
| wikipedia         = yes
| project           = yes
| wp                = yes
| mediawiki         = yes
| help              = yes
| portal            = yes
| draft             = yes
| timedtext         = yes
| topic             = yes
| special           = yes
| media             = yes
}}

Você pode usar qualquer um dos seguintes para especificar o espaço nomeado: "yes", "y", "true" ou "1 ". Eles podem ser usados em qualquer combinação de letras maiúsculas e minúsculas. (Esses valores são definidos por Módulo:Testes/Gkiyoshinishimoto/Yesno.)

O texto padrão para esses espaços nomeados é o seguinte:

Tipo de página / espaço nomeado Saída
Espaço nomeado Usuário user page
Espaço nomeado Wikipédia project page
Espaço nomeado MediaWiki interface page
Espaço nomeado Ajuda help page
Espaço nomeado Portal portal
Espaço nomeado Draft draft
Espaço nomeado TimedText Timed Text page
Espaço nomeado Tópico topic
Espaço nomeado Especial special page
Espaço nomeado Media file

Você também pode usar um processo semelhante para remover qualquer um dos valores de espaço nomeado padrão. Por exemplo, se você usar o código |template=no, o módulo exibirá "page" ("página") quando usado em uma página de predefinição, em vez do padrão "template" ("predefinição").

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main
| main     = no
| file     = no
| template = no
| category = no
| module   = no
}}

Os seguintes valores funcionarão para remover valores de espaço nomeado: "no", "n", "false" ou "0". Eles podem ser usados em qualquer combinação de letras maiúsculas e minúsculas.

Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio|wikipedia=yes}} project page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido|talk=y}} talk page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|main=no}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb %C3%81udio.ogg.pt.srt}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb %C3%81udio.ogg.pt.srt|timedtext=Yes}} page

Conjuntos de espaços nomeados padrão[editar código-fonte]

Além de adicionar e remover espaços nomeados individuais, é possível especificar diferentes conjuntos de espaços nomeados usando |defaultns=. Existem quatro conjuntos diferentes disponíveis: all, extended, none e o conjunto padrão. Esses conjuntos permitem que você especifique muitos espaços nomeados de uma só vez, sem precisar usar todos os parâmetros de espaços nomeados individuais. Os espaços nomeados são definidos de acordo com a seguinte tabela:

Espaço nomeado Valor de |defaultns= Saída
none extended all Outros valores
Principal ☒N checkY checkY checkY article
Usuário ☒N checkY checkY ☒N user page
Wikipédia ☒N checkY checkY ☒N project page
Ficheiro ☒N checkY checkY checkY file
MediaWiki ☒N checkY checkY ☒N interface page
Predefinição ☒N checkY checkY checkY template
Ajuda ☒N checkY checkY ☒N help page
Categoria ☒N checkY checkY checkY category
Portal ☒N checkY checkY ☒N portal
Draft ☒N checkY checkY ☒N draft
TimedText ☒N ☒N checkY ☒N Timed Text page
Módulo ☒N checkY checkY checkY module
Tópico (Fluxogramas) ☒N ☒N checkY ☒N topic
Todos os espaços nomeados de discussão ☒N ☒N checkY ☒N talk page
Especial ☒N ☒N checkY ☒N special page
Media ☒N ☒N checkY ☒N file
Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|defaultns=none}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido|defaultns=all}} talk page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Ficheiro:Example.svg}} file
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Ficheiro:Example.svg|defaultns=none}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio|defaultns=extended}} project page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb %C3%81udio.ogg.pt.srt|defaultns=extended}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb %C3%81udio.ogg.pt.srt|defaultns=all}} page

Valores de espaços nomeados personalizados[editar código-fonte]

É possível especificar um valor personalizado para qualquer espaço nomeado:

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main
| main              = texto personalizado
| user              = texto personalizado
| wikipedia         = texto personalizado
| project           = texto personalizado
| wp                = texto personalizado
| file              = texto personalizado
| image             = texto personalizado
| mediawiki         = texto personalizado
| template          = texto personalizado
| help              = texto personalizado
| category          = texto personalizado
| portal            = texto personalizado
| draft             = texto personalizado
| timedtext         = texto personalizado
| module            = texto personalizado
| topic             = texto personalizado
| special           = texto personalizado
| media             = texto personalizado
}}
Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio|wikipedia=texto personalizado}} texto personalizado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Discussão:Reino Unido|talk=texto personalizado}} texto personalizado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|main=texto personalizado}} texto personalizado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb %C3%81udio.ogg.pt.srt}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=TimedText:Linkin Park Numb %C3%81udio.ogg.pt.srt|timedtext=texto personalizado}} page

O parâmetro "talk"[editar código-fonte]

Normalmente, o módulo tratará as páginas de discussão como se estivessem no espaço nomeado do assunto correspondente. No entanto, se o parâmetro talk for definido, o módulo tratará as páginas de discussão separadamente das páginas de assunto. O parâmetro talk define valores para todas as páginas de discussão, ou seja, páginas no espaço nomeado "Discussão:", páginas no espaço nomeado "Usuário Discussão:, páginas no espaço nomeado "Wikipédia Discussão:" e assim por diante.

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|talk=yes}}
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|talk=texto personalizado}}

O valor padrão para "talk=yes" é "talk page" ("página de discussão").

Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia Discussão:Domínio}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia Discussão:Domínio|wikipedia=yes}} project page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia Discussão:Domínio|talk=yes}} talk page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia Discussão:Domínio|wikipedia=yes|talk=yes}} talk page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia Discussão:Domínio|talk=texto personalizado}} texto personalizado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia Discussão:Domínio|wikipedia=yes|talk=texto personalizado}} texto personalizado

Classes do espaço nomeado principal[editar código-fonte]

Para páginas no espaço nomeado principal, é possível adicionar um valor de classe no primeiro parâmetro posicional:

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|classe}}

Se o valor da classe corresponder a um dos valores na tabela abaixo, ele produzirá uma alternativa para a saída padrão article.

Classe Valores da classe Saída
Página de desambiguação disambiguation, disambig, disamb, dab page
Sem classe aplicável na, n/a page

Você pode inserir o valor da classe em qualquer combinação de letras maiúsculas e minúsculas.

Classes do espaço nomeado principal personalizadas[editar código-fonte]

Também é possível especificar um valor customizado para as classes do espaço nomeado principal:

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|classe|dab=yes|na=yes}}
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|classe|dab=texto personalizado|na=texto personalizado}}

Isso funciona da mesma maneira que para os tipos de página de espaço nomeado personalizados. Os parâmetros possíveis são:

  • dab: um valor personalizado para páginas de classe de desambiguação. Se definido como "yes", "y", "true" ou "1", isso produz "disambiguation page" ("página de desambiguação"). Se definido como "no", "n", "false" ou "0", nenhum valor personalizado é produzido. Se definido para qualquer outro valor, produz esse texto.
  • na: um valor personalizado para páginas de classe NA. Funciona da mesma forma que o parâmetro dab. O valor padrão para "yes" etc. é "page".
Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|dab}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|dab|dab=texto personalizado}} texto personalizado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|na}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|na|na=texto personalizado}} texto personalizado

Redirecionamentos[editar código-fonte]

Por padrão, o módulo detecta automaticamente redirecionamentos em todos os espaços nomeados. Não é possível especificar o comportamento de redirecionamento por espaço nomeado, mas você pode desativar a detecção de redirecionamento ou usar um valor personalizado para páginas de redirecionamento.

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|redirect=no}}
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|redirect=texto personalizado}}
Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=United Kingdom}} redirect
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=United Kingdom|redirect=no}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=United Kingdom|redirect=texto personalizado}} texto personalizado

Outros espaços nomeados[editar código-fonte]

Por padrão, o módulo produz "page" se usado a partir de um espaço nomeado que não foi especificado. Este valor pode ser alterado com o parâmetro |other=:

{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|other=texto personalizado}}
Exemplos
Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio}} page
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio|other=texto personalizado}} texto personalizado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Wikipédia:Domínio|other=texto personalizado|wikipedia=wikipedia-space text}} wikipedia-space text

Plurais[editar código-fonte]

Por padrão, o módulo retorna o nome do espaço nomeado no singular. Adicionar o parâmetro |plural=y retorna a forma plural.

Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|plural=y}} articles
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Categoria:Livros}} category
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Categoria:Livros|plural=y}} categories

As regras de pluralização podem ser personalizadas em Módulo:Testes/Gkiyoshinishimoto/Pagetype/config para permitir a localização.

Capitalização[editar código-fonte]

Por padrão o módulo retorna o tipo de página em letras minúsculas. Adicionar o parâmetro |caps=y retorna uma versão com uma letra maiúscula no início.

Código Resultado
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido}} article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|caps=y}} Article
{{#invoke:Testes/Gkiyoshinishimoto/Pagetype|main|page=Reino Unido|plural=y|caps=y}} Articles

--------------------------------------------------------------------------------
--                                                                            --
--                                  Pagetype                                  --
--                                                                            --
-- Este é um meta-módulo destinado a substituir                               --
-- {{Teste/Gkiyoshinishimoto/Pagetype}} e predefinições semelhantes. Ele      --
-- detecta espaços nomeados automaticamente e permite uma grande              --
-- personalização. Ele pode ser facilmente portado para outras wikis          --
-- alterando os valores em                                                    --
-- [[Módulo:Testes/Gkiyoshinishimoto/Pagetype/config]].                       --
--                                                                            --
--------------------------------------------------------------------------------

-- Carrega a configuração.
local cfg = mw.loadData('Módulo:Testes/Gkiyoshinishimoto/Pagetype/config')

-- Carrega os módulos necessários.
local getArgs = require('Módulo:Testes/Gkiyoshinishimoto/Arguments').getArgs
local yesno = require('Módulo:Testes/Gkiyoshinishimoto/Yesno')
local nsDetectModule = require('Módulo:Testes/Gkiyoshinishimoto/Namespace detect')
local nsDetect = nsDetectModule._main
local getParamMappings = nsDetectModule.getParamMappings
local getPageObject = nsDetectModule.getPageObject

local p = {}

local function shallowCopy(t)
	-- Faz uma cópia superficial de uma tabela.
	local ret = {}
	for k, v in pairs(t) do
		ret[k] = v
	end
	return ret
end

local function checkPagetypeInput(namespace, val)
	-- Verifica se precisamos do valor padrão para o espaço nomeado fornecido,
	-- e, se for o caso, o obtém da tabela de tipos de página.
	-- A função "yesno" retorna "true"/"false" para "yes", "no", etc.,
	--  e retorna "val" para outra entrada.
	local ret = yesno(val, val)
	if ret and type(ret) ~= 'string' then
		ret = cfg.pagetypes[namespace]
	end
	return ret
end

local function getPagetypeFromClass(class, param, aliasTable, default)
	-- Obtém o tipo de página de uma classe especificada no primeiro 
	-- parâmetro posicional.
	param = yesno(param, param)
	if param ~= false then -- Nenhuma verificação se especificamente não for permitido.
		for _, alias in ipairs(aliasTable) do
			if class == alias then
				if type(param) == 'string' then
					return param
				else
					return default
				end
			end
		end
	end
end

local function getNsDetectValue(args)
	-- Constrói os argumentos para passar para
	-- [[Módulo:Testes/Gkiyoshinishimoto/Namespace detect]] e retorna
	-- o resultado.

	-- Obtém os valores padrão.
	local ndArgs = {}
	local defaultns = args[cfg.defaultns]
	if defaultns == cfg.defaultnsAll then
		ndArgs = shallowCopy(cfg.pagetypes)
	else
		local defaultnsArray
		if defaultns == cfg.defaultnsExtended then
			defaultnsArray = cfg.extendedNamespaces
		elseif defaultns == cfg.defaultnsNone then
			defaultnsArray = {}
		else
			defaultnsArray = cfg.defaultNamespaces
		end
		for _, namespace in ipairs(defaultnsArray) do
			ndArgs[namespace] = cfg.pagetypes[namespace]
		end
	end

	--[[
	-- Adiciona os valores personalizados passados a partir dos argumentos. Estes 
	-- substituem os padrões. Os possíveis nomes de argumentos são buscados a 
	-- partir de "Módulo:Testes/Gkiyoshinishimoto/Namespace detect" automaticamente 
	-- caso novos espaços nomeados sejam  adicionados. Embora aceitemos nomes 
	-- alternativos de espaços nomeados como parâmetros, passamos apenas o nome  
	-- do espaço nomeado local como um parâmetro para  
	-- "Módulo:Testes/Gkiyoshinishimoto/Namespace detect".
	-- Isso significa que o parâmetro "image" pode sobrescrever os padrões 
	-- do espaço nomeado "File:", o que não funcionaria se passássemos os  
	-- parâmetros separadamente.
	--]]
	local mappings = getParamMappings()
	for ns, paramAliases in pairs(mappings) do
		-- Copia a tabela de nomes alternativos, pois # não funciona com 
		-- tabelas retornadas a partir de "mw.loadData".
		paramAliases = shallowCopy(paramAliases)
		local paramName = paramAliases[1]
		-- Itera para trás ao longo do arranjo para que quaisquer valores para os
		-- nomes de espaço nomeado local substituam aqueles para nomes alternativos
		-- de espaço nomeado.
		for i = #paramAliases, 1, -1 do
			local paramAlias = paramAliases[i]
			local ndArg = checkPagetypeInput(paramAlias, args[paramAlias])
			if ndArg == false then
				-- Se algum argumento for "false", converte-o em "nil" para 
				-- protegê-lo contra quebra por alterações futuras em 
				-- [[Módulo:Testes/Gkiyoshinishimoto/Namespace detect]].
				ndArgs[paramName] = nil
			elseif ndArg then
				ndArgs[paramName] = ndArg
			end
		end
	end
	-- Verifica páginas de classe de desambiguação e classe 'N/A' no
	-- espaço principal.
	if ndArgs.main then
		local class = args[1]
		if type(class) == 'string' then
			-- Coloca em minúsculas, por exemplo "Dab" e "dab" serão iguais.
			class = mw.ustring.lower(class)
		end
		local dab = getPagetypeFromClass(
			class,
			args[cfg.dab],
			cfg.dabAliases,
			cfg.dabDefault
		)
		if dab then
			ndArgs.main = dab
		else
			local na = getPagetypeFromClass(
				class,
				args[cfg.na],
				cfg.naAliases,
				cfg.naDefault
			)
			if na then
				ndArgs.main = na
			end
		end
	end
	-- Se não houver nenhum valor de discussão especificado, usa o espaço  
	-- nomeado de assunto correspondente para páginas de discussão.
	if not ndArgs.talk then
		ndArgs.subjectns = true
	end
	-- Adiciona o valor de 'fallback'. Isso também pode ser personalizado, 
	-- mas não pode ser desabilitado.
	local other = args[cfg.other]
	-- Ignoraremos os resultados "true"/"false"/"nil" a partir de "yesno" aqui, 
	-- mas usaremos  de qualquer maneira para consistência.
	other = yesno(other, other)
	if type(other) == 'string' then
		ndArgs.other = other
	else
		ndArgs.other = cfg.otherDefault
	end
	-- Permite valores de página personalizados.
	ndArgs.page = args.page
	return nsDetect(ndArgs)
end

local function detectRedirects(args)
	local redirect = args[cfg.redirect]
	-- A função "yesno" retorna "true"/"false" para "yes", "no", etc.,
	-- e retorna "redirect" para outra entrada.
	redirect = yesno(redirect, redirect)
	if redirect == false then
		-- Detecta redirecionamentos, a menos que tenham sido explicitamente 
		-- proibidos com "redirect=no" ou similar.
		return
	end
	local pageObject = getPageObject(args.page)
	-- Se estivermos usando espaços nomeados de assunto em outro lugar,
	-- faz isso aqui também.
	if pageObject
		and not yesno(args.talk, true)
		and args[cfg.defaultns] ~= cfg.defaultnsAll
	then
		pageObject = getPageObject(
			pageObject.subjectNsText .. ':' .. pageObject.text
		)
	end
	-- Permite valores personalizados para redirecionamentos.
	if pageObject and pageObject.isRedirect then
		if type(redirect) == 'string' then
			return redirect
		else
			return cfg.redirectDefault
		end
	end
end

function p._main(args)
	local redirect = detectRedirects(args)
	local pagetype = ""
	if redirect then
		pagetype = redirect
	else
		pagetype = getNsDetectValue(args)
	end
	if yesno(args.plural, false) then
		if cfg.irregularPlurals[pagetype] then
			pagetype = cfg.irregularPlurals[pagetype]
		else
			pagetype = pagetype .. cfg.plural -- frequentemente 's'
		end
	end
	if yesno(args.caps, false) then
		pagetype = mw.ustring.upper(mw.ustring.sub(pagetype, 1, 1)) ..
			mw.ustring.sub(pagetype, 2)
	end
	return pagetype
end

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

return p