Module:Citation/CS1/Utilities: Difference between revisions

    From Nonbinary Wiki
    (sync from sandbox;)
     
    (6 intermediate revisions by 2 users not shown)
    Line 13: Line 13:


    local cfg; -- table of tables imported from selected Module:Citation/CS1/Configuration
    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 21: 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 32: 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 51: 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 58: Line 80:
    --[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------
    --[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------


    Wraps error messages with css markup according to the state of hidden.
    Wraps error messages with CSS markup according to the state of hidden.


    ]]
    ]]


    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 69: Line 91:
    --[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
    --[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------


    Makes a wikilink; when bot 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