Module:Citation/CS1/Utilities: Difference between revisions

(sync from sandbox;)
 
(One intermediate revision by one other user not shown)
Line 17: Line 17:
--[[--------------------------< H A S _ A C C E P T _ A S _ W R I T T E N >------------------------------------
--[[--------------------------< 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
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 = 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.
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 futher evaluation the two cases might be merged at a later stage, but should be kept separated for now.
After further evaluation the two cases might be merged at a later stage, but should be kept separated for now.


]]
]]
Line 43: Line 43:
]]
]]


local function is_set( var )
local function is_set (var)
return not (var == nil or var == '');
return not (var == nil or var == '');
end
end
Line 54: 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 73: 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


Line 84: Line 84:
]]
]]


local function error_comment( content, hidden )
local function error_comment (content, hidden)
return substitute( hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content );
return substitute (hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content);
end
end


Line 92: Line 92:


Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
link is provided (or link and display are the same), returns a wikilink in the form [[L]]; if neither are
empty string.
provided or link is omitted, returns an empty string.


]=]
]=]


local function make_wikilink (link, display)
local function make_wikilink (link, display)
if is_set (link) then
if not is_set (link) then return '' end
if is_set (display) then
 
return table.concat ({'[[', link, '|', display, ']]'});
if is_set (display) and link ~= display then
else
return table.concat ({'[[', link, '|', display, ']]'});
return table.concat ({'[[', link, ']]'});
end
else
else
return '';
return table.concat ({'[[', link, ']]'});
end
end
end
end
Line 123: Line 121:
local error_state = cfg.error_conditions[error_id];
local error_state = cfg.error_conditions[error_id];
prefix = prefix or "";
prefix = prefix or '';
suffix = suffix or "";
suffix = suffix or '';
if error_state == nil then
if error_state == nil then
error( cfg.messages['undefined_error'] .. ': ' .. error_id ); -- because missing error handler in Module:Citation/CS1/Configuration
error (cfg.messages['undefined_error'] .. ': ' .. error_id); -- because missing error handler in Module:Citation/CS1/Configuration


elseif is_set (error_state.category) then
elseif is_set (error_state.category) then
if error_state.message then -- when error_state.message defined, this is an error message
if error_state.message then -- when error_state.message defined, this is an error message
table.insert( z.error_categories, error_state.category );
table.insert (z.error_categories, error_state.category);
else
else
if not added_maint_cats[error_id] then
if not added_maint_cats[error_id] then
Line 141: Line 139:
end
end


local message = substitute( error_state.message, arguments );
local message = substitute (error_state.message, arguments);


message = table.concat (
message = table.concat (
Line 164: Line 162:
end
end
message = table.concat ({ prefix, message, suffix });
message = table.concat ({prefix, message, suffix});


if raw == true then
if raw == true then
Line 201: Line 199:
end
end


if is_set(args[alias]) then -- alias is in the template's argument list
if is_set (args[alias]) then -- alias is in the template's argument list
if value ~= nil and selected ~= alias then -- if we have already selected one of the aliases
if value ~= nil and selected ~= alias then -- if we have already selected one of the aliases
local skip;
local skip;
for _, v in ipairs(error_list) do -- spin through the error list to see if we've added this alias
for _, v in ipairs (error_list) do -- spin through the error list to see if we've added this alias
if v == alias then
if v == alias then
skip = true;
skip = true;
Line 211: Line 209:
end
end
if not skip then -- has not been added so
if not skip then -- has not been added so
table.insert( error_list, alias ); -- add error alias to the error list
table.insert (error_list, alias); -- add error alias to the error list
end
end
else
else
Line 232: Line 230:
if not added_maint_cats [key] then
if not added_maint_cats [key] then
added_maint_cats [key] = true; -- note that we've added this category
added_maint_cats [key] = true; -- note that we've added this category
table.insert( z.maintenance_cats, substitute (cfg.maint_cats [key], arguments)); -- make name then add to table
table.insert (z.maintenance_cats, substitute (cfg.maint_cats [key], arguments)); -- make name then add to table
end
end
end
end
Line 254: Line 252:
added_prop_cats [key] = true; -- note that we've added this category
added_prop_cats [key] = true; -- note that we've added this category
key = key:gsub ('(foreign_lang_source_?2?)%a%a%a?[%a%-]*', '%1'); -- strip lang code from keyname
key = key:gsub ('(foreign_lang_source_?2?)%a%a%a?[%a%-]*', '%1'); -- strip lang code from keyname
table.insert( z.properties_cats, substitute (cfg.prop_cats [key], arguments)); -- make name then add to table
table.insert (z.properties_cats, substitute (cfg.prop_cats [key], arguments)); -- make name then add to table
end
end
end
end
Line 269: Line 267:
]]
]]


local function safe_for_italics( str )