Module:Footnotes

From Sarkarverse
Jump to navigation Jump to search

f = {

   args_default = {
       bracket_left = "",
       bracket_right = "",
       bracket_year_left = "",
       bracket_year_right = "",
       postscript = "",
       page = "",
       pages = "",
       location = "",
       page_sep = ", p. ",
       pages_sep = ", pp. ",
       ref = "",
       P1 = "",
       P2 = "",
       P3 = "",
       P4 = "",
       P5 = ""
   }

};

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 .. ' et al. ' .. 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 = "" .. result .. "";
       else
           result = "" .. 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 args = {};
   local pframe = frame:getParent();
   
   args.bracket_left = pframe.args.BracketLeft or "";
   args.bracket_right = pframe.args.BracketRight or "";
   args.bracket_year_left = pframe.args.BracketYearLeft or "";
   args.bracket_year_right = pframe.args.BracketYearRight or "";
   args.postscript = pframe.args.Postscript or "";
   args.page = pframe.args.Page or "";
   args.pages = pframe.args.Pages or "";
   args.location = pframe.args.Location or "";
   args.page_sep = pframe.args.PageSep or "";
   args.pages_sep = pframe.args.PagesSep or "";
   args.ref = pframe.args.REF or "{{{REF}}}";
   args.P1 = trim( pframe.args.P1 ) or "";
   args.P2 = trim( pframe.args.P2 ) or "";
   args.P3 = trim( pframe.args.P3 ) or "";
   args.P4 = trim( pframe.args.P4 ) or "";
   args.P5 = trim( pframe.args.P5 ) or "";
   
   return core( args );

end

function f.harvard_citation( frame )

   local args = f.args_default;
   pframe = frame:getParent();
   
   args.bracket_left = "(";
   args.bracket_right = ")";
   args.page = pframe.args.p or pframe.args.page or "";
   args.pages = pframe.args.pp or pframe.args.pages or "";
   args.location = pframe.args.loc or "";
   args.ref = pframe.args.ref or pframe.args.Ref or "";
   args.P1 = trim( pframe.args[1] ) or "";
   args.P2 = trim( pframe.args[2] ) or "";
   args.P3 = trim( pframe.args[3] ) or "";
   args.P4 = trim( pframe.args[4] ) or "";
   args.P5 = trim( pframe.args[5] ) or "";
   
   return core( args );

end

function f.harvard_citation_no_bracket( frame )

   local args = f.args_default;
   pframe = frame:getParent();
   
   args.page = pframe.args.p or pframe.args.page or "";
   args.pages = pframe.args.pp or pframe.args.pages or "";
   args.location = pframe.args.loc or "";
   args.ref = pframe.args.ref or pframe.args.Ref or "";
   args.P1 = trim( pframe.args[1] ) or "";
   args.P2 = trim( pframe.args[2] ) or "";
   args.P3 = trim( pframe.args[3] ) or "";
   args.P4 = trim( pframe.args[4] ) or "";
   args.P5 = trim( pframe.args[5] ) or "";
   
   return core( args );

end

function f.sfn( frame )

   local args = f.args_default;
   pframe = frame:getParent();
   
   args.postscript = pframe.args.postscript or pframe.args.ps or ".";
   args.page = pframe.args.p or pframe.args.page or "";
   args.pages = pframe.args.pp or pframe.args.pages or "";
   args.location = pframe.args.loc or "";
   args.ref = pframe.args.ref or pframe.args.Ref or "";
   args.P1 = trim( pframe.args[1] ) or "";
   args.P2 = trim( pframe.args[2] ) or "";
   args.P3 = trim( pframe.args[3] ) or "";
   args.P4 = trim( pframe.args[4] ) or "";
   args.P5 = trim( pframe.args[5] ) or "";
   
   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;