commit 9101cb487f35f913f6b6af60a40a9a7d4f3e3824
parent 4c6463413460fa03f814e0c66a5082b6cf45c294
Author: Sebastian Karcher <karcher@u.northwestern.edu>
Date: Tue, 13 Sep 2016 17:31:26 -0600
Parse DOI: prefixed DOI from Extra (#1089)
Diffstat:
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/chrome/content/zotero/xpcom/utilities.js b/chrome/content/zotero/xpcom/utilities.js
@@ -1634,6 +1634,8 @@ Zotero.Utilities = {
if(m) cslItem.PMID = m[1];
m = /(?:^|\n)PMCID:\s*((?:PMC)?[0-9]+)/.exec(extra);
if(m) cslItem.PMCID = m[1];
+ m = /(?:^|\n)DOI:\s*(10\.[0-9]{4,}\/[^\s]*[^\s\.,])/.exec(extra);
+ if(m) cslItem.DOI = m[1];
}
//this._cache[zoteroItem.id] = cslItem;
diff --git a/test/tests/utilities.js b/test/tests/utilities.js
@@ -237,13 +237,14 @@ describe("Zotero.Utilities", function() {
});
it("should map additional fields from Extra field", function() {
let item = new Zotero.Item('journalArticle');
- item.setField('extra', 'PMID: 12345\nPMCID:123456');
+ item.setField('extra', 'PMID: 12345\nPMCID:123456\nDOI:10.5064/F6PN93H4');
item = Zotero.Items.get(item.save());
let cslJSON = Zotero.Utilities.itemToCSLJSON(item);
assert.equal(cslJSON.PMID, '12345', 'PMID from Extra is mapped to PMID');
assert.equal(cslJSON.PMCID, '123456', 'PMCID from Extra is mapped to PMCID');
+ assert.equal(cslJSON.DOI, '10.5064/F6PN93H4', 'DOI from Extra field is mapped to DOI');
item.setField('extra', 'PMID: 12345');
item.save();
@@ -251,20 +252,23 @@ describe("Zotero.Utilities", function() {
assert.equal(cslJSON.PMID, '12345', 'single-line entry is extracted correctly');
- item.setField('extra', 'some junk: note\nPMID: 12345\nstuff in-between\nPMCID: 123456\nlast bit of junk!');
+ item.setField('extra', 'some junk: note\nPMID: 12345\nstuff in-between\nPMCID: 123456\nDOI: 10.5064/F6PN93H4\nlast bit of junk!');
item.save();
cslJSON = Zotero.Utilities.itemToCSLJSON(item);
assert.equal(cslJSON.PMID, '12345', 'PMID from mixed Extra field is mapped to PMID');
assert.equal(cslJSON.PMCID, '123456', 'PMCID from mixed Extra field is mapped to PMCID');
+ assert.equal(cslJSON.DOI, '10.5064/F6PN93H4', 'DOI from mixed Extra field is mapped to DOI');
- item.setField('extra', 'a\n PMID: 12345\nfoo PMCID: 123456');
+ item.setField('extra', 'a\n PMID: 12345\nfoo PMCID: 123456\n10.5064/F6PN93H4');
item.save();
cslJSON = Zotero.Utilities.itemToCSLJSON(item);
assert.isUndefined(cslJSON.PMCID, 'field label must not be preceded by other text');
assert.isUndefined(cslJSON.PMID, 'field label must not be preceded by a space');
- assert.equal(cslJSON.note, 'a\n PMID: 12345\nfoo PMCID: 123456', 'note is left untouched if nothing is extracted');
+ assert.isUndefined(cslJSON.DOI, 'DOI must be preceded by label');
+ assert.equal(cslJSON.note, 'a\n PMID: 12345\nfoo PMCID: 123456\n10.5064/F6PN93H4', 'note is left untouched if nothing is extracted');
+
item.setField('extra', 'something\npmid: 12345\n');
item.save();