Module:Korean transliteration notice/sandbox

require('strict')

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

-- Define functions
local function cat(category)
	category = string.format('[[Category:%s]]', category)
	n.category = n.category .. category
end

local function RR()
    mw.log('Inside RR function')
    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

local function MR()
    mw.log('Inside MR function')
    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

local function Yale()
    mw.log('Inside Yale function')
    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

local function modify_text()
    mw.log('Inside modify_text function')
    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

local function base_text(frame)
    mw.log('Inside base_text function')
    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

local function style(frame)
    mw.log('Inside style function')
    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

local function getBasePageName()
    mw.log('Inside getBasePageName function')
    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

local function _main(frame, templatetitle)
    mw.log('Inside _main function')
    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 function
function p.main(frame)
    mw.log('Inside main function')
    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