Module:Link: Difference between revisions

From SPCodex, The Smashing Pumpkins wiki
No edit summary
m (Protected "Module:Link" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite) [Delete=Allow only administrators] (indefinite)))
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
local str = {}
local p = {}


local function link( content, title, linkType, linkSubtype )
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' }) 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


-- local function linkAlbum( content, title, albumType )
function p._studio(content, storage)
-- for _i, subject in ipairs({ 'Gish', 'Siamese Dream', 'Mellon Collie and the Infinite Sadness' }) do
local studios = {
-- local cat_str = 'Category:' .. linkType .. 's ' .. linkSubtype .. ' by ' .. subject .. '|'
['Battery Studios'] = true,
-- content = mw.ustring.gsub( content, subject, '[[:' .. cat_str .. subject .. ']][[' .. cat_str .. title .. ']]' )
['BBC Radio One Studios'] = true,
-- end
['Broadway Rehearsal Studios'] = true,
['Bugg Studios'] = true,
-- return content
['Charing Cross Studios'] = true,
-- end
['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 str.album( frame )
function p.album( frame )
local content = frame.args[1]
local content = frame.args[1]
local title = frame.args[2]
local albumType = frame.args[3]
if content == '' then
if content == '' then
return content
return content
end
end
return p._link(content, 'album')
end
end


function str.producer( frame )
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 36: Line 157:
end
end


return link(content, title, linkType, 'produced')
return person_link(content, title, linkType, 'produced')
end
end


function str.writer( frame )
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 47: Line 168:
end
end


return link(content, title, linkType, 'written')
return person_link(content, title, linkType, 'written')
end
end


return str
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