Modul:Citation/CS1: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Perbarui sintaks LUA per versi terbaru dari modul yang bersangkutan.
coba ganti "en" ke "id"
 
(Satu revisi perantara oleh satu pengguna lainnya tidak ditampilkan)
Baris 549:
end
-- if we get this far we have prefix and script
name = cfg.lang_code_remap[lang] or mw.language.fetchLanguageName( lang, "enid" ); -- get language name so that we can use it to categorize
if is_set (name) then -- is prefix a proper ISO 639-1 language code?
script_value = script_value:gsub ('^%l%l%s*:%s*', ''); -- strip prefix from script
Baris 628:
 
chapter = script_concatenate (chapter, scriptchapter) -- <bdi> tags, lang atribute, categorization, etc; must be done after title is wrapped
 
if is_set (chapterurl) then
chapter = external_link (chapterurl, chapter, chapter_url_source, access); -- adds bare_url_missing_title error if appropriate
end
 
if is_set (transchapter) then
Baris 639 ⟶ 643:
end
 
-- if is_set (chapterurl) then
-- chapter = external_link (chapterurl, chapter, chapter_url_source, access); -- adds bare_url_missing_title error if appropriate
-- end
 
return chapter .. chapter_error;
Baris 799 ⟶ 803:
end
-- limited enumerated parameters list
name = name:gsub( "%d+", "#" ); -- replace digit(s) with # (last25 becomes last#) (mw.ustring because non-Western 'local' digits)
state = whitelist.limited_numbered_arguments[ name ];
if true == state then return true; end -- valid actively supported parameter
Baris 818 ⟶ 822:
end
-- all enumerated parameters allowed
name = name:gsub( "%d+", "#" ); -- replace digit(s) with # (last25 becomes last#) (mw.ustring because non-Western 'local' digits)
state = whitelist.numbered_arguments[ name ];
 
Baris 896 ⟶ 900:
 
local function safe_join( tbl, duplicate_char )
local f = {}; -- create a function table appropriate to type of 'dupicate character'
--[[
if 1 == #duplicate_char then -- for single byte ascii characters use the string library functions
Note: we use string functions here, rather than ustring functions.
f.gsub=string.gsub
f.match=string.match
This has considerably faster performance and should work correctly as
f.sub=string.sub
long as the duplicate_char is strict ASCII. The strings
else -- for multi-byte characters use the ustring library functions
in tbl may be ASCII or UTF8.
f.gsub=mw.ustring.gsub
]]
f.match=mw.ustring.match
f.sub=mw.ustring.sub
end
 
local str = ''; -- the output string
local comp = ''; -- what does 'comp' mean?
Baris 920 ⟶ 927:
end
-- typically duplicate_char is sepc
if comp:f.sub(comp, 1,1) == duplicate_char then -- is first charactiercharacter same as duplicate_char? why test first character?
-- Because individual string segments often (always?) begin with terminal punct for ththe
-- preceding segment: 'First element' .. 'sepc next element' .. etc?
trim = false;
end_chr = str:f.sub(str, -1,-1); -- get the last character of the output string
-- str = str .. "<HERE(enchr=" .. end_chr.. ")" -- debug stuff?
if end_chr == duplicate_char then -- if same as separator
str = str:f.sub(str, 1,-2); -- remove it
elseif end_chr == "'" then -- if it might be wikimarkup
if str:f.sub(str, -3,-1) == duplicate_char .. "''" then -- if last three chars of str are sepc''
str = str:f.sub(str, 1, -4) .. "''"; -- remove them and add back ''
elseif str: f.sub(str, -5,-1) == duplicate_char .. "]]''" then -- if last five chars of str are sepc]]''
trim = true; -- why? why do this and next differently from previous?
elseif str:f.sub(str, -4,-1) == duplicate_char .. "]''" then -- if last four chars of str are sepc]''
trim = true; -- same question
end
elseif end_chr == "]" then -- if it might be wikimarkup
if str:f.sub(str, -3,-1) == duplicate_char .. "]]" then -- if last three chars of str are sepc]] wikilink
trim = true;
elseif str:f.sub(str, -3,-1) == duplicate_char .. '"]' then -- if last three chars of str are sepc"] quoted external link
trim = true;
elseif str: f.sub(str, -2,-1) == duplicate_char .. "]" then -- if last two chars of str are sepc] external link
trim = true;
elseif str:f.sub(str, -4,-1) == duplicate_char .. "'']" then -- normal case when |url=something & |title=Title.
trim = true;
end
elseif end_chr == " " then -- if last char of output string is a space
if str:f.sub(str, -2,-1) == duplicate_char .. " " then -- if last two chars of str are <sepc><space>
str = str:f.sub(str, 1,-3); -- remove them both
end
end
Baris 955 ⟶ 962:
if value ~= comp then -- value does not equal comp when value contains html markup
local dup2 = duplicate_char;
if dup2:f.match(dup2, "%A" ) then dup2 = "%" .. dup2; end -- if duplicate_char not a letter then escape it
value = value:f.gsub(value, "(%b<>)" .. dup2, "%1", 1 ) -- remove duplicate_char if it follows html markup
else
value = value:f.sub(value, 2, -1 ); -- remove duplicate_char when it is first character
end
end
Baris 967 ⟶ 974:
end
return str;
end
 
 
Baris 1.105 ⟶ 1.112:
 
if 'vanc' == format then -- Vancouver-like author/editor name styling?
sep = cfg.presentation[',sep_nl_vanc']; -- name-list separator between authors is a comma
namesep = cfg.presentation[' sep_name_vanc']; -- last/first separator is a space
else
sep = cfg.presentation[';sep_nl' ]; -- name-list separator between authors is a semicolon
namesep = cfg.presentation[', sep_name' ]; -- last/first separator is <comma><space>
end
Baris 1.394 ⟶ 1.401:
 
local function get_iso639_code (lang, this_wiki_code)
if cfg.lang_name_remap[lang:lower()] then -- if there is a remapped name (because MediaWiki uses something that we don't think is correct)
local remap = {
return remapcfg.lang_name_remap[lang:lower()][1], remapcfg.lang_name_remap[lang:lower()][2]; -- for this language 'name', return a possibly new name and appropriate code
['bangla'] = {'Bengali', 'bn'}, -- MediaWiki returns Bangla (the endonym) but we want Bengali (the exonym); here we remap
['bengali'] = {'Bengali', 'bn'}, -- MediaWiki doesn't use exonym so here we provide correct language name and 639-1 code
['bihari'] = {'Bihari', 'bh'}, -- MediaWiki replace 'Bihari' with 'Bhojpuri' so 'Bihari' cannot be found
['bhojpuri'] = {'Bhojpuri', 'bho'}, -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri wWikipedia: bh.wiki-indonesia.club
}
if remap[lang:lower()] then
return remap[lang:lower()][1], remap[lang:lower()][2]; -- for this language 'name', return a possibly new name and appropriate code
end
 
Baris 1.447:
local this_wiki_code = this_wiki:getCode() -- get this wiki's language code
local this_wiki_name = mw.language.fetchLanguageName(this_wiki_code, this_wiki_code); -- get this wiki's language name
 
local remap = {
['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri wWikipedia: bh.wiki-indonesia.club
['bn'] = 'Bengali', -- MediaWiki returns Bangla
}
 
names_table = mw.text.split (lang, '%s*,%s*'); -- names should be a comma separated list
Baris 1.462 ⟶ 1.457:
if 2 == lang:len() or 3 == lang:len() then -- if two-or three-character code
name = mw.language.fetchLanguageName( lang:lower(), this_wiki_code); -- get language name if |language= is a proper code
if not is_set (name) then
name = cfg.lang_code_remap[lang]; -- not supported by MediaWiki; is it in remap?
end
end
Baris 1.471 ⟶ 1.469:
if is_set (code) then -- only 2- or 3-character codes
name = remapcfg.lang_code_remap[code] or name; -- override wikimedia when they misuse language codes/names
 
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' .. code, {name, code}) -- categorize it
else -- or is a recognized language (but has a three-character code)
add_prop_cat ('foreign_lang_source_2' .. code, {code}) -- categorize it differently TODO: support mutliple three-character code categories per cs1|2 template
end
end
Baris 1.508 ⟶ 1.506:
 
Set style settings for CS1 citation templates. Returns separator and postscript settings
At en.wiki, for cs1:
ps gets: '.'
sep gets: '.'
 
]]
Baris 1.513 ⟶ 1.514:
local function set_cs1_style (ps)
if not is_set (ps) then -- unless explicitely set to something
ps = 'cfg.presentation['ps_cs1']; -- terminate the rendered citation with a period
end
return 'cfg.presentation['sep_cs1'], ps; -- element separator is a full stop
end
 
Baris 1.522 ⟶ 1.523:
 
Set style settings for CS2 citation templates. Returns separator, postscript, ref settings
At en.wiki, for cs2:
ps gets: '' (empty string - no terminal punctuation)
sep gets: ','
 
]]
Baris 1.527 ⟶ 1.531:
local function set_cs2_style (ps, ref)
if not is_set (ps) then -- if |postscript= has not been set, set cs2 default
ps = cfg.presentation['ps_cs2']; -- maketerminate surethe it isn'trendered nilcitation
end
if not is_set (ref) then -- if |ref= is not set
ref = "harv"; -- set default |ref=harv
end
return cfg.presentation[',sep_cs2'], ps, ref; -- element separator is a comma
end
 
Baris 1.955 ⟶ 1.959:
end
 
local is_journal = 'journal' == cite_class or (in_array (cite_class, {'citation', 'map', 'interview'}) and 'journal' == origin);
if is_set (page) then
Baris 2.600 ⟶ 2.604:
 
-- legacy: promote PublicationDate to Date if neither Date nor Year are set.
local Date_origin; -- to hold the name of parameter promoted to Date; required for date error messaging
 
if not is_set (Date) then
Date = Year; -- promote Year to Date
Baris 2.606 ⟶ 2.612:
Date = PublicationDate; -- promote PublicationDate to Date
PublicationDate = ''; -- unset, no longer needed
Date_origin = A:ORIGIN('PublicationDate'); -- save the name of the promoted parameter
else
Date_origin = A:ORIGIN('Year'); -- save the name of the promoted parameter
end
else
Date_origin = A:ORIGIN('Date'); -- not a promotion; name required for error messaging
end
 
Baris 2.620 ⟶ 2.631:
local error_message = '';
-- AirDate has been promoted to Date so not necessary to check it
-- local date_parameters_list = {['access-date']=AccessDate, ['archive-date']=ArchiveDate, ['date']=Date, ['doi-broken-date']=DoiBroken,
-- ['embargo']=Embargo, ['lay-date']=LayDate, ['publication-date']=PublicationDate, ['year']=Year};
 
local date_parameters_list = {
['access-date'] = {val=AccessDate, name=A:ORIGIN ('AccessDate')},
['archive-date'] = {val=ArchiveDate, name=A:ORIGIN ('ArchiveDate')},
['date'] = {val=Date, name=Date_origin},
['doi-broken-date'] = {val=DoiBroken, name=A:ORIGIN ('DoiBroken')},
['embargo'] = {val=Embargo, name=A:ORIGIN ('Embargo')},
['lay-date'] = {val=LayDate, name=A:ORIGIN ('LayDate')},
['publication-date'] ={val=PublicationDate, name=A:ORIGIN ('PublicationDate')},
['year'] = {val=Year, name=A:ORIGIN ('Year')},
};
anchor_year, Embargo, error_message = dates(date_parameters_list, COinS_date);
 
-- start temporary Julian / Gregorian calendar uncertainty categorization
if COinS_date.inter_cal_cat then
Baris 2.656 ⟶ 2.678:
-- for those wikis that can and want to have English date names translated to the local language,
-- uncomment these three lines. Not supported by en.wiki (for obvious reasons)
-- set date_name_xlate() second argument to true to translate English digits to local digits (will translate ymd dates)
-- if date_name_xlate (date_parameters_list, false) then
-- modified = true;
-- end
 
if modified then -- if the date_parameters_list values were modified
AccessDate = date_parameters_list['access-date'].val; -- overwrite date holding parameters with modified values
ArchiveDate = date_parameters_list['archive-date'].val;
Date = date_parameters_list['date'].val;
DoiBroken = date_parameters_list['doi-broken-date'].val;
LayDate = date_parameters_list['lay-date'].val;
PublicationDate = date_parameters_list['publication-date'].val;
end
else
Baris 2.863 ⟶ 2.886:
DeadURL = DeadURL:lower(); -- used later when assembling archived text
if is_set( ArchiveURL ) then
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
OriginalURLorigin = ChapterURLorigin; -- name of chapter-url parameter for error messages
OriginalFormat = ChapterFormat; -- and original |chapter-format=
if 'no' ~= DeadURL then
ChapterURL = ArchiveURL -- swap-in the archive's url
ChapterURLorigin = A:ORIGIN('ArchiveURL') -- name of archive-url parameter for error messages
ChapterFormat = ArchiveFormat or ''; -- swap in archive's format
ChapterUrlAccess = nil; -- restricted access levels do not make sense for archived urls
end
elseif is_set (URL) then
Baris 3.049 ⟶ 3.073:
if is_set (Translators) then
Others = safe_join ({sepc .. ' ' .., wrap_msg ('translated', Translators, use_lowercase) .., Others}, sepc);
end
if is_set (Interviewers) then
Others = safe_join ({sepc .. ' ' .., wrap_msg ('interview', Interviewers, use_lowercase) .., Others}, sepc);
end
Baris 3.233 ⟶ 3.257:
if in_array(config.CitationClass, {"journal","citation"}) and is_set(Periodical) then
if is_set(Others) then Others = safe_join ({Others .., sepc .. " "}, sepc) end -- add terminal punctuation & space; check for dup sepc; TODO why do we need to do this here?
tcommon = safe_join( {Others, Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Edition, Publisher, Agency, Volume}, sepc );
elseif in_array(config.CitationClass, {"book","citation"}) and not is_set(Periodical) then -- special cases for book cites
Baris 3.510 ⟶ 3.534:
for k, v in pairs( pframe.args ) do
if v ~= '' then
if ('string' == type (k)) then
k = mw.ustring.gsub (k, '%d', cfg.date_names.local_digits); -- for enumerated parameters, translate 'local' digits to Western 0-9
end
if not validate( k, config.CitationClass ) then
error_text = "";
Baris 3.548 ⟶ 3.575:
end
missing_pipe_check (v); -- do we think that there is a parameter that is missing a pipe?
-- TODO: is this the best place for this translation?
args[k] = v;
elseif args[k] ~= nil or (k == 'postscript') then
args[k] = v;
elseif args[k] ~= nil or (k == 'postscript') then -- here when v is empty string
args[k] = v; -- why do we do this? we don't support 'empty' parameters
end
end