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)') if not h.isempty( 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 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

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, ['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, } 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.title .. ' Vol ' .. info.volume .. ' ' .. info.issue 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.title .. ' Season ' .. info.season .. ' ' .. info.episode 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 link = '' local text = '' local issue = '' local info = {} local output = ..pagename.. if not h.isempty(pagename) then 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 issue = ' '..info.issue end link = info.noissue..issue if not h.isempty(info.issue) then issue = ' #'..info.issue else issue = '' end if info.volume == '1' then text = info.title..issue else text = info.noissue..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, text) end end end return output end function p.comics_link(frame) local args = getArgs(frame) return p.lua_standardized_link(args[1], 'Comics') 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_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