Module:Citation/CS1/Utilities: Difference between revisions
sync from sandbox;
m (21 revisions imported from templatewiki:Module:Citation/CS1/Utilities) |
(sync from sandbox;) |
||
Line 1: | Line 1: | ||
local z = { | local z = { | ||
Line 125: | Line 124: | ||
}); | }); | ||
z.error_ids[ error_id ] = true; | z.error_ids[ error_id ] = true; | ||
if in_array( error_id, { 'bare_url_missing_title', 'trans_missing_title' } ) | if in_array( error_id, { 'bare_url_missing_title', 'trans_missing_title' } ) | ||
Line 341: | Line 334: | ||
local wl_type = 2; -- assume that str is a complex wikilink [[L|D]] | local wl_type = 2; -- assume that str is a complex wikilink [[L|D]] | ||
L, D = str:match ('%[%[([^|]+)|([^%]]+)%]%]'); | if not str:match ('^%[%[[^%]]+%]%]$') then -- is str some sort of a wikilink (must have some sort of content) | ||
return 0, str, ''; -- not a wililink; return wl_type as 0, str as D, and empty string as L | |||
end | |||
L, D = str:match ('^%[%[([^|]+)|([^%]]+)%]%]$'); -- get L and D from [[L|D]] | |||
if not is_set (D) then -- if no separate | if not is_set (D) then -- if no separate display | ||
D = str:match ('%[%[([^%]]*)|*%]%]'); -- get D from [[D]] | D = str:match ('^%[%[([^%]]*)|*%]%]$'); -- get D from [[D]] or [[D|]] | ||
wl_type = 1; | wl_type = 1; | ||
end | end | ||
D = mw.text.trim (D, '%s|'); -- trim white space and pipe characters | D = mw.text.trim (D, '%s|'); -- trim white space and pipe characters | ||
-- L = L and mw.text.trim (L, '%s|'); | |||
return wl_type, D, L or ''; | return wl_type, D, L or ''; | ||
end | |||
--[[--------------------------< S T R I P _ A P O S T R O P H E _ M A R K U P >-------------------------------- | |||
Strip wiki italic and bold markup from argument so that it doesn't contaminate COinS metadata. | |||
This function strips common patterns of apostrophe markup. We presume that editors who have taken the time to | |||
markup a title have, as a result, provided valid markup. When they don't, some single apostrophes are left behind. | |||
Returns the argument without wiki markup and a number; the number is more-or-less meaningless except as a flag | |||
to indicate that markup was replaced; do not rely on it as an indicator of how many of any kind of markup was | |||
removed; returns the argument and nil when no markup removed | |||
]] | |||
local function strip_apostrophe_markup (argument) | |||
if not is_set (argument) then | |||
return argument, nil; -- no argument, nothing to do | |||
end | |||
if nil == argument:find ( "''", 1, true ) then -- Is there at least one double apostrophe? If not, exit. | |||
return argument, nil; | |||
end | |||
local flag; | |||
while true do | |||
if argument:find ( "'''''", 1, true ) then -- bold italic (5) | |||
argument, flag=argument:gsub("%'%'%'%'%'", ""); -- remove all instances of it | |||
elseif argument:find ( "''''", 1, true ) then -- italic start and end without content (4) | |||
argument, flag=argument:gsub("%'%'%'%'", ""); | |||
elseif argument:find ( "'''", 1, true ) then -- bold (3) | |||
argument, flag=argument:gsub("%'%'%'", ""); | |||
elseif argument:find ( "''", 1, true ) then -- italic (2) | |||
argument, flag=argument:gsub("%'%'", ""); | |||
else | |||
break; | |||
end | |||
end | |||
return argument, flag; -- done | |||
end | end | ||
Line 372: | Line 403: | ||
--[[--------------------------< E X P O R T S >---------------------------------------------------------------- | |||
]] | |||
return { | return { | ||
is_set = is_set, | is_set = is_set, -- exported functions | ||
in_array = in_array, | in_array = in_array, | ||
substitute = substitute, | substitute = substitute, | ||
Line 387: | Line 420: | ||
make_wikilink = make_wikilink, | make_wikilink = make_wikilink, | ||
set_selected_modules = set_selected_modules, | set_selected_modules = set_selected_modules, | ||
z = z, | strip_apostrophe_markup = strip_apostrophe_markup, | ||
z = z, -- exported table | |||
} | } |