Module:Name: Difference between revisions
From WWII Archives
wc>Jarekt m (typo) |
Paul Sidle (talk | contribs) m (1 revision imported) |
||
(No difference)
|
Latest revision as of 13:21, 30 May 2024
Documentation for this module may be created at Module:Name/doc
--[[ __ __ _ _ _ _ | \/ | ___ __| |_ _| | ___ _| \ | | __ _ _ __ ___ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) \| |/ _` | '_ ` _ \ / _ \ | | | | (_) | (_| | |_| | | __/_| |\ | (_| | | | | | | __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)_| \_|\__,_|_| |_| |_|\___| This module is intended for processing of people names. Please do not modify this code without applying the changes first at Module:Name/sandbox and testing at Module:Name/sandbox/testcases Authors and maintainers: * User:Zolo - original version * User:Jarekt - rewrite ]] -- ======================================= -- === Dependencies ====================== -- ======================================= local i18n = require('Module:I18n/name') local core = require('Module:Core') local p = {} -- lazy loading (load only if needed) local function lang_of(name, lang) return require('Module:Linguistic').of(name, lang) end -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== function p._name(operation, base_name, lang) -- Error checking on "operation" parameter if operation == '' or base_name == '' then -- no operation provided -> return the name return base_name end operation = mw.ustring.lower(operation) -- convert operation to lower case if not i18n[operation] then -- if operation is not recognized than maybe it is an alias operation = i18n.Aliases[operation] end if not i18n[operation] then -- operation is still not recognized return "name not supported" end local colon = tostring(mw.message.new('colon'):inLanguage(lang)) -- translation through Wikidata q-code if type(i18n[operation])=='string' then -- usually operation is a translation table, but if it is a string than that is -- a wikidata q-code, so look up the label stored in wikidata return core.getLabel(i18n[operation], lang) .. colon .. base_name end -- translation through local LangSwitch which return language specific function or string local command = core.langSwitch(i18n[operation], lang) local full_name, part if type(command)=='function' then full_name = command(base_name) elseif type(command)=='string' then --command = mw.getLanguage(lang):ucfirst(command) command = mw.getCurrentFrame():callParserFunction( "ucfirst", { command } ) if mw.ustring.find(command, '$of_name') then -- forms like Master of X base_name = lang_of(base_name, lang) part = mw.text.split(' '..command..' ', '$of_name', true ) full_name = mw.text.trim(part[1] .. base_name .. part[2]) elseif mw.ustring.find(command, '$name') then -- forms like Master X -- replace parts of the string '$name' with base_name strings part = mw.text.split(' '..command..' ', '$name', true ) full_name = mw.text.trim(part[1] .. base_name .. part[2]) else -- forms like Pseudonym: base_name, with a colon full_name = command .. colon .. base_name end end return full_name end -- =========================================================================== -- === Functions to be called from template namespace -- =========================================================================== function p.name(frame) local args = core.getArgs(frame) local base_name = args.name or '' -- handle case where there is no "name" parameter but chinese names if base_name=='' and (args.trad or args.simp or args.PY) then local Func = core.langSwitch(i18n.Chinese_name, args.lang) base_name = Func(args.trad or '', args.simp or '', args.PY or '') end return p._name(args.operation or '', base_name, args.lang) end return p