<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://dicionario.advogadocompleto.com/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3ABook</id>
	<title>Módulo:Book - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://dicionario.advogadocompleto.com/index.php?action=history&amp;feed=atom&amp;title=M%C3%B3dulo%3ABook"/>
	<link rel="alternate" type="text/html" href="https://dicionario.advogadocompleto.com/index.php?title=M%C3%B3dulo:Book&amp;action=history"/>
	<updated>2026-05-15T16:47:47Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://dicionario.advogadocompleto.com/index.php?title=M%C3%B3dulo:Book&amp;diff=138&amp;oldid=prev</id>
		<title>Itaymbere: Criou página com &#039;local getArgs = require(&#039;Module:Arguments&#039;).getArgs local collectionPrefix = &#039;Wikilivros:Livros/&#039;  local arraySearch = function ( needle, haystack ) 	for k,v in pairs( haystack ) do 		if v == needle then 			result = k; 		end 	end 	return result; end  local function getArgNums(args) 	-- Returns an array containing the keys of all positional arguments that contain data (i.e. non-whitespace values). 	local nums = {} 	for k, v in pairs(args) do 		if v and type(k) == &#039;number&#039;...&#039;</title>
		<link rel="alternate" type="text/html" href="https://dicionario.advogadocompleto.com/index.php?title=M%C3%B3dulo:Book&amp;diff=138&amp;oldid=prev"/>
		<updated>2026-03-29T17:16:21Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local collectionPrefix = &amp;#039;Wikilivros:Livros/&amp;#039;  local arraySearch = function ( needle, haystack ) 	for k,v in pairs( haystack ) do 		if v == needle then 			result = k; 		end 	end 	return result; end  local function getArgNums(args) 	-- Returns an array containing the keys of all positional arguments that contain data (i.e. non-whitespace values). 	local nums = {} 	for k, v in pairs(args) do 		if v and type(k) == &amp;#039;number&amp;#039;...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local collectionPrefix = &amp;#039;Wikilivros:Livros/&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local arraySearch = function ( needle, haystack )&lt;br /&gt;
	for k,v in pairs( haystack ) do&lt;br /&gt;
		if v == needle then&lt;br /&gt;
			result = k;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args)&lt;br /&gt;
	-- Returns an array containing the keys of all positional arguments that contain data (i.e. non-whitespace values).&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if v and type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			table.insert(nums, k)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- [[Predefinição:NOMEDOLIVRO]]&lt;br /&gt;
local getBookName = function ( page )&lt;br /&gt;
	page = page or mw.title.getCurrentTitle().text&lt;br /&gt;
	local pos = mw.ustring.find( page, &amp;#039;/&amp;#039; )&lt;br /&gt;
	if pos == nil then&lt;br /&gt;
		return page&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub( page, 1, pos - 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- [[Predefinição:NOMEDOCAPÍTULO]]&lt;br /&gt;
local getChapterName = function ( page )&lt;br /&gt;
	page = page or mw.title.getCurrentTitle().text&lt;br /&gt;
	local pos = mw.ustring.find( page, &amp;#039;/&amp;#039; )&lt;br /&gt;
	if pos == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub( page, pos + 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- [[Predefinição:EXISTBASEPAGENAME]]&lt;br /&gt;
local getExistingBasePageName = function ( page )&lt;br /&gt;
	if not page or page == &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mw.title.getCurrentTitle().text&lt;br /&gt;
	end&lt;br /&gt;
	local parts = mw.text.split( page, &amp;#039;/&amp;#039;, true )&lt;br /&gt;
	if #parts == 1 then&lt;br /&gt;
		return page&lt;br /&gt;
	end&lt;br /&gt;
	for i = #parts-1, 1, -1 do&lt;br /&gt;
		local base = table.concat( parts, &amp;#039;/&amp;#039;, 1, i )&lt;br /&gt;
		if mw.title.new( base ).exists then&lt;br /&gt;
			return base&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( parts, &amp;#039;/&amp;#039;, 1, #parts-1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- [[Predefinição:EXISTSUBPAGENAME]]&lt;br /&gt;
local getExistingSubPageName = function ( page )&lt;br /&gt;
	if not page or page == &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mw.title.getCurrentTitle().text&lt;br /&gt;
	end&lt;br /&gt;
	local parts = mw.text.split( page, &amp;#039;/&amp;#039;, true )&lt;br /&gt;
	if #parts == 1 then&lt;br /&gt;
		return page&lt;br /&gt;
	end&lt;br /&gt;
	for i = #parts-1, 1, -1 do&lt;br /&gt;
		local base = table.concat( parts, &amp;#039;/&amp;#039;, 1, i )&lt;br /&gt;
		if mw.title.new( base ).exists then&lt;br /&gt;
			return table.concat( parts, &amp;#039;/&amp;#039;, i + 1 )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return parts[ #parts ]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Based on [[Template:AutoCat]]&lt;br /&gt;
local categories = function ( args )&lt;br /&gt;
	local title = mw.title.new( args[&amp;#039;página&amp;#039;] or &amp;#039;&amp;#039; ) or mw.title.getCurrentTitle()&lt;br /&gt;
	if title.namespace ~= 0 then&lt;br /&gt;
		-- This function should be used only for pages from main namespace&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local text = title.text&lt;br /&gt;
	local parts = mw.text.split( text, &amp;#039;/&amp;#039;, true )&lt;br /&gt;
	chText = table.concat( parts, &amp;#039;/&amp;#039;, 2 )&lt;br /&gt;
	local result = {}&lt;br /&gt;
	if chText == &amp;#039;&amp;#039; and #parts == 1 then&lt;br /&gt;
		-- This is the index&lt;br /&gt;
		table.insert( result, &amp;#039;[[Categoria:Todos os livros catalogados|&amp;#039; .. text .. &amp;#039;]]&amp;#039;  )&lt;br /&gt;
		local argNums = getArgNums( args )&lt;br /&gt;
		for i, num in ipairs( argNums ) do&lt;br /&gt;
			-- The index should be added to each category which is appropriated to the book&lt;br /&gt;
			table.insert( result, &amp;#039;[[Categoria:&amp;#039; .. tostring( args[num] ) .. &amp;#039;|*&amp;#039; .. text .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( result, &amp;#039;[[Categoria:Livro/&amp;#039; .. text .. &amp;#039;|&amp;#039; .. text .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		-- This is a chapter&lt;br /&gt;
		for i = 1, #parts-1 do&lt;br /&gt;
			local prefix = table.concat( parts, &amp;#039;/&amp;#039;, 1, i )&lt;br /&gt;
			local subcat = &amp;#039;Categoria:Livro/&amp;#039; .. prefix&lt;br /&gt;
			if mw.title.new( subcat ).exists or i == 1 then&lt;br /&gt;
				table.insert( result, &amp;#039;[[&amp;#039; .. subcat .. &amp;#039;|&amp;#039; .. table.concat( parts, &amp;#039;/&amp;#039;, i+1 ) .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( result, &amp;#039;\n&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Based on parseCollectionLine from https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/Collection.git;a=blob;f=Collection.body.php;hb=f2bd4ee2be12ab3df5f2dcb3bd56ff17247fff66#l793)&lt;br /&gt;
-- Get &amp;quot;Book/Title&amp;quot; from a line in any of these formats:&lt;br /&gt;
-- :[[Book/Title]]&lt;br /&gt;
-- :[[Book/Title|Text]]&lt;br /&gt;
-- :[{{fullurl:Book/Title|oldid=12345}} Text]&lt;br /&gt;
local getChapterFromLine = function ( line )&lt;br /&gt;
	if mw.ustring.sub( line, 1, 1 ) ~= &amp;#039;:&amp;#039; then&lt;br /&gt;
	    -- There is no chapter on this line&lt;br /&gt;
	    return nil&lt;br /&gt;
	end&lt;br /&gt;
	line = mw.text.trim( mw.ustring.sub( line, 2, -1 ) )&lt;br /&gt;
&lt;br /&gt;
	local title = mw.ustring.match( line, &amp;#039;^%[%[:?(.-)|.-%]%]$&amp;#039; ) or&lt;br /&gt;
		mw.ustring.match( line, &amp;#039;^%[%[:?(.-)%]%]$&amp;#039; ) or&lt;br /&gt;
		mw.ustring.match( line, &amp;#039;^%[{{fullurl:(.-)|oldid=.-}}%s+.-%]$&amp;#039; ) or&lt;br /&gt;
		&amp;#039;&amp;#039;&lt;br /&gt;
	return title:gsub( &amp;#039;_&amp;#039;,&amp;#039; &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getListOfChaptersFromText = function ( str )&lt;br /&gt;
	local lines = mw.text.split( str, &amp;#039;[\r\n]+&amp;#039; )&lt;br /&gt;
	local i, line, chapter&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for i, line in ipairs( lines ) do&lt;br /&gt;
		chapter = getChapterFromLine( line )&lt;br /&gt;
		if chapter and chapter ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert( result, chapter )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getChapters = function ( collectionPage )&lt;br /&gt;
	collectionPage = collectionPage or ( collectionPrefix .. getBookName() )&lt;br /&gt;
	local colContent = mw.title.new( collectionPage ):getContent()&lt;br /&gt;
	if colContent == nil then&lt;br /&gt;
		-- This book doesn&amp;#039;t have a collection page&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
	-- FIXME: Optimize the code so it works for large books&lt;br /&gt;
	-- FIXME: Implement a limit on the number of chapters (Collection uses 500 by default)&lt;br /&gt;
	local chapters = getListOfChaptersFromText( mw.ustring.sub( colContent, 1, 18000 ) )&lt;br /&gt;
	return chapters&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getPrintableVersion = function ( chapters )&lt;br /&gt;
	chapters = chapters or getChapters()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	local i, chapter&lt;br /&gt;
	for i, chapter in ipairs( chapters ) do&lt;br /&gt;
		if mw.title.new( chapter ).exists then&lt;br /&gt;
			result = result ..&lt;br /&gt;
				&amp;#039;&amp;lt;h1&amp;gt;[[&amp;#039; .. chapter .. &amp;#039;|&amp;#039; .. getChapterName( chapter ) .. &amp;#039;]]&amp;lt;/h1&amp;gt;\n&amp;#039; ..&lt;br /&gt;
				frame:expandTemplate{ title = &amp;#039;:&amp;#039; .. chapter } .. &amp;#039;\n\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local core = function ( chapters, page, pPosition, relPosition )&lt;br /&gt;
	if pPosition == &amp;#039;first&amp;#039; then&lt;br /&gt;
		return chapters[1];&lt;br /&gt;
	end&lt;br /&gt;
	if pPosition == &amp;#039;last&amp;#039; then&lt;br /&gt;
		return chapters[#chapters];&lt;br /&gt;
	end&lt;br /&gt;
	if pPosition ~= nil and chapters[pPosition] then&lt;br /&gt;
		return chapters[pPosition];&lt;br /&gt;
	end&lt;br /&gt;
	local cPosition = arraySearch( page, chapters );&lt;br /&gt;
	if cPosition == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	if pPosition == &amp;#039;prev&amp;#039; then&lt;br /&gt;
		return chapters[cPosition - 1];&lt;br /&gt;
	end&lt;br /&gt;
	if pPosition == &amp;#039;next&amp;#039; then&lt;br /&gt;
		return chapters[cPosition + 1];&lt;br /&gt;
	end&lt;br /&gt;
	if relPosition == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
	return chapters[cPosition + relPosition];&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local navbar = function( page )&lt;br /&gt;
	local page = page or mw.title.getCurrentTitle().text&lt;br /&gt;
	local bookName = getBookName( page )&lt;br /&gt;
	local chapters = getChapters( collectionPrefix .. bookName )&lt;br /&gt;
	local prevCh = core( chapters, page, &amp;#039;prev&amp;#039; )&lt;br /&gt;
	local nextCh = core( chapters, page, &amp;#039;next&amp;#039; )&lt;br /&gt;
	local ul = mw.html.create( &amp;#039;ul&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;auto-nav&amp;#039; )&lt;br /&gt;
		:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
			:addClass( &amp;#039;auto-nav-index&amp;#039; )&lt;br /&gt;
			:tag(&amp;#039;a&amp;#039;)&lt;br /&gt;
				-- FIXME: {{Acima|2}}&lt;br /&gt;
				:attr( &amp;#039;title&amp;#039;, &amp;#039;Acima: &amp;#039; .. bookName )&lt;br /&gt;
				-- FIXME: {{Acima}}&lt;br /&gt;
				:attr( &amp;#039;href&amp;#039;, tostring( mw.uri.localUrl( bookName ) ) )&lt;br /&gt;
				-- FIXME: {{Acima|2}}&lt;br /&gt;
				:wikitext( bookName )&lt;br /&gt;
				:done()&lt;br /&gt;
			:done()&lt;br /&gt;
	local a&lt;br /&gt;
	if prevCh ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		a =	ul&lt;br /&gt;
			:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
				:addClass( &amp;#039;auto-nav-prev&amp;#039; )&lt;br /&gt;
				:tag(&amp;#039;a&amp;#039;)&lt;br /&gt;
					-- FIXME: {{Anterior|2}}&lt;br /&gt;
					:attr( &amp;#039;title&amp;#039;, &amp;#039;Anterior: &amp;#039; .. prevCh )&lt;br /&gt;
					-- FIXME: {{Anterior}}&lt;br /&gt;
					:attr( &amp;#039;href&amp;#039;, tostring( mw.uri.localUrl( prevCh ) ) )&lt;br /&gt;
					-- FIXME: {{Anterior|2}}&lt;br /&gt;
					:wikitext( prevCh )&lt;br /&gt;
		if not mw.title.new( prevCh ).exists then&lt;br /&gt;
			a:addClass( &amp;#039;new&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if nextCh ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		a =	ul&lt;br /&gt;
			:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
				:addClass( &amp;#039;auto-nav-next&amp;#039; )&lt;br /&gt;
				:tag(&amp;#039;a&amp;#039;)&lt;br /&gt;
					-- FIXME: {{Anterior|2}}&lt;br /&gt;
					:attr( &amp;#039;title&amp;#039;, &amp;#039;Posterior: &amp;#039; .. nextCh )&lt;br /&gt;
					-- FIXME: {{Anterior}}&lt;br /&gt;
					:attr( &amp;#039;href&amp;#039;, tostring( mw.uri.localUrl( nextCh ) ) )&lt;br /&gt;
					-- FIXME: {{Anterior|2}}&lt;br /&gt;
					:wikitext( nextCh )&lt;br /&gt;
		if not mw.title.new( nextCh ).exists then&lt;br /&gt;
			a:addClass( &amp;#039;new&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tostring( ul )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	_arraySearch = arraySearch,&lt;br /&gt;
	_getBookName = getBookName,&lt;br /&gt;
	_getChapterName = getChapterName,&lt;br /&gt;
	_getExistingBasePageName = getExistingBasePageName,&lt;br /&gt;
	_getExistingSubPageName = getExistingSubPageName,&lt;br /&gt;
	_getChapterFromLine = getChapterFromLine,&lt;br /&gt;
	_getListOfChaptersFromText = getListOfChaptersFromText,&lt;br /&gt;
	_getChapters = getChapters,&lt;br /&gt;
	_getPrintableVersion = getPrintableVersion,&lt;br /&gt;
	_categories = categories,&lt;br /&gt;
	_navbar = navbar,&lt;br /&gt;
	_core = core,&lt;br /&gt;
	getBookName = function( frame )&lt;br /&gt;
		local args = getArgs( frame )&lt;br /&gt;
		return getBookName( args[1] )&lt;br /&gt;
	end,&lt;br /&gt;
	getChapterName = function( frame )&lt;br /&gt;
		local args = getArgs( frame )&lt;br /&gt;
		return getChapterName( args[1] )&lt;br /&gt;
	end,&lt;br /&gt;
	getExistingBasePageName = function( frame )&lt;br /&gt;
		local args = getArgs( frame )&lt;br /&gt;
		return getExistingBasePageName( args[1] )&lt;br /&gt;
	end,&lt;br /&gt;
	getExistingSubPageName = function( frame )&lt;br /&gt;
		local args = getArgs( frame )&lt;br /&gt;
		return getExistingSubPageName( args[1] )&lt;br /&gt;
	end,&lt;br /&gt;
	getPrintableVersion = function( frame )&lt;br /&gt;
		local bookName = frame.args[1] or getBookName()&lt;br /&gt;
		local chapters = getChapters( collectionPrefix .. bookName )&lt;br /&gt;
		return getPrintableVersion( chapters )&lt;br /&gt;
	end,&lt;br /&gt;
	nav = function ( frame )&lt;br /&gt;
		local chapters = getChapters( frame.args[&amp;#039;list&amp;#039;] )&lt;br /&gt;
		-- On page [[*A&amp;#039;B&amp;amp;C&amp;quot;D]], {{PAGENAME}} returns &amp;quot;&amp;amp;#42;A&amp;amp;#39;B&amp;amp;#38;C&amp;amp;amp;#34;D&amp;quot;, so decode it first!&lt;br /&gt;
		local page = mw.text.decode( frame.args[&amp;#039;page&amp;#039;] or mw.title.getCurrentTitle().text );&lt;br /&gt;
		local pPosition = frame.args[&amp;#039;position&amp;#039;];&lt;br /&gt;
		local relPosition = frame.args[&amp;#039;relative-position&amp;#039;];&lt;br /&gt;
		return core( chapters, page, pPosition, relPosition );&lt;br /&gt;
	end,&lt;br /&gt;
	cat = function ( frame )&lt;br /&gt;
		local args = getArgs( frame, {&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
				if not value then&lt;br /&gt;
					return nil&lt;br /&gt;
				end&lt;br /&gt;
				value = mw.text.trim( value or &amp;#039;&amp;#039; )&lt;br /&gt;
				if ( type(key) == &amp;#039;number&amp;#039; and value ~= &amp;#039;&amp;#039; ) or key == &amp;#039;página&amp;#039; then&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		} )&lt;br /&gt;
		return categories( args );&lt;br /&gt;
	end&lt;br /&gt;
};&lt;/div&gt;</summary>
		<author><name>Itaymbere</name></author>
	</entry>
</feed>