Sunday, March 24, 2013

Wiktionary - Recent changes [en]: Module:ca-headword

Wiktionary - Recent changes [en]
Track the most recent changes to the wiki in this feed. // via fulltextrssfeed.com
Module:ca-headword
Mar 25th 2013, 02:34

  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)      elseif poscat == "adjectives" then          ret, categories = adjective(args)      elseif poscat == "verbs" then          ret, categories = verb(args)      elseif poscat == "numerals" then          ret, categories = numeral(args)      end         ret = "<strong class=\"headword\" lang=\"ca\">" .. (args["head"] or PAGENAME) .. "</strong>" .. ret      table.insert(categories, 1, "Catalan " .. (args["cat"] or poscat))         if args["sort"] then          table.insert(categories, "CodeCat's test category")      end         if NAMESPACE == "" then          local sort_key = com.sort_key(PAGENAME)          for key, cat in ipairs(categories) do              ret = ret .. "[[Category:" .. cat .. "|" .. sort_key .. "]]"          end      end         return ret  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              table.insert(categories, "Catalan pluralia tantum")          end      elseif gender == "mf" then          ret = ret .. gen.format({"m", "f"})      else          ret = ret .. "<span class=\"gender\" title=\"gender unspecified\">''?''</span>"          table.insert(categories, "Catalan nouns lacking gender")      end         if not PAGENAME:find(" ") then          if PAGENAME:find("a$") and (gender == "m" or gender == "mf") then              table.insert(categories, "Catalan masculine nouns ending in -a")          elseif not (PAGENAME:find("a$") or PAGENAME:find("ió$") or PAGENAME:find("tat$") or PAGENAME:find("tud$") or PAGENAME:find("[dt]riu$")) and gender == "f" then              table.insert(categories, "Catalan feminine nouns with no feminine ending")          end      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]]''"              table.insert(categories, "Catalan uncountable nouns")          else              local plural2 = args["pl2"] or ""              local p, p2 = make_plural(PAGENAME, gender)              if plural == "" then plural = p end              if plural2 == "" then plural2 = p2 or "" 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     -- Display additional inflection information for an adjective  function adjective(args)      local ret = " "      local categories = {}         local feminine = args[1] or ""      local masculine_plural = ""      local masculine_plural2 = ""      local feminine_plural = ""         -- Invariable adjectives      if feminine == "inv" then          table.insert(categories, "Catalan invariable adjectives")          ret = ret .. gen.format({"m", "f"}) .. " (''invariable'')"      else          -- Adjectives with identical forms in the masculine and feminine singular          if feminine == "mf" or PAGENAME:find("a$") then              feminine = PAGENAME              table.insert(categories, "Catalan epicene adjectives")                 -- Adjectives ending in -ç behave as mf-type in the singular, but              -- regular type in the plural.              if PAGENAME:find("ç$") then                  masculine_plural = make_plural(PAGENAME, "m")                  feminine_plural = make_plural(PAGENAME .. "a", "f")              else                  masculine_plural = make_plural(PAGENAME, "m")                  feminine_plural = masculine_plural              end                 -- Has anyone provided forms to override the defaults?              masculine_plural = args["pl"] or masculine_plural              feminine_plural = args["pl"] or feminine_plural              masculine_plural2 = args["pl2"] or masculine_plural2          -- Adjectives with distinct masculine and feminine singular forms          -- (the majority)          else              if feminine == "" then feminine = make_feminine(PAGENAME) end              feminine_plural = make_plural(feminine, "f")                 -- If the feminine ends in -ssa, assume that the -ss- is also in the              -- masculine plural form              if feminine:find("ssa$") then                  masculine_plural = feminine:gsub("a$", "os")              elseif feminine == PAGENAME .. "na" then                  masculine_plural = PAGENAME .. "ns"              -- Adjectives in -ig have two masculine plural forms, one derived from              -- the m.sg. and the other derived from the f.sg.              elseif PAGENAME:find("ig$") then                  masculine_plural = PAGENAME .. "s"                  masculine_plural2 = feminine:gsub("ja$", "jos")              else                  masculine_plural, masculine_plural2 = make_plural(PAGENAME, "m")              end          end             -- Display the forms          if feminine == PAGENAME then              ret = ret .. gen.format({"m", "f"}) .. " ("          else              ret = ret .. gen.format({"m"}) .. " (''feminine'' <span class=\"form-of positive-form-of gender-f lang-ca\" lang=\"ca\">" .. com.link_form(feminine, "b") .. "</span>, "          end             if masculine_plural == feminine_plural then              ret = ret .. "''masculine and feminine plural'' <span class=\"form-of positive-form-of lang-ca gender-mfpl\" lang=\"ca\">" .. com.link_form(masculine_plural, "b") .. "</span>"                 if masculine_plural2 ~= "" then                  ret = ret .. " ''or'' <span class=\"form-of positive-form-of lang-ca gender-mfpl\" lang=\"ca\">" .. com.link_form(masculine_plural2, "b") .. "</span>"              end          else              ret = ret .. "''masculine plural'' <span class=\"form-of positive-form-of gender-mpl lang-ca\" lang=\"ca\">" .. com.link_form(masculine_plural, "b") .. "</span>"                 if masculine_plural2 ~= "" then                  ret = ret .. " ''or'' <span class=\"form-of positive-form-of lang-ca gender-mpl\" lang=\"ca\">" .. com.link_form(masculine_plural2, "b") .. "</span>"              end                 ret = ret .. ", ''feminine plural'' <span class=\"form-of positive-form-of gender-fpl lang-ca\" lang=\"ca\">" .. com.link_form(feminine_plural, "b") .. "</span>"          end             ret = ret .. ")"      end         return ret, categories  end     -- Display additional inflection information for a verb  function verb(args)      local ret = ""      local categories = {}         local conjtype = args[1] or ""      local pres_1_sg = ""      local past_part = ""         if conjtype == "" and not PAGENAME:find(" ") then          if PAGENAME:find("ar$") or PAGENAME:find("ar%-se") then              conjtype = "ar"              table.insert(categories, "CodeCat's test category")          elseif PAGENAME:find("ir$") or PAGENAME:find("ir%-se") then              conjtype = "ir"              table.insert(categories, "CodeCat's test category")          end      end         if conjtype ~= "" then          local base = PAGENAME:gsub("r%-se$", "r"):gsub("re's$", "re")             if conjtype == "ar" then              local stem = base:gsub("ar$", "")              pres_1_sg = stem .. "o"              past_part = stem .. "at"          elseif conjtype == "ir" then              local stem = base:gsub("ir$", "")              pres_1_sg = stem .. "eixo"                 if stem:find("[aeiou]$") and not stem:find("[gq]u$") then                  past_part = stem .. "ït"              else                  past_part = stem .. "it"              end          else              error("'" .. conjtype .. "' is not a valid conjugation type")          end      elseif PAGENAME:find("[ai]r$") or PAGENAME:find("[ai]r%-se") then          --table.insert(categories, "CodeCat's test category")      end         --if args["pres_1_sg"] == pres_1_sg then         pres_1_sg = args["pres_1_sg"] or pres_1_sg      past_part = args["past_part"] or past_part         if pres_1_sg ~= "" and past_part ~= "" then          ret = ret .. " (''first-person singular present'' " .. com.link_form(pres_1_sg, "b") .. ", "          ret = ret .. "''past participle'' " .. com.link_form(past_part, "b") .. ")"      end         return ret, categories  end     -- Display additional inflection information for a numeral  function numeral(args)      local ret = " "      local categories = {}         local feminine = args[1] or ""      local noun_form = args[2] or ""         if feminine ~= "" then          ret = ret .. gen.format({"m"}) .. " (''feminine'' " .. com.link_form(feminine, "b")             if noun_form ~= "" then              ret = ret .. ", ''noun form'' " .. com.link_form(noun_form, "b")          end             ret = ret .. ")"      else          ret = ret .. gen.format({"m", "f"})      end         return ret, categories  end     function make_feminine(base)      if base:find("a$") then return base end      if base:find("o$") then return (base:gsub("o$", "a")) end         if base:find("ce$") then return (base:gsub("ce$", "ça")) end      if base:find("que$") then return (base:gsub("que$", "ca")) end      if base:find("qüe$") then return (base:gsub("qüe$", "qua")) end      if base:find("ge$") then return (base:gsub("ge$", "ja")) end      if base:find("gue$") then return (base:gsub("gue$", "ga")) end      if base:find("güe$") then return (base:gsub("güe$", "gua")) end      if base:find("e$") then return (base:gsub("e$", "a")) end         if base:find("[aeiou]u$") then return (base:gsub("u$", "v")) .. "a" end         if base:find("à$") then return (base:gsub("à$", "ana")) end      if base:find("è$") then return (base:gsub("è$", "ena")) end      if base:find("é$") then return (base:gsub("é$", "ena")) end      if base:find("ò$") then return (base:gsub("ò$", "ona")) end      if base:find("ó$") then return (base:gsub("ó$", "ona")) end      if base:find("[gq]uí$") then return (base:gsub("í$", "ina")) end      if base:find("[aeiou]í$") then return (base:gsub("í$", "ïna")) end      if base:find("í$") then return (base:gsub("í$", "ina")) end      if base:find("ú$") then return (base:gsub("ú$", "una")) end         if base:find("às$") then return (base:gsub("às$", "asa")) end      if base:find("ès$") then return (base:gsub("ès$", "esa")) end      if base:find("és$") then return (base:gsub("és$", "esa")) end      if base:find("òs$") then return (base:gsub("òs$", "osa")) end      if base:find("ós$") then return (base:gsub("ós$", "osa")) end      if base:find("[gq]uís$") then return (base:gsub("ís$", "isa")) end      if base:find("[aeiou]ís$") then return (base:gsub("ís$", "ïsa")) end      if base:find("ís$") then return (base:gsub("ís$", "isa")) end      if base:find("ús$") then return (base:gsub("ús$", "usa")) end         return base .. "a"  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("x$") 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         return base .. "s", ""  end     return export  

You are receiving this email because you subscribed to this feed at blogtrottr.com.

If you no longer wish to receive these emails, you can unsubscribe from this feed, or manage all your subscriptions