FANDOM


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,'&','&')
    output = string.gsub(output,''',"'") 
 
    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+5,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 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
                                    link = info.title .. ' ' .. pagetype .. ' ' .. info.volume .. ' ' .. info.issue
                                    if info.volume == '1'
                                        then text = info.title .. ' #' .. info.issue
                                        else text = info.title .. ' '.. pagetype .. ' ' .. info.volume .. ' #' .. info.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
Community content is available under CC-BY-SA unless otherwise noted.

Fandom may earn an affiliate commission on sales made from links on this page.

Stream the best stories.

Fandom may earn an affiliate commission on sales made from links on this page.

Get Disney+