Module:Comics

local p = {} local h = require("Module:HF") local SC = require("Module:StaffCorrection")

function p.test(s_page, s_type) --local s_page = frame.args[1] --local s_type = frame.args[1] or 'Textless' s_page = string.gsub(s_page,'/',' ') s_page = string.gsub(s_page,':','') --s_page = string.gsub(s_page,'&amp;','&') local i   local j    --i,j = string.find(s_page,'&',1,true) --local z = string.sub(s_page,9,#s_page)

local s = 'Avengers & X-Men AXIS Vol 1 8 Textless.jpg' local t1 = string.sub(s,1,9) local t2 = string.sub(s,10,19) local t3 = string.sub(s,20,29) local t4 = string.sub(s,30,#s) --return '_'..z..'_' if s_type == 'Textless' then s_page = s_page.." Textless.jpg" else s_page = s_page..".jpg" end local s1 = string.sub(s_page,1,9) local s2 = string.sub(s_page,10,19) local s3 = string.sub(s_page,20,29) local s4 = string.sub(s_page,30,#s_page) i = '' if s1 == t1       then i = i..'yes1' else i = i..'no1' end if s2 == t2       then i = i..'yes2' else i = i..'no2' end if s3 == t3       then i = i..'yes3' else i = i..'no3' end if s4 == t4       then i = i..'yes4' else i = i..'no4' end

--return i..'_'..s1..'_'..t1..'_'..s2..'_'..t2..'_'..s3..'_'..t3..'_'..s4..'_'..t4..'_' --if i == nil --   then return 'no' --   else return i..'_'..j    --end if s_page == s       then return 'yes' else return 'no' end 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( '"'..q..'"

- '..s..' ' )           else return ''    end end

--automatic standardization of comic names function p.standardized_comics_name(s) local i   local j    local vol local title local issue i,j = string.find(s, ' Vol %d+ ') if i ~= nil then title = string.sub(s,1,i-1) vol = string.sub(s,i,j) issue = string.gsub(string.sub(s,j+1,#s), '#', '') else i,j = string.find(s, ' #') title = string.sub(s,1,i-1) vol = ' Vol 1 ' issue = string.sub(s,j+1,#s) end return title..vol..issue 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..'st' elseif number % 10 == 2-- in (2,22,32,42,52,62,72) then number = number..'nd' elseif number % 10 == 3 --in (3,23,33,43,53,63,73) then number = number..'rd' else number = number..'th' end number = number..' story' 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

--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 = p.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, {p.standardized_comics_name(s[1]), p.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

-- check if main/textless cover exists function p.lua_cover(s_page, s_type) s_page = string.gsub(s_page,'/',' ') s_page = string.gsub(s_page,':','') if s_type == 'Textless' then s_page = s_page.." Textless.jpg" else s_page = s_page..".jpg" end

if mw.title.new("File:"..s_page).exists == true then return s_page else return 'no' end end function p.cover(frame) local s_page = frame.args[1] local s_type = frame.args[2] or 'Textless' return p.lua_cover(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 = ..t.. end l = p.lua_StoryContributors(l, t, cat) if h.isempty(l) == false then return frame:preprocess( '' ) elseif cat == 'yes' and needed ~= 'no' then return '' 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 = {"Writer", "Penciler", "Inker", "Colourist", "Letterer", "Adapted Stories", "Editor"} local t2 = {} local cat = frame.args["category"] 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] = 'Adapted from original material by' else t2[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( '' ) elseif cat == 'yes' and i ~= 6 then l = l..'' end end return l   end end

--transform the list of contributors into infobox lines with or without categorization function p.lua_StoryContributors(l, t, cat) local i   local v    local c

i = 1 if h.isempty(l) == true then return '' else while next(l,i) ~= nil do               v = l[i] c = SC.Correction(v) if h.isempty(v) == false then if string.lower(v) == 'uncredited' or string.lower(v) == 'n/a' then l[i] = 'Uncredited' else l[i] = ..v.. if cat == "yes" then l[i] = l[i]..' ' else l[i] = l[i]..' ' end end end i = i + 1 end return table.concat(l) end 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 = 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 (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 = ''..c[j]..' ' if i == 3 then s = s..' ' 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, '', '%1' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, ,  ) l = mw.ustring.gsub(l, ,  ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, ,  ) l = mw.ustring.gsub(l, ,  ) l = mw.ustring.gsub(l, ,  ) l = mw.ustring.gsub(l, ,  ) j, k = mw.ustring.find(string.lower(l), '') s2 = string.sub( l, k+1, i-1 ) s3 = string.sub( l, i+2, #l ) j = mw.ustring.find(s2, ,1,true)           k = mw.ustring.find(s2, ,1,true) if j ~= nil then s2 = ..string.sub(s2, j+2, k-1 ).. else s2 = mw.text.split( s2,"|",true ) if #s2 == 3 then s2 = ''..s2[2]..' ' elseif #s2 == 2 then s2 = s2[1]..' ' else s2 = s2[1] end end l = s1..s2..s3   end l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1 ' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, '', '%1' ) l = mw.ustring.gsub(l, '(', '%2 %1}}' )   --l = mw.ustring.gsub(l, '(', '%2 %1}}' ) --j, k = mw.ustring.find(l, '{{.-|') --if j ~= nil --   and string.lower( string.sub( l, j, k ) ) ~= '{{g|' --   and string.lower( string.sub( l, j, k ) ) ~= '{{green|' --   and string.lower( string.sub( l, j, k ) ) ~= '{{c|' --   and string.lower( string.sub( l, j, k ) ) ~= '{{r|' --   then l = mw.ustring.gsub(l, '(', '%2 %1}}' )    --end    l = mw.ustring.gsub(l, '{{chronology}}', '{{g|See chronology}}' )    l = mw.ustring.gsub(l, '{{Chronology}}', '{{g|See chronology}}' )    l = mw.ustring.gsub(l, '{{chronoFB}}', '{{g|Appears in flashback}}' )    l = mw.ustring.gsub(l, '{{ChronoFB}}', '{{g|Appears in flashback}}' )    --l = mw.ustring.gsub(l, '{{g|See Continuity Notes}}', '{{g|See Continuity Notes}}' )    j, k = mw.ustring.find(string.lower(l), '{{g|See Continuity Notes}}',1,true)    if j ~= nil         then            s1 = string.sub( l, 1, j-1 )            s2 = '{{g|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 h = require("Module:HF") 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 monthData = mw.loadData( 'Module:Month/data' ) local monthAliases = monthData[1] local l = mw.text.split(frame.args["list"],"@@@",true) local parts = { frame.args["part1"], frame.args["part2"], frame.args["part3"], frame.args["part4"], frame.args["part5"], frame.args["part6"], frame.args["part7"], frame.args["part8"], frame.args["part9"]} local above = { frame.args["part1_above"], frame.args["part2_above"], frame.args["part3_above"], frame.args["part4_above"], frame.args["part5_above"], frame.args["part6_above"], frame.args["part7_above"], frame.args["part8_above"], frame.args["part9_above"] } local below = { frame.args["part1_below"], frame.args["part2_below"], frame.args["part3_below"], frame.args["part4_below"], frame.args["part5_below"], frame.args["part6_below"], frame.args["part7_below"], frame.args["part8_below"], frame.args["part9_below"] } local part local a   local b    local s_page local s_image local s_title local s_year local s_month local s_volume local s_issue local i = 1 local v   local s    local t = {} local t2 = {} local cover local textless local j   local k    local e

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] s_year = v[4] s_month = monthAliases[string.lower( v[5] )] or v[5] s = s_page s = string.gsub(s,'/',' ') s = string.gsub(s,':','') cover = s..".jpg" textless = s.." Textless.jpg" if s_image == nil or s_image == "" then if mw.title.new("File:"..cover).exists == true then s_image = cover elseif mw.title.new("File:"..textless).exists == true then s_image = textless else s_image = "No Image Cover.jpg" end end if s_title == nil or s_title == "" then s_title = "" else s_title = ' "'..s_title..'"' end

e,j,k = string.find(s_page," Vol (%d+) ") s_volume = string.sub(s_page, 1, e)       s_issue = string.sub(s_page, j+1, string.len(s_page)) if tonumber(k) == 1 then s = ""..s_volume.." #"..s_issue.."" else s = ""..s_volume.." Vol "..k.." #"..s_issue.."" end j = string.find(s_issue,"-",1,true) -- -1 issues k = string.find(s_issue,".",1,true) -- point one issues if j == nil then if k ~= nil then s_issue = string.sub(s_issue,1,k-1).."9" s_issue = string.rep("0", 10-#s_issue)..s_issue else s_issue = s_issue.."0" s_issue = string.rep("0", 10-#s_issue)..s_issue end end s = s_issue..'@@@'..s_image..'{{!}}'....s_page..'{{!}}'..s....s_title..' (Category:'..s_year..', '..s_month..'{{!}}'..s_month..' ,'..s_year..')\n' table.insert(t,s) end table.sort(t) i = 1 while i <= #t do       v = mw.text.split(t[i],"@@@",true) i = i + 1 s = v[2] table.insert(t2,s) end

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

return p