Module:Lang/utilities

require ('Module:No globals');

--[[--< I S _ C J K >--

return true if code is one of the listed Chinese, Japanese, Korean ISO 639 codes, false else.

]]

local function is_cjk_code (code) local cjk = {		['zh'] = true, ['cdo'] = true, ['cjy'] = true, ['cmn'] = true,			-- Chinese language codes ['cpi'] = true, ['cpx'] = true, ['czh'] = true, ['czo'] = true, ['gan'] = true, ['hak'] = true, ['hsn'] = true, ['ltc'] = true, ['lzh'] = true, ['mnp'] = true, ['nan'] = true, ['och'] = true, ['wuu'] = true, ['yue'] = true, ['zhx'] = true, ['ja'] = true, ['jpx'] = true, ['ojp'] = true,							-- Japanese language codes ['ko'] = true, ['okm'] = true, ['oko'] = true,							-- Korean language codes }

return cjk[code] or false; end

--[[--< S E T _ I T A L I C S >

Created for use with Template:Infobox book and Template:Infobox document and perhaps others to replace hard-coded italic markup in the call to. This module attempts to make sure that correctly applies italic markup according to MOS:FOREIGNITALIC.

]]

local function set_italics (frame) local code = frame.args[1] or frame.args['code'] or '';						-- empty string causes 'yes' return; will handle the missing code error local text = frame.args[2] or frame.args['text'] or '';						-- empty string causes 'yes' return; will handle the missing text error local is_latn = require ("Module:Unicode data").is_Latin; if is_cjk_code (code) and not is_latn (text) then							-- is_latn is in Module:Lang return 'no';															-- only case for 'no' end return 'yes';																-- everything else is yes end

--[[--< I N _ L A N G >

implements

Module entry point from an

(in )

]]

local function in_lang (frame) local getArgs = require ('Module:Arguments').getArgs; local args = getArgs(frame); local list = {}; local cats = {}; if not args[1] then local template = (args['template'] and table.concat ({': '})) or '';	-- make template name (if provided by the template) return table.concat ({'error: ', template, 'missing language tag '}); end

local module = 'Module:Lang' .. (frame:getTitle:match ('/sandbox') or '');	-- if this module is the sandbox, local name_from_code = require (module)._name_from_code;						-- use Module:Lang/sandbox; Module:Lang else

local namespace = mw.title.getCurrentTitle.namespace;						-- used for categorization local this_wiki_lang = mw.getCurrentFrame:preprocess(''); if '⧼lang⧽' == this_wiki_lang then this_wiki_lang = mw.language.getContentLanguage.code;				-- not at a MediaWiki site that supports interface language; get this wiki's language code end

for i, lang in ipairs (args) do		local t = {args[i], ['link'] = args['link'], ['template'] = args['template']};	-- build an 'args' table lang = name_from_code (t)												-- get the language name table.insert (list, lang)												-- add this language or error message to the list

if lang:find ('error') or (this_wiki_lang == args[i]) or (0 ~= namespace) then	-- for these, no categorization else if lang:match ('%[%[.-|.-%]%]') then								-- wikilinked individual language lang = lang:match ('%[%[.-|(.-)%]%]'); elseif lang:match ('%[%[.-%]%]') then								-- wikilinked collective languages lang = lang:match ('%[%[(.-)%]%]'); end																	-- neither of these then plain text language

table.insert (cats, table.concat ({''})) end end local result = {' ('};							-- opening span and ( table.insert (result, 'yes' == args['cap'] and 'In ' or 'in ');				-- add capitalized or uncapitalized 'in' table.insert (result, mw.text.listToText (list, ', ', (2 < #list) and ', and ' or ' and ' ));	-- add concatenated the language list

table.insert (result, ') ');											-- add closing ) and closing span table.insert (result, table.concat (cats));									-- add categories return table.concat (result);												-- make a big string and done end

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

return { in_lang = in_lang, set_italics = set_italics, }