Module:sem-arb-utilities

local export = {}

local lang = require("Module:languages").getByCode("ar") local m_utilities = require("Module:utilities") local m_links = require("Module:links") local m_headword = require("Module:headword") local rsplit = mw.text.split

local function link(term, alt, id) if word == "" or word == "&mdash;" then return word else return m_links.full_link({			term = term,			alt = alt,			lang = lang,			id = id,		}, face) end end

local function validateRoot(rootTable, joined_root) if type(rootTable) ~= "table" then error("rootTable is not a table", 2) end

for i, letter in ipairs(rootTable) do		if mw.ustring.len(letter) > 1 then error("'" .. letter .. "', the " .. ordinal[i] ..                     " letter in the root '" .. joined_root ..                      "' should be a single letter.") end end end

function export.root(frame) local output = {} local categories = {} local title = mw.title.getCurrentTitle local fulltitle = title.fullText local namespace = title.nsText if frame.args["lang"] then lang = require("Module:languages").getByCode(frame.args["lang"]) end

local params = { [1] = {},		["nocat"] = { type = "boolean" }, ["plain"] = { type = "boolean" }, ["notext"] = { type = "boolean" }, ["sense"] = {}, }	local args = require("Module:parameters").process(frame:getParent.args,			params) local rootLetters = {} local separator = " " if frame.args["lang"] ~= "acy" then separator = " " else separator = "-" end

if not args[1] and namespace == "Template" then if frame.args["lang"] ~= "acy" then rootLetters = {"ك", "ت", "ب"} else rootLetters = {"k", "t", "p"} end elseif args[1] then rootLetters = rsplit(args[1], separator) else rootLetters = rsplit(fulltitle, separator) end

local joined_root = table.concat(rootLetters, separator) validateRoot(rootLetters, joined_root)

local sense = args["sense"] local sense_formatted = "" if sense ~= nil then sense_formatted = " (" .. sense .. ") " end

if fulltitle == joined_root then table.insert(output, m_headword.full_headword( {					lang = lang, pos_category = "roots", categories = {}, heads = { joined_root } }))

table.insert(categories, "")

if args["nocat"] then return table.concat(output) else return table.concat(output) .. table.concat(categories) end

else local link_text

link_text = link(joined_root, joined_root .. sense_formatted, sense)

table.insert(output, link_text)

table.insert(categories, m_utilities.format_categories( { lang:getCanonicalName .. " terms belonging to the root " .. joined_root .. sense_formatted }, lang))

if args["nocat"] then return table.concat(output) elseif args["plain"] then return table.concat(output) else local term_count = mw.site.stats.pagesInCategory(lang:getCanonicalName .. " terms belonging to the root " .. joined_root .. sense_formatted, "pages") return " " .. table.concat(categories) end

end

end

return export