Mô đun:Danh sách

Từ điển mở Wiktionary
---Các hàm để xây dựng danh sách.
local p = {}
local viet

---Cho ra các tham số như một danh sách nội dòng.
-- Hàm này hỗ trợ số tham số không hạn chế.
function p.inlineList(frame)
    local contentFrame = frame
    if not frame.args[1] then contentFrame = frame:getParent() end
    
    local start = tonumber(contentFrame.args.start or frame.args.start or 1) or 1
    
    local insep = contentFrame.args.insep
    local items = {}
    for i, arg in ipairs(contentFrame.args) do
        if i >= start then
            local item = tostring(mw.text.trim(arg))
            if #item > 0 then
            	if insep then
            		local subitems = mw.text.split(item, insep)
            		for i, subitem in ipairs(subitems) do
            			table.insert(items, subitem)
        			end
            	else
            		table.insert(items, item)
        		end
            end
        end
    end
    
    if contentFrame.args.sorted and tonumber(contentFrame.args.sorted) == 1 then
        viet = viet or require "Mô đun:Quốc ngữ"
        table.sort(items, viet.comp)
    end
    
    local format = contentFrame.args.format
    if format then
    	for i, item in ipairs(items) do
    		items[i] = mw.ustring.format(format, item)
		end
	end
    
    local space = contentFrame.args.space or frame.args.space or " "
    
    local conj = contentFrame.args.conj or frame.args.conj
    if #items > 1 and conj then
        items[#items] = conj .. space .. items[#items]
    end
    
    local output
    if #items == 2 and conj then
        output = items[1] .. space .. items[2]
    else
	    local sep = contentFrame.args.sep or frame.args.sep or ","
	    output = table.concat(items, sep .. space)
    end
    if #output < 1 and contentFrame.args.placeholder then
    	output = contentFrame.args.placeholder
	end
    return output
end

return p