Module:Citation/CS1/Utilities: Difference between revisions
(sync from sandbox;) |
m (7 revisions imported from wikipedia:Module:Citation/CS1/Utilities: see Topic:Vtixlm0q28eo6jtf) |
||
| (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 | |||
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 | 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) and link ~= display then | |||
return table.concat ({'[[', link, '|', display, ']]'}); | |||
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 ) | |||