Module:Link: Difference between revisions
MusikAnimal (talk | contribs) No edit summary |
MusikAnimal (talk | contribs) m (Protected "Module:Link" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [Delete=Allow only administrators] (indefinite))) |
||
(22 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local | local p = {} | ||
local function | local function person_link( content, title, linkType, linkSubtype ) | ||
for _i, subject in ipairs({ 'Billy Corgan', 'James Iha', "D'arcy Wretzky", 'Jimmy Chamberlin', 'Butch Vig', 'Flood', 'Alan Moulder', 'Kerry Brown', 'Bjorn Thorsrud', 'Nellee Hooper', 'Terry Date' }) do | for _i, subject in ipairs({ 'Billy Corgan', 'James Iha', "D'arcy Wretzky", 'Jimmy Chamberlin', 'Butch Vig', 'Flood', 'Alan Moulder', 'Kerry Brown', 'Bjorn Thorsrud', 'Nellee Hooper', 'Terry Date', 'Jeff Schroeder', 'Howard Willing', 'Rick Rubin', 'Roy Thomas Baker', 'Brad Wood', 'Dale Griffin', 'Ted de Bono' }) do | ||
local cat_str = 'Category:' .. linkType .. 's ' .. linkSubtype .. ' by ' .. subject .. '|' | local cat_str = 'Category:' .. linkType .. 's ' .. linkSubtype .. ' by ' .. subject .. '|' | ||
content = mw.ustring.gsub( content, subject, '[[:' .. cat_str .. subject .. ']][[' .. cat_str .. title .. ']]' ) | content = mw.ustring.gsub( content, subject, '[[:' .. cat_str .. subject .. ']][[' .. cat_str .. title .. ']]' ) | ||
Line 10: | Line 10: | ||
end | end | ||
function | function p._studio(content, storage) | ||
local studios = { | |||
['Battery Studios'] = true, | |||
['BBC Radio One Studios'] = true, | |||
['Broadway Rehearsal Studios'] = true, | |||
['Bugg Studios'] = true, | |||
['Charing Cross Studios'] = true, | |||
['Chicago Recording Company'] = true, | |||
['Chicago Trax Recording Studio'] = true, | |||
['Chung King Studios'] = true, | |||
['Coldwater Studios'] = true, | |||
['Eddy Street'] = true, | |||
['Maida Vaile Studios'] = true, | |||
['Penguin Studios'] = true, | |||
['Pumpkinland'] = true, | |||
['Pumpkinland II'] = true, | |||
['Reel Time Studios'] = true, | |||
['River North'] = true, | |||
['Sadlands'] = true, | |||
['Schwa Productions'] = true, | |||
['Smart Studios'] = true, | |||
['Solid Sound Studios'] = true, | |||
['Sound City Studios'] = true, | |||
['Soundworks Studio'] = true, | |||
['Streeterville Studios'] = true, | |||
['Sunset Sound'] = true, | |||
['Sweet 16 Studio'] = true, | |||
['The Hinge Chicago'] = true, | |||
['The Hit Factory'] = true, | |||
['The Village Recorder'] = true, | |||
['Triclops Sound Studios'] = true, | |||
['VPRO Radio'] = true, | |||
['Waterfront Studios'] = true, | |||
['WZRD Studios'] = true | |||
} | |||
-- if storage then | |||
-- content = content:gsub('(%(.*%))', '') | |||
-- end | |||
for s in string.gmatch(content, "([^,]+)") do | |||
s = mw.text.trim(s) | |||
local s_normalized = mw.text.trim(s:gsub('( *%(.*%))', '')) | |||
local studio = nil | |||
if studios[s_normalized] ~= nil then | |||
studio = s_normalized | |||
elseif studios[s_normalized .. ' Studios'] ~= nil then | |||
studio = s_normalized .. ' Studios' | |||
elseif studios[s_normalized .. ' Studio'] ~= nil then | |||
studio = s_normalized .. ' Studio' | |||
end | |||
if studio ~= nil then | |||
if storage then | |||
content = mw.ustring.gsub(content, s:gsub("([^%w])", "%%%1"), studio) | |||
else | |||
content = mw.ustring.gsub(content, s_normalized, '[[' .. studio .. '|' .. s_normalized .. ']]') | |||
end | |||
elseif storage then | |||
content = mw.ustring.gsub(content, s, '') | |||
end | |||
end | |||
return mw.text.trim(content, '\t\r\n\f ,') | |||
end | |||
function p._link(content, kind) | |||
local t = {} | |||
for s in string.gmatch(content, "([^,]+)") do | |||
s = mw.text.trim(s) | |||
if kind == 'album' then | |||
s = "''[[" .. s .. "]]''" | |||
elseif kind == 'song' then | |||
s = '"[[' .. s .. ']]"' | |||
else | |||
s = '[[' .. s .. ']]' | |||
end | |||
table.insert(t, s) | |||
end | |||
local ret = '' | |||
for _i, s in pairs(t) do | |||
ret = ret .. ', ' .. s | |||
end | |||
return mw.text.trim(ret, ', ') | |||
end | |||
function p._categorize(content, suffix) | |||
local t = {} | |||
for s in string.gmatch(content, "([^,]+)") do | |||
s = mw.text.trim(s) | |||
s = '[[Category:' .. s .. ' ' .. suffix .. ']]' | |||
table.insert(t, s) | |||
end | |||
local ret = '' | |||
for _i, s in pairs(t) do | |||
ret = ret .. s | |||
end | |||
return mw.text.trim(ret, ', ') | |||
end | |||
function p.main( frame ) | |||
local content = frame.args[1] | |||
local kind = frame.args[2] | |||
if content == '' then | |||
return content | |||
end | |||
return p._link(content, kind) | |||
end | |||
function p.studio_storage( frame ) | |||
local content = frame.args[1] | |||
return p._studio(content, true) | |||
end | |||
function p.studio( frame ) | |||
local content = frame.args[1] | |||
return p._studio(content, false) | |||
end | |||
function p.categorize( frame ) | |||
local content = frame.args[1] | |||
local suffix = frame.args[2] | |||
if content == '' then | |||
return content | |||
end | |||
return p._categorize(content, suffix) | |||
end | |||
function p.album( frame ) | |||
local content = frame.args[1] | |||
if content == '' then | |||
return content | |||
end | |||
return p._link(content, 'album') | |||
end | |||
function p.producer( frame ) | |||
local content = frame.args[1] | local content = frame.args[1] | ||
local title = frame.args[2] | local title = frame.args[2] | ||
Line 18: | Line 157: | ||
end | end | ||
return | return person_link(content, title, linkType, 'produced') | ||
end | end | ||
function | function p.writer( frame ) | ||
local content = frame.args[1] | local content = frame.args[1] | ||
local title = frame.args[2] | local title = frame.args[2] | ||
Line 29: | Line 168: | ||
end | end | ||
return | return person_link(content, title, linkType, 'written') | ||
end | end | ||
return | return p |
Latest revision as of 22:05, 29 March 2023
Documentation for this module may be created at Module:Link/doc
local p = {}
local function person_link( content, title, linkType, linkSubtype )
for _i, subject in ipairs({ 'Billy Corgan', 'James Iha', "D'arcy Wretzky", 'Jimmy Chamberlin', 'Butch Vig', 'Flood', 'Alan Moulder', 'Kerry Brown', 'Bjorn Thorsrud', 'Nellee Hooper', 'Terry Date', 'Jeff Schroeder', 'Howard Willing', 'Rick Rubin', 'Roy Thomas Baker', 'Brad Wood', 'Dale Griffin', 'Ted de Bono' }) do
local cat_str = 'Category:' .. linkType .. 's ' .. linkSubtype .. ' by ' .. subject .. '|'
content = mw.ustring.gsub( content, subject, '[[:' .. cat_str .. subject .. ']][[' .. cat_str .. title .. ']]' )
end
return content
end
function p._studio(content, storage)
local studios = {
['Battery Studios'] = true,
['BBC Radio One Studios'] = true,
['Broadway Rehearsal Studios'] = true,
['Bugg Studios'] = true,
['Charing Cross Studios'] = true,
['Chicago Recording Company'] = true,
['Chicago Trax Recording Studio'] = true,
['Chung King Studios'] = true,
['Coldwater Studios'] = true,
['Eddy Street'] = true,
['Maida Vaile Studios'] = true,
['Penguin Studios'] = true,
['Pumpkinland'] = true,
['Pumpkinland II'] = true,
['Reel Time Studios'] = true,
['River North'] = true,
['Sadlands'] = true,
['Schwa Productions'] = true,
['Smart Studios'] = true,
['Solid Sound Studios'] = true,
['Sound City Studios'] = true,
['Soundworks Studio'] = true,
['Streeterville Studios'] = true,
['Sunset Sound'] = true,
['Sweet 16 Studio'] = true,
['The Hinge Chicago'] = true,
['The Hit Factory'] = true,
['The Village Recorder'] = true,
['Triclops Sound Studios'] = true,
['VPRO Radio'] = true,
['Waterfront Studios'] = true,
['WZRD Studios'] = true
}
-- if storage then
-- content = content:gsub('(%(.*%))', '')
-- end
for s in string.gmatch(content, "([^,]+)") do
s = mw.text.trim(s)
local s_normalized = mw.text.trim(s:gsub('( *%(.*%))', ''))
local studio = nil
if studios[s_normalized] ~= nil then
studio = s_normalized
elseif studios[s_normalized .. ' Studios'] ~= nil then
studio = s_normalized .. ' Studios'
elseif studios[s_normalized .. ' Studio'] ~= nil then
studio = s_normalized .. ' Studio'
end
if studio ~= nil then
if storage then
content = mw.ustring.gsub(content, s:gsub("([^%w])", "%%%1"), studio)
else
content = mw.ustring.gsub(content, s_normalized, '[[' .. studio .. '|' .. s_normalized .. ']]')
end
elseif storage then
content = mw.ustring.gsub(content, s, '')
end
end
return mw.text.trim(content, '\t\r\n\f ,')
end
function p._link(content, kind)
local t = {}
for s in string.gmatch(content, "([^,]+)") do
s = mw.text.trim(s)
if kind == 'album' then
s = "''[[" .. s .. "]]''"
elseif kind == 'song' then
s = '"[[' .. s .. ']]"'
else
s = '[[' .. s .. ']]'
end
table.insert(t, s)
end
local ret = ''
for _i, s in pairs(t) do
ret = ret .. ', ' .. s
end
return mw.text.trim(ret, ', ')
end
function p._categorize(content, suffix)
local t = {}
for s in string.gmatch(content, "([^,]+)") do
s = mw.text.trim(s)
s = '[[Category:' .. s .. ' ' .. suffix .. ']]'
table.insert(t, s)
end
local ret = ''
for _i, s in pairs(t) do
ret = ret .. s
end
return mw.text.trim(ret, ', ')
end
function p.main( frame )
local content = frame.args[1]
local kind = frame.args[2]
if content == '' then
return content
end
return p._link(content, kind)
end
function p.studio_storage( frame )
local content = frame.args[1]
return p._studio(content, true)
end
function p.studio( frame )
local content = frame.args[1]
return p._studio(content, false)
end
function p.categorize( frame )
local content = frame.args[1]
local suffix = frame.args[2]
if content == '' then
return content
end
return p._categorize(content, suffix)
end
function p.album( frame )
local content = frame.args[1]
if content == '' then
return content
end
return p._link(content, 'album')
end
function p.producer( frame )
local content = frame.args[1]
local title = frame.args[2]
local linkType = frame.args[3]
if content == '' then
return content
end
return person_link(content, title, linkType, 'produced')
end
function p.writer( frame )
local content = frame.args[1]
local title = frame.args[2]
local linkType = frame.args[3]
if content == '' then
return content
end
return person_link(content, title, linkType, 'written')
end
return p