Module:Delimited tag

From Commons Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Delimited tag/doc

local i18n = require('Dev:I18n').loadMessages('Delimited tag')

local p = {}

function p.output(f)

	local args = f
	if f == mw.getCurrentFrame() then 
		args = require('Dev:Arguments').getArgs(f)
	end

	local tag = function(txt)
		return '<' .. args['tag'] .. '>' .. txt .. '</' .. args['tag'] .. '>'
	end
	local listLevel = args['list-level'] or '**'

	local output = tag(assert(args[1], i18n:msg('not-provided')))
	
	local finalDelimiterValues = {
		['none'] = '<nowiki/>',
		['comma']  = i18n:msg('delimiter-comma'),
		 [',']  = i18n:msg('delimiter-comma'),
		['and']  = i18n:msg('final-delimiter-and'),
		['&']  = i18n:msg('final-delimiter-&'),
		['or']  = i18n:msg('final-delimiter-or'),
		['to']  = i18n:msg('delimiter-to'),
		['delimiter-à'] = i18n:msg('delimiter-à'),
		['delimiter-de'] = i18n:msg('delimiter-de'),
		['br']  = i18n:msg('delimiter-br'),
		 ['newline']  = i18n:msg('delimiter-br'),
		['list']  = i18n:msg('delimiter-list') .. listLevel,
		 ['bullet']  = i18n:msg('conjunction'),
		 ['*']  = i18n:msg('conjunction'),
		['and-list']  = i18n:msg('final-delimiter-and-list') .. listLevel,
		['&-list']  = i18n:msg('final-delimiter-&-list') .. listLevel,
		['or-list']  = i18n:msg('final-delimiter-or-list') .. listLevel,
		['comma-list']  = i18n:msg('delimiter-comma-list') .. listLevel,
		 [',-list']  = i18n:msg('delimiter-comma-list') .. listLevel,
	}
	
	local midDelimiterValues = {
		['and']  = i18n:msg('mid-delimiter-and'),
		 ['&']  = i18n:msg('mid-delimiter-&'),
		 ['or']  = i18n:msg('mid-delimiter-or'),
		['and-list']  = i18n:msg('mid-delimiter-and-list') .. listLevel,
		 ['&-list']  = i18n:msg('mid-delimiter-&-list') .. listLevel,
		 ['or-list']  = i18n:msg('mid-delimiter-or-list') .. listLevel,
	}
	
	local delimiter = args['delimiter'] or args['delim'] or args['d'] or '&nbsp;'
	local finalDelimiter = finalDelimiterValues[delimiter] or delimiter
	local midDelimiter = midDelimiterValues[delimiter] or finalDelimiter
	
	for i,val in ipairs(args) do
		if (i > 1) then
			local currentDelimiter = args[i+1] and midDelimiter or finalDelimiter
			output = output .. currentDelimiter .. tag(val)
		end
	end
	
	return output
	
end

return p