Marvel Wiki
Advertisement

La documentación para este módulo puede ser creada en Módulo:StandardizedName/doc

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