"Module:Citation/CS1" හි සංශෝධන අතර වෙනස්කම්
Content deleted Content added
සංස්කරණය |
|||
5 පේළිය:
]]
local dates, year_date_check, reformat_dates, date_hyphen_to_dash
local is_set, in_array, substitute, error_comment, set_error, select_one, -- functions in Module:Citation/CS1/Utilities
add_maint_cat, wrap_style, safe_for_italics,
local z ={}; -- tables in Module:Citation/CS1/Utilities
Line 55 ⟶ 54:
end
end
--[[--------------------------< A D D _ P R O P _ C A T >--------------------------------------------------------
Adds a category to z.properties_cats using names from the configuration file with additional text if any.
added_prop_cats is a table declared in page scope variables above
Line 71 ⟶ 66:
if not added_prop_cats [key] then
added_prop_cats [key] = true; -- note that we've added this category
table.insert( z.properties_cats, substitute (cfg.prop_cats [key], arguments)); -- make name then add to table
end
end
--[[--------------------------< A D D _ V A N C _ E R R O R >----------------------------------------------------
Line 133 ⟶ 126:
the first character of the whole domain name including subdomains must be a letter or a digit
internationalized domain name (ascii characters with .xn-- ASCII Compatible Encoding (ACE) prefix xn-- in the tld) see https://tools.ietf.org/html/rfc3490
single-letter/digit second-level domains in the .org
q, x, and z SL domains in the .com TLD
i and q SL domains in the .net TLD
Line 160 ⟶ 153:
elseif domain:match ('%f[%a%d][%a%d][%a%d%-]+[%a%d]%.xn%-%-[%a%d]+$') then -- internationalized domain name with ACE prefix
return true;
elseif domain:match ('%f[%a%d][%a%d]%.
return true;
elseif domain:match ('%f[%a][qxz]%.com$') then -- assigned one character .com hostname (x.com times out 2015-12-10)
Line 258 ⟶ 249:
return not is_url (scheme, domain); -- return true if value DOES NOT appear to be a valid url
end
--[[--------------------------< L I N K _ T I T L E _ O K >---------------------------------------------------
Line 386 ⟶ 376:
['\n'] = ' ' } );
end
--[[--------------------------< E X T E R N A L _ L I N K >----------------------------------------------------
Line 419 ⟶ 408:
if is_set (access) then -- access level (subscription, registration, limited)
local label_head = '';
local label_tail;
local markup = ''; -- can't start a span inside italic markup and end it outside the italic markup
label = safe_for_url (label); -- replace square brackets and newlines (is this necessary? already done above?)
if label:match ("(.*)%s+(.+)('''?)$") then -- for italicized titles (cite book, etc)
label_head, label_tail, markup = label:match ("(.*)%s+(.+)('''?)$"); -- split the label at the right-most space; separate the markup
elseif label:match ("(.*)%s+(.+)$") then -- for upright titles (journal, news, magazine, etc)
label_head, label_tail = label:match ("(.*)%s+(.+)$"); -- split the label at the right-most space; no markup
elseif label:match ("(.+)('''?)$") then -- single word label with markup
label_tail, markup = label:match ("(.+)('''?)$"); -- save label text as label tail; separate the markup
else
label_tail = label;
end
base_url = table.concat (
{
'<span class="plainlinks">[', -- opening css
URL, -- the url
' ', -- the required space
label_head, -- all but the last word of the label
' <span class="nowrap">', -- nowrap css for the last word and the signal icon
label_tail, -- last (or only) word of the label inside the span
'<span style="padding-left:0.15em">', -- signal spacing css
cfg.presentation[access], -- the appropriate icon
'</span></span>',
']</span>' -- close the plain links span
});
else
Line 457 ⟶ 462:
end
--[[--------------------------< K E R N _ Q U O T E S >--------------------------------------------------------
Apply kerning to open the space between the quote mark provided by the Module and a leading or trailing quote mark contained in a |title= or |chapter= parameter's value.
This function will positive kern either single or double quotes:
"'Unkerned title with leading and trailing single quote marks'"
Line 468 ⟶ 470:
Double single quotes (italic or bold wikimarkup) are not kerned.
Replaces unicode quotemarks
Call this function for chapter titles, for website titles, etc; not for book titles.
]
local function kern_quotes (str)
local cap='';
local cap2='';
-- TODO: move this elswhere so that all title-holding elements get these quote marks replaced?
-- str= mw.ustring.gsub (str, '[“”]', '\"'); -- replace “” (U+201C & U+201D) with " (typewriter double quote mark)
-- str= mw.ustring.gsub (str, '[‘’]', '\''); -- replace ‘’ (U+2018 & U+2019) with ' (typewriter single quote mark)
if is_set (cap) then
end
cap, cap2 = str:match ("^(.+[^\'])([\"\'])$")
if is_set (cap) then
str = substitute (cfg.presentation['kern-right'], {cap, cap2});
end
return str;
end
--[[--------------------------< F O R M A T _ S C R I P T _ V A L U E >----------------------------------------
Line 567 ⟶ 547:
return script_value;
end
--[[--------------------------< S C R I P T _ C O N C A T E N A T E >------------------------------------------
Line 615 ⟶ 594:
]]
local function format_chapter_title (scriptchapter, chapter, transchapter, chapterurl, chapter_url_source, no_quotes
local chapter_error = '';
Line 622 ⟶ 601:
else
if false == no_quotes then
chapter = kern_quotes (chapter); -- if necessary, separate chapter title's leading and trailing quote marks from Module provided quote marks
chapter = wrap_style ('quoted-title', chapter);
end
Line 640 ⟶ 619:
if is_set (chapterurl) then
chapter = external_link (chapterurl, chapter, chapter_url_source,
end
return chapter .. chapter_error;
end
--[[--------------------------< H A S _ I N V I S I B L E _ C H A R S >----------------------------------------
Line 681 ⟶ 659:
local pattern=cfg.invisible_chars[i][2] -- the pattern used to find it
position, dummy, capture = mw.ustring.find (v, pattern) -- see if the parameter value contains characters that match the pattern
if position then
Line 758 ⟶ 730:
});
end
--[[--------------------------< V A L I D A T E >--------------------------------------------------------------
Line 771 ⟶ 742:
]]
--local function validate( name )
local function validate( name, cite_class )
local name = tostring( name );
local state;
if in_array (cite_class, {'arxiv', 'biorxiv', 'citeseerx'}) then -- limited parameter sets allowed for these templates
state = whitelist.limited_basic_arguments[ name ];
if true == state then return true; end -- valid actively supported parameter
Line 854 ⟶ 826:
return date;
end
--[[--------------------------< S E T _ T I T L E T Y P E >----------------------------------------------------
Line 938 ⟶ 909:
elseif end_chr == "]" then -- if it might be wikimarkup
if str:sub(-3,-1) == duplicate_char .. "]]" then -- if last three chars of str are sepc]] wikilink
trim = true;
elseif str:sub(-2,-1) == duplicate_char .. "]" then -- if last two chars of str are sepc] external link
Line 982 ⟶ 951:
return false;
end
--[[--------------------------< I S _ G O O D _ V A N C _ N A M E >--------------------------------------------
Line 1,029 ⟶ 997:
return true;
end
--[[--------------------------< R E D U C E _ T O _ I N I T I A L S >------------------------------------------
Line 1,088 ⟶ 1,055:
return table.concat(initials) -- Vancouver format does not include spaces.
end
--[[--------------------------< L I S T _ P E O P L E >-------------------------------------------------------
Line 1,107 ⟶ 1,073:
sep = ','; -- name-list separator between authors is a comma
namesep = ' '; -- last/first separator is a space
elseif 'mla' == control.mode then
sep = ','; -- name-list separator between authors is a comma
namesep = ', ' -- last/first separator is <comma><space>
else
sep = ';' -- name-list separator between authors is a semicolon
Line 1,135 ⟶ 1,104:
local first = person.first
if is_set(first) then
if
if i == 1 then -- for mla
else -- all other names
one = first .. ' ' .. one; -- first last
end
else
if ( "vanc" == format ) then -- if vancouver format
one = one:gsub ('%.', ''); -- remove periods from surnames (http://www.ncbi.nlm.nih.gov/books/NBK7271/box/A35029/)
if not person.corporate and is_good_vanc_name (one, first) then -- and name is all Latin characters; corporate authors not tested
first = reduce_to_initials(first) -- attempt to convert first name(s) to initials
end
end
one = one .. namesep .. first;
end
end
if is_set(person.link) and person.link ~= control.page_name then
one =
end
end
Line 1,155 ⟶ 1,132:
if count > 0 then
if count > 1 and is_set(lastauthoramp) and not etal then
if 'mla' == control.mode then
text[#text-2] = ", and "; -- replace last separator with ', and ' text
else
text[#text-2] = " & "; -- replace last separator with ampersand text
end
end
text[#text] = nil; -- erase the last separator
Line 1,167 ⟶ 1,148:
return result, count
end
--[[--------------------------< A N C H O R _ I D >------------------------------------------------------------
Line 1,247 ⟶ 1,227:
'^[%(%[]?%s*[Ee][Dd][Ii][Tt][Oo][Rr][Ss]?%A', -- (editor or (editors: also sq brackets, case insensitive, optional brackets, 's'
'^[%(%[]?%s*[Ee][Dd][Ii][Tt][Ee][Dd]%A', -- (edited: also sq brackets, case insensitive, optional brackets
}
Line 1,368 ⟶ 1,349:
return names, etal; -- all done, return our list of names
end
--[[--------------------------< G E T _ I S O 6 3 9 _ C O D E >------------------------------------------------
Line 1,460 ⟶ 1,440:
if this_wiki_code ~= code then -- when the language is not the same as this wiki's language
if 2 == code:len() then -- and is a two-character code
add_prop_cat ('foreign_lang_source'
else -- or is a recognized language (but has a three-character code)
add_prop_cat ('foreign_lang_source_2'
end
end
Line 1,488 ⟶ 1,468:
]]
end
--[[--------------------------< S E T _ C S 1 _ S T Y L E >----------------------------------------------------
Line 1,502 ⟶ 1,481:
return '.', ps; -- separator is a full stop
end
--[[--------------------------< S E T _ C S 2 _ S T Y L E >----------------------------------------------------
Line 1,519 ⟶ 1,497:
return ',', ps, ref; -- separator is a comma
end
--[[--------------------------< G E T _ S E T T I N G S _ F R O M _ C I T E _ C L A S S >----------------------
Line 1,538 ⟶ 1,515:
return sep, ps, ref -- return them all
end
--[[--------------------------< S E T _ S T Y L E >------------------------------------------------------------
Line 1,552 ⟶ 1,528:
sep, ps, ref = set_cs2_style (ps, ref);
elseif 'cs1' == mode then -- if this template is to be rendered in CS1 (cite xxx) style
sep, ps = set_cs1_style (ps);
elseif 'mla' == mode then -- if this template is to be rendered in mla style use cs1 for bot cs1 & cs2 templates
sep, ps = set_cs1_style (ps);
else -- anything but cs1 or cs2
Line 1,562 ⟶ 1,540:
return sep, ps, ref
end
--[=[-------------------------< I S _ P D F >------------------------------------------------------------------
Line 1,569 ⟶ 1,546:
applying the pdf icon to external links.
returns true if file extension is one of the recognized
]=]
local function is_pdf (url)
return
end
--[[--------------------------< S T Y L E _ F O R M A T >------------------------------------------------------
Line 1,589 ⟶ 1,565:
local function style_format (format, url, fmt_param, url_param)
if is_set (format) then
format = wrap_style ('format', format); -- add leading space,
if not is_set (url) then
format = format .. set_error( 'format_missing_url', {fmt_param, url_param} ); -- add an error message
Line 1,600 ⟶ 1,576:
return format;
end
--[[--------------------------< G E T _ D I S P L A Y _ A U T H O R S _ E D I T O R S >------------------------
Line 1,643 ⟶ 1,618:
return max, etal;
end
--[[--------------------------< E X T R A _ T E X T _ I N _ P A G E _ C H E C K >------------------------------
Line 1,657 ⟶ 1,631:
local function extra_text_in_page_check (page)
-- local good_pattern = '^P[^%.P%l]';
local good_pattern = '^P[^%.Pp]'; -- ok to begin with uppercase P: P7 (pg 7 of section P) but not p123 (page 123) TODO: add Gg for PG or Pg?
-- local bad_pattern = '^[Pp][Pp]';
local bad_pattern = '^[Pp]?[Pp]%.?[ %d]';
Line 1,663 ⟶ 1,639:
add_maint_cat ('extra_text');
end
-- if Page:match ('^[Pp]?[Pp]%.?[ %d]') or Page:match ('^[Pp]ages?[ %d]') or
-- Pages:match ('^[Pp]?[Pp]%.?[ %d]') or Pages:match ('^[Pp]ages?[ %d]') then
-- add_maint_cat ('extra_text');
-- end
end
--[[--------------------------< G E T _ V _ N A M E _ T A B L E >----------------------------------------------
split apart a |vautthors= or |veditors= parameter. This function allows for corporate names, wrapped in doubled
parentheses to also have commas; in the old version of the code, the doubled parnetheses were included in the
rendered citation and in the metadata.
|vauthors=Jones AB,
This code is experimental and may not be retained.
]]
local function get_v_name_table (vparam, output_table)
local name_table = mw.text.split(vparam, "%s*,%s*"); -- names are separated by commas
local i = 1;
Line 1,694 ⟶ 1,673:
end
table.insert (output_table, name); -- and add corporate name to the output table
else
end
i = i+1;
Line 1,708 ⟶ 1,680:
return output_table;
end
--[[--------------------------< P A R S E _ V A U T H O R S _ V E D I T O R S >--------------------------------
Line 1,728 ⟶ 1,699:
local names = {}; -- table of names assembled from |vauthors=, |author-maskn=, |author-linkn=
local v_name_table = {};
local etal = false; -- return value set to true when we find some form of et al. vauthors parameter
local last, first, link, mask, suffix;
Line 1,734 ⟶ 1,704:
vparam, etal = name_has_etal (vparam, etal, true); -- find and remove variations on et al. do not categorize (do it here because et al. might have a period)
if vparam:find ('%[%[') or vparam:find ('%]%]') then -- no wikilinking vauthors names
add_vanc_error ('wikilink');
end
v_name_table = get_v_name_table (vparam, v_name_table); -- names are separated by commas
for i, v_name in ipairs(v_name_table) do
Line 1,778 ⟶ 1,751:
end
end
-- this from extract_names ()
link = select_one( args, cfg.aliases[list_name .. '-Link'], 'redundant_parameters', i )
mask = select_one( args, cfg.aliases[list_name .. '-Mask'], 'redundant_parameters', i );
names[i] = {last = last, first = first, link = link, mask = mask, corporate=corporate}; -- add this assembled name to our names list
Line 1,838 ⟶ 1,811:
This function is used to validate a parameter's assigned value for those parameters that have only a limited number
of allowable values (yes, y, true, no, etc). When the parameter value has not been assigned a value (missing or empty
in the source template) the function
true; else, emits an error message and returns false.
]]
local function is_valid_parameter_value (value, name, possible, cite_class)
-- begin hack to limit |mode=mla to a specific set of templates
if ('mode' == name) and ('mla' == value) and not in_array (cite_class, {'book', 'journal', 'news'}) then
table.insert( z.message_tail, { set_error( 'invalid_param_val', {name, value}, true ) } ); -- not an allowed value so add error message
return false
end
-- end hack
if not is_set (value) then
return true; -- an empty parameter is ok
Line 1,882 ⟶ 1,862:
]]
local function format_volume_issue (volume, issue, cite_class, origin, sepc, lower, mode)
if not is_set (volume) and not is_set (issue) then
return '';
end
if ('mla' == mode) and ('journal' == cite_class) then -- same as cs1 for magazines
lower = true; -- mla 8th edition; force these to lower case
if is_set (volume) and is_set (issue) then
return wrap_msg ('vol-no', {sepc, volume, issue}, lower);
elseif is_set (volume) then
return wrap_msg ('vol', {sepc, volume}, lower);
else
return '';
end
end
if 'magazine' == cite_class or (in_array (cite_class, {'citation', 'map'}) and 'magazine' == origin) then
if is_set (volume) and is_set (issue) then
Line 1,911 ⟶ 1,902:
return vol;
end
--[[-------------------------< N O R M A L I Z E _ P A G E _ L I S T >-----------------------------------------
not currently used
normalizes a comma, ampersand, and/or space separated list to be '<value>, <value>, ..., <value>'
returns list unchanged if there are no commas else strips whitespace and then reformats the list
]]
--[[
local function normalize_page_list (list)
if not list:find ('[,& ]') then return list end -- if list is not delimited with commas, ampersands, or spaces; done
list = mw.text.split (list, '[,&%s]+'); -- make a table of values
list = table.concat (list, ', '); -- and now make a normalized list
return list;
end
]]
Line 1,923 ⟶ 1,933:
]]
local function format_pages_sheets (page, pages, sheet, sheets, cite_class, origin, sepc, nopp, lower, mode)
if 'map' == cite_class then -- only cite map supports sheet(s) as in-source locators
if is_set (sheet) then
Line 1,942 ⟶ 1,952:
local is_journal = 'journal' == cite_class or (in_array (cite_class, {'citation', 'map'}) and 'journal' == origin);
if is_journal and 'mla' == mode then
is_journal = false; -- mla always uses p & pp
end
if is_set (page) then
if is_journal then
Line 2,082 ⟶ 2,096:
-- define different field names for the same underlying things.
-- set default parameter values defined by |mode= parameter. If |mode= is empty or omitted, use CitationClass to set these values
local Mode = A['Mode'];
if not is_valid_parameter_value (Mode, 'mode', cfg.keywords['mode'], config.CitationClass) then
Mode = '';
end
Line 2,134 ⟶ 2,148:
local Translators; -- assembled translators name list
t = extract_names (args, 'TranslatorList'); -- fetch translator list from |translatorn= / |translator-lastn=, -firstn=, -linkn=, -maskn=
local interviewers_list = {};
Line 2,221 ⟶ 2,236:
local Pages;
local At;
-- previously conference books did not support volume
-- if in_array (config.CitationClass, cfg.templates_using_volume) and not ('conference' == config.CitationClass and not is_set (Periodical)) then
if in_array (config.CitationClass, cfg.templates_using_volume) then
Volume = A['Volume'];
Line 2,245 ⟶ 2,261:
RegistrationRequired=nil;
end
local SubscriptionRequired = A['SubscriptionRequired'];
if not is_valid_parameter_value (SubscriptionRequired, 'subscription', cfg.keywords ['yes_true_y']) then
SubscriptionRequired=nil;
end
local UrlAccess = A['UrlAccess'];
if not is_valid_parameter_value (UrlAccess, 'url-access', cfg.keywords ['url-access']) then
Line 2,269 ⟶ 2,283:
end
local Via = A['Via'];
Line 2,312 ⟶ 2,318:
LastAuthorAmp = nil; -- set to empty string
end
if 'mla' == Mode then
LastAuthorAmp = 'yes'; -- replaces last author/editor separator with ' and ' text
end
local no_tracking_cats = A['NoTracking'];
if not is_valid_parameter_value (no_tracking_cats, 'no-tracking', cfg.keywords ['yes_true_y']) then
Line 2,318 ⟶ 2,326:
end
local use_lowercase; -- controls capitalization of certain static text
local this_page = mw.title.getCurrentTitle(); -- also used for COinS and for language
Line 2,335 ⟶ 2,343:
use_lowercase = ( sepc == ',' ); -- used to control capitalization for certain static text
if not is_set (no_tracking_cats) then -- ignore if we are already not going to categorize this page
if in_array (this_page.nsText, cfg.uncategorized_namespaces) then
Line 2,348 ⟶ 2,356:
end
select_one( args, {'page', 'p', 'pp', 'pages', 'at', 'sheet', 'sheets'}, 'redundant_parameters' ); -- this is a dummy call simply to get the error message and category
Line 2,371 ⟶ 2,379:
end
if not is_set(PublicationPlace) and is_set(Place) then
PublicationPlace = Place; -- promote |place= (|location=) to |publication-place
Line 2,378 ⟶ 2,386:
if PublicationPlace == Place then Place = ''; end -- don't need both if they are the same
local Encyclopedia = A['Encyclopedia'];
Line 2,402 ⟶ 2,410:
TransChapter = TransTitle;
ChapterURL = URL;
if not is_set (ChapterURL) and is_set (TitleLink) then
Chapter
end
Title = Periodical;
Line 2,423 ⟶ 2,429:
end
if (config.CitationClass == "techreport") then -- special case for cite techreport
if is_set(A['Number']) then -- cite techreport uses 'number', which other citations alias to 'issue'
Line 2,434 ⟶ 2,440:
end
if (config.CitationClass == "mailinglist") then
Periodical = A ['MailingList'];
Line 2,441 ⟶ 2,447:
end
if 'conference' == config.CitationClass then
if is_set(BookTitle) then
Line 2,447 ⟶ 2,453:
-- ChapterLink = TitleLink; -- |chapterlink= is deprecated
ChapterURL = URL;
ChapterURLorigin = URLorigin;
URLorigin = '';
Line 2,462 ⟶ 2,467:
end
local Cartography = "";
local Scale = "";
Line 2,470 ⟶ 2,475:
Chapter = A['Map'];
ChapterURL = A['MapURL'];
TransChapter = A['TransMap'];
ChapterURLorigin = A:ORIGIN('MapURL');
Line 2,485 ⟶ 2,489:
end
if 'episode' == config.CitationClass or 'serial' == config.CitationClass then
local AirDate = A['AirDate'];
Line 2,523 ⟶ 2,527:
TransChapter = TransTitle;
ChapterURL = URL;
ChapterURLorigin = A:ORIGIN('URL');
Line 2,531 ⟶ 2,534:
if is_set (ChapterLink) and not is_set (ChapterURL) then -- link but not URL
Chapter =
elseif is_set (ChapterLink) and is_set (ChapterURL) then -- if both are set, URL links episode;
Series =
end
URL = ''; -- unset
Line 2,543 ⟶ 2,546:
Chapter = A['Episode']; -- TODO: make |episode= available to cite episode someday?
if is_set (Series) and is_set (SeriesLink) then
Series =
end
Series = wrap_style ('italic-title', Series); -- series is italicized
end
end
do
if in_array (config.CitationClass, {'arxiv', 'biorxiv', 'citeseerx'}) then
Line 2,560 ⟶ 2,563:
Periodical = 'arXiv'; -- set to arXiv for COinS; after that, must be set to empty string
end
if 'biorxiv' == config.CitationClass then
Periodical = 'bioRxiv'; -- set to bioRxiv for COinS; after that, must be set to empty string
end
if 'citeseerx' == config.CitationClass then
Periodical = 'CiteSeerX'; -- set to CiteSeerX for COinS; after that, must be set to empty string
Line 2,571 ⟶ 2,572:
end
if in_array(config.CitationClass, {"AV-media-notes", "interview", "mailinglist", "map", "podcast", "pressrelease", "report", "techreport", "thesis"}) then
TitleType = set_titletype (config.CitationClass, TitleType);
Line 2,584 ⟶ 2,585:
end
if not is_set (Date) then
Date = Year; -- promote Year to Date
Line 2,596 ⟶ 2,597:
if PublicationDate == Date then PublicationDate = ''; end -- if PublicationDate is same as Date, don't display in rendered citation
do -- create defined block to contain local variables error_message, date_parameters_list, mismatch
local error_message = '';
Line 2,624 ⟶ 2,625:
if not is_set(error_message) then -- error free dates only
local modified = false; -- flag
if is_set (DF) then -- if we need to reformat dates
modified = reformat_dates (date_parameters_list, DF, false); -- reformat to DF format, use long month names if appropriate
end
if true == date_hyphen_to_dash (date_parameters_list) then -- convert hyphens to dashes where appropriate
modified = true;
add_maint_cat ('date_format'); -- hyphens were converted so add maint category
end
if modified then -- if the date_parameters_list values were modified
AccessDate = date_parameters_list['access-date']; -- overwrite date holding parameters with modified values
Line 2,653 ⟶ 2,647:
end -- end of do
Embargo = is_embargoed (Embargo); --
if config.CitationClass == "journal" and not is_set(URL) and is_set(ID_list['PMC']) then
Line 2,669 ⟶ 2,663:
end
-- Test if citation has no title
if not is_set(Title) and
Line 2,734 ⟶ 2,728:
}, config.CitationClass);
-- if 'arxiv' == config.CitationClass then -- we have set rft.jtitle in COinS to arXiv, now unset so it isn't displayed
if in_array (config.CitationClass, {'arxiv', 'biorxiv', 'citeseerx'}) then -- we have set rft.jtitle in COinS to arXiv, bioRxiv, or CiteSeerX now unset so it isn't displayed
Periodical = ''; -- periodical not allowed in these templates; if article has been published, use cite journal
end
if 'newsgroup' == config.CitationClass then
if is_set (PublisherName) then
Line 2,814 ⟶ 2,809:
end
ArchiveFormat = style_format (ArchiveFormat, ArchiveURL, 'archive-format', 'archive-url');
ConferenceFormat = style_format (ConferenceFormat, ConferenceURL, 'conference-format', 'conference-url');
Line 2,822 ⟶ 2,817:
TranscriptFormat = style_format (TranscriptFormat, TranscriptURL, 'transcript-format', 'transcripturl');
if not (in_array(config.CitationClass, {'
('citation' == config.CitationClass and is_set (Periodical) and not is_set (Encyclopedia))) then
ChapterFormat = style_format (ChapterFormat, ChapterURL, 'chapter-format', 'chapter-url');
Line 2,866 ⟶ 2,861:
end
if in_array(config.CitationClass, {'
('citation' == config.CitationClass and is_set (Periodical) and not is_set (Encyclopedia)) then
local chap_param;
Line 2,897 ⟶ 2,892:
end
Chapter = format_chapter_title (ScriptChapter, Chapter, TransChapter, ChapterURL, ChapterURLorigin, no_quotes
if is_set (Chapter) then
Chapter = Chapter .. ChapterFormat ;
Line 2,910 ⟶ 2,905:
-- Format main title.
if is_set(TitleLink) and is_set(Title) then
Title =
end
if in_array(config.CitationClass, {'
('citation' == config.CitationClass and is_set (Periodical) and not is_set (Encyclopedia)) or
('map' == config.CitationClass and is_set (Periodical)) then -- special case for cite map when the map is in a periodical treat as an article
Line 2,944 ⟶ 2,938:
Title = external_link( URL, Title, URLorigin, UrlAccess ) .. TransTitle .. TransError .. Format;
-- this experiment hidden 2016-04-10; see Help_talk:Citation_Style_1#Recycled_urls
-- local temp_title = external_link( URL, Title, URLorigin ) .. TransError .. Format; -- do this so we get error message even if url is usurped no archive
-- if in_array (DeadURL, {'unfit no archive', 'usurped no archive'}) then -- when url links to inappropriate location and there is no archive of original source available
-- local err_msg
-- if temp_title:match ('%[%S+%s+(.+)%](<.+)') then -- if there is an error message
-- Title, err_msg = temp_title:match ('%[%S+%s+(.+)%](<.+)'); -- strip off external link; TODO: find a better to do this
-- Title = Title .. (err_msg or '');
-- end
-- else
-- Title = temp_title;
-- end
URL = ''; -- unset these because no longer needed
Format = "";
Line 2,949 ⟶ 2,955:
Title = Title .. TransTitle .. TransError;
end
end
Line 2,992 ⟶ 2,996:
end
Page, Pages, Sheet, Sheets = format_pages_sheets (Page, Pages, Sheet, Sheets, config.CitationClass, Periodical_origin, sepc, NoPP, use_lowercase, Mode);
At = is_set(At) and (sepc .. " " .. At) or "";
Line 3,025 ⟶ 3,029:
if is_set (Translators) then
if 'mla' == Mode then
Others = sepc .. ' Trans. ' .. Translators .. Others;
else
Others = sepc .. ' ' .. wrap_msg ('translated', Translators, use_lowercase) .. Others;
end
end
if is_set (Interviewers) then
Line 3,036 ⟶ 3,044:
add_maint_cat ('extra_text', 'edition');
end
if 'mla' == Mode then
Edition = '. ' .. Edition .. ' ed.';
else
Edition = " " .. wrap_msg ('edition', Edition);
end
else
Edition = '';
Line 3,042 ⟶ 3,054:
Series = is_set(Series) and (sepc .. " " .. Series) or "";
if 'mla' == Mode then -- not in brackets for mla
OrigYear = is_set(OrigYear) and (". " .. OrigYear) or "";
else
OrigYear = is_set(OrigYear) and (" [" .. OrigYear .. "]") or "";
end
Agency = is_set(Agency) and (sepc .. " " .. Agency) or "";
Volume = format_volume_issue (Volume, Issue, config.CitationClass, Periodical_origin, sepc, use_lowercase, Mode);
------------------------------------ totally unrelated data
Line 3,053 ⟶ 3,068:
end
if is_set (SubscriptionRequired) then
SubscriptionRequired = sepc .. " " .. cfg.messages['subscription']; -- subscription required message
Line 3,070 ⟶ 3,085:
AccessDate = nowrap_date (AccessDate); -- wrap in nowrap span if date in appropriate format
if 'mla' == Mode then -- retrieved text not used in mla
AccessDate =
else
if (sepc ~= ".") then retrv_text = retrv_text:lower() end -- if mode is cs2, lower case
AccessDate = substitute (retrv_text, AccessDate); -- add retrieved text
end
AccessDate = substitute (cfg.presentation['accessdate'], {sepc, AccessDate}); -- allow editors to hide accessdates
end
Line 3,188 ⟶ 3,206:
end
if "speech" == config.CitationClass then -- cite speech only
TitleNote = " (Speech)"; -- annotate the citation
Line 3,210 ⟶ 3,228:
if in_array(config.CitationClass, {"journal","citation"}) and is_set(Periodical) then
if is_set(Others) then Others = Others .. sepc .. " " end
if 'mla' == Mode then
tcommon = safe_join( {Conference, Periodical, Format, TitleType, Series, Language, Edition, Publisher, Agency, Volume}, sepc );
else
tcommon = safe_join( {Others, Title, TitleNote, Conference, Periodical, Format, TitleType, Series,
Language, Edition, Publisher, Agency, Volume}, sepc );
end
elseif in_array(config.CitationClass, {"book","citation"}) and not is_set(Periodical) then -- special cases for book cites
if is_set (Contributors) then -- when we are citing foreword, preface, introduction, etc
tcommon = safe_join( {Title, TitleNote}, sepc ); -- author and other stuff will come after this and before tcommon2
if 'mla' == Mode then
tcommon2 = safe_join( {Conference, Periodical, Format, TitleType, Series, Language, Volume, Edition, Publisher, Agency}, sepc );
else
tcommon2 = safe_join( {Conference, Periodical, Format, TitleType, Series, Language, Volume, Others, Edition, Publisher, Agency}, sepc );
end
elseif 'mla' == Mode then
tcommon = safe_join( {TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Volume, Publisher, Agency}, sepc );
else
tcommon = safe_join( {Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Volume, Others, Edition, Publisher, Agency}, sepc );
Line 3,230 ⟶ 3,259:
elseif 'episode' == config.CitationClass then -- special case for cite episode
tcommon = safe_join( {Title, TitleNote, TitleType, Series, Transcript, Language, Edition, Publisher}, sepc );
elseif ('news' == config.CitationClass) and ('mla' == Mode) then -- special case for cite news in MLA mode
tcommon = safe_join( {Periodical, Format, TitleType, Series, Language, Edition, Agency}, sepc );
elseif ('web' == config.CitationClass) and ('mla' == Mode) then -- special case for cite web in MLA mode
tcommon = safe_join( {Periodical, Format, TitleType, Series, Language,
Edition, Publisher, Agency}, sepc );
else -- all other CS1 templates
Line 3,247 ⟶ 3,283:
if is_set(Date) then
if ('mla' == Mode) then
if in_array (config.CitationClass, {'book', 'news', 'web'}) then
Date = ', ' .. Date; -- origyear follows title in mla
elseif 'journal' == config.CitationClass then
Date = ', (' .. Date .. ')';
end
elseif is_set (Authors) or is_set (Editors) then -- date follows authors or editors when authors not set
Date = " (" .. Date ..")" .. OrigYear .. sepc .. " "; -- in paranetheses
else -- neither of authors and editors set
Line 3,258 ⟶ 3,300:
end
if is_set(Authors) then
if (not is_set (Date)) or ('mla' == Mode) then
Authors = terminate_name_list (Authors, sepc); -- when no date, terminate with 0 or 1 sepc and a space
end
Line 3,264 ⟶ 3,306:
local in_text = " ";
local post_text = "";
if is_set(Chapter) and 0 == #c and 'mla' ~= Mode then
in_text = in_text .. cfg.messages['in'] .. " "
if (sepc ~= '.') then in_text = in_text:lower() end -- lowercase for cs2
elseif is_set(Chapter) and 'mla' == Mode then
if EditorCount <= 1 then
in_text = '. Ed. ';
else
in_text = '. Eds. ';
end
else
if EditorCount <= 1 then
Line 3,282 ⟶ 3,328:
if (sepc ~= '.') then by_text = by_text:lower() end -- lowercase for cs2
Authors = by_text .. Authors; -- author follows title so tweak it here
if is_set (Editors) and is_set (Date) and ('mla' ~= Mode) then
Authors = terminate_name_list (Authors, sepc); -- terminate with 0 or 1 sepc and a space
end
if (not is_set (Date)) or ('mla' == Mode) then -- when date is set it's in parentheses; no Contributors termination
Contributors = terminate_name_list (Contributors, sepc); -- terminate with 0 or 1 sepc and a space
end
if 'mla' == Mode then
text = safe_join( {Contributors, Chapter, tcommon, OrigYear, Authors, Place, Others, Editors, tcommon2, Date, pgtext, idcommon }, sepc );
else
text = safe_join( {Contributors, Date, Chapter, tcommon, Authors, Place, Editors, tcommon2, pgtext, idcommon }, sepc );
end
elseif 'mla' == Mode then
tcommon = tcommon .. Date; -- hack to avoid duplicate separators
text = safe_join( {Authors, Chapter, Title, OrigYear, Others, Editors, Edition, Place, tcommon, pgtext, idcommon }, sepc );
else
text = safe_join( {Authors, Date, Chapter, Place, Editors, tcommon, pgtext, idcommon }, sepc );
Line 3,306 ⟶ 3,359:
end
end
if 'mla' == Mode then
if in_array(config.CitationClass, {'journal', 'news', 'web'}) and is_set(Periodical) then
text = safe_join( {Editors, Title, Place, tcommon, pgtext, Date, idcommon}, sepc );
else
text = safe_join( {Editors, Chapter, Title, Place, tcommon, Date, pgtext, idcommon}, sepc );
end
else
text = safe_join( {Editors, Date, Chapter, Place, tcommon, pgtext, idcommon}, sepc );
end
elseif 'mla' == Mode then
if in_array(config.CitationClass, {'journal', 'news', 'web'}) and is_set(Periodical) then
text = safe_join( {Title, Place, tcommon, pgtext, Date, idcommon}, sepc );
else
text = safe_join( {Chapter, Title, Place, tcommon, Date, pgtext, idcommon}, sepc );
end
else
if in_array(config.CitationClass, {"journal","citation"}) and is_set(Periodical) then
Line 3,360 ⟶ 3,427:
end
if is_set(options.id) then -- here we wrap the rendered citation in <cite ...>...</cite> tags
else
end
if #z.message_tail ~= 0 then
text = text .. " ";
for i,v in ipairs( z.message_tail ) do
if is_set(v[1]) then
if i == #z.message_tail then
else
end
end
Line 3,384 ⟶ 3,449:
if #z.maintenance_cats ~= 0 then
for _, v in ipairs( z.maintenance_cats ) do -- append maintenance categories
text = text .. v .. ' ([[:Category:' .. v ..'|link]])';
end
text = text .. '</span>'; -- maintenance mesages (realy just the names of the categories for now)
end
Line 3,397 ⟶ 3,459:
if in_array(no_tracking_cats, {"", "no", "false", "n"}) then
for _, v in ipairs( z.error_categories ) do
end
for _, v in ipairs( z.maintenance_cats ) do -- append maintenance categories
end
for _, v in ipairs( z.properties_cats ) do -- append
end
end
return
end
Line 3,441 ⟶ 3,503:
utilities.set_selected_modules (cfg); -- so that functions in Utilities can see the cfg tables
identifiers.set_selected_modules (cfg, utilities); -- so that functions in Identifiers can see the selected cfg tables and selected Utilities module
validation.set_selected_modules (
metadata.set_selected_modules (cfg, utilities); -- so that functions in COinS can see the selected cfg tables and selected Utilities module
Line 3,448 ⟶ 3,510:
reformat_dates = validation.reformat_dates;
date_hyphen_to_dash = validation.date_hyphen_to_dash;
is_set = utilities.is_set; -- imported functions from Module:Citation/CS1/Utilities
in_array = utilities.in_array;
Line 3,459 ⟶ 3,520:
wrap_style = utilities.wrap_style;
safe_for_italics = utilities.safe_for_italics;
z = utilities.z; -- table of error and category tables in Module:Citation/CS1/Utilities
|