模組解[]
-- vi:set sw=4 ts=4 ai sm:
---- 呢個模組係用來產生一啲冇意義嘅文字,用嚟做排版範例
---- 文字來源係 en:Lorem ipsum
----
---- 2024年粵維原創

require ('strict');
local p = {};

--- Auxiliaries ---------------------------------------------------------------
local dummy_words = {
	"Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipisicing",
	"elit,", "sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore",
	"et", "dolore", "magna", "aliqua.", "Ut", "enim", "ad", "minim", "veniam,",
	"quis", "nostrud", "exercitation", "ullamco", "laboris", "nisi", "ut",
	"aliquip", "ex", "ea", "commodo", "consequat.", "Duis", "aute", "irure",
	"dolor", "in", "reprehenderit", "in", "voluptate", "velit", "esse",
	"cillum", "dolore", "eu", "fugiat", "nulla", "pariatur.", "Excepteur",
	"sint", "occaecat", "cupidatat", "non", "proident,", "sunt", "in", "culpa",
	"qui", "officia", "deserunt", "mollit", "anim", "id", "est", "laborum."
};

local function generate (n)
	local it, i;
	for j = 1, n do
		if it then
			it = it .. ' ';
		else
			it = '';
		end
		if not i or i > #dummy_words then
			i = 1;
		end
		it = it .. dummy_words[i];
		i = i + 1;
	end
	if not it:match("%.$") then
		it = it .. ".";
	end
	return it;
end

-- Entry point
p.main = function (frame)
	local parent = frame:getParent();
	local n;
	local options = {
		-- 冇
	};
	local options_with_parameters = {
		['字數'] = function (v)
				n = v;
			end;
	};
	for _, a in pairs({frame, parent}) do
		if a then
			for k, v in pairs(a.args) do
				v = v:gsub('^%s+', ''):gsub('%s+$', '');
				if type(k) == 'number' then
					if options[v] then
						options[v]();
					elseif options_with_parameters[v] then
						error('參數 「' .. v .. '」 冇畀參數值');
					elseif k == 1 then
						n = v;
					else
					end
				elseif options[k] then
					options[k]();
				elseif options_with_parameters[k] then
					options_with_parameters[k](v);
				else
					error('不明參數 「' .. k .. '」');
				end
			end
		end
	end
	if not n then
		n = #dummy_words;
	elseif n:match("^%d+$") then
		n = tonumber(n);
	else
		error('指定字數唔係整數');
	end

	local it = generate(n);

	-- request our style sheet
--	it = table.concat ({
--			frame:extensionTag ('templatestyles', '', {src=styles}),
--			it
--		});
	return it;
end

p.test = function ()
	assert(p.main({
		['getParent'] = function ()
			return {
				args= { '1' };
			};
		end;
		args = {
		};
	}) == 'Lorem.');

	assert(p.main({
		['getParent'] = function ()
			return {
				args= { '2' };
			};
		end;
		args = {
		};
	}) == 'Lorem ipsum.');

end


--- Non-invocable internal functions exported for other modules to use --------

return p;