Module:Citation/CS1/Utilities: Difference between revisions
m>Trappist the monk (create as an experiment;) |
m (7 revisions imported from wikipedia:Module:Citation/CS1/Utilities: see Topic:Vtixlm0q28eo6jtf) |
||
| (28 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
local | |||
local z = { | |||
error_categories = {}; -- for categorizing citations that contain errors | |||
error_ids = {}; | |||
message_tail = {}; | |||
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 | |||
}; | |||
--[[--------------------------< 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 | |||
| Line 5: | Line 40: | ||
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. | ||
]] | ]] | ||
function is_set( var ) | |||
local function is_set (var) | |||
return not (var == nil or var == ''); | return not (var == nil or var == ''); | ||
end | end | ||
return {is_set = is_set} -- return exported functions | |||
--[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- | |||
Whether needle is in haystack | |||
]] | |||
local function in_array (needle, haystack) | |||
if needle == nil then | |||
return false; | |||
end | |||
for n, v in ipairs (haystack) do | |||
if v == needle then | |||
return n; | |||
end | |||
end | |||
return false; | |||
end | |||
--[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- | |||
Populates numbered arguments in a message string using an argument table. | |||
]] | |||
local function substitute (msg, args) | |||
return args and mw.message.newRawMessage (msg, args):plain() or msg; | |||
end | |||
--[[--------------------------< E R R O R _ C O M M E N T >---------------------------------------------------- | |||
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); | |||
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 | |||
--[[--------------------------< 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 | |||
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 added_maint_cats = {} -- list of maintenance categories that have been added to z.maintenance_cats; TODO: figure out how to delete this table | |||
local function set_message (error_id, arguments, raw, prefix, suffix) | |||
local error_state = cfg.error_conditions[error_id]; | |||
prefix = prefix or ''; | |||
suffix = suffix or ''; | |||
if error_state == nil then | |||
error (cfg.messages['undefined_error'] .. ': ' .. error_id); -- because missing error handler in Module:Citation/CS1/Configuration | |||