Fix date and publisher for ja, books, use Cite news, disable ISSN
- fix publication date to year-only for books, journal articles - suppress publisher for news, journal articles - use P31 instance of, use Cite news for news articles - disable displaying of ISSN
This commit is contained in:
parent
d0298adb5d
commit
f32596a4f8
2 changed files with 69 additions and 6 deletions
|
|
@ -88,7 +88,7 @@ local function makelink(v, out, link, maxpos, wdl)
|
|||
local sitelink = mw.wikibase.getSitelink(qnumber)
|
||||
if qnumber == "Q2818964" then sitelink = nil end -- suppress link to "Various authors"
|
||||
if v.qualifiers and v.qualifiers.P1932 then
|
||||
label = v.qualifiers.P1932[1].datavalue.value
|
||||
label = v.qualifiers.P1932[1].datavalue.value -- object named as
|
||||
else
|
||||
label = mw.wikibase.getLabel(qnumber)
|
||||
if label then
|
||||
|
|
@ -293,6 +293,50 @@ local function wrap_nowiki(str, disable)
|
|||
return mw.text.nowiki(str or '')
|
||||
end
|
||||
|
||||
-- returns the first string sequence of 3 or more digits in a date string, or nil
|
||||
local function yearFromDate(datestr)
|
||||
if datestr then
|
||||
return string.match(datestr, '%d%d%d+')
|
||||
end
|
||||
return datestr
|
||||
end
|
||||
|
||||
-- Attempt to determine heuristically if we're citing a news article
|
||||
local function isNewsArticle(qid, args)
|
||||
local newsitems = {
|
||||
'Q5707594', -- news article
|
||||
'Q30070590', -- magazine article
|
||||
-- TODO: somehow use WHERE {?item (wdt:P31|wdt:P31/wdt:P279*) wd:Q5707594.}
|
||||
-- main subclasses of news article:
|
||||
'Q87849013', -- AP article
|
||||
'Q2144639', -- feature story
|
||||
'Q139172839', -- top story
|
||||
'Q18339884', -- cover story
|
||||
'Q3326038', -- critical review
|
||||
'Q4202018', -- interview
|
||||
'Q309481', -- obituary
|
||||
'Q108970988', -- column
|
||||
'Q2602337', -- op-ed
|
||||
'Q59908', -- opinion piece
|
||||
}
|
||||
-- most of the time a cheap lookup to a single value will work
|
||||
if args['instance-of'] and in_array(args['instance-of'], newsitems) then
|
||||
return true
|
||||
end
|
||||
-- otherwise check multiple non-deprecated values
|
||||
local instance_of = mw.wikibase.getBestStatements(qid, 'P31')
|
||||
if instance_of and instance_of[1] then
|
||||
for k, v in pairs(instance_of) do
|
||||
if v.mainsnak.snaktype == "value" and v.mainsnak.datatype == "wikibase-item" then
|
||||
if in_array(v.mainsnak.datavalue.value.id, newsitems) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- sort sequence table whose values are key-value pairs by key
|
||||
local function comp_key(a, b)
|
||||
local param_a, enum_a = a[1]:match ('(%D+)(%d+)$'); -- get param name and enumerator from <a>
|
||||
|
|
@ -594,13 +638,28 @@ local function _cite_q (citeq_args)
|
|||
|
||||
-- code to make a guess what template to use from the supplied parameters
|
||||
-- (first draft for proof-of-concept)
|
||||
if citeq_args.isbn then
|
||||
template = template or "book"
|
||||
citeq_args.asin = nil -- suppress ASIN if ISBN exists
|
||||
local pubyear = yearFromDate(citeq_args['publication-date'])
|
||||
local is_news = isNewsArticle(qid, citeq_args)
|
||||
if is_news then
|
||||
template = template or "news"
|
||||
-- some items use P123 (publisher) as the newspaper instead of P1433 (published in)
|
||||
if citeq_args.publisher and not citeq_args.journal then
|
||||
citeq_args.journal = citeq_args.publisher
|
||||
citeq_args.publisher = nil
|
||||
end
|
||||
elseif citeq_args.journal then
|
||||
template = template or "journal"
|
||||
citeq_args['publication-date'] = pubyear or citeq_args['publication-date']
|
||||
-- articles can be published in books/proceedings, otherwise suppress publisher
|
||||
if not citeq_args.isbn then
|
||||
citeq_args.publisher = nil
|
||||
end
|
||||
elseif is_thesis then
|
||||
template = template or "thesis"
|
||||
elseif citeq_args.isbn then
|
||||
template = template or "book"
|
||||
citeq_args.asin = nil -- suppress ASIN if ISBN exists
|
||||
citeq_args['publication-date'] = pubyear or citeq_args['publication-date']
|
||||
elseif citeq_args.website then
|
||||
template = template or "web"
|
||||
end
|
||||
|
|
@ -709,6 +768,9 @@ local function _cite_q (citeq_args)
|
|||
-- Disable CiteSeerX IDs for now
|
||||
citeq_args.citeseerx = nil
|
||||
|
||||
-- remove any remaining non-CS1 fields
|
||||
citeq_args['instance-of'] = nil
|
||||
|
||||
-- render the template
|
||||
local lc_template = template and template:lower() or "citation"
|
||||
local output
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue