| |
Line 98: | Line 98: |
| --elseif not PAGENAME:find(" ") then | | --elseif not PAGENAME:find(" ") then |
| --categories = categories .. "[[Category:CodeCat's test category]]" | | --categories = categories .. "[[Category:CodeCat's test category]]" |
− | elseif PAGENAME:find("ig$") then | |
− | categories = categories .. "[[Category:CodeCat's test category]]" | |
| elseif p == plural then | | elseif p == plural then |
| + | categories = categories .. "[[Category:CodeCat's test category]]" |
| + | end |
| + | |
| + | if PAGENAME:find("ig$") then |
| categories = categories .. "[[Category:CodeCat's test category]]" | | categories = categories .. "[[Category:CodeCat's test category]]" |
| end | | end |
local com = require("Module:ca-common") local gen = require("Module:gender and number") -- A list of valid gender codes, used by nouns local valid_genders = {} valid_genders["m"] = true valid_genders["f"] = true valid_genders["m-p"] = true valid_genders["f-p"] = true local export = {} -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local args = frame:getParent().args PAGENAME = frame:preprocess("{{PAGENAME}}") NAMESPACE = frame:preprocess("{{NAMESPACE}}") local ret = "" local categories = "" -- The part of speech. This is also the name of the category that -- entries go in. However, the two are separate (the "cat" parameter) -- because you sometimes want something to behave as an adjective without -- putting it in the adjectives category. local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") if poscat == "nouns" then ret, categories = noun(args) elseif poscat == "proper nouns" then ret, categories = noun_gender(args) end categories = "[[Category:Catalan " .. (args["cat"] or poscat) .. "]]" .. categories ret = "<strong class=\"headword\" lang=\"ca\">" .. (args["head"] or PAGENAME) .. "</strong>" .. ret return ret .. (NAMESPACE == "" and categories or "") end -- Display information for a noun's gender -- This is separate so that it can also be used for proper nouns function noun_gender(args) local ret = " " local categories = "" local gender = args[1] or "" if valid_genders[gender] then ret = ret .. gen.format({gender}) if gender == "m-p" or gender == "f-p" then categories = categories .. "[[Category:Catalan pluralia tantum]]" end elseif gender == "mf" then ret = ret .. gen.format({"m", "f"}) else ret = ret .. "<span class=\"gender\" title=\"gender unspecified\">''?''</span>" categories = categories .. "[[Category:Catalan nouns lacking gender]]" end return ret, categories end -- Display additional inflection information for a noun function noun(args) local ret = "" local categories = "" local gender = args[1] or "" -- Gender ret, categories = noun_gender(args) ret = ret .. " (" -- Plural if gender == "m-p" or gender == "f-p" then ret = ret .. "''[[Appendix:Glossary#plurale tantum|plurale tantum]]''" else local plural = args[2] or "" if plural == "-" then ret = ret .. "''[[Appendix:Glossary#uncountable|uncountable]]''" categories = categories .. "[[Category:Catalan uncountable nouns]]" else -- A funny little trick. make_plural can return either one or two -- values. If it returns two, the second will be assigned to p2. -- But if only one, the empty string placed after will be used. local p, p2 = make_plural(PAGENAME, gender) --if PAGENAME:find("ús$") and plural == p then -- categories = categories .. "[[Category:CodeCat's test category]]" --elseif PAGENAME:find("ús$") and plural ~= p then -- categories = categories .. "[[Category:CodeCat's test category2]]" --end if plural == "" then plural = p --elseif not PAGENAME:find(" ") then --categories = categories .. "[[Category:CodeCat's test category]]" elseif p == plural then categories = categories .. "[[Category:CodeCat's test category]]" end if PAGENAME:find("ig$") then categories = categories .. "[[Category:CodeCat's test category]]" end local plural2 = args["pl2"] or "" if plural2 == "" then plural2 = p2 or "" elseif p2 == plural2 then categories = categories .. "[[Category:CodeCat's test category]]" end ret = ret .. "''plural'' <span class=\"form-of plural-form-of lang-ca\">" .. com.link_form(plural, "b") .. "</span>" if plural2 ~= "" then ret = ret .. " ''or'' <span class=\"form-of plural-form-of lang-ca\">" .. com.link_form(plural2, "b") .. "</span>" end end end -- Gendered forms local feminine = args["f"] or "" if feminine ~= "" then ret = ret .. ", ''feminine'' " .. com.link_form(feminine, "b") end local masculine = args["m"] or "" if masculine ~= "" then ret = ret .. ", ''masculine'' " .. com.link_form(masculine, "b") end ret = ret .. ")" return ret, categories end function make_plural(base, gender) -- The extra brackets are needed because gsub returns a pair, but this -- function should only return a single value if base:find("ça$") then return (base:gsub("ça$", "ces")) end if base:find("ca$") then return (base:gsub("ca$", "ques")) end if base:find("qua$") then return (base:gsub("qua$", "qües")) end if base:find("ja$") then return (base:gsub("ja$", "ges")) end if base:find("ga$") then return (base:gsub("ga$", "gues")) end if base:find("gua$") then return (base:gsub("gua$", "gües")) end if base:find("a$") then return (base:gsub("a$", "es")) end if base:find("à$") then return (base:gsub("à$", "ans")) end if base:find("è$") then return (base:gsub("è$", "ens")) end if base:find("é$") then return (base:gsub("é$", "ens")) end if base:find("ò$") then return (base:gsub("ò$", "ons")) end if base:find("ó$") then return (base:gsub("ó$", "ons")) end if base:find("[gq]uí$") then return (base:gsub("í$", "ins")) end if base:find("[aeiou]í$") then return (base:gsub("í$", "ïns")) end if base:find("í$") then return (base:gsub("í$", "ins")) end if base:find("ú$") then return (base:gsub("ú$", "uns")) end if gender == "m" or gender == "mf" then if base:find("às$") then return (base:gsub("às$", "asos")) end if base:find("ès$") then return (base:gsub("ès$", "esos")) end if base:find("és$") then return (base:gsub("és$", "esos")) end if base:find("òs$") then return (base:gsub("òs$", "osos")) end if base:find("ós$") then return (base:gsub("ós$", "osos")) end if base:find("[gq]uís$") then return (base:gsub("ís$", "isos")) end if base:find("[aeiou]ís$") then return (base:gsub("ís$", "ïsos")) end if base:find("ís$") then return (base:gsub("ís$", "isos")) end if base:find("ús$") then return (base:gsub("ús$", "usos")) end if base:find("s$") or base:find("ç$") or base:find("z$") then return base .. "os" end if base:find("sc$") or base:find("st$") or base:find("xt$") then return base .. "s", base .. "os" end end if gender == "f" then if base:find("s$") then return base end if base:find("sc$") or base:find("st$") or base:find("xt$") then return base .. "s", base .. "es" end end if base:find("x$") then return base .. "os" end return base .. "s" end return export