Marvel Database
Advertisement

La documentazione per questo modulo può essere creata in Modulo:Comics/man

local p = {}
local h = require("Modulo:HF")
local SC = require("Modulo:StaffCorrection")
local standard = require("Modulo:StandardizedName")
local m_date = require("Modulo:Date")
local monthData = mw.loadData( 'Modulo:Month/data' )
local monthAliases = monthData[1]
local monthNumbers = monthData[2]

local staff_fieldname = {"Scrittore", "Disegno", "Inchiostro", "Colore", "Letterer", "AdaptedFrom", "Editor", "CoverArtist", "Editor-in-Chief" }
local staff_singular = {"Scrittore", "Disegno", "Inchiostro", "Colore", "Letterer", "Adattato da materiale originale di", "Editore", "Artista Cover", "Editor-in-Chief"}
local staff_plural = {"Writers", "Pencilers", "Inkers", "Colourists", "Letterers", "Adapted Stories", "Editors", "Cover Artists", "Editors-in-Chief"}

local volume_date_first = ''
local volume_date_last = ''

function p.test(frame)
	local getArgs = require('Dev:Arguments').getArgs
	local args = getArgs (frame)
	local dates = { args['Year'], args['Month'], args['Season'], args['ReleaseDate'] }
	local canceled = args['Canceled']
	local reprint_title = {}
	local reprint_story = {}
	local storytitles = {}
	local s = ''
	local n = ''
	local page = mw.title.getCurrentTitle()

	for i = 1,80 do
		table.insert( reprint_title, standard.lua_standardized_comics_name( args['ReprintOf'..i] ) )
		table.insert( reprint_story, args['ReprintOfStory'..i] )
	end
	
	for i = 1,80 do
		if h.isempty(reprint_title[i]) == false
			then 
				n = reprint_story[i] or '1'
				s = standard.lua_standardized_comics_name(reprint_title[i])
				s = mw.title.new(s):getContent()
				if h.isempty(s) == false
					then storytitles[i] = string.match(s, '|%s+StoryTitle'..n..'%s+=%s+(.-)\n')
				end
		end
	end
				
	return page.text
	--return p.lua_link_to_publication_category(dates[1], dates[2], dates[3])
	--return mw.text.listToText( storytitles )
	--return mw.text.listToText( reprint_title )
end


function p.appearances_needed(frame)
	local getArgs = require('Dev:Arguments').getArgs
	local args = getArgs (frame)
	local s = args['Appearing'] or ''
	s = mw.text.split(s, '\n', true)
	local output = 0
	
	local empty = { "'''Protagonisti:'''", "* <br/>", "'''Personaggi Secondari:'''", "* <br/>", 
					"'''Antagonisti:'''", "* <br/>", "'''Altri Personaggi:'''", "* <br/>",
					"'''Luoghi:'''", "* <br/>", "'''Oggetti:'''", "* <br/>",
					"'''Veicoli:'''", "* <br/>"
				  }
	if #s == 14
		then
			for i = 1, #s do
				if s[i] == empty[i]
					then output = output + 1
				end
			end
	end
	
	if output < 14
		then output = false
		else output = true
	end
	
	return output
end


------------------------------------------------------------------------------------------------
--takes a date and formats it according to the syntax - https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time
function p.lua_date_converter(s, t)
	local l = mw.language.new('en')
	local day
	local month
	local year
	local i = 0
	local j = 0
	
	--'To comma' = 'F j, Y', "dash" = 'm-d-Y'
	if h.isempty(t) == true 
		then t = 'Ymd'
	end
	if h.isempty(s) == true
		then s = l:formatDate(t)
		else
			i = string.find(s, '-',1,true)
			j = string.find(s, ', ',1,true)
			if i ~= nil 
				then
					j = string.find(s, '-',i+1,true)
					month = string.sub(s, 1, i-1)
					month = monthNumbers[string.lower( month )] or month
					day = string.sub(s, i+1, j-1)
					if #day == 1 then day = "0"..day end
					year = string.sub(s, j+1, #s)
					s = l:formatDate(t, day.."-"..month.."-"..year)
				elseif j ~= nil then
					year = string.sub(s, j+2, #s)
					i = string.find(s, ' ',1,true)
					month = string.sub(s, 1, i-1)
					month = monthNumbers[string.lower( month )] or month
					day = string.sub(s, i+1, j-1)
					if #day == 1 then day = "0"..day end
					s = l:formatDate(t, day.."-"..month.."-"..year)
				else
					s = l:formatDate(t, s)
			end
	end
	return s
end
function p.date_converter(frame)
	return p.lua_date_converter(frame.args[1], frame.args[2])
end


--compares two dates. Return "true" if 1st date is before the 2nd date, and "false" otherwise.
function p.lua_date_comparison(d1, d2)
	d1 = p.lua_date_converter(d1, 'Ymd')
	if h.isempty(d2) == true
		then d2 = '@'..os.time() --If 2nd date is ommited, then current date is used for comparison.
	end
	d2 = p.lua_date_converter(d2, 'Ymd')

	if d1<=d2 
		then return true
		else return false
	end
end
function p.date_comparison(frame)
	return p.lua_date_comparison(frame.args[1], frame.args[2])
end


--check if comics is canceled or a solicitation
function p.lua_solicit_or_canceled(releasedate, canceled)
	if h.isempty(canceled) == false or (h.isempty(releasedate) == false and p.lua_date_comparison(releasedate) == false)
		then return true --it is canceled or a solicitation
		else return false 
	end
end
function p.solicit_or_canceled(frame)
	if p.lua_solicit_or_canceled(frame.args[1], frame.args[2]) == true
		then return 'yes'
		else return ''
	end
end
function p.not_solicit_or_canceled(frame)
	if p.lua_solicit_or_canceled(frame.args[1], frame.args[2]) == false
		then return 'yes'
		else return 'no'
	end
end


--check if comics is recently released/published
function p.lua_recent(releasedate, month, year, season, canceled)
	local l = mw.language.new('en')
	local current = l:formatDate('Ymd') 
	local s = ''

	if h.isempty(canceled) == true
		then 
			if h.isempty(month) == true and h.isempty(season) == false
				then month = season
			end

			if h.isempty(releasedate) == false
				then 
					releasedate = p.lua_date_converter(releasedate, 'Ymd')
					if releasedate>=l:formatDate('Ymd', '- 4 months') and releasedate<=current
						then s = true
					end
				elseif h.isempty(year) == false and h.isempty(month) == false 
					then
						releasedate = p.lua_date_converter(monthAliases[string.lower( month )]..' 1, '..year, 'Ymd')
					if releasedate>=l:formatDate('Ymd', '- 2 months') and releasedate<=current
						then s = true
					end
			end
	end
	return s
end
function p.recent(frame)
	return p.lua_recent(frame.args[1], frame.args[2], frame.args[3], frame.args[4], frame.args[5])
end


--returns release week category
function p.release_week_category(frame)
	return m_date.lua_get_release_week_category(frame.args[1])
end


--returns link to release week category
function p.link_to_release_week_category(frame)
	return m_date.lua_get_link_to_release_week(frame.args[1])
end


--returns publication category
function p.publication_category(frame)
	local year = frame.args[1]
	local month = frame.args[2]
	local season = frame.args[3]
	local pagename = standard.lua_remove_the(frame.args[4])
	local s = ''

	if h.isempty(month) == true and h.isempty(season) == false
		then month = season
	end

	if h.isempty(year) == false 
		then
			if h.isempty(month) == false
				then
					month = monthAliases[string.lower( month )]
					s = s..'[[Category:'..year..'|'..month..pagename..']][[Category:'..year..', '..month..']]'
				else
					s = s..'[[Category:'..year..']]'
			end
			s = s..p.lua_era(year)
	end
	
	return s
end


--returns link to date of publication category
function p.lua_link_to_publication_category(year, month, season)
	local s = ''
	
	if h.isempty(month) == true and h.isempty(season) == false
		then month = season
	end

	if h.isempty(year) == false
		then
			if h.isempty(month) == false
				then
					month = monthAliases[string.lower( month )]
					s = '[[:Category:'..year..', '..month..'|'..month..']], [[:Category:'..year..'|'..year..']]'
				else
					s = '[[:Category:'..year..'|'..year..']]'
			end
	end
	
	return s
end
function p.link_to_publication_category(frame)
	return p.lua_link_to_publication_category(frame.args[1], frame.args[2], frame.args[3])
end


--returns era based on year
function p.lua_era(year, t)
	if h.isempty(year) == false 
		then
			if h.isempty(t) == true
				then t = ''
				else t = ' '..t
			end
			year = tonumber(year)
			
			if year<1955 then return '[[Category:Golden-Age'..t..']]' end
			if year>=1955 and year<1970 then return '[[Category:Silver-Age'..t..']]' end
			if year>=1970 and year<1983 then return '[[Category:Bronze-Age'..t..']]' end
			if year>=1983 and year<1992 then return '[[Category:Copper-Age'..t..']]' end
			if year>=1992 then return '[[Category:Modern-Age'..t..']]' end
		else return ''
	end
end
function p.era(frame)
	return p.lua_era(frame.args[1], frame.args[2])
end


function p.links_to_release_publication_dates(frame)
	local year = frame.args[1]
	local month = frame.args[2]
	local season = frame.args[3]
	local release = m_date.lua_get_link_to_release_week(frame.args[4])
	local canceled = frame.args[5]
	local published = p.lua_link_to_publication_category(year, month, season)
	local s = ''
	local s1 = ''
	local s2 = ''
	
	if h.isempty(canceled) == false
		then
			s1 = 'Intended Publication Date'
			s2 = 'Intended Release Date'
		else
			s1 = 'Annunciato'
			s2 = 'Rilasciato'
	end	

	if h.isempty(published) == false 
		then
			if h.isempty(release) == false
				then s = '<table style="width:100%; text-align: center;"><tr style="line-height:0.5em;"><td style="width:50%;">'..s1..'</td><td style="width:50%;">'..s2..'</td></tr><tr style=" font-size:12px;"><td>'..published..'</td><td>'..release..'</td></tr></table>'
				else s = '<table style="width:100%; text-align: center;"><tr style="line-height:0.5em;"><td>'..s1..'</td></tr><tr><td style=" font-size:12px;">'..published..'</td></tr></table>'
			end
		elseif h.isempty(release) == false
			then s = '<table style="width:100%; text-align: center;"><tr style="line-height:0.5em;"><td>'..s2..'</td></tr><tr><td style=" font-size:12px;">'..release..'</td></tr></table>'
	end
	return s
end


----------------------------------------------------------------------------------------------
--events, arcs, storylines
function p.events_and_arcs(frame)
	local events = mw.text.split( frame.args[1],"@@@",true )
	local events_names = mw.text.split( frame.args[2],"@@@",true )
	local arcs = mw.text.split( frame.args[3],"@@@",true )
	local arcs_names = mw.text.split( frame.args[4],"@@@",true )
	local storylines = mw.text.split( frame.args[5],"@@@",true )
	local storylines_names = mw.text.split( frame.args[6],"@@@",true ) 
	local i
	local j
	local e = {}
	local a = {}
	local sl = {}
	local s = ''
	
	j = 1
	for i = 1,#events do
		if h.isempty(events[i]) == false
			then
				if h.isempty(events_names[i]) == true
					then events_names[i] = events[i]
				end
				e[j] = '"[['..events[i]..'|'..events_names[i]..']]"'
				j = j + 1
		end
	end
	if #e > 0 
		then
			s = '<div style="text-align:center; font-size:10px; font-weight:900; line-height:1em; padding:0.5em 0pt 0.5em 0pt;">Parte dell evento'
			if #e > 1
				then s = s..mw.text.listToText( e )
				else s = s..e[1]
			end
			s = s..'</div>'
	end
	
	j = 1
	for i = 1,#arcs do
		if h.isempty(arcs[i]) == false
			then
				if h.isempty(arcs_names[i]) == true
					then arcs_names[i] = arcs[i]
				end
				a[j] = '"[['..arcs[i]..'|'..arcs_names[i]..']]"[[Category:'..arcs[i]..']]'
				j = j + 1
		end
	end
	if #a > 0 
		then
			if s ~= '' then s = s..'<div style="clear:both;"></div>' end
			s = s..'<div style="text-align:center; font-size:10px; font-weight:900; line-height:1em; padding:0.5em 0pt 0.5em 0pt;">Parte dello story arc '
			if #a > 1
				then s = s..mw.text.listToText( a )
				else s = s..a[1]
			end
			s = s..'</div>'
	end
	
	j = 1
	for i = 1,#storylines do
		if h.isempty(storylines[i]) == false
			then
				if h.isempty(storylines_names[i]) == true
					then storylines_names[i] = storylines[i]
				end
				sl[j] = '"[['..storylines[i]..'|'..storylines_names[i]..']]"[[Category:'..storylines[i]..']]'
				j = j + 1
		end
	end
	if #sl > 0 
		then
			if s ~= '' then s = s..'<div style="clear:both;"></div>' end
			s = s..'<div style="text-align:center; font-size:10px; font-weight:900; line-height:1em; padding:0.5em 0pt 0.5em 0pt;">Parte della storyline '
			if #sl > 1
				then s = s..mw.text.listToText( sl )
				else s = s..sl[1]
			end
			s = s..'</div>'
	end  

	return s
end


----------------------------------------------------------------------------------------------
function p.getComicsContent(s_page)
	--s_page = standard.lua_standardized_comics_name(s_page)
	local t = mw.title.new(s_page)
	local s = t:getContent()
	local a = {}
	local r_i = {}
	local r_s = {}
	local i = 0
	local j = 1
	
	i = string.find(s,'\n')
	
	while i ~= nil do
		table.insert(a,string.sub(s,j,i-1))
		j = i+1
		i = string.find(s,'\n',j)
	end
	j = 0
	for i=1,#a do
		j = string.find(a[i],'ReprintOf')
		if j ~= nil 
			then
				j = string.find(a[i],'ReprintOfStory')
				if j ~= nil
					then
						s = mw.text.trim( mw.ustring.gsub(a[i],'| ReprintOfStory%d+.+=', ''), "\t\r\n\f " )
						table.insert(r_s, s )
					else
						s = mw.text.trim( mw.ustring.gsub(a[i],'| ReprintOf%d+.+=', ''), "\t\r\n\f " )
						s = standard.lua_standardized_comics_name(s)
						table.insert(r_i, s )
				end
		end
	end
	
	s = {}
	for i = 1,#r_i do 
		table.insert(s, {r_i[i], r_s[i]})
	end
	return s
end


function p.list_r(frame)
	local l = mw.text.split( frame.args[1],"@@@",true )
	local s_issue = standard.lua_standardized_comics_name(frame.args[2])
	local s_story = frame.args[3]
	local t = {}
	local res = {}
	local i
	local j

	for i = 1,#l-1 do
		t = p.getComicsContent(l[i])
		for j = 1,#t do
			if t[j][1] == s_issue and (h.isempty(s_story) == true or t[j][2] == s_story)
				then table.insert(res, '\n*[['..l[i]..']]')
			end
		end
	end
	
	return table.concat(res)
end


--forms a list of all reprints of specified comics 
function p.list_of_reprints(frame)
	local l = mw.text.split( frame.args[1],"*",true )
	local s_page = standard.lua_standardized_comics_name(frame.args[2])
	local i
	local j
	local l2 = {}
	local s
	local s2

	for i = 1,#l do
		s = mw.text.split( l[i],"@",true )
		for j = 2,79 do
			if h.isempty(s[j]) == false 
				then table.insert(l2, {standard.lua_standardized_comics_name(s[1]), standard.lua_standardized_comics_name(s[j])})
			end
		end
	end

	s = {}
	s2 = ''
	for i = 1,#l2 do
		if l2[i][2] == s_page 
		   then table.insert(s, '\n*[['..l2[i][1]..']]')
		end
	end

	return table.concat(s)
end


--display a quote from the original comics without autocategorization 
function p.reprint_quote(frame)
	local l = mw.text.split( frame.args[1],"@@@",true )
	local q = l[1] or ''
	local s = l[2] or ''
	local bq = l[3] or ''
	
	if h.isempty(bq) == false 
		then 
			bq = mw.ustring.gsub(bq, '%[%[Category:.-%]%]', '' )
			return bq
		elseif h.isempty(q) == false 
			then return frame:preprocess( '{{Quote|'..q..'|'..s..'}}' )
			else return ''
	end
end


--returns story title, story title from reprint or story number if none of them exists
function p.StoryTitle(frame)
	local number = frame.args[1]
	local st = frame.args[2] or ''
	local reprint_st = frame.args[3] or ''

	if number % 10 == 1
		then number = number..'a'
		elseif number % 10 == 2-- in (2,22,32,42,52,62,72)
			then number = number..'a'
			elseif number % 10 == 3 --in (3,23,33,43,53,63,73)
				then number = number..'a'
				else number = number..'a'
	end
	number = number..' Storia'
	
	if h.isempty(st) == true
		then st = reprint_st
	end
	
	if h.isempty(st) == false
		then 
			if string.sub(st,1,1) ~= '"'
				then st = '"'..st..'"'
			end
		else
			st = number
	end

	return st
end


-- check if main/textless cover exists
function p.lua_coverExists(s_page, s_type)
	local info = standard.lua_get_title_volume_issue(s_page)
	local cover = ''
	local output = ''

	cover = info.filename.all
	if s_type == 'Textless'
		then cover = cover.." Textless.jpg"
		else cover = cover..".jpg"
	end

	if h.exists("File:"..cover)
		then output = cover
	end
	
	return output
end
function p.cover(frame)
	local s_page = frame.args[1]
	local s_type = frame.args[2] or 'Textless'
	
	return p.lua_coverExists(s_page, s_type)
end


--get the list of general contributors (cover artists, editors-in-chief, etc.)
function p.GeneralContributors(frame)

	local l = mw.text.split( frame.args[1],"*",true )
	local t = frame.args[2]
	local cat = frame.args["category"]
	local link_name = frame.args["link_name"]
	local needed = frame.args["needed"]
	local t2

	if t == 'Editor-in-Chief'
		then t2 = 'Editors-in-Chief'
		else t2 = t..'s'
	end
	
	if h.isempty(link_name) == true
		then link_name = '[[:Category:Marvel Staff/'..t2..'|'..t..']]'
	end
	l = p.lua_StoryContributors(l, t, cat)
	if h.isempty(l) == false
		then return frame:preprocess( '{{Infobox Line|left = '..link_name..'|right = '..l..'}}' )
		elseif cat == 'yes' and needed ~= 'no'
			then return '[[Category:'..t..' Credit Needed]]'
			else return ''
	end
end

--get the list of general contributors (cover artists, editors-in-chief, etc.)
function p.StoryContributors(frame)
	local l = mw.text.split( frame.args[1],"@",true )
	local l2 = {}
	local t = {"Scrittore", "Disegno", "Inchiostro", "Colore", "Letterer", "Storie Adattate", "Editore"}
	local t2 = {}
	local cat = frame.args["category"]
	local needed = frame.args["needed"]
	local link_name
	local i
	local j

	for i = 1,7 do
		if cat == 'yes'
			then
				l2[i] = mw.text.split(l[i],"*",true )
			else
				l[i] = l[i].."|"
				l2[i] = mw.text.split(l[i],"|",true )
		end
		for j = 1,#l2[i] do
			l2[i][j] = mw.text.trim(l2[i][j])
		end		
		l2[i] = p.lua_StoryContributors(l2[i], t[i], cat)
		if i == 6 
			then t2[i] = '[[:Category:Marvel Staff/Adapted Stories|Adapted from original material by]]'
			else t2[i] = '[[:Category:Marvel Staff/'..t[i]..'|'..t[i]..']]'
		end
	end

	l = ''
	if h.isempty(table.concat(l2)) == true 
		then 
			return ''
		else 
			for i = 1,7 do
				if h.isempty(l2[i]) == false
					then l = l..frame:preprocess( '{{Infobox Line|left = '..t2[i]..'|right = '..l2[i]..'}}' )
					elseif cat == 'yes' and i ~= 6 and needed ~= 'no'
						then l = l..'[[Category:'..t[i]..' Credit Needed]]'
				end
			end
			return l
	end		
end

--transform the list of contributors into infobox lines with or without categorization
function p.lua_StoryContributors(list, text, subcategory)
	local i
	local link
	local category
	local output = ''
 
	i = 1
	if not h.isempty(list)
		then
			while next(list,i) ~= nil do
				if not h.isempty(list[i])
					then 
						link, category  = SC.lua_get_staff_link_and_category(list[i], text)
						if subcategory == 'yes'
							then list[i] = link..h.Category(category)..'<br>'
							else list[i] = link..'<br>'
						end
				end
				i = i + 1
			end
			output = table.concat(list) 
	end
	
	return output
end

-- get the list of images and captions and transform them into gallery of alternate covers
function p.covers(frame)
	local l_covers = mw.text.split( frame.args[1],"@@@",true )   
	local l_captions = mw.text.split( frame.args[2],"@@@",true )
	local s_page = frame.args[3]
	local l = {}
	local c = {}
	local i
	local j
	local k = 0
	local s
	local res = {}
	
	i = 1
	j = 1
	
	s_page = string.gsub(s_page,'/',' ')
	s_page = string.gsub(s_page,':','')
	s_page = string.gsub(s_page,'&#38;','&')
	s_page = string.gsub(s_page,'&#39;',"'")
	s_page = s_page.." Textless.jpg"
	while next(l_covers,i) ~= nil do
		if h.isempty(l_covers[i]) == false 
			then 
				l[j] = l_covers[i]
				c[j] = l_captions[i]
				j = j + 1
		end
		i = i + 1
	end
	
	if l[1] == s_page
		then c[1] = 'Textless'
	end	

	--if (j == 1 or l[1] ~= s_page) and mw.title.new("File:"..s_page).exists == true
	if l[1] ~= s_page and mw.title.new("File:"..s_page).exists == true
		then 
			table.insert(l, 1, s_page)
			table.insert(c, 1, 'Textless')
	end
	
	i = 1
	for j=1,#l do
		s = '<div style="float: left; width: 65px; margin: 2px 8px; border: 1px solid {{Theme.Default.Border}}; background: {{Theme.Default.BG}}; border-radius:10px; padding: 5px; text-align: center; font-size: 10px; font-weight: 900; line-height: 1.5em;">[[File:'..l[j]..'|65px]]'..c[j]..'</div>'
		if i == 3
			then
				s = s..'<br clear=left>'
				i = 1
			else
				i = i + 1
		end
		table.insert(res, s)
	end
	return table.concat(res)
end

-- get the list of appearances formed by dpl query from a comics issue and replace/move all tags to suppress all categoriztion.
function p.lua_reprint_appearances(l, pagename)
	local j
	local k
	local s1
	local s2
	local s3
	
	l = mw.ustring.gsub(l, '{{[Aa]|(%[%[.-%]%])}}', '%1' )
	l = mw.ustring.gsub(l, '{{[Aa]|(.-)}}', '[[%1]]' )
	l = mw.ustring.gsub(l, '{{[Aa]pn|(%[%[.-%]%]).-}}', '%1' )
	l = mw.ustring.gsub(l, '{{[Aa]pn||.-}}', '' )
	l = mw.ustring.gsub(l, '{{1stas|(%[%[.-%]%])|(.-)}}', '%1 {{g|First appearance as %2}}' )
	l = mw.ustring.gsub(l, '{{[Pp]ossessed|(%[%[.-%]%])|(.-)}}', '%1 {{g|Possessed by %2}}' )
	l = mw.ustring.gsub(l, '{{[Pp]ossessedBy|(%[%[.-%]%])|(.-)}}', '%1 {{g|Possessed by %2}}' )
	l = mw.ustring.gsub(l, '{{[Pp]ossesses|(%[%[.-%]%])|(.-)}}', '%1 {{g|Possesses %2}}' )
	l = mw.ustring.gsub(l, '{{[Ii]mpersonates|(.-)}}', '{{g|Impersonates %1}}' )
	l = mw.ustring.gsub(l, '{{[Mm]minor|||(.-)}}', '{{g|%1}}' )
	j, k = mw.ustring.find(string.lower(l), '{{minor|')
	if j ~= nil 
		then
			s1 = mw.ustring.sub( l, 1, j-1 )
			i = mw.ustring.find(l, '}}')
			s2 = mw.ustring.sub( l, k+1, i-1 )
			s3 = mw.ustring.sub( l, i+2, #l )
			j = mw.ustring.find(s2, '[[',1,true)
			k = mw.ustring.find(s2, ']]',1,true)
			if j ~= nil and k ~= nil
				then
					s2 = '[['..mw.ustring.sub(s2, j+2, k-1 )..']]'
				else
					s2 = mw.text.split( s2,"|",true )
					if #s2 == 3
						then s2 = '[['..s2[1]..'|'..s2[2]..']] {{g|'..s2[3]..'}}'
						elseif #s2 == 2
							then s2 = s2[1]..' {{g|'..s2[2]..'}}'
							else s2 = s2[1]
					end
			end
			l = s1..s2..s3
	end
	l = mw.ustring.gsub(l, '{{[Gg]|(%[%[.-%]%])|(.-)}}', '%1 {{g|%2}}' )
	l = mw.ustring.gsub(l, '{{[Gg]|(%[%[.-%]%])}}', '%1' )
	l = mw.ustring.gsub(l, '{{[Gg]reen|(%[%[.-%]%])|(.-)}}', '%1 {{g|%2}}' )	
	l = mw.ustring.gsub(l, '{{[Gg]reen|(%[%[.-%]%])}}', '%1' )
	l = mw.ustring.gsub(l, '({{.-)|(%[%[.-%]%])}}', '%2 %1}}' )
	l = mw.ustring.gsub(l, '{{[Cc]hronology}}', '{{g|[['..pagename..'#Chronology Notes|See chronology]]}}' )
	l = mw.ustring.gsub(l, '{{[Cc]hronoFB}}', '{{g|[['..pagename..'#Chronology Notes|Appears in flashback]]}}' )
	--l = mw.ustring.gsub(l, '{{g|[[#Continuity Notes|See Continuity Notes]]}}', '{{g|[['..pagename..'#Continuity Notes|See Continuity Notes]]}}' )
	j, k = mw.ustring.find(string.lower(l), '{{g|[[#Continuity Notes|See Continuity Notes]]}}',1,true)
	if j ~= nil 
		then
			s1 = string.sub( l, 1, j-1 )
			s2 = '{{g|[['..pagename..'#Continuity Notes|See Continuity Notes]]}}'
			s3 = string.sub( l, k+1, #l )
			l = s1..s2..s3
	end   
	l = mw.ustring.gsub(l, '%[%[Category:.-%]%]', '' )
	l = mw.ustring.gsub(l, '&lt;', '<' )
	l = mw.ustring.gsub(l, '&gt;', '>' )
	return l
end

function p.reprint_appearances(frame)
	local l = mw.text.unstrip( frame.args[1] )
	local pagename = frame.args[2] 
	local j
	local k
	
	l = mw.text.split(l,'\n')
	for i = 1,#l do
		l[i] = '\n'..p.lua_reprint_appearances(l[i], pagename)
	end
	return frame:preprocess( table.concat(l) )
end

-- forms a gallery of comics issues in specified volume based on dpl query from vloume category
function p.volume(frame)
	local getArgs = require('Dev:Arguments').getArgs
	local args = getArgs (frame)
	local l = mw.text.split(args["list"],"@@@",true)
	local parts = {}
	local above = {}
	local below = {}
	local exclude = args["exclude"]
	local part
	local a
	local b
	local s_page
	local s_image
	local s_title
	local i, j, k, f
	local v
	local s
	local t = {}
	local t2 = {}
	local cover
	local textless
	local info = {}
	local title_for_sorting = ''
	local publication_date = ''
	local link = ''
	local output = ''
	local tag = ''

	if h.isempty(exclude) == false
		then exclude = mw.text.split(exclude,";",true)
	end
	
	for i = 1,9 do
		table.insert(parts, tonumber(standard.lua_padded_issue(args['part'..i])))
		table.insert(above, args['part'..i..'_above'] or '')
		table.insert(below, args['part'..i..'_below'] or '')
	end

	i = 1
	while next(l,i) ~= nil do
		v = mw.text.split(l[i],"*",true)
		i = i + 1
		s_page = v[1]
		s_image = v[2]
		s_title = v[3]
		if not h.in_list(exclude, s_page)
			then
				publication_date = p.lua_link_to_publication_category(v[4], v[5])
		
				info = standard.lua_get_title_volume_issue(s_page)

				link = standard.lua_standardized_link(s_page, 'Comics')
				tag = mw.html.create( 'span' )
					:css( 'font-weight', 'bold' )
					:wikitext (link)
					:done()
				link = tostring(tag)
				
				s = info.filename.all
				cover = s .. '.jpg'
				textless = s ..' Textless.jpg'
				if h.isempty(s_image) == true
					then 
						if h.exists('File:'..cover)
							then s_image = cover
							elseif h.exists('File:'..textless)
								then s_image = textless
								else s_image = 'No Image Cover.jpg'
						end
				end
		
				if h.isempty(s_title) == true
					then s_title = ''
					else s_title = '<br />"'..s_title..'"'
				end		

				s = info.padded_issue..'@@@'..s_image..'{{!}}'..link..s_title..'<br>('..publication_date..')\n'
				table.insert(t,s)
		end
	end
	table.sort(t)
	
	--volume_date_first = string.match(t[1],'<br>%((.+)%)\n')
	--volume_date_last = string.match(t[#t],'<br>%((.+)%)\n')

	part = tonumber(parts[1])
	i = 1
	while i <= #t do
		v = mw.text.split(t[i],"@@@",true)
		i = i + 1
		if h.isempty(part) == true or part == 0
			then table.insert(t2, v[2])  
			else table.insert(t2, {v[1], v[2]}) 
		end
	end

	if h.isempty(part) == true or part == 0
		then 
			a = above[1] or ''
			b = below[1] or ''
			output = a..frame:preprocess('{{#tag:gallery|'..table.concat(t2)..'|position=center|captionalign=center|hideaddbutton=true}}')..b
		else
			t = {}
			k = tonumber( t2[1][1] )
			f = parts[1]
			i = 1
			if parts[#parts] < tonumber( t2[#t2][1] )
				then table.insert(parts, tonumber( t2[#t2][1] ) )
			end
			
			while i <=#parts do
				part = tonumber(parts[i])
				if h.isempty(part) == true or part == 0
					then break
					else
						a = above[i] or ''
						b = below[i] or ''
						part = {}
						for j = 1, #t2 do
							if tonumber( t2[j][1] ) >= tonumber (k) and tonumber( t2[j][1] ) <= tonumber (f)
								then table.insert(part, t2[j][2])
							end
						end
						i = i + 1
						k = f+1
						f = parts[i]
						table.insert(t, a..frame:preprocess('{{#tag:gallery|'..table.concat(part)..'|position=center|captionalign=center|hideaddbutton=true}}')..b)
						--table.insert(t, a..table.concat(part)..b)
				end
			end
		output = table.concat(t)
	end
	
	return output
end

function p.volume_dates(frame)
	return volume_date_first..'-'..volume_date_last
end

return p
Advertisement