Module:glossary

From Wiktionary, the free dictionary
Jump to navigation Jump to search

The test_existence function tracks instances of {{glossary}} that link to anchors not found in Appendix:Glossary. See Category:Pages linking to anchors not found in Appendix:Glossary. It uses the data module Module:glossary/data to determine if the anchor exists.


local export = {}

local ugsub = mw.ustring.gsub
local umatch = mw.ustring.match

function format_def(term, definition)
	local anchor = ugsub(term, "%[%[([^%]]+)%]%]", "%1") -- Remove wikilinks
	anchor = ugsub(anchor, "^%w+:", "") -- Remove interwiki prefixes
	
	return "; <span id=\""..anchor.."\">"..term.."</span>\n: "..definition
end

function export.def (frame)
	local params = {
		[1] = { required = true, default = "", },
		[2] = { required = true, default = "", },
	}
	
	local args = require("Module:parameters").process(frame:getParent().args, params)
	
	local term = args[1]
	local definition = args[2]
	
	return format_def (term, definition)
end

function export.link(frame)
	local args = frame:getParent().args
	for k, v in pairs(args) do
		if not (k == 1 or k == 2) then
			require "Module:debug".track "glossary/invalid argument"
			require "Module:debug".track("glossary/invalid argument/" .. k)
			mw.log("invalid argument in {{glossary}}: " .. k)
		end
	end
	
	local anchor, text = args[1] or "", args[2]
	text = text and not umatch(text, "^%s*$") and text
	
	local data = mw.loadData("Module:glossary/data")
	
	local formatted_anchor = ugsub(anchor, "[%s_]+", "_")
	if data[formatted_anchor] then
		return "[[Appendix:Glossary#" .. formatted_anchor .. "|" .. (text or anchor) .. "]]"
	else
		local lower_anchor = anchor:ulower()
		formatted_anchor = formatted_anchor:ulower()
		
		local link = "[[Appendix:Glossary#" .. formatted_anchor .. "|" .. (text or anchor) .. "]]"
		
		if data[formatted_anchor] or formatted_anchor:find "^_*$" then
			return link
		else
			mw.log("The anchor " .. lower_anchor
				.. (lower_anchor ~= anchor and " or " .. anchor or "")
				.. " does not exist in Appendix:Glossary.")
			return link
				.. "[[Category:Pages linking to anchors not found in Appendix:Glossary|"
				.. lower_anchor .. "]]"
		end
	end
end

return export