Jump to content

Module:Engvar

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by DePiep (talk | contribs) at 03:50, 16 November 2014. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

-- This module implements template:Engvar.
-- The defaultWord is returned, unless the engvar input hits on an existing variant (en-XX) word.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local gsub = string.gsub
local lower = string.lower
local upper = string.upper

function p.variants(frame)
local args = getArgs(frame)
	return p._variants(args)
end

function p._variants(args)
local returnWord = nil

	local defaultWord = args.defaultWord or ''
	if args.engvar == nil then
		--Nothing to look for; use defaultWord right away
		returnWord = defaultWord
	elseif args.defaultLang == gsub(lower(args.engvar), '^en%-(%w%w)$', formatISO) then
		--By the defaultLang, the defaultWord is asked
		returnWord = defaultWord
	else
		returnWord = args[gsub(lower(args.engvar), '^en%-(%w%w)$', formatISO)]
	end

	if returnWord == nil then
		--No hit so far. Search by words in the engvar entered, checking the list
		local useLang = engvarLang(args.engvar)
		if useLang == nil then
			local catMaintenance
			if args.engvarCat == 'no' then
			else
				local title = mw.title.getCurrentTitle()
				if title:inNamespaces(0, 10, 828) then  --main, templ, module
					catMaintenance = '_[[:Category:Articles using an unknown Template:Engvar option]]'
				end
			end
			returnWord = defaultWord .. (catMaintenance or '')
		else
			returnWord = args[useLang] or defaultWord
		end
	end

	return returnWord
end

-- Returns arguments and intermediate result. Plus the template result.
function p.explain(frame)
local args = getArgs(frame)
local ret = {'\n\n* Module:Engvar: '}
	table.insert(ret, 2, 'defaultWord=' .. (args.defaultWord or '') .. '; ')
	table.insert(ret, 3, 'defaultLang=' .. (args.defaultLang or '') .. '; ')
	table.insert(ret, 4, 'engvar=' .. (args.engvar or '') .. '; ')
	
	for k, v in pairs(args) do
		if k == 'defaultWord' then
		elseif k == 'defaultLang' then
		elseif k == 'engvar' then
		elseif k == gsub(lower(k), '^en%-(%w%w)$', formatISO) then
			table.insert(ret, k .. '=' .. v .. '; ')
		else
			table.insert(ret, k .. ' (check, lowercase?)=' .. v .. ' ; ')
		end
	end
	local useLang = engvarLang(args.engvar or '')
	table.insert(ret, 5, 'Engvar code: >' .. (useLang or '') .. '<.\n\n:')
	return p._variants(args) .. table.concat(ret)
end

function formatISO(country)
	return ('en-' .. string.upper(country) or '')
end

function engvarLang(searchEngvar)
-- Search verbose language identifiers to ISO-format 'en-XX'
local match = string.match

	searchEngvar = gsub(string.lower(searchEngvar), '[%s%(%)%-]', '') -- to lc, remove all: (, ) , ws, hyphen.
	local useLang
	--specials
	if match(searchEngvar, 'oxford')
		or searchEngvar == 'enoed'
		or searchEngvar == oed then
			useLang = 'en-OED' -- 'oxford' to catch before anyting 'british'
	elseif match(searchEngvar, 'iupac') then
			useLang = 'en-IUPAC' -- chemistry
	-- very often used
	elseif match(searchEngvar, 'british')
		or searchEngvar == 'uk'
		or searchEngvar=='engb' then
			useLang = 'en-UK'
	elseif searchEngvar == 'us'
		or match(searchEngvar, 'unitedstates')
		or searchEngvar=='american'  then
			useLang = 'en-US'
	elseif match(searchEngvar, 'australia') then
			useLang = 'en-AU'
	-- often used
	elseif match(searchEngvar, 'india') then
			useLang = 'en-IN'
	elseif searchEngvar == 'newzealand' then
			useLang = 'en-NZ'
	elseif match(searchEngvar, 'southafrica')
		or searchEngvar == 'ensa' then
			useLang = 'en-ZA'
	elseif searchEngvar == 'canada' then
			useLang = 'en-CA'
	elseif match(searchEngvar, 'hiberno')
		or match(searchEngvar, 'ireland')
		or match(searchEngvar, 'irish') then
			useLang = 'en-EI'
	elseif searchEngvar == 'hongkong' then
			useLang = 'en-HK'
	--less often used			
	elseif match(searchEngvar, 'jamaica') then
			useLang = 'en-JM'
	elseif match(searchEngvar, 'malawi') then
			useLang = 'en-MW'
	elseif match(searchEngvar, 'nigeria') then
			useLang = 'en-NG'
	elseif match(searchEngvar, 'pakistan') then
			useLang = 'en-PK'
	elseif match(searchEngvar, 'philippine') then
			useLang = 'en-PH'
	elseif match(searchEngvar, 'scotland')
		or match(searchEngvar, 'scots')
		or match(searchEngvar, 'scottish') then
			useLang = 'en-SCOTLAND' -- has no alpha-2 code
	elseif match(searchEngvar, 'singapore') then
			useLang = 'en-SG'
	elseif match(searchEngvar, 'trinidad')
		or match(searchEngvar, 'tobago') then
			useLang = 'en-TT'
	else
		useLang = nil
	end
	
	return useLang
end

return p