Line 22: |
Line 22: |
| --[[--------------------------< P A G E S C O P E V A R I A B L E S >-------------------------------------- | | --[[--------------------------< P A G E S C O P E V A R I A B L E S >-------------------------------------- |
| | | |
− | delare variables here that have page-wide scope | + | delare variables here that have page-wide scope that are not brought in from other modules; thatare created here |
| + | and used here |
| | | |
| ]] | | ]] |
| | | |
− | local Preview_mode = false; -- flag indicating that we are rendering a preview page (Show preview button) | + | local added_deprecated_cat; -- boolean flag so that the category is added only once |
| + | local added_prop_cats = {}; -- list of property categories that have been added to z.properties_cats |
| + | local added_vanc_errs; -- boolean flag so we only emit one Vancouver error / category |
| + | |
| + | local Frame; -- holds the module's frame table |
| + | |
| | | |
| --[[--------------------------< F I R S T _ S E T >------------------------------------------------------------ | | --[[--------------------------< F I R S T _ S E T >------------------------------------------------------------ |
Line 52: |
Line 58: |
| | | |
| Adds a category to z.properties_cats using names from the configuration file with additional text if any. | | 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 |
| | | |
| ]] | | ]] |
| | | |
− | local added_prop_cats = {} -- list of property categories that have been added to z.properties_cats
| |
| local function add_prop_cat (key, arguments) | | local function add_prop_cat (key, arguments) |
| if not added_prop_cats [key] then | | if not added_prop_cats [key] then |
Line 67: |
Line 74: |
| Adds a single Vancouver system error message to the template's output regardless of how many error actually exist. | | Adds a single Vancouver system error message to the template's output regardless of how many error actually exist. |
| To prevent duplication, added_vanc_errs is nil until an error message is emitted. | | To prevent duplication, added_vanc_errs is nil until an error message is emitted. |
| + | |
| + | added_vanc_errs is a boolean declared in page scope variables above |
| | | |
| ]] | | ]] |
| | | |
− | local added_vanc_errs; -- flag so we only emit one Vancouver error / category
| |
| local function add_vanc_error (source) | | local function add_vanc_error (source) |
| if not added_vanc_errs then | | if not added_vanc_errs then |
Line 407: |
Line 415: |
| offending parameter name to the error message. Only one error message is emitted regardless of the number of deprecated | | offending parameter name to the error message. Only one error message is emitted regardless of the number of deprecated |
| parameters in the citation. | | parameters in the citation. |
| + | |
| + | added_deprecated_cat is a boolean declared in page scope variables above |
| | | |
| ]] | | ]] |
| | | |
− | local page_in_deprecated_cat; -- sticky flag so that the category is added only once
| |
| local function deprecated_parameter(name) | | local function deprecated_parameter(name) |
− | if not page_in_deprecated_cat then | + | if not added_deprecated_cat then |
− | page_in_deprecated_cat = true; -- note that we've added this category | + | added_deprecated_cat = true; -- note that we've added this category |
| table.insert( z.message_tail, { set_error( 'deprecated_params', {name}, true ) } ); -- add error message | | table.insert( z.message_tail, { set_error( 'deprecated_params', {name}, true ) } ); -- add error message |
| end | | end |
Line 425: |
Line 434: |
| " 'Kerned title with leading and trailing single quote marks' " (in real life the kerning isn't as wide as this example) | | " 'Kerned title with leading and trailing single quote marks' " (in real life the kerning isn't as wide as this example) |
| Double single quotes (italic or bold wikimarkup) are not kerned. | | Double single quotes (italic or bold wikimarkup) are not kerned. |
| + | |
| + | Replaces unicode quotemarks with typewriter quote marks regardless of the need for kerning. |
| | | |
| Call this function for chapter titles, for website titles, etc; not for book titles. | | Call this function for chapter titles, for website titles, etc; not for book titles. |
Line 433: |
Line 444: |
| local cap=''; | | local cap=''; |
| local cap2=''; | | 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) |
| | | |
| cap, cap2 = str:match ("^([\"\'])([^\'].+)"); -- match leading double or single quote but not double single quotes | | cap, cap2 = str:match ("^([\"\'])([^\'].+)"); -- match leading double or single quote but not double single quotes |
Line 887: |
Line 901: |
| to use an external editor to maintain this code. | | to use an external editor to maintain this code. |
| | | |
− | \195\128-\195\150 – À-Ö | + | \195\128-\195\150 – À-Ö (U+00C0–U+00D6 – C0 controls) |
− | \195\152-\195\182 – Ø-ö | + | \195\152-\195\182 – Ø-ö (U+00D8-U+00F6 – C0 controls) |
− | \195\184-\198\191 – ø-ƿ | + | \195\184-\198\191 – ø-ƿ (U+00F8-U+01BF – C0 controls, Latin extended A & B) |
− | \199\132-\201\143 – DŽ-ɏ% | + | \199\132-\201\143 – DŽ-ɏ (U+01C4-U+024F – Latin extended B) |
| | | |
| ]] | | ]] |
Line 966: |
Line 980: |
| end | | end |
| | | |
− | -- for word in mw.ustring.gmatch(first, "[^%s%.%-]+") do -- names separated by spaces, hyphens, or periods
| |
− | -- table.insert(initials, mw.ustring.sub(word,1,1)) -- Vancouver format does not include full stops.
| |
− | -- i = i + 1; -- bump the counter
| |
− | -- if 2 <= i then break; end -- only two initials allowed in Vancouver system; if 2, quit
| |
− | -- end
| |
| return table.concat(initials) -- Vancouver format does not include spaces. | | return table.concat(initials) -- Vancouver format does not include spaces. |
| end | | end |
Line 1,477: |
Line 1,486: |
| 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, White EB, ((Black, Brown, and Co.)) |
| + | |
| + | 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; |
| + | |
| + | while name_table[i] do |
| + | if name_table[i]:match ('^%(%(.*[^%)][^%)]$') then -- first segment of corporate with one or more commas; this segment has the opening doubled parens |
| + | local name = name_table[i]; |
| + | i=i+1; -- bump indexer to next segment |
| + | while name_table[i] do |
| + | name = name .. ', ' .. name_table[i]; -- concatenate with previous segments |
| + | if name_table[i]:match ('^.*%)%)$') then -- if this table member has the closing doubled parens |
| + | break; -- and done reassembling so |
| + | end |
| + | i=i+1; -- bump indexer |
| + | end |
| + | table.insert (output_table, name); -- and add corporate name to the output table |
| + | else |
| + | table.insert (output_table, name_table[i]); -- add this name |
| + | end |
| + | i = i+1; |
| + | end |
| + | 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 >-------------------------------- | | --[[--------------------------< P A R S E _ V A U T H O R S _ V E D I T O R S >-------------------------------- |
Line 1,504: |
Line 1,548: |
| add_vanc_error ('wikilink'); | | add_vanc_error ('wikilink'); |
| end | | end |
− | v_name_table = mw.text.split(vparam, "%s*,%s*") -- names are separated by commas | + | 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 | | for i, v_name in ipairs(v_name_table) do |
Line 1,544: |
Line 1,588: |
| end | | end |
| else | | else |
− | is_good_vanc_name (last, ''); | + | if not corporate then |
| + | is_good_vanc_name (last, ''); |
| + | end |
| end | | end |
− |
| |
− |
| |
| -- this from extract_names () | | -- this from extract_names () |
| link = select_one( args, cfg.aliases[list_name .. '-Link'], 'redundant_parameters', i ); | | link = select_one( args, cfg.aliases[list_name .. '-Link'], 'redundant_parameters', i ); |
Line 1,555: |
Line 1,599: |
| return names, etal; -- all done, return our list of names | | return names, etal; -- all done, return our list of names |
| end | | end |
| + | |
| | | |
| --[[--------------------------< S E L E C T _ A U T H O R _ E D I T O R _ S O U R C E >------------------------ | | --[[--------------------------< S E L E C T _ A U T H O R _ E D I T O R _ S O U R C E >------------------------ |
Line 1,576: |
Line 1,621: |
| local function select_author_editor_source (vxxxxors, xxxxors, args, list_name) | | local function select_author_editor_source (vxxxxors, xxxxors, args, list_name) |
| local lastfirst = false; | | local lastfirst = false; |
− | if select_one( args, cfg.aliases[list_name .. '-Last'], 'none', 1 ) or -- do this twice incase we have a first 1 without a last1 | + | if select_one( args, cfg.aliases[list_name .. '-Last'], 'none', 1 ) or -- do this twice incase we have a |first1= without a |last1=; this ... |
− | select_one( args, cfg.aliases[list_name .. '-Last'], 'none', 2 ) then | + | select_one( args, cfg.aliases[list_name .. '-First'], 'none', 1 ) or -- ... also catches the case where |first= is used with |vauthors= |
| + | select_one( args, cfg.aliases[list_name .. '-Last'], 'none', 2 ) or |
| + | select_one( args, cfg.aliases[list_name .. '-First'], 'none', 2 ) then |
| lastfirst=true; | | lastfirst=true; |
| end | | end |
Line 1,661: |
Line 1,708: |
| end | | end |
| end | | end |
− |
| + | |
| local vol = ''; | | local vol = ''; |
| | | |
Line 1,668: |
Line 1,715: |
| vol = substitute (cfg.messages['j-vol'], {sepc, volume}); | | vol = substitute (cfg.messages['j-vol'], {sepc, volume}); |
| else | | else |
− | vol = wrap_style ('vol-bold', hyphen_to_dash(volume)); | + | vol = substitute (cfg.presentation['vol-bold'], {sepc, hyphen_to_dash(volume)}); |
| end | | end |
| end | | end |
Line 1,676: |
Line 1,723: |
| return vol; | | return vol; |
| end | | end |
− |
| |
− |
| |
− |
| |
− |
| |
| | | |
| | | |
Line 1,699: |
Line 1,742: |
| end | | end |
| ]] | | ]] |
| + | |
| | | |
| --[[-------------------------< F O R M A T _ P A G E S _ S H E E T S >----------------------------------------- | | --[[-------------------------< F O R M A T _ P A G E S _ S H E E T S >----------------------------------------- |
Line 1,795: |
Line 1,839: |
| | | |
| if url:match('//web%.archive%.org/save/') then -- if a save command url, we don't want to allow saving of the target page | | if url:match('//web%.archive%.org/save/') then -- if a save command url, we don't want to allow saving of the target page |
− | table.insert( z.message_tail, { set_error( 'archive_url', {'save command'}, true ) } ); -- add error message | + | err_msg = 'save command'; |
− | if Preview_mode then | + | url = url:gsub ('(//web%.archive%.org)/save/', '%1/*/', 1); -- for preview mode: modify ArchiveURL |
− | return url:gsub ('(//web%.archive%.org)/save/', '%1/*/', 1), date; -- preview mode: modify and return ArchiveURL and ArchiveDate | + | else |
| + | path, timestamp, flag = url:match('//web%.archive%.org/([^%d]*)(%d+)([^/]*)/'); -- split out some of the url parts for evaluation |
| + | |
| + | if not is_set(timestamp) or 14 ~= timestamp:len() then -- path and flag optional, must have 14-digit timestamp here |
| + | err_msg = 'timestamp'; |
| + | if '*' ~= flag then |
| + | url=url:gsub ('(//web%.archive%.org/[^%d]*%d?%d?%d?%d?%d?%d?)[^/]*', '%1*', 1) -- for preview, modify ts to be yearmo* max (0-6 digits plus splat) |
| + | end |
| + | elseif is_set(path) and 'web/' ~= path then -- older archive urls do not have the extra 'web/' path element |
| + | err_msg = 'path'; |
| + | elseif is_set (flag) and not is_set (path) then -- flag not allowed with the old form url (without the 'web/' path element) |
| + | err_msg = 'flag'; |
| + | elseif is_set (flag) and not flag:match ('%a%a_') then -- flag if present must be two alpha characters and underscore (requires 'web/' path element) |
| + | err_msg = 'flag'; |
| else | | else |
− | return '', ''; -- return empty strings for archiveURL and ArchiveDate | + | return url, date; -- return archiveURL and ArchiveDate |
| end | | end |
| end | | end |
− | | + | -- if here, something not right so |
− | -- if url:match('//web%.archive%.org/web/%*/') or url:match('//web%.archive%.org/%*/') then -- wildcard with or without 'web/' path element | + | table.insert( z.message_tail, { set_error( 'archive_url', {err_msg}, true ) } ); -- add error message and |
− | -- table.insert( z.message_tail, { set_error( 'archive_url', {'wildcard'}, true ) } ); -- add error message and
| + | if is_set (Frame:preprocess('{{REVISIONID}}')) then |
− | -- return '', ''; -- return empty strings for archiveURL and ArchiveDate
| + | return '', ''; -- return empty strings for archiveURL and ArchiveDate |
− | -- end
| |
− |
| |
− | path, timestamp, flag = url:match('//web%.archive%.org/([^%d]*)(%d+)([^/]*)/'); -- split out some of the url parts for evaluation
| |
− |
| |
− | if not is_set(timestamp) or 14 ~= timestamp:len() then -- path and flag optional, must have 14-digit timestamp here | |
− | err_msg = 'timestamp';
| |
− | if '*' ~= flag then
| |
− | url=url:gsub ('(//web%.archive%.org/[^%d]*%d?%d?%d?%d?%d?%d?)[^/]*', '%1*', 1) -- for preview, modify ts to be yearmo* max (0-6 digits plus splat)
| |
− | end
| |
− | elseif is_set(path) and 'web/' ~= path then -- older archive urls do not have the extra 'web/' path element
| |
− | err_msg = 'path'; | |
− | elseif is_set (flag) and not is_set (path) then -- flag not allowed with the old form url (without the 'web/' path element)
| |
− | err_msg = 'flag';
| |
− | elseif is_set (flag) and not flag:match ('%a%a_') then -- flag if present must be two alpha characters and underscore (requires 'web/' path element)
| |
− | err_msg = 'flag';
| |
| else | | else |
− | return url, date; -- return archiveURL and ArchiveDate
| |
− | end
| |
− | -- if here something not right so
| |
− | table.insert( z.message_tail, { set_error( 'archive_url', {err_msg}, true ) } ); -- add error message and
| |
− | if Preview_mode then
| |
| return url, date; -- preview mode so return archiveURL and ArchiveDate | | return url, date; -- preview mode so return archiveURL and ArchiveDate |
− | else
| |
− | return '', ''; -- return empty strings for archiveURL and ArchiveDate
| |
| end | | end |
| end | | end |
Line 1,890: |
Line 1,925: |
| elseif 3 == selected then | | elseif 3 == selected then |
| Authors = A['Authors']; -- use content of |authors= | | Authors = A['Authors']; -- use content of |authors= |
| + | if 'authors' == A:ORIGIN('Authors') then -- but add a maint cat if the parameter is |authors= |
| + | add_maint_cat ('authors'); -- because use of this parameter is discouraged; what to do about the aliases is a TODO: |
| + | end |
| end | | end |
| if is_set (Collaboration) then | | if is_set (Collaboration) then |
Line 1,912: |
Line 1,950: |
| elseif 3 == selected then | | elseif 3 == selected then |
| Editors = A['Editors']; -- use content of |editors= | | Editors = A['Editors']; -- use content of |editors= |
| + | add_maint_cat ('editors'); -- but add a maint cat because use of this parameter is discouraged |
| end | | end |
| end | | end |
Line 2,178: |
Line 2,217: |
| -- Special case for cite techreport. | | -- Special case for cite techreport. |
| if (config.CitationClass == "techreport") then -- special case for cite techreport | | 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' | + | if is_set(A['Number']) then -- cite techreport uses 'number', which other citations alias to 'issue' |
| if not is_set(ID) then -- can we use ID for the "number"? | | if not is_set(ID) then -- can we use ID for the "number"? |
− | ID = A['Number']; -- yes, use it | + | ID = A['Number']; -- yes, use it |
| else -- ID has a value so emit error message | | else -- ID has a value so emit error message |
| table.insert( z.message_tail, { set_error('redundant_parameters', {wrap_style ('parameter', 'id') .. ' and ' .. wrap_style ('parameter', 'number')}, true )}); | | table.insert( z.message_tail, { set_error('redundant_parameters', {wrap_style ('parameter', 'id') .. ' and ' .. wrap_style ('parameter', 'number')}, true )}); |
Line 2,187: |
Line 2,226: |
| end | | end |
| | | |
− | -- special case for cite interview | + | -- special case for cite interview -- TODO: make cite interveiw not need special cases |
| if (config.CitationClass == "interview") then | | if (config.CitationClass == "interview") then |
| if is_set(Program) then | | if is_set(Program) then |
Line 2,209: |
Line 2,248: |
| if is_set(Others) then | | if is_set(Others) then |
| if is_set(TitleType) then | | if is_set(TitleType) then |
− | Others = ' ' .. TitleType .. ' with ' .. Others; | + | Others = substitute (cfg.messages['interview-type'], {TitleType, Others}); |
| TitleType = ''; | | TitleType = ''; |
| else | | else |
− | Others = ' ' .. 'Interview with ' .. Others; | + | Others = substitute (cfg.messages['interview'], Others) |
| end | | end |
| else | | else |
− | Others = '(Interview)'; | + | Others = cfg.title_types ['interview']; |
| end | | end |
| end | | end |
Line 2,342: |
Line 2,381: |
| end | | end |
| | | |
− | if first_set ({AccessDate, At, Chapter, Format, Page, Pages, Periodical, PublisherName, URL, -- a crude list of parameters that are not supported by cite arxiv | + | if first_set ({AccessDate, At, Authors, Chapter, Format, Page, Pages, Periodical, PublisherName, URL, -- a crude list of parameters that are not supported by cite arxiv |
− | ID_list['ASIN'], ID_list['BIBCODE'], ID_list['DOI'], ID_list['ISBN'], ID_list['ISSN'], | + | ID_list['ASIN'], ID_list['BIBCODE'], ID_list['DOI'], ID_list['ISBN'], ID_list['ISSN'], -- TODO: find a better way to do this |
| ID_list['JFM'], ID_list['JSTOR'], ID_list['LCCN'], ID_list['MR'], ID_list['OCLC'], ID_list['OL'], | | ID_list['JFM'], ID_list['JSTOR'], ID_list['LCCN'], ID_list['MR'], ID_list['OCLC'], ID_list['OL'], |
| ID_list['OSTI'], ID_list['PMC'], ID_list['PMID'], ID_list['RFC'], ID_list['SSRN'], ID_list['USENETID'], ID_list['ZBL']},27) then | | ID_list['OSTI'], ID_list['PMC'], ID_list['PMID'], ID_list['RFC'], ID_list['SSRN'], ID_list['USENETID'], ID_list['ZBL']},27) then |
| table.insert( z.message_tail, { set_error( 'arxiv_params_not_supported', {}, true ) } ); -- add error message | | table.insert( z.message_tail, { set_error( 'arxiv_params_not_supported', {}, true ) } ); -- add error message |
| | | |
− | AccessDate= ''; -- set these to empty string; not supported in cite arXiv | + | AccessDate = ''; -- set these to empty string; not supported in cite arXiv |
| + | Authors = ''; |
| PublisherName = ''; -- (if the article has been published, use cite journal, or other) | | PublisherName = ''; -- (if the article has been published, use cite journal, or other) |
| Chapter = ''; | | Chapter = ''; |
Line 2,362: |
Line 2,402: |
| TitleType = set_titletype (config.CitationClass, TitleType); | | TitleType = set_titletype (config.CitationClass, TitleType); |
| if is_set(Degree) and "Thesis" == TitleType then -- special case for cite thesis | | if is_set(Degree) and "Thesis" == TitleType then -- special case for cite thesis |
− | TitleType = Degree .. " thesis"; | + | TitleType = Degree .. ' ' .. cfg.title_types ['thesis']:lower(); |
| end | | end |
| end | | end |
Line 2,370: |
Line 2,410: |
| end | | end |
| | | |
− | -- legacy: promote concatenation of |month=, and |year= to Date if Date not set; or, promote PublicationDate to Date if neither Date nor Year are set. | + | -- legacy: promote PublicationDate to Date if neither Date nor Year are set. |
| if not is_set (Date) then | | if not is_set (Date) then |
| Date = Year; -- promote Year to Date | | Date = Year; -- promote Year to Date |
Line 2,430: |
Line 2,470: |
| table.insert( z.message_tail, { set_error( 'bad_date', {error_message}, true ) } ); -- add this error message | | table.insert( z.message_tail, { set_error( 'bad_date', {error_message}, true ) } ); -- add this error message |
| end | | end |
− |
| |
− | -- if is_set(error_message) then
| |
− | -- table.insert( z.message_tail, { set_error( 'bad_date', {error_message}, true ) } ); -- add this error message
| |
− | -- elseif is_set (DF) then
| |
− | -- if reformat_dates (date_parameters_list, DF, false) then -- reformat to DF format, use long month names if appropriate
| |
− | -- AccessDate = date_parameters_list['access-date']; -- overwrite date holding parameters with reformatted values
| |
− | -- ArchiveDate = date_parameters_list['archive-date'];
| |
− | -- Date = date_parameters_list['date'];
| |
− | -- DoiBroken = date_parameters_list['doi-broken-date'];
| |
− | -- LayDate = date_parameters_list['lay-date'];
| |
− | -- PublicationDate = date_parameters_list['publication-date'];
| |
− | -- end
| |
− | -- end
| |
| end -- end of do | | end -- end of do |
| | | |
Line 2,453: |
Line 2,480: |
| URL=cfg.id_handlers['PMC'].prefix .. ID_list['PMC']; -- set url to be the same as the PMC external link if not embargoed | | URL=cfg.id_handlers['PMC'].prefix .. ID_list['PMC']; -- set url to be the same as the PMC external link if not embargoed |
| URLorigin = cfg.id_handlers['PMC'].parameters[1]; -- set URLorigin to parameter name for use in error message if citation is missing a |title= | | URLorigin = cfg.id_handlers['PMC'].parameters[1]; -- set URLorigin to parameter name for use in error message if citation is missing a |title= |
| + | if is_set(AccessDate) then -- access date requires |url=; pmc created url is not |url= |
| + | table.insert( z.message_tail, { set_error( 'accessdate_missing_url', {}, true ) } ); |
| + | AccessDate = ''; -- unset |
| + | end |
| + | |
| end | | end |
| end | | end |
Line 2,541: |
Line 2,573: |
| do | | do |
| local last_first_list; | | local last_first_list; |
− | -- local maximum;
| |
| local control = { | | local control = { |
| format = NameListFormat, -- empty string or 'vanc' | | format = NameListFormat, -- empty string or 'vanc' |
Line 2,631: |
Line 2,662: |
| end | | end |
| | | |
− | local OriginalURL, OriginalURLorigin, OriginalFormat; -- TODO: swap chapter and title here so that archive applies to most specific if both are set? | + | local OriginalURL, OriginalURLorigin, OriginalFormat; |
| DeadURL = DeadURL:lower(); -- used later when assembling archived text | | DeadURL = DeadURL:lower(); -- used later when assembling archived text |
| if is_set( ArchiveURL ) then | | if is_set( ArchiveURL ) then |
− | if is_set (ChapterURL) then -- swapped -- URL not set so if chapter-url is set apply archive url to it | + | if is_set (ChapterURL) then -- URL not set so if chapter-url is set apply archive url to it |
| OriginalURL = ChapterURL; -- save copy of source chapter's url for archive text | | OriginalURL = ChapterURL; -- save copy of source chapter's url for archive text |
| OriginalURLorigin = ChapterURLorigin; -- name of chapter-url parameter for error messages | | OriginalURLorigin = ChapterURLorigin; -- name of chapter-url parameter for error messages |
Line 2,708: |
Line 2,739: |
| Title = kern_quotes (Title); -- if necessary, separate title's leading and trailing quote marks from Module provided quote marks | | Title = kern_quotes (Title); -- if necessary, separate title's leading and trailing quote marks from Module provided quote marks |
| Title = wrap_style ('quoted-title', Title); | | Title = wrap_style ('quoted-title', Title); |
− |
| |
| Title = script_concatenate (Title, ScriptTitle); -- <bdi> tags, lang atribute, categorization, etc; must be done after title is wrapped | | Title = script_concatenate (Title, ScriptTitle); -- <bdi> tags, lang atribute, categorization, etc; must be done after title is wrapped |
| TransTitle= wrap_style ('trans-quoted-title', TransTitle ); | | TransTitle= wrap_style ('trans-quoted-title', TransTitle ); |
Line 2,822: |
Line 2,852: |
| | | |
| if is_set (Translators) then | | if is_set (Translators) then |
− | -- Others = sepc .. ' Translated by ' .. Translators .. Others;
| |
| Others = sepc .. ' ' .. wrap_msg ('translated', Translators, use_lowercase) .. Others; | | Others = sepc .. ' ' .. wrap_msg ('translated', Translators, use_lowercase) .. Others; |
| end | | end |
Line 2,908: |
Line 2,937: |
| local arch_text = cfg.messages['archived-dead']; | | local arch_text = cfg.messages['archived-dead']; |
| if sepc ~= "." then arch_text = arch_text:lower() end | | if sepc ~= "." then arch_text = arch_text:lower() end |
− | if in_array (DeadURL, {'unfit', 'usurped'}) then | + | if in_array (DeadURL, {'unfit', 'usurped', 'bot: unknown'}) then |
| Archived = sepc .. " " .. 'Archived from the original on ' .. ArchiveDate; -- format already styled | | Archived = sepc .. " " .. 'Archived from the original on ' .. ArchiveDate; -- format already styled |
| + | if 'bot: unknown' == DeadURL then |
| + | add_maint_cat ('bot:_unknown'); -- and add a category if not already added |
| + | else |
| + | add_maint_cat ('unfit'); -- and add a category if not already added |
| + | end |
| else -- DeadURL is empty, 'yes', 'true', or 'y' | | else -- DeadURL is empty, 'yes', 'true', or 'y' |
| Archived = sepc .. " " .. substitute( arch_text, | | Archived = sepc .. " " .. substitute( arch_text, |
Line 2,953: |
Line 2,987: |
| | | |
| local Publisher; | | local Publisher; |
− | if is_set(Periodical) and | + | if is_set(PublicationDate) then |
− | not in_array(config.CitationClass, {"encyclopaedia","web","pressrelease","podcast"}) then
| + | PublicationDate = wrap_msg ('published', PublicationDate); |
− | if is_set(PublisherName) then | + | end |
− | if is_set(PublicationPlace) then
| + | if is_set(PublisherName) then |
− | Publisher = PublicationPlace .. ": " .. PublisherName;
| + | if is_set(PublicationPlace) then |
− | else
| + | Publisher = sepc .. " " .. PublicationPlace .. ": " .. PublisherName .. PublicationDate; |
− | Publisher = PublisherName;
| + | else |
− | end
| + | Publisher = sepc .. " " .. PublisherName .. PublicationDate; |
− | elseif is_set(PublicationPlace) then
| + | end |
− | Publisher= PublicationPlace;
| + | elseif is_set(PublicationPlace) then |
− | else
| + | Publisher= sepc .. " " .. PublicationPlace .. PublicationDate; |
− | Publisher = "";
| + | else |
− | end
| + | Publisher = PublicationDate; |
− | if is_set(PublicationDate) then
| |
− | if is_set(Publisher) then
| |
− | Publisher = Publisher .. ", " .. wrap_msg ('published', PublicationDate);
| |
− | else
| |
− | Publisher = PublicationDate;
| |
− | end
| |
− | end
| |
− | if is_set(Publisher) then
| |
− | Publisher = " (" .. Publisher .. ")";
| |
− | end
| |
− | else | |
− | if is_set(PublicationDate) then
| |
− | PublicationDate = " (" .. wrap_msg ('published', PublicationDate) .. ")";
| |
− | end
| |
− | if is_set(PublisherName) then | |
− | if is_set(PublicationPlace) then | |
− | Publisher = sepc .. " " .. PublicationPlace .. ": " .. PublisherName .. PublicationDate;
| |
− | else
| |
− | Publisher = sepc .. " " .. PublisherName .. PublicationDate;
| |
− | end
| |
− | elseif is_set(PublicationPlace) then
| |
− | Publisher= sepc .. " " .. PublicationPlace .. PublicationDate;
| |
− | else
| |
− | Publisher = PublicationDate;
| |
− | end
| |
| end | | end |
| | | |
Line 3,232: |
Line 3,241: |
| | | |
| function cs1.citation(frame) | | function cs1.citation(frame) |
| + | Frame = frame; -- save a copy incase we need to display an error message in preview mode |
| local pframe = frame:getParent() | | local pframe = frame:getParent() |
| local validation, utilities, identifiers, metadata; | | local validation, utilities, identifiers, metadata; |
Line 3,283: |
Line 3,293: |
| COinS = metadata.COinS; | | COinS = metadata.COinS; |
| | | |
− |
| |
− | Preview_mode = frame:preprocess('{{REVISIONID}}'); -- use magic word to get revision id
| |
− | if is_set (Preview_mode) then -- if there is a value then this is not a preiview
| |
− | Preview_mode = false;
| |
− | else
| |
− | Preview_mode = true; -- no value (nil or empty string) so this is a preview
| |
− | end
| |
− |
| |
| local args = {}; | | local args = {}; |
| local suggestions = {}; | | local suggestions = {}; |