Module:Citation/CS1/Utilities: Difference between revisions

    From Nonbinary Wiki
    (sync from sandbox;)
    (sync from sandbox;)
    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 futher 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 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.


    ]]
    ]]
    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, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
    empty string.
    empty string.
    Line 88: Line 110:




    --[[--------------------------< S E T _ E R R O R >--------------------------------------------------------------
    --[[--------------------------< S E T _ M E S S A G E >----------------------------------------------------------


    Sets an error condition and returns the appropriate error message.  The actual placement of the error message in the output is
    Sets an error condition and returns the appropriate error message.  The actual placement of the error message in the output is
    the responsibility of the calling function.
    the responsibility of the calling function.
    TODO: change z.error_categories and z.maintenance_cats to have the form cat_name = true; to avoid dups without having to have an extra cat


    ]]
    ]]
    local added_maint_cats = {} -- list of maintenance categories that have been added to z.maintenance_cats; TODO: figure out how to delete this table


    local function set_error( error_id, arguments, raw, prefix, suffix )
    local function set_message (error_id, arguments, raw, prefix, suffix)
    local error_state = cfg.error_conditions[ error_id ];
    local error_state = cfg.error_conditions[error_id];
    prefix = prefix or "";
    prefix = prefix or "";
    Line 102: Line 127:
    if error_state == nil then
    if error_state == nil then
    error( cfg.messages['undefined_error'] ); -- 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
     
    table.insert( z.error_categories, error_state.category );
    elseif is_set (error_state.category) then
    if error_state.message then -- when error_state.message defined, this is an error message
    table.insert( z.error_categories, error_state.category );
    else
    if not added_maint_cats[error_id] then
    added_maint_cats[error_id] = true; -- note that we've added this category
    table.insert (z.maintenance_cats, substitute (error_state.category, arguments)); -- make cat name then add to table
    end
    return; -- because no message, nothing more to do
    end
    end
    end
     
    local message = substitute( error_state.message, arguments );
    local message = substitute( error_state.message, arguments );


    Line 124: Line 158:
    });
    });


    z.error_ids[ error_id ] = true;
    z.error_ids[error_id] = true;