569 lines
11 KiB
JavaScript
569 lines
11 KiB
JavaScript
import { util } from '@citation-js/core';
|
|
import { format as formatDate } from '@citation-js/date';
|
|
import types from './biblatexTypes.json';
|
|
import { TYPE, LABEL, TYPE_KEYS, Converters } from './shared.js';
|
|
const nonSpec = [{
|
|
source: 'note',
|
|
target: 'accessed',
|
|
when: {
|
|
source: false,
|
|
target: {
|
|
note: false,
|
|
addendum: false
|
|
}
|
|
},
|
|
convert: {
|
|
toSource(accessed) {
|
|
return `[Online; accessed ${formatDate(accessed)}]`;
|
|
}
|
|
}
|
|
}, {
|
|
source: 'numpages',
|
|
target: 'number-of-pages',
|
|
when: {
|
|
source: {
|
|
pagetotal: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'pmid',
|
|
target: 'PMID',
|
|
when: {
|
|
source: {
|
|
eprinttype(type) {
|
|
return type !== 'pmid';
|
|
},
|
|
archiveprefix(type) {
|
|
return type !== 'pmid';
|
|
}
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'pmcid',
|
|
target: 'PMCID',
|
|
when: {
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 's2id',
|
|
target: 'custom',
|
|
convert: {
|
|
toTarget(S2ID) {
|
|
return {
|
|
S2ID
|
|
};
|
|
},
|
|
toSource({
|
|
S2ID
|
|
}) {
|
|
return S2ID;
|
|
}
|
|
}
|
|
}];
|
|
const aliases = [{
|
|
source: 'annote',
|
|
target: 'annote',
|
|
when: {
|
|
source: {
|
|
annotation: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'address',
|
|
target: 'publisher-place',
|
|
convert: Converters.PICK,
|
|
when: {
|
|
source: {
|
|
location: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: ['eprint', 'archiveprefix'],
|
|
target: 'PMID',
|
|
convert: Converters.EPRINT,
|
|
when: {
|
|
source: {
|
|
eprinttype: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'journal',
|
|
target: 'container-title',
|
|
when: {
|
|
source: {
|
|
maintitle: false,
|
|
booktitle: false,
|
|
journaltitle: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'school',
|
|
target: 'publisher',
|
|
convert: Converters.PICK,
|
|
when: {
|
|
source: {
|
|
institution: false,
|
|
organization: false,
|
|
publisher: false
|
|
},
|
|
target: false
|
|
}
|
|
}];
|
|
export default new util.Translator([...aliases, ...nonSpec, {
|
|
source: 'abstract',
|
|
target: 'abstract'
|
|
}, {
|
|
source: 'urldate',
|
|
target: 'accessed',
|
|
convert: Converters.DATE
|
|
}, {
|
|
source: 'annotation',
|
|
target: 'annote'
|
|
}, {
|
|
source: ['author', 'author+an:orcid'],
|
|
target: 'author',
|
|
convert: Converters.NAMES_ORCID
|
|
}, {
|
|
source: 'library',
|
|
target: 'call-number'
|
|
}, {
|
|
source: 'chapter',
|
|
target: 'chapter-number'
|
|
}, {
|
|
source: 'bookauthor',
|
|
target: 'container-author',
|
|
convert: Converters.NAMES
|
|
}, {
|
|
source: ['maintitle', 'mainsubtitle', 'maintitleaddon'],
|
|
target: 'container-title',
|
|
when: {
|
|
source: true,
|
|
target: {
|
|
'number-of-volumes': true
|
|
}
|
|
},
|
|
convert: Converters.TITLE
|
|
}, {
|
|
source: ['booktitle', 'booksubtitle', 'booktitleaddon'],
|
|
target: 'container-title',
|
|
when: {
|
|
source: {
|
|
maintitle: false
|
|
},
|
|
target: {
|
|
'number-of-volumes': false,
|
|
type(type) {
|
|
return !type || !type.startsWith('article');
|
|
}
|
|
}
|
|
},
|
|
convert: Converters.TITLE
|
|
}, {
|
|
source: ['journaltitle', 'journalsubtitle', 'journaltitleaddon'],
|
|
target: 'container-title',
|
|
when: {
|
|
source: {
|
|
[TYPE]: 'article'
|
|
},
|
|
target: {
|
|
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
|
|
}
|
|
},
|
|
convert: Converters.TITLE
|
|
}, {
|
|
source: 'shortjournal',
|
|
target: 'container-title-short',
|
|
when: {
|
|
source: {
|
|
[TYPE]: 'article'
|
|
},
|
|
target: {
|
|
type: ['article', 'article-newspaper', 'article-journal', 'article-magazine']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'shortjournal',
|
|
target: 'journalAbbreviation',
|
|
when: {
|
|
source: false,
|
|
target: {
|
|
'container-title-short': false
|
|
}
|
|
}
|
|
}, {
|
|
source: 'number',
|
|
target: 'collection-number',
|
|
when: {
|
|
source: {
|
|
[TYPE]: ['book', 'mvbook', 'inbook', 'bookinbook', 'suppbook', 'collection', 'mvcollection', 'incollection', 'suppcollection', 'manual', 'suppperiodical', 'proceedings', 'mvproceedings', 'refererence']
|
|
},
|
|
target: {
|
|
type: ['bill', 'book', 'broadcast', 'chapter', 'dataset', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'figure', 'graphic', 'interview', 'legislation', 'legal_case', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'post', 'post-weblog', 'personal_communication', 'review', 'review-book', 'song', 'speech', 'thesis', 'treaty', 'webpage']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'series',
|
|
target: 'collection-title'
|
|
}, {
|
|
source: 'shortseries',
|
|
target: 'collection-title-short'
|
|
}, {
|
|
source: 'doi',
|
|
target: 'DOI'
|
|
}, {
|
|
source: 'edition',
|
|
target: 'edition'
|
|
}, {
|
|
source: 'editor',
|
|
target: 'editor',
|
|
convert: Converters.NAMES
|
|
}, {
|
|
source: [TYPE, 'entrysubtype', 'type'],
|
|
target: ['type', 'genre'],
|
|
convert: {
|
|
toTarget(type, subtype, typeKey) {
|
|
if (!typeKey) {
|
|
if (type === 'mastersthesis') {
|
|
typeKey = 'mathesis';
|
|
}
|
|
if (type === 'phdthesis') {
|
|
typeKey = 'phdthesis';
|
|
}
|
|
if (type === 'techreport') {
|
|
typeKey = 'techreport';
|
|
}
|
|
}
|
|
return [types.source[type] || 'document', typeKey || subtype];
|
|
},
|
|
toSource(type, genre) {
|
|
const sourceType = types.target[type] || 'misc';
|
|
return genre in TYPE_KEYS ? [sourceType, undefined, genre] : [sourceType, genre];
|
|
}
|
|
}
|
|
}, {
|
|
source: TYPE,
|
|
when: {
|
|
target: {
|
|
type: false
|
|
}
|
|
},
|
|
convert: {
|
|
toSource() {
|
|
return 'misc';
|
|
}
|
|
}
|
|
}, {
|
|
source: 'eventdate',
|
|
target: 'event-date',
|
|
convert: Converters.DATE
|
|
}, {
|
|
source: 'venue',
|
|
target: 'event-place'
|
|
}, {
|
|
source: ['eventtitle', 'eventtitleaddon'],
|
|
target: 'event-title',
|
|
convert: Converters.EVENT_TITLE
|
|
}, {
|
|
source: ['eventtitle', 'eventtitleaddon'],
|
|
target: 'event',
|
|
convert: Converters.EVENT_TITLE,
|
|
when: {
|
|
source: false,
|
|
target: {
|
|
'event-title': false
|
|
}
|
|
}
|
|
}, {
|
|
source: LABEL,
|
|
target: ['id', 'citation-key', 'author', 'issued', 'year-suffix', 'title'],
|
|
convert: Converters.LABEL
|
|
}, {
|
|
source: 'isbn',
|
|
target: 'ISBN'
|
|
}, {
|
|
source: 'issn',
|
|
target: 'ISSN'
|
|
}, {
|
|
source: 'issue',
|
|
target: 'issue',
|
|
when: {
|
|
source: {
|
|
number: false,
|
|
[TYPE]: ['article', 'periodical']
|
|
},
|
|
target: {
|
|
issue(issue) {
|
|
return typeof issue === 'string' && !issue.match(/\d+/);
|
|
},
|
|
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'periodical']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'number',
|
|
target: 'issue',
|
|
when: {
|
|
source: {
|
|
[TYPE]: ['article', 'periodical', 'inproceedings']
|
|
},
|
|
target: {
|
|
issue(issue) {
|
|
return issue && (typeof issue === 'number' || issue.match(/\d+/));
|
|
},
|
|
type: ['article', 'article-journal', 'article-newspaper', 'article-magazine', 'paper-conference', 'periodical']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'date',
|
|
target: 'issued',
|
|
convert: Converters.DATE
|
|
}, {
|
|
source: ['year', 'month', 'day'],
|
|
target: 'issued',
|
|
convert: Converters.YEAR_MONTH,
|
|
when: {
|
|
source: {
|
|
date: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'location',
|
|
target: 'jurisdiction',
|
|
when: {
|
|
source: {
|
|
type: 'patent'
|
|
},
|
|
target: {
|
|
type: 'patent'
|
|
}
|
|
}
|
|
}, {
|
|
source: 'keywords',
|
|
target: 'keyword',
|
|
convert: Converters.KEYWORDS
|
|
}, {
|
|
source: 'language',
|
|
target: 'language',
|
|
convert: Converters.PICK
|
|
}, {
|
|
source: 'langid',
|
|
target: 'language',
|
|
when: {
|
|
source: {
|
|
language: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'note',
|
|
target: 'note'
|
|
}, {
|
|
source: 'addendum',
|
|
target: 'note',
|
|
when: {
|
|
source: {
|
|
note: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'eid',
|
|
target: 'number',
|
|
when: {
|
|
target: {
|
|
type: ['article-journal']
|
|
}
|
|
}
|
|
}, {
|
|
source: ['isan', 'ismn', 'isrn', 'iswc'],
|
|
target: 'number',
|
|
convert: Converters.STANDARD_NUMBERS,
|
|
when: {
|
|
source: {
|
|
[TYPE](type) {
|
|
return type !== 'patent';
|
|
}
|
|
},
|
|
target: {
|
|
type(type) {
|
|
return type !== 'patent';
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
source: 'number',
|
|
target: 'number',
|
|
when: {
|
|
source: {
|
|
[TYPE]: ['patent', 'report', 'techreport', 'legislation']
|
|
},
|
|
target: {
|
|
type: ['patent', 'report', 'legislation']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'origdate',
|
|
target: 'original-date',
|
|
convert: Converters.DATE
|
|
}, {
|
|
source: 'origlocation',
|
|
target: 'original-publisher-place',
|
|
convert: Converters.PICK
|
|
}, {
|
|
source: 'origpublisher',
|
|
target: 'original-publisher',
|
|
convert: Converters.PICK
|
|
}, {
|
|
source: 'origtitle',
|
|
target: 'original-title'
|
|
}, {
|
|
source: 'pages',
|
|
target: 'page',
|
|
when: {
|
|
source: {
|
|
bookpagination: [undefined, 'page']
|
|
}
|
|
},
|
|
convert: Converters.PAGES
|
|
}, {
|
|
source: 'pagetotal',
|
|
target: 'number-of-pages'
|
|
}, {
|
|
source: 'part',
|
|
target: 'part-number'
|
|
}, {
|
|
source: ['eprint', 'eprinttype'],
|
|
target: 'PMID',
|
|
convert: Converters.EPRINT
|
|
}, {
|
|
source: 'location',
|
|
target: 'publisher-place',
|
|
convert: Converters.PICK
|
|
}, {
|
|
source: 'publisher',
|
|
target: 'publisher',
|
|
convert: Converters.PICK,
|
|
when: {
|
|
source: true,
|
|
target: {
|
|
type: ['article', 'article-journal', 'article-magazine', 'article-newspaper', 'bill', 'book', 'broadcast', 'chapter', 'classic', 'collection', 'dataset', 'document', 'entry', 'entry-dictionary', 'entry-encyclopedia', 'event', 'figure', 'graphic', 'hearing', 'interview', 'legal_case', 'legislation', 'manuscript', 'map', 'motion_picture', 'musical_score', 'pamphlet', 'paper-conference', 'patent', 'performance', 'periodical', 'personal_communication', 'post', 'post-weblog', 'regulation', 'review', 'review-book', 'software', 'song', 'speech', 'standard', 'treaty']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'organization',
|
|
target: 'publisher',
|
|
convert: Converters.PICK,
|
|
when: {
|
|
source: {
|
|
publisher: false
|
|
},
|
|
target: {
|
|
type: 'webpage'
|
|
}
|
|
}
|
|
}, {
|
|
source: 'institution',
|
|
target: 'publisher',
|
|
convert: Converters.PICK,
|
|
when: {
|
|
source: {
|
|
publisher: false,
|
|
organization: false
|
|
},
|
|
target: {
|
|
type: ['report', 'thesis']
|
|
}
|
|
}
|
|
}, {
|
|
source: 'howpublished',
|
|
target: 'publisher',
|
|
convert: Converters.PICK,
|
|
when: {
|
|
source: {
|
|
howpublished(howPublished) {
|
|
return howPublished && !howPublished.startsWith('http');
|
|
},
|
|
publisher: false,
|
|
organization: false,
|
|
institution: false
|
|
},
|
|
target: {
|
|
type: 'manuscript'
|
|
}
|
|
}
|
|
}, {
|
|
source: ['pages', 'bookpagination'],
|
|
target: 'section',
|
|
when: {
|
|
source: {
|
|
bookpagination: 'section'
|
|
},
|
|
target: {
|
|
page: false
|
|
}
|
|
},
|
|
convert: {
|
|
toTarget(section) {
|
|
return section;
|
|
},
|
|
toSource(section) {
|
|
return [section, 'section'];
|
|
}
|
|
}
|
|
}, {
|
|
source: 'pubstate',
|
|
target: 'status',
|
|
convert: Converters.STATUS
|
|
}, {
|
|
source: 'shorttitle',
|
|
target: 'title-short'
|
|
}, {
|
|
source: 'shorttitle',
|
|
target: 'shortTitle',
|
|
when: {
|
|
source: false,
|
|
target: {
|
|
'title-short': false
|
|
}
|
|
}
|
|
}, {
|
|
source: ['title', 'subtitle', 'titleaddon'],
|
|
target: 'title',
|
|
convert: Converters.TITLE
|
|
}, {
|
|
source: 'translator',
|
|
target: 'translator',
|
|
convert: Converters.NAMES
|
|
}, {
|
|
source: 'url',
|
|
target: 'URL'
|
|
}, {
|
|
source: 'howpublished',
|
|
target: 'URL',
|
|
convert: Converters.HOW_PUBLISHED,
|
|
when: {
|
|
source: {
|
|
url: false
|
|
},
|
|
target: false
|
|
}
|
|
}, {
|
|
source: 'version',
|
|
target: 'version'
|
|
}, {
|
|
source: 'volume',
|
|
target: 'volume'
|
|
}, {
|
|
source: 'volumes',
|
|
target: 'number-of-volumes'
|
|
}, {
|
|
source: ['issuetitle', 'issuesubtitle', 'issuetitleaddon'],
|
|
target: 'volume-title',
|
|
convert: Converters.TITLE
|
|
}]); |