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)')--'(%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,'&','&')
    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 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')..'<br />'..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..'<br>('..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
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+