Module:Sandbox/AbstractWikipedia/Functions/en
Appearance
From Meta, a Wikimedia project coordination wiki
English specific functions of the Abstract Wikipedia template-renderer prototype.
The above documentation is transcluded from Module:Sandbox/AbstractWikipedia/Functions/en/doc. (edit | history)
Editors can experiment in this module’s sandbox (create | mirror) and testcases (create) pages.
Please add categories to the /doc subpage. Subpages of this module.
Editors can experiment in this module’s sandbox (create | mirror) and testcases (create) pages.
Please add categories to the /doc subpage. Subpages of this module.
local p = {} local f = require("Module:Sandbox/AbstractWikipedia/Functions") local l = require("Module:Sandbox/AbstractWikipedia/Lexemes") local wd = require("Module:Sandbox/AbstractWikipedia/Wikidata") -- The following is a list of English-specific functions implementations for -- the template language -- Ideally, this should be replaced by fetching a lexeme from Wikidata. function p.SimpleNoun ( base_form, plural_form ) local result = l.newLexeme ( base_form, "noun" ) result.addForm(base_form, { number = "singular" }) plural_form = plural_form or base_form.."s" result.addForm(plural_form, { number = "plural"} ) return result end local month_name = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } function p.Date ( date ) local result = '' if date.day and tonumber(date.day) > 0 then result = result .. date.day .. ' ' end if date.month and tonumber(date.month) > 0 and tonumber(date.month) <=12 then result = result .. month_name[tonumber(date.month)] .. ' ' end if date.year and tonumber(date.year) ~= 0 then result = result .. date.year end return l.newLexeme ( result, "noun" ) end -- Generates a pronoun lexeme; currently only third person. -- If a q_id is given, the generated pronoun will correspond to that item, -- otherwise a gender-variable pronoun ("he/she") is provided. function p.Pronoun ( q_id ) if q_id then local gender = wd.getHumanGender(q_id) local lexeme if gender == "masculine" then lexeme = f.Lexeme("L485") -- he elseif gender == "feminine" then lexeme = f.Lexeme("L484") -- she elseif gender == "other" then lexeme = f.Lexeme("L371") -- they else lexeme = f.Lexeme("L507") end if (wd.isDead(q_id)) then -- We add a past tense feature for lexeme of dead people, as they are -- normally spoken about in the past tense. This can exposed to the -- verb by using the "tsubj relation". lexeme.addFeature("nominal_tense", "past") end lexeme.log() return lexeme else return f.GenderedLexeme("L485", "L484") -- he / she end end local ordinals = {"first", "second", "third"} -- Generates a lexeme corresponding to an ordinal number function p.Ordinal ( number ) number = tonumber(number) -- allow string input as well -- For small ordinals return spelledout form if number>0 and number<=#ordinals then return l.newLexeme(ordinals[number], "adjective") end -- Otherwise construct ordinal using number + ordinal suffix local suffix = 'th' local last_two_digits = math.abs(number) % 100 if last_two_digits <= 3 or last_two_digits >= 21 then local last_digit = last_two_digits % 10 if last_digit == 1 then suffix = 'st' elseif last_digit == 2 then suffix = 'nd' elseif last_digit == 3 then suffix = 'rd' end end return l.newLexeme(tostring(number)..suffix, "adjective") end return p