Module:Citation/CS1/Utilities: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
m 1 revision imported |
sync from sandbox; |
||
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( |
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( |
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 |
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( |
local function substitute (msg, args) |
||
return args and mw.message.newRawMessage( |
return args and mw.message.newRawMessage (msg, args):plain() or msg; |
||
end |
end |
||
Line 84: | Line 84: | ||
]] |
]] |
||
local function error_comment( |
local function error_comment (content, hidden) |
||
return substitute |
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 |
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 |
|||
if is_set (display) and link ~= display then |
|||
⚫ | |||
else |
|||
⚫ | |||
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 |
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( |
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( |
local message = substitute (error_state.message, arguments); |
||
message = table.concat ( |
message = table.concat ( |
||
Line 164: | Line 162: | ||
end |
end |
||
message = table.concat ({ |
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( |
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 |
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 |
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( |
local function safe_for_italics (str) |
||
if not is_set(str) then |
if not is_set (str) then return str end |
||
return str; |
|||
⚫ | |||
else |
|||
if str:sub (-1, -1) == "'" then str = str .. "<span></span>"; end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
|||
end |
end |
||
Line 291: | Line 288: | ||
local function wrap_style (key, str) |
local function wrap_style (key, str) |
||
if not is_set( |
if not is_set (str) then |
||
return ""; |
return ""; |
||
elseif in_array |
elseif in_array (key, {'italic-title', 'trans-italic-title'}) then |
||
str = safe_for_italics( |
str = safe_for_italics (str); |
||
end |
end |
||
return substitute( |
return substitute (cfg.presentation[key], {str}); |
||
end |
end |
||
Line 325: | Line 322: | ||
list = table.concat (list_seq, sep_list_pair); -- insert separator between two items; returns list_seq[1] then only one item |
list = table.concat (list_seq, sep_list_pair); -- insert separator between two items; returns list_seq[1] then only one item |
||
elseif 2 < count then |
elseif 2 < count then |
||
list = table.concat (list_seq, sep_list, 1, count-1); -- concatenate all but last item with plain list separator |
list = table.concat (list_seq, sep_list, 1, count - 1); -- concatenate all but last item with plain list separator |
||
list = table.concat ({list, list_seq[count]}, sep_list_end); -- concatenate last item onto end of <list> with final separator |
list = table.concat ({list, list_seq[count]}, sep_list_end); -- concatenate last item onto end of <list> with final separator |
||
end |
end |
||
Line 353: | Line 350: | ||
if index ~= nil then index = tostring(index); end |
if index ~= nil then index = tostring(index); end |
||
for _, alias in ipairs( |
for _, alias in ipairs (aliases_list) do -- for each alias in the aliases list |
||
if alias:match ('#') then -- if this alias can be enumerated |
if alias:match ('#') then -- if this alias can be enumerated |
||
if '1' == index then -- when index is 1 test for enumerated and non-enumerated aliases |
if '1' == index then -- when index is 1 test for enumerated and non-enumerated aliases |
||
Line 360: | Line 357: | ||
value, selected = is_alias_used (args, alias, index, true, value, selected, error_list); -- test for enumerated alias |
value, selected = is_alias_used (args, alias, index, true, value, selected, error_list); -- test for enumerated alias |
||
else |
else |
||
value, selected = is_alias_used (args, alias, index, false, value, selected, error_list); --test for non-enumerated alias |
value, selected = is_alias_used (args, alias, index, false, value, selected, error_list); -- test for non-enumerated alias |
||
end |
end |
||
end |
end |
||
Line 389: | Line 386: | ||
local function remove_wiki_link (str) |
local function remove_wiki_link (str) |
||
return (str:gsub |
return (str:gsub ("%[%[([^%[%]]*)%]%]", function(l) |
||
return l:gsub |
return l:gsub ("^[^|]*|(.*)$", "%1" ):gsub ("^%s*(.-)%s*$", "%1"); |
||
end)); |
end)); |
||
end |
end |
||
Line 453: | Line 450: | ||
local flag; |
local flag; |
||
while true do |
while true do |
||
if argument:find ( |
if argument:find ("'''''", 1, true) then -- bold italic (5) |
||
argument, flag=argument:gsub("%'%'%'%'%'", ""); -- remove all instances of it |
argument, flag = argument:gsub ("%'%'%'%'%'", ""); -- remove all instances of it |
||
elseif argument:find ( |
elseif argument:find ("''''", 1, true) then -- italic start and end without content (4) |
||
argument, flag=argument:gsub("%'%'%'%'", ""); |
argument, flag=argument:gsub ("%'%'%'%'", ""); |
||
elseif argument:find ( |
elseif argument:find ("'''", 1, true) then -- bold (3) |
||
argument, flag=argument:gsub("%'%'%'", ""); |
argument, flag=argument:gsub ("%'%'%'", ""); |
||
elseif argument:find ( |
elseif argument:find ("''", 1, true) then -- italic (2) |
||
argument, flag=argument:gsub("%'%'", ""); |
argument, flag = argument:gsub ("%'%'", ""); |
||
else |
else |
||
break; |
break; |