Module:StandardizedName

local p = {} local h = require("Module:HF") local getArgs = require('Dev:Arguments').getArgs //*** Functions for transforming pagenames of comics/episodes into desirable format ***//

-- returns transformed issue/episode number that can be used for sorting in categories as numbers, instead of text, including "point one" issues and "-1"/"negative" issues function p.lua_padded_issue(issue) local minus = '5' local point_one = '00' local i = '' local j = '' local output = '' local s1 = '' local s2 = '' if not h.isempty(issue) then if issue == '½' then issue = '0.5' end s1, s2 = string.match( string.lower(issue), '(%d+)(%l)')--'(%d+)(%D+)')           if not h.isempty( s2 ) --and s2 ~= '.'                then issue = s1..'.'..s2            end            if string.match(issue, '^%-*%d', 1) ~= nil --check if issue starts with number (including negative numbers like -1)                then                    -- -1 issues                    j = string.find(issue,"-",1,true)                    if not h.isempty(j)                        then                            i = string.sub(issue,2,#issue)                            j = string.find(i,".",1,true)                            if not h.isempty(j)                                 then minus = 5 - #string.sub(i,1,j-1)                                else minus = 5 - #i                            end                        else                            i = issue                    end                    -- point one issues j = string.find(i,".",1,true) if not h.isempty(j) then point_one = string.sub(i,j+1,#i) if tonumber(point_one) == nil then point_one = '99' -- for issues with letters after. instead of just numbers (for example, Amazing Spider-Man Vol 5 #16.HU) end point_one = string.rep("0", 2-#point_one)..point_one i = string.sub(i,1,j-1) end output = minus..string.rep("0", 6-#i)..i..point_one else -- issue is not a number output = issue --'999999999' end end return output end

-- returns transformed volume/season number that can be used for sorting in categories as numbers, instead of text function p.lua_padded_volume(volume) local output = '' if not h.isempty(volume) then output = string.rep("0", 6-#volume)..volume end return output end

-- returns transformed title, with replaced characters like ":" or "/" that can be used for names of files (for example, covers) function p.lua_title_for_files(title) local output = title output = string.gsub(output,'/',' ') output = string.gsub(output,':','') output = string.gsub(output,'&#38;','&') output = string.gsub(output,'&#39;',"'")

return output end

-- break down pagename of comics/episodes into parts - title, volume/season, issue/episode. Also returns transformed volume/season number and issue/episode number that can be used for sorting in categories as numbers, instead of text, including "point one" issues and "-1"/"negative" issues Also returns transformed title, with replaced characters like ":" or "/" that can be used for names of files (for example, covers) function p.lua_get_title_volume_issue(pagename, pagetype) local title = '' local volume = '' local issue = '' local padded_issue = '' local padded_volume = '' local title_for_files = '' local remainder_issue = '' local clean_issue = '' local j   local k    if h.isempty(pagetype) then pagetype = 'Vol' end j,k = string.find(pagename, ' '..pagetype..' %d+ ') if not h.isempty(j) then title = string.sub(pagename, 1, j-1) issue = string.gsub(string.sub(pagename, k+1, #pagename), '#', '') j,k,volume = string.find(pagename, ' '..pagetype..' (%d+) ') else j,k = string.find(pagename, ' #') if h.isempty(j) then j,k = string.find(pagename, ' '..pagetype..' %d+') if not h.isempty(j) then title = string.sub(pagename, 1, j-1) volume = string.sub(pagename, j+#pagetype+2, k)                       else return '' end else title = string.sub(pagename, 1, j-1) issue = string.sub(pagename, k+1, #pagename) volume = '1' end end if not h.isempty(issue) and tonumber(issue) == nil then clean_issue, remainder_issue = string.match(issue, '(%d+)(%D+)') end

padded_volume = p.lua_padded_volume(volume) padded_issue = p.lua_padded_issue(issue) title_for_files = p.lua_title_for_files(title) return { ['title'] = title, ['volume'] = volume, ['issue'] = issue, ['clean_issue'] = clean_issue or '', ['remainder_issue'] = remainder_issue or '', ['padded_volume'] = padded_volume, ['padded_issue'] = padded_issue, ['title_for_files'] = title_for_files, ['filename'] = { ['title'] = title_for_files, ['noissue'] = title_for_files..' '..pagetype..' '..volume, ['all'] = title_for_files..' '..pagetype..' '..volume..' '..issue, },             ['sortname'] = { ['title'] = p.lua_remove_the(title), ['noissue'] = p.lua_remove_the(title)..' '..pagetype..' '..padded_volume, ['all'] = p.lua_remove_the(title)..' '..pagetype..' '..padded_volume..' '.. padded_issue, },             ['noissue'] = title..' '..pagetype..' '..volume, ['all'] = title..' '..pagetype..' '..volume..' '..issue, } end

-- removes "The " from the start of pagename function p.lua_remove_the(pagename) if not h.isempty(pagename) and string.lower( string.sub(pagename, 1, 4) ) == 'the ' then pagename = string.sub(pagename, 5, #pagename) end return pagename end function p.remove_the(frame) local args = getArgs(frame) return p.lua_remove_the(args[1]) end

-- automatic standardization of comics names function p.lua_standardized_comics_name(pagename) local info = {} local output = pagename if not h.isempty(pagename) then info = p.lua_get_title_volume_issue(pagename, 'Vol') if not h.isempty(info.title) then output = info.all end end return output end function p.standardized_comics_name(frame) local args = getArgs(frame) return p.lua_standardized_comics_name(args[1]) end

-- automatic standardization of episodes names function p.lua_standardized_episode_name(pagename) local info = {} local output = pagename

if not h.isempty(pagename) then info = p.lua_get_title_volume_issue(pagename, 'Season') if not h.isempty(info.title) then output = info.all end end return output end function p.standardized_episode_name(frame) local args = getArgs(frame) return p.lua_standardized_comics_name(args[1]) end

-- returns link after standardization of its name function p.lua_standardized_link(pagename, pagetype) local design = require("Module:Design") local link = '' local text = '' local issue = '' local s1   local s2    local info = {} local output = '' if not h.isempty(pagename) then pagename = h.lua_breaklink(pagename, 1) if not h.isempty(pagetype) then if pagetype == 'Comics' or pagetype == 'Episode' then if pagetype == 'Comics' then pagetype = 'Vol' else pagetype = 'Season' end info = p.lua_get_title_volume_issue(pagename,pagetype) if not h.isempty(info.title) then if not h.isempty(info.issue) then link = info.noissue..' '..info.issue s1, s2 = string.match(info.issue, '(%d+): (.+)') if h.isempty(s2) then issue = ' #'..info.issue else issue = design.lua_span(': '..s2).italic end else link = info.noissue issue = '' end if info.volume == '1' then text = design.lua_span(info.title).italic .. issue else text = design.lua_span(info.noissue).italic .. issue end output = h.Link(link, text) end elseif pagetype == 'Film' or pagetype == 'Game' then link = pagename text = string.gsub(pagename, ' %(.+%)', '') output = h.Link(link, design.lua_span(text).italic) end else output = ..pagename.. end end return output end

function p.comics_link(frame) local args = getArgs(frame) return p.lua_standardized_link(args[1], 'Comics') end

function p.game_link(frame) local args = getArgs(frame) return p.lua_standardized_link(args[1], 'Game') end

function p.game_link_and_date(frame) local args = getArgs(frame) local page = args[1] local s_date = args[2] local output = '' if not h.isempty(page) then if h.isempty(s_date) then s_date = h.lua_getFieldValue( h.lua_getContent(page), 'Release Date' ) end if not h.isempty(s_date) then s_date = '('..s_date..')' end

output = p.lua_standardized_link(page, 'Game')..' '..s_date end return output end

-- returns name transformed into format for sorting removes "The" from the begining for comics/episodes changes volume/season and issue/episode into numbers, instead of text function p.lua_standardized_name_for_sorting(pagename,pagetype) local info = {} local output = '' if not h.isempty(pagename) and not h.isempty(pagetype) then if pagetype == 'Comics' or pagetype == 'Episode' then if pagetype == 'Comics' then pagetype = 'Vol' else pagetype = 'Season' end info = p.lua_get_title_volume_issue(pagename,pagetype) if not h.isempty(info.title) then output = info.sortname.all end elseif pagetype == 'Film' or pagetype == 'Game' then output = p.lua_remove_the(pagename) end end return output end function p.comics_name_for_sorting(frame) local args = getArgs(frame) return p.lua_standardized_name_for_sorting(args[1], 'Comics') end

function p.lua_get_part(pagename,pagetype,part) local output = '' local info = {} if not h.isempty(pagename) and not h.isempty(pagetype) then if pagetype == 'Comics' or pagetype == 'Episode' then if pagetype == 'Comics' then pagetype = 'Vol' else pagetype = 'Season' end info = p.lua_get_title_volume_issue(pagename,pagetype) if not h.isempty(title) then if part == 'Title' then output = info.title elseif part == 'Volume' then output = info.volume elseif part == 'Issue' then output = info.issue end end end end return output end

function p.get_part(frame) local args = getArgs(frame) return p.lua_get_part(args[1], args[2], args[3]) end

function p.get_title_and_volume(frame) local args = getArgs(frame) local pagename = args[1] local info = {} local output = '' if not h.isempty(pagename) then info = p.lua_get_title_volume_issue(pagename, 'Vol') output = info.title .. ' Vol ' .. info.volume end return output end

function p.lua_cid(pagename) local m_date = require("Module:Date") local design = require("Module:Design") --local module_page_type = require("Module:PageType") local release_date = '' local month = '' local year = '' --local page_type = '' local page_content = '' local info local link local div = mw.html.create( 'div' ):attr( 'align', 'center' ):done local output = '' if not h.isempty(pagename) then --page_type = module_page_type.lua_getPageType(pagename) --if page_type == 'Comic' --then --pagename = p.lua_get_title_volume_issue(pagename, 'Vol').all output = p.lua_standardized_link(pagename, 'Comics') output = design.lua_span(output).bold page_content = h.lua_getContent(pagename) release_date = h.lua_getFieldValue(page_content, 'ReleaseDate')

if not h.isempty(release_date) then info = m_date.lua_get_release_date_info(release_date) link = h.lua_link_to_category( info.week.text, info.no_day ) else month = h.lua_getFieldValue(page_content, 'Month') year = h.lua_getFieldValue(page_content, 'Year') info = m_date.lua_get_publication_date_info(year, month, false) link = string.gsub(info.link, '%]%], %[%[:Category:%d+|', ', ') end if not h.isempty(link) then output = output..' ('..link..')' end output = tostring( div:wikitext(output) ) end return output end

function p.cid(frame) local args = getArgs(frame) return p.lua_cid(args[1]) end

--[[ function p.lua_releasedate--pagename,pagetype)   local s =     local releasedate =     local year =     local month =     local day = ''    local pagename = 'Legion (TV series) Season 1 1'    --local pagename = 'FF Vol 1 1'    --local pagename = 'X-Men: Mutant Academy'    --local pagename = 'Captain Marvel (film)'    local pagetype = 'Episode'    --local pagetype = 'Comics'    --local pagetype = 'Game'    --local pagetype = 'Film'    if not h.isempty(pagename) and not h.isempty(pagetype)        then            s = mw.title.new(pagename):getContent            if not h.isempty(s)                then                     if pagetype == 'Comics'                        then                            year = string.match(s, "|%s+Year%s+=%s+(.-)\n")                            month = string.match(s, "|%s+Month%s+=%s+(.-)\n")                            if not h.isempty(year) and not h.isempty(month)                                then releasedate = month..', '..year                            end                        elseif pagetype == 'Episode'                            then                                 year = string.match(s, "|%s+Year%s+=%s+(.-)\n")                                month = string.match(s, "|%s+Month%s+=%s+(.-)\n")                                day = string.match(s, "|%s+Day%s+=%s+(.-)\n")                                if not h.isempty(year) and not h.isempty(month) and not h.isempty(day)                                    then releasedate = day..' '..month..', '..year                                end                            elseif pagetype == 'Film' or pagetype == 'Game'                                then releasedate = string.match(s, "|%s+Release Date%s+=%s+(.-)\n")                    end            end    end    return releasedate end ]]--

return p