Cannabis Ruderalis

require('strict') -- Enforce strict variable handling to catch undeclared global variables

-- Import modules
local p = {} 
local categoryHandler = require('Module:Category handler').main 
local yesno = require('Module:Yesno') 
local mArguments = require('Module:Arguments') 
local n 

-- define local functions

-- Function to categorize pages
local function cat(category)
	-- Format the category string
	category = string.format('[[Category:%s]]', category)
	-- Concatenate the category to n.category using categoryHandler
	n.category = n.category..(categoryHandler{
		category, 
		nocat = n.nocat, 
		page = n.page, 
		talk = category
	} or '')
end

-- Function to handle Revised Romanization of Korean
local function RR()
	n.variant = 'Revised Romanization of Korean'
	n.transliteration_examples = "''Joseon'', ''Tteokbokki'', ''Pansori''"
	cat('Wikipedia articles that use the Revised Romanization of Korean')
	if n.bid then n.id = n.id .. 'rr' end
end

-- Function to handle McCune-Reischauer romanization of Korean
local function MR()
	n.variant = 'McCune-Reischauer romanization of Korean'
	n.extraguide = ' and [[Wikipedia:Naming conventions (Korean)|Korean naming conventions]]'
	cat('Wikipedia articles that use the McCune-Reischauer romanization of Korean')
	n.flag = 'no'
	if n.bid then n.id = n.id .. 'mr' end
end

-- Function to handle Yale romanization of Korean
local function Yale()
	n.variant = 'Yale romanization of Korean'
	n.extraguide = ' and [[Wikipedia:Naming conventions (Korean)|Korean naming conventions]]'
	cat('Wikipedia articles that use the Yale romanization of Korean')
	n.flag = 'no'
	if n.bid then n.id = n.id .. 'yale' end
end

-- Function to modify text based on transliteration system selected
local function modify_text()
	n.transliteration = ''
	n.extravariant = ''
	n.extraguide = ''
	local bRR = yesno(n.RR)
	local bMR = yesno(n.MR)
	local bYale = yesno(n.Yale)

	if bRR then
		RR()
		return
	elseif bMR then
		MR()
		return
	elseif bYale then
		Yale()
		return
	end

	if n.transliteration_examples then n.transliteration = ', which has its own [[transliteration]] conventions' end
end

-- Function to generate the base text for the notice
local function base_text(frame)
	n.subjectspace = require('Module:Pagetype').main()
	n.transliteration_examples = n.transliteration_examples and string.format(' (e.g., %s)', n.transliteration_examples) or ''
	n.terms = n[1] or n.terms
	n.terms = n.terms and string.format(' (including %s)', n.terms) or ''
	n.compare = n.compare and (n.compare .. ' ') or ''
	n.text = string.format([=[This %s '''uses the [[%s]]%s'''%s%s and some terms that are used in it%s may be different or absent from %sor other [[Romanization of Korean|romanizations of Korean]]. According to the [[MOS:KO|relevant Korean style guide]]%s, this should not be changed without [[Wikipedia:Consensus#Levels of consensus|broad consensus]]. Per [[WP:COMMONNAME]], use words commonly established in English over any transliteration if they exist.]=],
		n.subjectspace, n.variant, n.extravariant, n.transliteration, n.transliteration_examples, n.terms, n.compare, n.extraguide)
end

-- Function to style the notice based on given parameters
local function style(frame)
	local size
	if yesno(n.small) then size = '30px'
	elseif n.size then size = n.size
	else size = '50px'
	end
	if n.image then
		n.image = string.format('[[File:%s|%s]]', n.image, size)
	end
	if n.form == 'editnotice' then
		if n.bid then n.id = n.id .. 'editnotice' end
		n.expiry = n.expiry or 'indefinite'
		if yesno(n.editnotice_cat) then
			cat(string.format('Pages with the %s editnotice', n.variant))
		end
		return frame:expandTemplate{title = 'editnotice', args = n}
	else
		local message_box = require('Module:Message box').main
		if not n.image then n.image = 'none' end
		n['type'] = 'style'
		return message_box('tmbox', n)
	end
end

-- Function to get the base page name for special cases (used for documentation pages)
local function getBasePageName()
	local title = mw.title.getCurrentTitle()
	local basePageName = title.text

	-- Handle specific cases
	if basePageName:find("McCune-Reischauer romanization of Korean") then
		basePageName = "McCune-Reischauer"
	elseif basePageName:find("Yale romanization of Korean") then
		basePageName = "Yale romanization"
	elseif basePageName:find("Revised Romanization of Korean") then
		basePageName = "Revised Romanization"
	else
		basePageName = basePageName:gsub(" romanization of Korean", "")
		basePageName = basePageName:gsub(" of Korean", "")
	end

	return basePageName
end
p.getBasePageName = getBasePageName

-- Main function for handling the setup and categorization
local function _main(frame, templatetitle)
	n = mArguments.getArgs(frame, {parentFirst = true})
	n.variant = n.variant or templatetitle -- automatically use title generated from template name
	n.category = ''
	n.transliteration_examples = n.transliteration_examples or n['transliteration examples']
	n.bid = not not n.id

	if not n.text then
		modify_text()
		base_text(frame)
	end
	cat('Wikipedia articles that use the ' .. n.variant)
	return style(frame) .. (n.category or '')
end
p._main = _main

-- Main entry point for the module
function p.main(frame)
	local fulltitle = frame:getParent():getTitle()
	local templatetitle = string.sub(fulltitle, 10)
	local title = mw.title.getCurrentTitle()
	if mw.title.equals(title, mw.title.makeTitle('Template', title.rootText)) then -- if it is on the main template page, load doc
		n = mArguments.getArgs(frame, {parentFirst = true})
		n.variant = n.variant or templatetitle -- automatically use title generated from template name
		if n.doc ~= 'no' then
			return frame:expandTemplate {title = 'Korean transliteration notice/documentation', args = n}
		end
	end
	return _main(frame, templatetitle)
end

return p

Leave a Reply