Documentation for this module may be created at ماڊيول:Footnotes/doc

-- بخش‌هایی از این پودمان برای خروجی فارسی و انگلیسی مناسب تغییر کرده‌است. لطفاً هنگام به‌روزرسانی دقت کنید.

local getArgs = require("Module:Arguments").getArgs

f = {
	args_default = {
		bracket_left = "",
		bracket_right = "",
		bracket_year_left = "",
		bracket_year_right = "",
		postscript = "",
		page = "",
		pages = "",
		location = "مقام&nbsp",
		page_sep = "، صفحو&nbsp",
		pages_sep = "، فحات&nbsp",
		ref = "",
		P1 = "",
		P2 = "",
		P3 = "",
		P4 = "",
		P5 = "",
		-- برای خروجی فارسی و انگلیسی خطوط زیر اضافه شده‌اند.
		andOthers = "۽ ٻيا."
	}
};

function trim( str )
	if str == nil then
		return nil;
	end
	return str:match( "^%s*(.-)%s*$");
end    

function core( args )
	local result;

	if args.P5 ~= "" then
		-- خط زیر برای خروجی مناسب تغییر کرده‌است.
		result = args.P1 .. ' ' .. args.andOthers .. ' ' .. args.bracket_year_left .. args.P5 .. args.bracket_year_right;
	elseif args.P4 ~= "" then
		result = args.P1 .. '، ' .. args.P2 .. ' & ' .. args.P3 .. ' ' .. 
		args.bracket_year_left .. args.P4 .. args.bracket_year_right;
	elseif args.P3 ~= "" then
		result = args.P1 .. ' & ' .. args.P2 .. ' ' .. args.bracket_year_left .. 
		args.P3 .. args.bracket_year_right;
	else
		result = trim( args.P1 .. ' ' .. args.bracket_year_left .. args.P2 .. 
		args.bracket_year_right )
	end

	if args.ref ~= 'none' then
		if args.ref ~= "" then
			result = "[[#" .. mw.uri.anchorEncode(args.ref) .. "|" .. result .. "]]";
		else
			result = "[[#CITEREF" .. mw.uri.anchorEncode(args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5) .. "|" .. result .. "]]";
		end
	end

	if args.page ~= "" then
		result = result .. args.page_sep .. args.page;
	elseif args.pages ~= "" then
		result = result .. args.pages_sep .. args.pages;
	end      

	if args.location ~= "" then
		result = result .. ", " .. args.location;
	end

	result = args.bracket_left .. result .. args.bracket_right .. args.postscript;
	return result;
end

function f.harvard_core( frame )
	local defArgs = {};
	local args = getArgs(frame);

	defArgs.bracket_left = args.BracketLeft or "";
	defArgs.bracket_right = args.BracketRight or "";
	defArgs.bracket_year_left = args.BracketYearLeft or "";
	defArgs.bracket_year_right = args.BracketYearRight or "";
	defArgs.postscript = args.Postscript or "";
	defArgs.page = args.Page or "";
	defArgs.pages = args.Pages or "";
	defArgs.location = args.Location or "";
	defArgs.page_sep = args.PageSep or "";
	defArgs.pages_sep = args.PagesSep or "";
	defArgs.ref = args.REF or "{{{REF}}}";
	defArgs.P1 = trim( args.P1 ) or "";
	defArgs.P2 = trim( args.P2 ) or "";
	defArgs.P3 = trim( args.P3 ) or "";
	defArgs.P4 = trim( args.P4 ) or "";
	defArgs.P5 = trim( args.P5 ) or "";
	-- برای خروجی فارسی و انگلیسی خطوط زیر اضافه شده‌اند.
	defArgs.andOthers = trim( args.AndOthers ) or "";

	return core( defArgs );
end

function f.harvard_citation( frame )
	local defArgs = f.args_default;
	local args = getArgs(frame);

	defArgs.bracket_left = "(";
	defArgs.bracket_right = ")";
	defArgs.page = args.p or args.page or "";
	defArgs.pages = args.pp or args.pages or "";
	defArgs.location = args.loc or "";
	defArgs.ref = args.ref or args.Ref or "";
	defArgs.P1 = trim( args[1] ) or "";
	defArgs.P2 = trim( args[2] ) or "";
	defArgs.P3 = trim( args[3] ) or "";
	defArgs.P4 = trim( args[4] ) or "";
	defArgs.P5 = trim( args[5] ) or "";
	-- برای خروجی فارسی و انگلیسی خطوط زیر اضافه شده‌اند.
	defArgs.andOthers = trim( args.AndOthers ) or "";
	defArgs.page_sep = args.PageSep or "";
	defArgs.pages_sep = args.PagesSep or "";

	return core( defArgs );
end

function f.harvard_citation_no_bracket( frame )
	local defArgs = f.args_default;
	local args = getArgs(frame);

	defArgs.page = args.p or args.page or "";
	defArgs.pages = args.pp or args.pages or "";
	defArgs.location = args.loc or "";
	defArgs.ref = args.ref or args.Ref or "";
	defArgs.P1 = trim( args[1] ) or "";
	defArgs.P2 = trim( args[2] ) or "";
	defArgs.P3 = trim( args[3] ) or "";
	defArgs.P4 = trim( args[4] ) or "";
	defArgs.P5 = trim( args[5] ) or "";
	-- برای خروجی فارسی و انگلیسی خطوط زیر اضافه شده‌اند.
	defArgs.andOthers = trim( args.AndOthers ) or ""
	defArgs.page_sep = args.PageSep or "";
	defArgs.pages_sep = args.PagesSep or "";

	return core( defArgs );
end

function f.sfn( frame )
	local defArgs = f.args_default;
	local args = getArgs(frame);

	defArgs.postscript = args.postscript or args.ps or ".";
	if 'none' == args.postscript then
		args.postscript = '';
	end
	defArgs.page = args.p or args.page or "";
	defArgs.pages = args.pp or args.pages or "";
	defArgs.location = args.loc or "";
	defArgs.ref = args.ref or args.Ref or "";
	defArgs.P1 = trim( args[1] ) or "";
	defArgs.P2 = trim( args[2] ) or "";
	defArgs.P3 = trim( args[3] ) or "";
	defArgs.P4 = trim( args[4] ) or "";
	defArgs.P5 = trim( args[5] ) or "";
	-- برای خروجی فارسی و انگلیسی خطوط زیر اضافه شده‌اند.
	defArgs.andOthers = trim( args.AndOthers ) or ""
	defArgs.page_sep = args.PageSep or ""
	defArgs.pages_sep = args.PagesSep or ""

	local result = core( defArgs );
	local name = "FOOTNOTE" .. defArgs.P1 .. defArgs.P2 .. 
	defArgs.P3 .. defArgs.P4 .. defArgs.P5 .. defArgs.page .. defArgs.pages .. defArgs.location;

	result = frame:extensionTag{ name = "ref", args = {name=name}, content=result };

	return result;
end

return f;