پودمان:Footnotes: تفاوت میان نسخه‌ها

از امامت‌پدیا، دانشنامهٔ امامت و ولایت
جز (۱ نسخه واردشده)
 
imported>Alpineer
جز پودمان:Footnotes» را محافظت کرد: الگو یا پودمان حساس: در مقاله‌های زیادی تراگنجایش شده است. ([ویرایش=تنها مدیران] (بی‌پایا...)
خط ۱: خط ۱:
-- بخش‌هایی از این پودمان برای خروجی فارسی و انگلیسی مناسب تغییر کرده‌است. لطفاً هنگام به‌روزرسانی دقت کنید.
-- این پودمان به‌دقت بومی‌سازی شده‌است. هنگام به‌روزرسانی دقت کنید


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


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


function trim( str )
function trim( str )
if str == nil then
if str == nil then
return nil;
return nil
end
end
return str:match( "^%s*(.-)%s*$");
return mw.ustring.match (str, '^%s*(.-)%s*$')
end     
end     
local function is_year (param)
return mw.ustring.match (param, '^%d%d%d%d?%l?$') or mw.ustring.match (param,'^n%.d%.%l?$') or mw.ustring.match (param,'^nd%l?$') or mw.ustring.match (param,'^c%. %d%d%d%d?%l?$')
end


function core( args )
function core( args )
local result;
local result


if args.P5 ~= "" then
if args.P5 ~= '' then
-- خط زیر برای خروجی مناسب تغییر کرده‌است.
if is_year (args.P5) then
result = args.P1 .. ' ' .. args.andOthers .. ' ' .. args.bracket_year_left .. args.P5 .. args.bracket_year_right;
result = table.concat({args.P1, ' ', args.andOthers, ' ', args.bracket_year_left, args.P5, args.bracket_year_right})
elseif args.P4 ~= "" then
else
result = args.P1 .. '، ' .. args.P2 .. ' & ' .. args.P3 .. ' ' ..  
args.P5 = '' -- when P5 not a year don't include in anchor
args.bracket_year_left .. args.P4 .. args.bracket_year_right;
result = table.concat ({args.P1, ' ', args.andOthers}) -- and don't render it
elseif args.P3 ~= "" then
end
result = args.P1 .. ' & ' .. args.P2 .. ' ' .. args.bracket_year_left ..  
elseif args.P4 ~= '' then
args.P3 .. args.bracket_year_right;
if is_year (args.P4) then
result = table.concat ({args.P1, args.comma, ' ', args.P2, ' ', args.amp, ' ', args.P3, ' ', args.bracket_year_left, args.P4, args.bracket_year_right}) -- three names and a year
else
result = table.concat ({args.P1, ' ', args.andOthers}) -- four names
end
 
elseif args.P3 ~= '' then
if is_year (args.P3) then
result = table.concat ({args.P1, ' ', args.amp, ' ', args.P2, ' ', args.bracket_year_left, args.P3, args.bracket_year_right}) -- two names and a year
else
result = table.concat ({args.P1, args.comma, ' ', args.P2, ' ', args.amp, ' ', args.P3}) -- three names
end
elseif args.P2 ~= '' then
if is_year (args.P2) then
result = table.concat ({args.P1, ' ', args.bracket_year_left, args.P2, args.bracket_year_right}) -- one name and year
else
result = table.concat ({args.P1, ' ', args.amp, ' ', args.P2}) -- two names
end
else
else
result = trim( args.P1 .. ' ' .. args.bracket_year_left .. args.P2 ..
result = args.P1 -- one name
args.bracket_year_right )
end
end


if ('.' == result:sub(-1)) and ('' == args.page) and ('' == args.pages) and ('' == args.location) then
args.postscript = '' -- prevent double periods when date is 'n.d.'
end
if args.ref ~= 'none' then
if args.ref ~= 'none' then
if args.ref ~= "" then
if args.ref ~= '' then
result = "[[#" .. mw.uri.anchorEncode(args.ref) .. "|" .. result .. "]]";
result = '[[#' .. mw.uri.anchorEncode(args.ref) .. '|' .. result .. ']]'
else
else
result = "[[#CITEREF" .. mw.uri.anchorEncode(args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5) .. "|" .. result .. "]]";
result = '[[#CITEREF' .. mw.uri.anchorEncode(args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5) .. '|' .. result .. ']]'
end
end
end
end


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


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


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


function f.harvard_core( frame )
function f.harvard_core( frame )
local defArgs = {};
local args = {}
local args = getArgs(frame);
local pArgs = getArgs(frame)
 
args.bracket_left = pArgs.BracketLeft or ''
args.bracket_right = pArgs.BracketRight or ''
args.bracket_year_left = pArgs.BracketYearLeft or ''
args.bracket_year_right = pArgs.BracketYearRight or ''
args.postscript = pArgs.Postscript or ''
if 'none' == args.postscript then
args.postscript = ''
end


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


return core( defArgs );
return core( args )
end
end


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


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


return core( defArgs );
return core( args )
end
end


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


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


return core( defArgs );
return core( args )
end
end


function f.sfn( frame )
function f.sfn( frame )
local defArgs = f.args_default;
local args = f.args_default
local args = getArgs(frame);
local pArgs = getArgs(frame)
for k, v in pairs( frame.args ) do -- for {{sfnp}}, override default with values provided in the #invoke:
args[k] = v  
end


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


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


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


return result;
return result
end
end


return f;
return f

نسخهٔ ‏۱۸ دسامبر ۲۰۱۷، ساعت ۱۱:۱۲

توضیحات این پودمان می‌تواند در پودمان:Footnotes/توضیحات قرار گیرد.

-- این پودمان به‌دقت بومی‌سازی شده‌است. هنگام به‌روزرسانی دقت کنید

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

f = {
	args_default = {
		bracket_left = '',
		bracket_right = '',
		bracket_year_left = '',
		bracket_year_right = '',
		postscript = '',
		page = '',
		pages = '',
		location = '',
		page_sep = 'ص.',
		pages_sep = 'صص.',
		ref = '',
		P1 = '',
		P2 = '',
		P3 = '',
		P4 = '',
		P5 = '',
		andOthers = 'و دیگران',
		amp = 'و',
		comma = '،',
	}
}

function trim( str )
	if str == nil then
		return nil
	end
	return mw.ustring.match (str, '^%s*(.-)%s*$')
end    

local function is_year (param)
	return mw.ustring.match (param, '^%d%d%d%d?%l?$') or mw.ustring.match (param,'^n%.d%.%l?$') or mw.ustring.match (param,'^nd%l?$') or mw.ustring.match (param,'^c%. %d%d%d%d?%l?$')
end


function core( args )
	local result

	if args.P5 ~= '' then
		if is_year (args.P5) then
			result = table.concat({args.P1, ' ', args.andOthers, ' ', args.bracket_year_left, args.P5, args.bracket_year_right})
		else
			args.P5 = ''														-- when P5 not a year don't include in anchor
			result = table.concat ({args.P1, ' ', args.andOthers})						-- and don't render it
		end
	elseif args.P4 ~= '' then
		if is_year (args.P4) then
			result = table.concat ({args.P1, args.comma, ' ', args.P2, ' ', args.amp, ' ', args.P3, ' ', args.bracket_year_left, args.P4, args.bracket_year_right})	-- three names and a year
		else
			result = table.concat ({args.P1, ' ', args.andOthers})						-- four names
		end

	elseif args.P3 ~= '' then
		if is_year (args.P3) then
			result = table.concat ({args.P1, ' ', args.amp, ' ', args.P2, ' ', args.bracket_year_left, args.P3, args.bracket_year_right})	-- two names and a year
		else
			result = table.concat ({args.P1, args.comma, ' ', args.P2, ' ', args.amp, ' ', args.P3})	-- three names
		end
			
	elseif args.P2 ~= '' then
		if is_year (args.P2) then
			result = table.concat ({args.P1, ' ', args.bracket_year_left, args.P2, args.bracket_year_right})	-- one name and year
		else
			result = table.concat ({args.P1, ' ', args.amp, ' ', args.P2})				-- two names
		end
		
	else
		result = args.P1														-- one name
	end

	if ('.' == result:sub(-1)) and ('' == args.page) and ('' == args.pages) and ('' == args.location) then
		args.postscript = ''		-- prevent double periods when date is 'n.d.'
	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.comma .. ' ' .. args.page_sep .. ' ' .. args.page
	elseif args.pages ~= '' then
		result = result .. args.comma .. ' ' .. args.pages_sep .. ' ' .. args.pages
	end      

	if args.location ~= '' then
		result = result .. args.comma .. ' ' .. args.location
	end

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

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

	args.bracket_left = pArgs.BracketLeft or ''
	args.bracket_right = pArgs.BracketRight or ''
	args.bracket_year_left = pArgs.BracketYearLeft or ''
	args.bracket_year_right = pArgs.BracketYearRight or ''
	args.postscript = pArgs.Postscript or ''
	if 'none' == args.postscript then
		args.postscript = ''
	end

	args.page = pArgs.p or pArgs.Page or pArgs.page or pArgs['ص'] or ''
	args.pages = pArgs.pp or pArgs.Pages or pArgs.pages or pArgs['صص'] or ''
	args.location = pArgs.Location or pArgs.loc or pArgs['محل'] or ''
	args.page_sep = trim(pArgs.PageSep) or ''
	args.pages_sep = trim( pArgs.PagesSep) or ''
	args.ref = pArgs.REF or '{{{REF}}}'
	args.P1 = trim( pArgs.P1 ) or ''
	args.P2 = trim( pArgs.P2 ) or ''
	args.P3 = trim( pArgs.P3 ) or ''
	args.P4 = trim( pArgs.P4 ) or ''
	args.P5 = trim( pArgs.P5 ) or ''
	args.andOthers = trim( pArgs.AndOthers ) or 'و دیگران'
	args.amp = trim( pArgs.amp ) or 'و'
	args.comma = trim( pArgs.comma ) or '،'

	return core( args )
end

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

	args.bracket_left = '('
	args.bracket_right = ')'
	args.page = pArgs.p or pArgs.page or pArgs['ص'] or ''
	args.pages = pArgs.pp or pArgs.pages or pArgs['صص'] or ''
	args.location = pArgs.loc or pArgs['محل'] or ''
	args.ref = pArgs.ref or pArgs.Ref or ''
	args.P1 = trim( pArgs[1] ) or ''
	args.P2 = trim( pArgs[2] ) or ''
	args.P3 = trim( pArgs[3] ) or ''
	args.P4 = trim( pArgs[4] ) or ''
	args.P5 = trim( pArgs[5] ) or ''
	args.andOthers = trim( pArgs.AndOthers ) or args.andOthers
	args.amp = trim( pArgs.amp ) or args.amp
	args.comma = trim( pArgs.comma ) or args.comma
	args.page_sep = trim( pArgs.PageSep ) or args.page_sep
	args.pages_sep = trim( pArgs.PagesSep ) or args.pages_sep

	return core( args )
end

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

	args.page = pArgs.p or pArgs.page or pArgs['ص'] or ''
	args.pages = pArgs.pp or pArgs.pages or pArgs['صص'] or ''
	args.location = pArgs.loc or pArgs['محل'] or ''
	args.ref = pArgs.ref or pArgs.Ref or ''
	args.P1 = trim( pArgs[1] ) or ''
	args.P2 = trim( pArgs[2] ) or ''
	args.P3 = trim( pArgs[3] ) or ''
	args.P4 = trim( pArgs[4] ) or ''
	args.P5 = trim( pArgs[5] ) or ''
	args.andOthers = trim( pArgs.AndOthers ) or args.andOthers
	args.amp = trim( pArgs.amp ) or args.amp
	args.page_sep = trim( pArgs.PageSep ) or args.page_sep
	args.pages_sep = trim( pArgs.PagesSep ) or args.pages_sep
	args.comma = trim( pArgs.comma ) or args.comma

	return core( args )
end

function f.sfn( frame )
	local args = f.args_default
	local pArgs = getArgs(frame)
	for k, v in pairs( frame.args ) do											-- for {{sfnp}}, override default with values provided in the #invoke:
		args[k] = v	   
	end

	args.postscript = pArgs.postscript or pArgs.ps or '.'
	if 'none' == args.postscript then
		args.postscript = ''
	end
	args.page = pArgs.p or pArgs.page or pArgs['ص'] or ''
	args.pages = pArgs.pp or pArgs.pages or pArgs['صص'] or ''
	args.location = pArgs.loc or pArgs['محل'] or ''
	args.ref = pArgs.ref or pArgs.Ref or ''
	args.P1 = trim( pArgs[1] ) or ''
	args.P2 = trim( pArgs[2] ) or ''
	args.P3 = trim( pArgs[3] ) or ''
	args.P4 = trim( pArgs[4] ) or ''
	args.P5 = trim( pArgs[5] ) or ''
	args.andOthers = trim( pArgs.AndOthers ) or args.andOthers
	args.amp = trim( pArgs.amp ) or args.amp
	args.comma = trim( pArgs.comma ) or args.comma
	args.page_sep = trim( pArgs.PageSep ) or args.page_sep
	args.pages_sep = trim( pArgs.PagesSep ) or args.pages_sep

	local result = core( args )
	local name = 'FOOTNOTE' .. args.P1 .. args.P2 .. 
	args.P3 .. args.P4 .. args.P5 .. args.page .. args.pages .. args.location

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

	return result
end

return f