<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.tokusatsus.com/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3AHatnote_list</id>
	<title>Módulo:Hatnote list - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tokusatsus.com/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3AHatnote_list"/>
	<link rel="alternate" type="text/html" href="https://wiki.tokusatsus.com/index.php?title=M%C3%B3dulo:Hatnote_list&amp;action=history"/>
	<updated>2026-07-05T09:29:52Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.tokusatsus.com/index.php?title=M%C3%B3dulo:Hatnote_list&amp;diff=2468&amp;oldid=prev</id>
		<title>Tavoraadmin: Importando predefinição/módulo da Wikipédia em português para manter layout</title>
		<link rel="alternate" type="text/html" href="https://wiki.tokusatsus.com/index.php?title=M%C3%B3dulo:Hatnote_list&amp;diff=2468&amp;oldid=prev"/>
		<updated>2026-07-05T04:52:51Z</updated>

		<summary type="html">&lt;p&gt;Importando predefinição/módulo da Wikipédia em português para manter layout&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                             Módulo:Hatnote list                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- Este módulo produz e formata listas para uso em notas de cabeçalho         --&lt;br /&gt;
-- (&amp;#039;hatnotes&amp;#039;). Em particular, ele implementa a lista &amp;quot;for-see&amp;quot;, ou seja,    --&lt;br /&gt;
-- listas de declarações &amp;quot;Para X, consulte Y&amp;quot;, conforme usado em              --&lt;br /&gt;
-- {{About}}, {{Redirect}} e suas variantes. Também são introduzidas as       --&lt;br /&gt;
-- auxiliares &amp;quot;andList&amp;quot; e &amp;quot;orList&amp;quot; para formatar listas com essas conjunções  --&lt;br /&gt;
-- (&amp;quot;e&amp;quot;/&amp;quot;ou&amp;quot;).                                                                --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local mArguments -- inicializa lentamente&lt;br /&gt;
local mFormatLink = require(&amp;#039;Módulo:Format link&amp;#039;)&lt;br /&gt;
local mHatnote = require(&amp;#039;Módulo:Hatnote&amp;#039;)&lt;br /&gt;
local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Funções auxiliares de sequenciamento (&amp;quot;&amp;#039;string&amp;#039;ificação&amp;quot;) de lista&lt;br /&gt;
--&lt;br /&gt;
-- Essas funções são usadas para transformar listas e sequências (&amp;#039;strings&amp;#039;), &lt;br /&gt;
-- geralmente listas de páginas dentro da parte &amp;quot;Y&amp;quot; de &amp;quot;Para X, ver Y&amp;quot; de &lt;br /&gt;
-- itens para ver.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- tabela de opções padrão usada nas funções de sequenciamento &lt;br /&gt;
-- (&amp;quot;&amp;#039;string&amp;#039;ificação&amp;quot;) de listas&lt;br /&gt;
local stringifyListDefaultOptions = {&lt;br /&gt;
	conjunction = &amp;quot;e&amp;quot;,&lt;br /&gt;
	separator = &amp;quot;,&amp;quot;,&lt;br /&gt;
	altSeparator = &amp;quot;;&amp;quot;,&lt;br /&gt;
	space = &amp;quot; &amp;quot;,&lt;br /&gt;
	formatted = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Pesquisa somente texto a ser mostrado&lt;br /&gt;
local function searchDisp(haystack, needle)&lt;br /&gt;
	return string.find(&lt;br /&gt;
		string.sub(haystack, (string.find(haystack, &amp;#039;|&amp;#039;) or 0) + 1), needle&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Sequencia (&amp;quot;&amp;#039;string&amp;#039;ifica&amp;quot;) uma lista genericamente; provavelmente &lt;br /&gt;
-- não deve ser usada diretamente&lt;br /&gt;
local function stringifyList(list, options)&lt;br /&gt;
	-- Verificações de tipo, padrões e um atalho&lt;br /&gt;
	checkType(&amp;quot;stringifyList&amp;quot;, 1, list, &amp;quot;table&amp;quot;)&lt;br /&gt;
	if #list == 0 then return nil end&lt;br /&gt;
	checkType(&amp;quot;stringifyList&amp;quot;, 2, options, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	for k, v in pairs(stringifyListDefaultOptions) do&lt;br /&gt;
		if options[k] == nil then options[k] = v end&lt;br /&gt;
	end&lt;br /&gt;
	local s = options.space&lt;br /&gt;
	-- Formata a lista se solicitado&lt;br /&gt;
	if options.formatted then&lt;br /&gt;
		list = mFormatLink.formatPages(&lt;br /&gt;
			{categorizeMissing = mHatnote.missingTargetCat}, list&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	-- Define o separador; se algum item contiver, usa o separador alternativo&lt;br /&gt;
	local separator = options.separator&lt;br /&gt;
	for k, v in pairs(list) do&lt;br /&gt;
		if searchDisp(v, separator) then&lt;br /&gt;
			separator = options.altSeparator&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Define a conjunção, aplica a vírgula de Oxford e força uma vírgula se #1 tiver &amp;quot;§&amp;quot;&lt;br /&gt;
	local conjunction = s .. options.conjunction .. s&lt;br /&gt;
	if #list == 2 and searchDisp(list[1], &amp;quot;§&amp;quot;) or #list &amp;gt; 2 then&lt;br /&gt;
		conjunction = separator .. conjunction&lt;br /&gt;
	end&lt;br /&gt;
	-- Retorna a sequência (&amp;#039;string&amp;#039;) formatada&lt;br /&gt;
	return mw.text.listToText(list, separator .. s, conjunction)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Função &amp;quot;&amp;#039;DRY&amp;#039;&amp;quot;&lt;br /&gt;
function p.conjList (conj, list, fmt)&lt;br /&gt;
	return stringifyList(list, {conjunction = conj, formatted = fmt})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Sequencia (&amp;quot;&amp;#039;string&amp;#039;ifica&amp;quot;) listas com &amp;quot;e&amp;quot; ou &amp;quot;ou&amp;quot;&lt;br /&gt;
function p.andList (...) return p.conjList(&amp;quot;e&amp;quot;, ...) end&lt;br /&gt;
function p.orList (...) return p.conjList(&amp;quot;ou&amp;quot;, ...) end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Para ver&lt;br /&gt;
--&lt;br /&gt;
-- Faz uma lista &amp;quot;Para X, ver [[Y]].&amp;quot;  a partir de parâmetros brutos. Destinada &lt;br /&gt;
-- às predefinições {{About}} e {{Redirect}} e suas variantes.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- tabela de opções padrão usada na família de funções &amp;quot;forSee&amp;quot;&lt;br /&gt;
local forSeeDefaultOptions = {&lt;br /&gt;
	andKeyword = &amp;#039;e&amp;#039;,&lt;br /&gt;
	title = mw.title.getCurrentTitle().text,&lt;br /&gt;
	otherText = &amp;#039;outros usos&amp;#039;,&lt;br /&gt;
	forSeeForm = &amp;#039;Para %s, ver %s.&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Recolhe a pontuação duplicada no final da sequência (&amp;#039;string&amp;#039;), ignorando &lt;br /&gt;
-- itálico e ligações (&amp;#039;links&amp;#039;)&lt;br /&gt;
local function punctuationCollapse (text)&lt;br /&gt;
 	return text:match(&amp;quot;[.?!](&amp;#039;?)%1(%]?)%2%.$&amp;quot;) and text:sub(1, -2) or text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Estrutura argumentos em uma tabela para sequenciamento (&amp;quot;&amp;#039;string&amp;#039;ificação&amp;quot;)&lt;br /&gt;
--  e opções&lt;br /&gt;
function p.forSeeArgsToTable (args, from, options)&lt;br /&gt;
	-- Verificações de tipo e padrões&lt;br /&gt;
	checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 1, args, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 2, from, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
	from = from or 1&lt;br /&gt;
	checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 3, options, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	for k, v in pairs(forSeeDefaultOptions) do&lt;br /&gt;
		if options[k] == nil then options[k] = v end&lt;br /&gt;
	end&lt;br /&gt;
	-- de &amp;quot;maxArg&amp;quot; é obtido manualmente porque &amp;quot;getArgs()&amp;quot; e &amp;quot;table.maxn&amp;quot; &lt;br /&gt;
	-- não são amigos&lt;br /&gt;
	local maxArg = 0&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;number&amp;#039; and k &amp;gt; maxArg then maxArg = k end&lt;br /&gt;
	end&lt;br /&gt;
	-- Estrutura os dados a partir da lista de parâmetros:&lt;br /&gt;
	-- * &amp;quot;forTable&amp;quot; é a tabela &amp;quot;&amp;#039;wrapper&amp;#039;&amp;quot;, com linhas de &amp;quot;forRow&amp;quot;&lt;br /&gt;
	-- As linhas são tabelas de uma sequência (&amp;#039;string&amp;#039;) de &amp;quot;usos&amp;quot; e uma tabela&lt;br /&gt;
	-- de &amp;quot;páginas&amp;quot; de sequências (&amp;#039;strings&amp;#039;) de nomes de páginas&lt;br /&gt;
	-- * Os espaços em branco são deixados em branco para padronizar em outro lugar, &lt;br /&gt;
	-- mas podem terminar a lista&lt;br /&gt;
	local forTable = {}&lt;br /&gt;
	local i = from&lt;br /&gt;
	local terminated = false&lt;br /&gt;
	-- Se houver texto extra e nenhum argumento for fornecido, fornece o valor &lt;br /&gt;
	-- nulo (&amp;#039;nil&amp;#039;) para não produzir o padrão de &amp;quot;Para outros usos, ver&lt;br /&gt;
	-- algo (desambiguação)&amp;quot;&lt;br /&gt;
	if options.extratext and i &amp;gt; maxArg then return nil end&lt;br /&gt;
	-- Retorno (&amp;#039;loop&amp;#039;) para geração de linhas&lt;br /&gt;
	repeat&lt;br /&gt;
		-- Nova linha vazia&lt;br /&gt;
		local forRow = {}&lt;br /&gt;
		-- No uso em branco, assume que a lista terminou e quebra no final deste &lt;br /&gt;
		-- retorno (&amp;#039;loop&amp;#039;)&lt;br /&gt;
		forRow.use = args[i]&lt;br /&gt;
		if not args[i] then terminated = true end&lt;br /&gt;
		-- Nova lista vazia de páginas&lt;br /&gt;
		forRow.pages = {}&lt;br /&gt;
		-- Insere o primeiro item de páginas se presente&lt;br /&gt;
		table.insert(forRow.pages, args[i + 1])&lt;br /&gt;
		-- Se o parâmetro após o próximo for &amp;quot;e&amp;quot;, faz um retorno (&amp;#039;loop&amp;#039;) interno &lt;br /&gt;
		-- para coletar parâmetros&lt;br /&gt;
		-- até que os &amp;quot;e&amp;quot;s acabem. Os espaços em branco são ignorados: &lt;br /&gt;
		-- &amp;quot;1|e||e|3&amp;quot; → {1, 3}&lt;br /&gt;
		while args[i + 2] == options.andKeyword do&lt;br /&gt;
			if args[i + 3] then&lt;br /&gt;
				table.insert(forRow.pages, args[i + 3])&lt;br /&gt;
			end&lt;br /&gt;
			-- Incrementa para o próximo &amp;quot;e&amp;quot;&lt;br /&gt;
			i = i + 2&lt;br /&gt;
		end&lt;br /&gt;
		-- Incrementa para o próximo uso&lt;br /&gt;
		i = i + 2&lt;br /&gt;
		-- Acrescenta a linha&lt;br /&gt;
		table.insert(forTable, forRow)&lt;br /&gt;
	until terminated or i &amp;gt; maxArg&lt;br /&gt;
&lt;br /&gt;
	return forTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Sequencia (&amp;quot;&amp;#039;string&amp;#039;ifica&amp;quot;) uma tabela conforme formatada por &amp;quot;forSeeArgsToTable&amp;quot;&lt;br /&gt;
function p.forSeeTableToString (forSeeTable, options)&lt;br /&gt;
	-- Verificações de tipo e padrões&lt;br /&gt;
	checkType(&amp;quot;forSeeTableToString&amp;quot;, 1, forSeeTable, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	checkType(&amp;quot;forSeeTableToString&amp;quot;, 2, options, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	for k, v in pairs(forSeeDefaultOptions) do&lt;br /&gt;
		if options[k] == nil then options[k] = v end&lt;br /&gt;
	end&lt;br /&gt;
	-- Sequencia (&amp;quot;&amp;#039;string&amp;#039;ifica&amp;quot;) cada item de para ver em uma lista&lt;br /&gt;
	local strList = {}&lt;br /&gt;
	if forSeeTable then&lt;br /&gt;
		for k, v in pairs(forSeeTable) do&lt;br /&gt;
			local useStr = v.use or options.otherText&lt;br /&gt;
			local pagesStr =&lt;br /&gt;
				p.andList(v.pages, true) or&lt;br /&gt;
				mFormatLink._formatLink{&lt;br /&gt;
					categorizeMissing = mHatnote.missingTargetCat,&lt;br /&gt;
					link = mHatnote.disambiguate(options.title)&lt;br /&gt;
				}&lt;br /&gt;
			local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)&lt;br /&gt;
			forSeeStr = punctuationCollapse(forSeeStr)&lt;br /&gt;
			table.insert(strList, forSeeStr)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..&amp;#039;.&amp;#039;)) end&lt;br /&gt;
	-- Retorna a lista concatenada&lt;br /&gt;
	return table.concat(strList, &amp;#039; &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Produz uma sequência (&amp;#039;string&amp;#039;) &amp;quot;Para X, ver [[Y]]&amp;quot; de argumentos. Espera lacunas &lt;br /&gt;
-- no índice mas não valores em branco/espaço em branco. Ignora argumentos (&amp;#039;args&amp;#039;) &lt;br /&gt;
-- nomeados e argumentos (&amp;#039;args&amp;#039;) menores que (&amp;quot;&amp;lt;&amp;quot;) &amp;quot;from&amp;quot;.&lt;br /&gt;
function p._forSee (args, from, options)&lt;br /&gt;
	local forSeeTable = p.forSeeArgsToTable(args, from, options)&lt;br /&gt;
	return p.forSeeTableToString(forSeeTable, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Assim como &amp;quot;_forSee&amp;quot;, mas usa o quadro (&amp;#039;frame&amp;#039;).&lt;br /&gt;
function p.forSee (frame, from, options)&lt;br /&gt;
	mArguments = require(&amp;#039;Módulo:Arguments&amp;#039;)&lt;br /&gt;
	return p._forSee(mArguments.getArgs(frame), from, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Tavoraadmin</name></author>
	</entry>
</feed>