Модуль:Name

    Матеріал з Релігія в огні

    Документацію для цього модуля можна створити у Модуль:Name/документація

    --[[  
      __  __           _       _        _   _                      
     |  \/  | ___   __| |_   _| | ___ _| \ | | __ _ _ __ ___   ___ 
     | |\/| |/ _ \ / _` | | | | |/ _ (_)  \| |/ _` | '_ ` _ \ / _ \
     | |  | | (_) | (_| | |_| | |  __/_| |\  | (_| | | | | | |  __/
     |_|  |_|\___/ \__,_|\__,_|_|\___(_)_| \_|\__,_|_| |_| |_|\___|
        
    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