Permanently protected module
From Wikipedia, the free encyclopedia


require('strict');

local getArgs = require('Module:Arguments').getArgs





--[[--------------------------< E R R _ M S G _ M A K E >------------------------------------------------------

]]



local function err_msg_make (msg)

	return '<span class="error" style="font-size:100%">error: ' .. msg .. ' not recognized</span>'

end





--[[--------------------------< _ I S _ C O D E >--------------------------------------------------------------



local or require()d entry point



return true if <code> is a mediawiki recognized code; false else



<code> - language code to validate; expected to be lowercase without leading/trailing whitespace

<target_lang_code> - language code for target language; expected to be valid; expected to be lowercase without leading/trailing whitespace



specifying <target_lang_code> may be a pointless exercise because of cldr fallback.  For example,

	mw.language.fetchLanguageName (crh, sq) -> Crimean Turkish

because the Albanian language definitions do not have an Albanian-language version of the language name



]]



local function _is_code (code, target_lang_code)

	code = mw.language.fetchLanguageName (code, target_lang_code);

	return '' ~= code;

end





--[[--------------------------< _ _ V A L I D A T E _ T A R G E T _ L A N G _ C O D E >------------------------



validates target_lang_code as a know language code; returns two values

	when target_lang_code is valid, first return value holds target_lang_code; second return value is nil

	when target_lang_code is invalid, first retrun value is nil; second return value has error message



if target_lang_code argument is nil, (missing or empty in the invoke) use local wiki's language code



]]



local function __validate_target_lang_code (target_lang_code)

	local msg;

	

	if target_lang_code then													-- not missing or empty

		if not _is_code (target_lang_code) then									-- validate target_lang_code

			msg = err_msg_make ('target language code: ' .. target_lang_code);

			target_lang_code = nil;												-- unset as invalid

		end

	end

	if not target_lang_code then												-- if nil because missing or empty or because invlaid and we set it nil

		target_lang_code = mw.getContentLanguage():getCode();					-- use local wiki's language code

	end



	return target_lang_code, msg;												-- target_lang_code is valid or nil; msg is nil or has an error message

end





--[[--------------------------< I S _ C O D E >----------------------------------------------------------------



module entry point



args[1]: language code -> <code>

args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language



return true if <code> is a mediawiki recognized code; nil else



]]



local function is_code (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('^%s*(.-)%s*$', '%1') or nil;

		end

		});

	local code = args1];

	local target_lang_code = __validate_target_lang_code (args2]);



	return code and _is_code (code, target_lang_code) and true or nil;

end





--[[--------------------------< N A M E _ F R O M _ C O D E >--------------------------------------------------



module entry point



args[1]: language code

args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language



return language-name if language-code is a mediawiki recognized code; error message string else



returned language name not guarenteed to be in target_lang_code (if specified), because mw language lists are incomplete



]]



local function name_from_code (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;

		end

		});

	local code = args1];

	if not code then

		return err_msg_make ('code: (empty)');

	end

	

	local target_lang_code, msg = __validate_target_lang_code (args2]);

	if msg then

		return msg;

	end



	local name = mw.language.fetchLanguageName (code, target_lang_code);		-- returns empty string if code not found

	return '' ~= name and name or err_msg_make ('language code: ' .. code);		-- return language name or error message

end





--[[--------------------------< C O D E _ F R O M _ N A M E >--------------------------------------------------



local entry point



args[1]: language name

args[2]: optional target language code; instruct this function to fetch language name list in 'this' language



return language-code if language-name is a mediawiki recognized name and target language code is valid; error message string else



second return value is a boolean used by is_name(); true when name is found; false else



]]



local function _code_from_name (args)

	local name = args1];

	if not name then

		return err_msg_make ('name: (empty)');

	end



	local target_lang_code, msg =  __validate_target_lang_code (args2]);



	if msg then

		return msg;

	end



	local code_name_list = mw.language.fetchLanguageNames (target_lang_code, 'all');	-- get language code / name list in target_lang_code language indexed by language code

	local name_code_list = {};													-- to hold language name / code list indexed by name



	for k, v in pairs (code_name_list) do										-- spin through the code / name list and

		name_code_listv:lower()] = k;											-- make a name / code list

	end



	if name_code_listname then

		return name_code_listname], true;										-- returns code when name is found and true for is_name()

	else

		return err_msg_make ('language name: ' .. name), false;					-- return error message when name not found and false for is_name()

	end

end





--[[--------------------------< C O D E _ F R O M _ N A M E >--------------------------------------------------



module entry point



args[1]: language name

args[2]: optional target language code; instruct this function to fetch language name list in 'this' language



return language-code if language-name is a mediawiki recognized name and target language code is valid; error message string else



]]



local function code_from_name (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('^%s*(.-)%s*$', '%1') or nil;

		end

		});

	

	local result, _ = _code_from_name (args);									-- suppress true/false return used by is_name()

	return result;

end





--[[--------------------------< I S _ N A M E >----------------------------------------------------------------



return true if <name> is a mediawiki recognized language name; false else



args[1]: language name

args[2]: optional target language code; instructs _code_from_name to fetch language name list in 'this' language

			defaults to local wiki's language;  when this parameter not valid, language name is assumed to be not valid



]]



local function is_name (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;

		end

		});

	

	local _, result = _code_from_name (args);									-- suppress code return used by code_from_name()

	return result and true or nil;

end





--[[--------------------------< E X P O R T E D   F U N C T I O N S >------------------------------------------

]]



return {

	code_from_name = code_from_name,

	is_code = is_code,

	is_name = is_name,

	name_from_code = name_from_code,



	_is_code = _is_code,														-- entry point from another module

	}
Permanently protected module
From Wikipedia, the free encyclopedia


require('strict');

local getArgs = require('Module:Arguments').getArgs





--[[--------------------------< E R R _ M S G _ M A K E >------------------------------------------------------

]]



local function err_msg_make (msg)

	return '<span class="error" style="font-size:100%">error: ' .. msg .. ' not recognized</span>'

end





--[[--------------------------< _ I S _ C O D E >--------------------------------------------------------------



local or require()d entry point



return true if <code> is a mediawiki recognized code; false else



<code> - language code to validate; expected to be lowercase without leading/trailing whitespace

<target_lang_code> - language code for target language; expected to be valid; expected to be lowercase without leading/trailing whitespace



specifying <target_lang_code> may be a pointless exercise because of cldr fallback.  For example,

	mw.language.fetchLanguageName (crh, sq) -> Crimean Turkish

because the Albanian language definitions do not have an Albanian-language version of the language name



]]



local function _is_code (code, target_lang_code)

	code = mw.language.fetchLanguageName (code, target_lang_code);

	return '' ~= code;

end





--[[--------------------------< _ _ V A L I D A T E _ T A R G E T _ L A N G _ C O D E >------------------------



validates target_lang_code as a know language code; returns two values

	when target_lang_code is valid, first return value holds target_lang_code; second return value is nil

	when target_lang_code is invalid, first retrun value is nil; second return value has error message



if target_lang_code argument is nil, (missing or empty in the invoke) use local wiki's language code



]]



local function __validate_target_lang_code (target_lang_code)

	local msg;

	

	if target_lang_code then													-- not missing or empty

		if not _is_code (target_lang_code) then									-- validate target_lang_code

			msg = err_msg_make ('target language code: ' .. target_lang_code);

			target_lang_code = nil;												-- unset as invalid

		end

	end

	if not target_lang_code then												-- if nil because missing or empty or because invlaid and we set it nil

		target_lang_code = mw.getContentLanguage():getCode();					-- use local wiki's language code

	end



	return target_lang_code, msg;												-- target_lang_code is valid or nil; msg is nil or has an error message

end





--[[--------------------------< I S _ C O D E >----------------------------------------------------------------



module entry point



args[1]: language code -> <code>

args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language



return true if <code> is a mediawiki recognized code; nil else



]]



local function is_code (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('^%s*(.-)%s*$', '%1') or nil;

		end

		});

	local code = args1];

	local target_lang_code = __validate_target_lang_code (args2]);



	return code and _is_code (code, target_lang_code) and true or nil;

end





--[[--------------------------< N A M E _ F R O M _ C O D E >--------------------------------------------------



module entry point



args[1]: language code

args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language



return language-name if language-code is a mediawiki recognized code; error message string else



returned language name not guarenteed to be in target_lang_code (if specified), because mw language lists are incomplete



]]



local function name_from_code (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;

		end

		});

	local code = args1];

	if not code then

		return err_msg_make ('code: (empty)');

	end

	

	local target_lang_code, msg = __validate_target_lang_code (args2]);

	if msg then

		return msg;

	end



	local name = mw.language.fetchLanguageName (code, target_lang_code);		-- returns empty string if code not found

	return '' ~= name and name or err_msg_make ('language code: ' .. code);		-- return language name or error message

end





--[[--------------------------< C O D E _ F R O M _ N A M E >--------------------------------------------------



local entry point



args[1]: language name

args[2]: optional target language code; instruct this function to fetch language name list in 'this' language



return language-code if language-name is a mediawiki recognized name and target language code is valid; error message string else



second return value is a boolean used by is_name(); true when name is found; false else



]]



local function _code_from_name (args)

	local name = args1];

	if not name then

		return err_msg_make ('name: (empty)');

	end



	local target_lang_code, msg =  __validate_target_lang_code (args2]);



	if msg then

		return msg;

	end



	local code_name_list = mw.language.fetchLanguageNames (target_lang_code, 'all');	-- get language code / name list in target_lang_code language indexed by language code

	local name_code_list = {};													-- to hold language name / code list indexed by name



	for k, v in pairs (code_name_list) do										-- spin through the code / name list and

		name_code_listv:lower()] = k;											-- make a name / code list

	end



	if name_code_listname then

		return name_code_listname], true;										-- returns code when name is found and true for is_name()

	else

		return err_msg_make ('language name: ' .. name), false;					-- return error message when name not found and false for is_name()

	end

end





--[[--------------------------< C O D E _ F R O M _ N A M E >--------------------------------------------------



module entry point



args[1]: language name

args[2]: optional target language code; instruct this function to fetch language name list in 'this' language



return language-code if language-name is a mediawiki recognized name and target language code is valid; error message string else



]]



local function code_from_name (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('^%s*(.-)%s*$', '%1') or nil;

		end

		});

	

	local result, _ = _code_from_name (args);									-- suppress true/false return used by is_name()

	return result;

end





--[[--------------------------< I S _ N A M E >----------------------------------------------------------------



return true if <name> is a mediawiki recognized language name; false else



args[1]: language name

args[2]: optional target language code; instructs _code_from_name to fetch language name list in 'this' language

			defaults to local wiki's language;  when this parameter not valid, language name is assumed to be not valid



]]



local function is_name (frame)

	local args = getArgs (frame, {

		valueFunc = function (key, value)

			return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;

		end

		});

	

	local _, result = _code_from_name (args);									-- suppress code return used by code_from_name()

	return result and true or nil;

end





--[[--------------------------< E X P O R T E D   F U N C T I O N S >------------------------------------------

]]



return {

	code_from_name = code_from_name,

	is_code = is_code,

	is_name = is_name,

	name_from_code = name_from_code,



	_is_code = _is_code,														-- entry point from another module

	}

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook