Module:Citation/CS1/Utilities: Difference between revisions

m>Trappist the monk
No edit summary
 
(24 intermediate revisions by 5 users not shown)
Line 1: Line 1:
local u = {}


local z = {
local z = {
error_categories = {}; -- for categorizing citations that contain errors
error_categories = {}; -- for categorizing citations that contain errors
error_ids = {};
error_ids = {};
message_tail = {};
message_tail = {};
maintenance_cats = {}; -- for categorizing citations that aren't erroneous per se, but could use a little work
maintenance_cats = {}; -- for categorizing citations that aren't erroneous per se, but could use a little work
properties_cats = {}; -- for categorizing citations based on certain properties, language of source for instance
properties_cats = {}; -- for categorizing citations based on certain properties, language of source for instance
};
};


local cfg = mw.loadData ('Module:Citation/CS1/Configuration/sandbox');
 
--[[--------------------------< F O R W A R D  D E C L A R A T I O N S >--------------------------------------
]]
 
local cfg; -- table of tables imported from selected Module:Citation/CS1/Configuration
 
 
--[[--------------------------< H A S _ A C C E P T _ A S _ W R I T T E N >------------------------------------
 
When <str> is wholly wrapped in accept-as-written markup, return <str> without markup and true; return <str> and false else
 
with allow_empty = false, <str> must have at least one character inside the markup
with allow_empty = true, <str> the markup frame can be empty like (()) to distinguish an empty template parameter from the specific condition "has no applicable value" in citation-context.
 
After further evaluation the two cases might be merged at a later stage, but should be kept separated for now.
 
]]
 
local function has_accept_as_written (str, allow_empty)
local count;
if true == allow_empty then
str, count = str:gsub ('^%(%((.*)%)%)$', '%1'); -- allows (()) to be an empty set
else
str, count = str:gsub ('^%(%((.+)%)%)$', '%1');
end
return str, 0 ~= count;
end
 


--[[--------------------------< I S _ S E T >------------------------------------------------------------------
--[[--------------------------< I S _ S E T >------------------------------------------------------------------


Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
This function is global because it is called from both this module and from Date validation


]]
]]
function is_set( var )
 
local function is_set (var)
return not (var == nil or var == '');
return not (var == nil or var == '');
end
end


--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Line 27: Line 54:
]]
]]


local function in_array( needle, haystack )
local function in_array (needle, haystack)
if needle == nil then
if needle == nil then
return false;
return false;
end
end
for n,v in ipairs( haystack ) do
for n, v in ipairs (haystack) do
if v == needle then
if v == needle then
return n;
return n;
Line 38: Line 65:
return false;
return false;
end
end


--[[--------------------------< S U B S T I T U T E >----------------------------------------------------------
--[[--------------------------< S U B S T I T U T E >----------------------------------------------------------
Line 45: Line 73:
]]
]]


local function substitute( msg, args )
local function substitute (msg, args)
return args and mw.message.newRawMessage( msg, args ):plain() or msg;
return args and mw.message.newRawMessage (msg, args):plain() or msg;
end
end


--[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------
--[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------


Wraps error messages with css markup according to the state of hidden.
Wraps error messages with CSS markup according to the state of hidden.


]]
]]
local function error_comment( content, hidden )
 
return substitute( hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content );
local function error_comment (content, hidden)
return substitute (hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content);
end
 
 
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
 
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided (or link and display are the same), returns a wikilink in the form [[L]]; if neither are
provided or link is omitted, returns an empty string.
 
]=]
 
local function make_wikilink (link, display)
if not is_set (link) then return '' end
 
if is_set (display) and link ~= display then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
end
end


--[[--------------------------< S E T _ E R R O R >--------------------------------------------------------------
 
--[[--------------------------< S E T _ M E S S A G E >----------------------------------------------------------


Sets an error condition and returns the appropriate error message.  The actual placement of the error message in the output is
Sets an error condition and returns the appropriate error message.  The actual placement of the error message in the output is
the responsibility of the calling function.
the responsibility of the calling function.
TODO: change z.error_categories and z.maintenance_cats to have the form cat_name = true; to avoid dups without having to have an extra cat


]]
]]
local function set_error( error_id, arguments, raw, prefix, suffix )
local added_maint_cats = {} -- list of maintenance categories that have been added to z.maintenance_cats; TODO: figure out how to delete this table
local error_state = cfg.error_conditions[ error_id ];
 
local function set_message (error_id, arguments, raw, prefix, suffix)
local error_state = cfg.error_conditions[error_id];