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.get_link(frame)
local args = getArgs(frame)
local pagename = args[1]
local text = args[2]
local pagetype = args['type']
local output = ''
if not h.isempty(pagename)
then
pagename = p.lua_replace_number_sign(pagename, pagetype)
if h.isempty(pagetype)
then pagetype = require("Module:PageType").get_page_type(pagename)
end
output = p.lua_standardized_link(pagename, pagetype, text)
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
--------------------------------------------------------------------------------------------------
-- devuelve el enlace tras la normalización de su nombre
function p.lua_standardized_link(pagename, pagetype, text)
local design = require("Module:Design")
local link = ''
local issue = ''
local info = {}
local output = ''
if not h.isempty(pagename)
then
pagename = p.lua_replace_number_sign(pagename, pagetype)
if string.find(pagename, '%]%].+') ~= nil
then return pagename
else pagename = h.break_link(pagename, 1)
end
if h.isempty(pagetype)
then pagetype = require("Module:PageType").get_page_type(pagename)
end
if not h.isempty(pagetype)
then
if pagetype == 'Cómic' or pagetype == 'Volumen' or pagetype == 'Episodio'
then
if pagetype == 'Cómic' or pagetype == 'Volumen'
then pagetype = 'Vol'
else pagetype = 'Temporada'
end
info = p.lua_get_title_volume_issue(pagename, pagetype)
if not h.isempty(text)
then output = h.Link(info.link.part1, text)
else output = info.link.all
end
elseif h.in_list({'Board Game', 'Película', 'Novela', 'Serie', 'Video juego'}, pagetype)
then
link = pagename
text = string.gsub(pagename, ' %(.+%)', '')
output = h.Link(link, design.span(text).italic)
else output = h.Link(pagename)
end
else output = h.Link(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