Difference between revisions of "Module:London Gazette util"
Jump to navigation
Jump to search
blackwiki>Trappist the monk |
blackwiki>Trappist the monk |
||
| Line 46: | Line 46: | ||
local function ordinal (num_str) | local function ordinal (num_str) | ||
| + | local lsd; | ||
| + | |||
if num_str:match ('^1[1-3]$') then -- do the 11-13 odd balls first to get them out of the way | if num_str:match ('^1[1-3]$') then -- do the 11-13 odd balls first to get them out of the way | ||
return num_str .. 'th'; | return num_str .. 'th'; | ||
| − | + | end | |
| + | |||
| + | lsd = num_str:match ('^%d?(%d)$'); -- get the least significant digit | ||
| + | if '1' == lsd then -- 1, 21, 31, 41, ... 91 | ||
return num_str .. 'st'; | return num_str .. 'st'; | ||
| − | elseif '2' == | + | elseif '2' == lsd then -- 2, 22, 32, 42, ... 92 |
return num_str .. 'nd'; | return num_str .. 'nd'; | ||
| − | elseif '3' == | + | elseif '3' == lsd then -- 3, 23, 33, 43, ... 93 |
return num_str .. 'rd'; | return num_str .. 'rd'; | ||
else | else | ||
| Line 139: | Line 144: | ||
Build a url given |city=, |issue=, |supp=, and any of |startpage=, page, pages, or {{{2}}} | Build a url given |city=, |issue=, |supp=, and any of |startpage=, page, pages, or {{{2}}} | ||
| − | {{#invoke:Gazette util|url_param|city={{{city|}}}|issue={{{issue|}}}|supp={{{supp|}}}|pg={{{startpage|{{{page|{{{pages|{{{2|}}} }}} }}} }}}}} | + | {{#invoke:Gazette util|url_param|city={{{city|}}}|issue={{{issue|{{{1|}}} }}}|supp={{{supp|}}}|pg={{{startpage|{{{page|{{{pages|{{{2|}}} }}} }}} }}}}} |
]] | ]] | ||
| Line 152: | Line 157: | ||
mw.text.trim (args.issue), -- trim because {{{1|}}} won't be trimmed | mw.text.trim (args.issue), -- trim because {{{1|}}} won't be trimmed | ||
page_or_supplement (args.supp), | page_or_supplement (args.supp), | ||
| − | (args.pg and args.pg:match ('^%d*')) or '' | + | (args.pg and args.pg:match ('^%d*')) or '' -- digits only; if not digit then empty string for concatenation |
}; | }; | ||
Revision as of 18:30, 6 May 2017
Utility module for {{London Gazette}} {{#lst:Template:London Gazette/doc|supp_disp-supp_interaction_table}}
-- this module is created to support {{London Gazette}}
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local code_style="color:inherit; border:inherit; padding:inherit;";
local supp_error = '<span style="font-size:100%; font-weight:normal" class="error">invalid <code style="'..code_style..'">|supp=</code></span>';
local p = {}
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Whether variable is set or not. A variable is set when it is not nil and not empty.
]]
local function is_set( var )
return not (var == nil or var == '');
end
--[[--------------------------< C I T Y >----------------------------------------------------------------------
sets the city portion of the url path according to |city= value; defaults to London
]]
local function city (city_param)
local city_names = {['b'] = 'Belfast', ['belfast'] = 'Belfast', ['e'] = 'Edinburgh', ['edinburgh'] = 'Edinburgh'};
if is_set (city_param) then
city_param = city_param:lower();
end
return city_names[city_param] or 'London';
end
--[[--------------------------< O R D I N A L >----------------------------------------------------------------
render a numerical text string in ordinal form suitable for English language use. In this module, num_str is
limited by calling functions to the integer values 1-99.
TODO: use Module:Ordinal instead?
]]
local function ordinal (num_str)
local lsd;
if num_str:match ('^1[1-3]$') then -- do the 11-13 odd balls first to get them out of the way
return num_str .. 'th';
end
lsd = num_str:match ('^%d?(%d)$'); -- get the least significant digit
if '1' == lsd then -- 1, 21, 31, 41, ... 91
return num_str .. 'st';
elseif '2' == lsd then -- 2, 22, 32, 42, ... 92
return num_str .. 'nd';
elseif '3' == lsd then -- 3, 23, 33, 43, ... 93
return num_str .. 'rd';
else
return num_str .. 'th'; -- 4-9, 14-19, ... 94-99
end
end
--[[--------------------------< P A G E _ O R _ S U P P L E M E N T >------------------------------------------
sets the page/supplement portion of the url path according to |supp= value; defaults to page
]]
local function page_or_supplement (supp_param)
if not is_set (supp_param) then
return 'page';
end
supp_param = supp_param:lower(); --make sure lower case for comparisons
if ('y' == supp_param) or ('yes' == supp_param) or ('1' == supp_param) or supp_param:match ('^%d%d?$') then
return 'supplement';
else
return 'page';
end
end
--[[--------------------------< T Y P E _ P A R A M >----------------------------------------------------------
set the value that is assigned to the cite magazine |type= parameter using the values of the London Gazette
|supp= and |display-supp= parameters
row number in comments apply to the table in Template_talk:London_Gazette#Rewrite_as_wrapper_around_template:cite_news
]]
function p.type_param (frame)
local args = getArgs(frame);
if not is_set (args['display-supp']) and not is_set (args.supp) then -- when both |display-supp= and |supp= are not set
return ''; -- [row 1]
end
if not is_set (args['display-supp']) and is_set (args.supp) then -- when only |supp= is set
if ('y' == args.supp:lower()) or ('yes' == args.supp:lower()) then
return 'Supplement'; -- [row 2]
elseif args.supp:match ('^%d%d?$') then -- one or two digits
if '1' == args.supp then
return 'Supplement'; -- [row 3]
else
return ordinal (args.supp) .. ' supplement'; -- [row 4]
end
else
return supp_error; -- [row 5] any other text not supported
end
end
if is_set (args['display-supp']) and not is_set (args.supp) then -- when only |display-supp= is set
if args['display-supp']:match ('^%d%d?$') then -- one or two digits
return ordinal (args['display-supp']) .. ' supplement'; -- [row 6]
else
return args['display-supp']; -- [row 10]
end
end
if args['display-supp']:match ('^%d%d?$') then
if ('y' == args.supp:lower()) or ('yes' == args.supp:lower()) or (args['display-supp'] == args.supp) then
return ordinal (args['display-supp']) .. ' supplement'; -- [rows 7, 8]
else -- |supp= is not a number or number isn't same as number in |display-supp=
return supp_error; -- [row 9]
end
else
if ('y' == args.supp) or ('yes' == args.supp) then
return args['display-supp']; -- [row 11]
else
return supp_error; -- [row ??]
end
end
end
--[[--------------------------< U R L _ P A R A M >------------------------------------------------------------
Build a url given |city=, |issue=, |supp=, and any of |startpage=, page, pages, or {{{2}}}
{{#invoke:Gazette util|url_param|city={{{city|}}}|issue={{{issue|{{{1|}}} }}}|supp={{{supp|}}}|pg={{{startpage|{{{page|{{{pages|{{{2|}}} }}} }}} }}}}}
]]
function p.url_param (frame)
local args = getArgs(frame);
local url_table = { -- a table of the various url parts
'https://www.thegazette.co.uk', -- the domain name
city (args.city), -- default to London
'issue', -- static path text
mw.text.trim (args.issue), -- trim because {{{1|}}} won't be trimmed
page_or_supplement (args.supp),
(args.pg and args.pg:match ('^%d*')) or '' -- digits only; if not digit then empty string for concatenation
};
return table.concat (url_table, '/'); -- string the parts together and done
end
return p;