Editing Module:Citation/CS1/Utilities

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. Read the Privacy Policy to learn what information we collect about you and how we use it.

If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
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 further evaluation the two cases might be merged at a later stage, but should be kept separated for now.
After futher 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 (or link and display are the same), returns a wikilink in the form [[L]]; if neither are
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
provided or link is omitted, returns an empty string.
empty string.


]=]
]=]


local function make_wikilink (link, display)
local function make_wikilink (link, display)
if not is_set (link) then return '' end
if is_set (link) then
 
if is_set (display) then
if is_set (display) and link ~= display then
return table.concat ({'[[', link, '|', display, ']]'});
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
else
return table.concat ({'[[', link, ']]'});
return '';
end
end
end
end
Line 121: Line 123:
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 139: Line 141:
end
end


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


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


if raw == true then
if raw == true then
Line 199: Line 201:
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 209: Line 211:
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 230: Line 232:
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 252: Line 254:
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 267: Line 269:
]]
]]


local function safe_for_italics (str)
local function safe_for_italics( str )
if not is_set (str) then return str end
if not is_set(str) then
 
return str;
if str:sub (1, 1) == "'" then str = "<span></span>" .. str; end
else
if str:sub (-1, -1) == "'" then str = str .. "<span></span>"; end
if str:sub(1,1) == "'" then str = "<span></span>" .. str; end
if str:sub(-1,-1) == "'" then str = str .. "<span></span>"; end
-- Remove newlines as they break italics.
return str:gsub ('\n', ' ');
-- Remove newlines as they break italics.
 
return str:gsub( '\n', ' ' );
end
end
end


Line 288: Line 291:


local function wrap_style (key, str)
local function wrap_style (key, str)
if not is_set (str) then
if not is_set( str ) then
return "";
return "";
elseif in_array (key, {'italic-title', 'trans-italic-title'}) then
elseif in_array( key, { 'italic-title', 'trans-italic-title' } ) then
str = safe_for_italics (str);
str = safe_for_italics( str );
end
end


return substitute (cfg.presentation[key], {str});
return substitute( cfg.presentation[key], {str} );
end
end


Line 322: Line 325:
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 350: Line 353:
if index ~= nil then index = tostring(index); end
if index ~= nil then index = tostring(index); end


for _, alias in ipairs (aliases_list) do -- for each alias in the aliases list
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 357: Line 360:
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 386: Line 389:


local function remove_wiki_link (str)
local function remove_wiki_link (str)
return (str:gsub ("%[%[([^%[%]]*)%]%]", function(l)
return (str:gsub( "%[%[([^%[%]]*)%]%]", function(l)
return l:gsub ("^[^|]*|(.*)$", "%1" ):gsub ("^%s*(.-)%s*$", "%1");
return l:gsub( "^[^|]*|(.*)$", "%1" ):gsub("^%s*(.-)%s*$", "%1");
end));
end));
end
end
Line 450: Line 453:
local flag;
local flag;
while true do
while true do
if argument:find ("'''''", 1, true) then -- bold italic (5)
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 ("''''", 1, true) then -- italic start and end without content (4)
elseif argument:find ( "''''", 1, true ) then -- italic start and end without content (4)
argument, flag=argument:gsub ("%'%'%'%'", "");
argument, flag=argument:gsub("%'%'%'%'", "");
elseif argument:find ("'''", 1, true) then -- bold (3)
elseif argument:find ( "'''", 1, true ) then -- bold (3)
argument, flag=argument:gsub ("%'%'%'", "");
argument, flag=argument:gsub("%'%'%'", "");
elseif argument:find ("''", 1, true) then -- italic (2)
elseif argument:find ( "''", 1, true ) then -- italic (2)
argument, flag = argument:gsub ("%'%'", "");
argument, flag=argument:gsub("%'%'", "");
else
else
break;
break;
Please note that all contributions to Nonbinary Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see Nonbinary Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: