Module:User:Benwing2/usex/templates

local export = {}

local m_languages = require("Module:languages") local table_module = "Module:table" local usex_module = "Module:User:Benwing2/usex" local yesno_module = "Module:yesno"

local rsplit = mw.text.split local rfind = mw.ustring.find

local function track(page) require("Module:debug/track")("usex/templates/" .. page) return true end

function export.usex_t(frame) -- Invocation arguments (passed in the template #invoke call). local iparams = { ["quote"] = {}, ["compat"] = {type = "boolean"}, ["inline"] = {}, ["nocat"] = {type = "boolean"}, ["class"] = {}, }

local iargs = require("Module:parameters").process(frame.args, iparams) local compat = iargs.compat

local parent_args = frame:getParent.args if parent_args.qualifier then track("qualifier") end

-- Template (parent) arguments. local params = { -- Usex/quotation text parameters [1] = {required = true}, [2] = {},		["termlang"] = {}, ["tr"] = {}, ["transliteration"] = {alias_of = "tr"}, ["ts"] = {}, ["transcription"] = {alias_of = "ts"}, ["sc"] = {}, ["norm"] = {}, ["normalization"] = {alias_of = "norm"}, ["normsc"] = {}, ["subst"] = {}, ["q"] = {list = true}, ["qualifier"] = {alias_of = "q"}, ["qq"] = {list = true}, ["ref"] = {},

-- Translation of usex text [3] = {},		["t"] = {alias_of = 3}, ["translation"] = {alias_of = 3}, ["lit"] = {},

-- Original text, if the usex/quotation is a translation ["orig"] = {}, ["origlang"] = {}, ["origtr"] = {}, ["origts"] = {}, ["origsc"] = {}, ["orignorm"] = {}, ["orignormsc"] = {}, ["origsubst"] = {}, ["origq"] = {list = true}, ["origqq"] = {list = true}, ["origref"] = {},

-- Citation-related parameters; for anything more complex, usex ["source"] = {}, ["footer"] = {},

-- Formatting parameters ["inline"] = {}, ["brackets"] = {type = "boolean"},

-- Categorization parameters ["nocat"] = {type = "boolean"}, ["sort"] = {}, }

if compat then params["lang"] = {required = true} params["t"].alias_of = 2 params["translation"].alias_of = 2 table.remove(params, 1) end

local args = require("Module:parameters").process(parent_args, params)

local langparam = compat and "lang" or 1 local lang = m_languages.getByCode(args[langparam] or "und", langparam, "allow etym") local sc = args.sc	sc = sc and require("Module:scripts").getByCode(sc, "sc") or nil local normsc = args.normsc normsc = normsc == "auto" and normsc or normsc and require("Module:scripts").getByCode(normsc, "normsc") or nil if normsc and not args.norm then error("Cannot specify normsc= without norm=") end

if #args.qq > 0 then track("qq") end if #args.q > 0 then track("q") end

local termlang if args.termlang then termlang = m_languages.getByCode(args.termlang, "termlang", "allow etym") table.insert(args.qq, 1, "in " .. lang:getCanonicalName) end

local origlang, origsc, orignormsc if args.orig then origlang = m_languages.getByCode(args.origlang, "origlang", "allow etym") table.insert(args.origqq, 1, "in " .. origlang:getCanonicalName) origsc = args.origsc origsc = origsc and require("Module:scripts").getByCode(origsc, "origsc") or nil orignormsc = args.orignormsc orignormsc = orignormsc == "auto" and orignormsc or			orignormsc and require("Module:scripts").getByCode(orignormsc, "normsc") or nil if orignormsc and not args.orignorm then error("Cannot specify orignormsc= without orignorm=") end else for _, noparam in ipairs { "origlang", "origtr", "origts", "origsc", "orignorm", "orignormsc", "origsubst", "origref" } do			if args[noparam] then error(("Cannot specify %s= without orig="):format(noparam)) end end if #args.origq > 0 then error("Cannot specify origq= without orig=") end if #args.origqq > 0 then error("Cannot specify origqq= without orig=") end end

local inline = args.inline or iargs.inline if inline ~= "auto" then inline = require(yesno_module)(inline) end

local data = { lang = lang, sc = sc, normsc = normsc, usex = args[compat and 1 or 2], translation = args[compat and 2 or 3], transliteration = args.tr, transcription = args.ts, normalization = args.norm, inline = inline, ref = args.ref, quote = iargs.quote, lit = args.lit, subst = args.subst, -- FIXME, change to left and right qualifiers qq = #args.qq > 0 and args.qq or args.q,		source = args.source, footer = args.footer, nocat = args.nocat or iargs.nocat, brackets = args.brackets, sortkey = args.sort, class = iargs.class,

-- Original text, if the usex/quotation is a translation orig = args.orig, origlang = origlang, origtr = args.origtr, origts = args.origts, origsc = origsc, orignorm = args.orignorm, orignormsc = orignormsc, origsubst = args.origsubst, origq = args.origq, origqq = args.origqq, origref = args.origref, }

return require(usex_module).format_usex(data) end

local ignore_prefixes = {"User:", "Talk:", "Wiktionary:Beer parlour", "Wiktionary:Translation requests", "Wiktionary:Grease pit", "Wiktionary:Etymology scriptorium", "Wiktionary:Information desk", "Wiktionary:Tea room", "Wiktionary:Requests for", "Wiktionary:Votes" }

function export.page_should_be_ignored(page) -- Ignore user pages, talk pages and certain Wiktionary pages for _, ip in ipairs(ignore_prefixes) do if rfind(page, "^" .. ip) then return true end end if rfind(page, " talk:") then return true end return false end

function export.page_should_be_ignored_t(frame) return export.page_should_be_ignored(frame.args[1]) and "true" or "" end

return export