@fiduswriter/document 0.1.0-alpha.7 → 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exporter/jats/bibliography.d.ts +29 -2
- package/dist/exporter/jats/bibliography.d.ts.map +1 -1
- package/dist/exporter/jats/bibliography.js +122 -104
- package/dist/exporter/jats/bibliography.js.map +1 -1
- package/dist/exporter/jats/citations.d.ts.map +1 -1
- package/dist/exporter/jats/citations.js +4 -1
- package/dist/exporter/jats/citations.js.map +1 -1
- package/package.json +1 -1
- package/src/exporter/jats/bibliography.ts +187 -136
- package/src/exporter/jats/citations.ts +11 -1
|
@@ -1,3 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
interface CSLName {
|
|
2
|
+
family?: string;
|
|
3
|
+
given?: string;
|
|
4
|
+
literal?: string;
|
|
5
|
+
prefix?: string;
|
|
6
|
+
suffix?: string;
|
|
7
|
+
}
|
|
8
|
+
interface CSLDate {
|
|
9
|
+
"date-parts"?: number[][];
|
|
10
|
+
literal?: string;
|
|
11
|
+
}
|
|
12
|
+
interface CSLItem {
|
|
13
|
+
type?: string;
|
|
14
|
+
title?: string;
|
|
15
|
+
"container-title"?: string;
|
|
16
|
+
author?: CSLName[];
|
|
17
|
+
editor?: CSLName[];
|
|
18
|
+
publisher?: string | string[];
|
|
19
|
+
"publisher-place"?: string | string[];
|
|
20
|
+
issued?: CSLDate | string;
|
|
21
|
+
volume?: string;
|
|
22
|
+
issue?: string;
|
|
23
|
+
page?: string;
|
|
24
|
+
DOI?: string;
|
|
25
|
+
URL?: string;
|
|
26
|
+
accessed?: CSLDate | string;
|
|
27
|
+
}
|
|
28
|
+
export declare function jatsBib(bib: CSLItem, id: number): string;
|
|
29
|
+
export {};
|
|
3
30
|
//# sourceMappingURL=bibliography.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bibliography.d.ts","sourceRoot":"","sources":["../../../src/exporter/jats/bibliography.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bibliography.d.ts","sourceRoot":"","sources":["../../../src/exporter/jats/bibliography.ts"],"names":[],"mappings":"AAGA,UAAU,OAAO;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,OAAO;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,OAAO;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC9B;AAuID,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAmFxD"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { escapeText } from "fwtoolkit";
|
|
2
|
-
import { convertTexts } from "./text.js";
|
|
3
2
|
// This list is based on values listed at https://jats.nlm.nih.gov/archiving/tag-library/1.2/attribute/publication-type.html
|
|
4
3
|
// And the advice given here: https://jats4r.org/citations/#recommendation
|
|
5
4
|
const PUBLICATION_TYPES = {
|
|
@@ -40,118 +39,137 @@ const PUBLICATION_TYPES = {
|
|
|
40
39
|
thesis: "standard",
|
|
41
40
|
unpublished: "standard"
|
|
42
41
|
};
|
|
42
|
+
function text(value) {
|
|
43
|
+
if (value === undefined || value === null) {
|
|
44
|
+
return "";
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(value)) {
|
|
47
|
+
return value.map(text).join("");
|
|
48
|
+
}
|
|
49
|
+
return escapeText(String(value));
|
|
50
|
+
}
|
|
51
|
+
function renderName(name) {
|
|
52
|
+
if (name.literal) {
|
|
53
|
+
return `<collab>${text(name.literal)}</collab>`;
|
|
54
|
+
}
|
|
55
|
+
let nameStart = "<name>";
|
|
56
|
+
if (name.family) {
|
|
57
|
+
nameStart += `<surname>${text(name.family)}</surname>`;
|
|
58
|
+
}
|
|
59
|
+
if (name.given) {
|
|
60
|
+
nameStart += ` <given-names>${text(name.given)}</given-names>`;
|
|
61
|
+
}
|
|
62
|
+
if (name.prefix) {
|
|
63
|
+
nameStart += ` <prefix>${text(name.prefix)}</prefix>`;
|
|
64
|
+
}
|
|
65
|
+
if (name.suffix) {
|
|
66
|
+
nameStart += ` <suffix>${text(name.suffix)}</suffix>`;
|
|
67
|
+
}
|
|
68
|
+
return nameStart + "</name>";
|
|
69
|
+
}
|
|
70
|
+
function renderNameList(names, personGroupType) {
|
|
71
|
+
if (!names || !names.length) {
|
|
72
|
+
return "";
|
|
73
|
+
}
|
|
74
|
+
return `<person-group person-group-type="${personGroupType}">${names
|
|
75
|
+
.map(renderName)
|
|
76
|
+
.join(", ")}</person-group>`;
|
|
77
|
+
}
|
|
78
|
+
function parseDateParts(dateParts) {
|
|
79
|
+
return {
|
|
80
|
+
year: dateParts && dateParts[0] ? String(dateParts[0]) : "",
|
|
81
|
+
month: dateParts && dateParts[1] ? String(dateParts[1]) : "",
|
|
82
|
+
day: dateParts && dateParts[2] ? String(dateParts[2]) : ""
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function renderDate(issued, dateType) {
|
|
86
|
+
if (!issued) {
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
let isoDate;
|
|
90
|
+
let year = "";
|
|
91
|
+
let month = "";
|
|
92
|
+
let day = "";
|
|
93
|
+
if (typeof issued === "string") {
|
|
94
|
+
isoDate = issued;
|
|
95
|
+
const parts = issued.split("-");
|
|
96
|
+
year = parts[0] || "";
|
|
97
|
+
month = parts[1] || "";
|
|
98
|
+
day = parts[2] || "";
|
|
99
|
+
}
|
|
100
|
+
else if (issued["date-parts"] && issued["date-parts"][0]) {
|
|
101
|
+
const parts = parseDateParts(issued["date-parts"][0]);
|
|
102
|
+
year = parts.year;
|
|
103
|
+
month = parts.month;
|
|
104
|
+
day = parts.day;
|
|
105
|
+
isoDate = `${year}${month ? "-" + month.padStart(2, "0") : ""}${day ? "-" + day.padStart(2, "0") : ""}`;
|
|
106
|
+
}
|
|
107
|
+
else if (issued.literal) {
|
|
108
|
+
isoDate = issued.literal;
|
|
109
|
+
year = isoDate.split("-")[0] || "";
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return "";
|
|
113
|
+
}
|
|
114
|
+
return `<date iso-8601-date="${escapeText(isoDate)}" date-type="${dateType}">${day ? `<day>${text(day)}</day>` : ""}${month ? `<month>${text(month)}</month>` : ""}<year>${text(year)}</year></date>`;
|
|
115
|
+
}
|
|
43
116
|
export function jatsBib(bib, id) {
|
|
44
|
-
let start =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// Type
|
|
48
|
-
const publicationType = PUBLICATION_TYPES[bib.bib_type || ""] ?? "standard";
|
|
117
|
+
let start = `<ref id="ref-${id}">`;
|
|
118
|
+
let end = "</ref>";
|
|
119
|
+
const publicationType = PUBLICATION_TYPES[bib.type || ""] ?? "standard";
|
|
49
120
|
start += `<element-citation publication-type="${publicationType}">`;
|
|
50
121
|
end = "</element-citation>" + end;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (
|
|
54
|
-
start += `<
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
return `<collab>${convertTexts((a.literal))}</collab>`;
|
|
59
|
-
}
|
|
60
|
-
let nameStart = `<name><surname>${convertTexts((a.family || ""))}</surname> <given-names>${convertTexts((a.given || ""))}</given-names>`;
|
|
61
|
-
if (a.prefix && a.prefix.length) {
|
|
62
|
-
nameStart += ` <prefix>${convertTexts((a.prefix))}</prefix>`;
|
|
63
|
-
}
|
|
64
|
-
if (a.suffix && a.suffix.length) {
|
|
65
|
-
nameStart += ` <suffix>${convertTexts((a.suffix))}</suffix>`;
|
|
66
|
-
}
|
|
67
|
-
const nameEnd = "</name>";
|
|
68
|
-
return nameStart + nameEnd;
|
|
69
|
-
})
|
|
70
|
-
.join(", ")}</person-group>`;
|
|
71
|
-
}
|
|
72
|
-
// title && container title
|
|
73
|
-
if (fields.title) {
|
|
74
|
-
if (fields.shortjournal ||
|
|
75
|
-
fields.booktitle ||
|
|
76
|
-
fields.journaltitle) {
|
|
77
|
-
start += `<source>${convertTexts(String(fields.shortjournal || fields.booktitle || fields.journaltitle))}</source>`;
|
|
78
|
-
start += `<article-title>${convertTexts(String(fields.title))}</article-title>`;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
start += `<source>${convertTexts(String(fields.title))}</source>`;
|
|
122
|
+
start += renderNameList(bib.author, "author");
|
|
123
|
+
const containerTitle = bib["container-title"];
|
|
124
|
+
if (containerTitle) {
|
|
125
|
+
start += `<source>${text(containerTitle)}</source>`;
|
|
126
|
+
if (bib.title) {
|
|
127
|
+
const titleTag = bib.type === "chapter" ? "chapter-title" : "article-title";
|
|
128
|
+
start += `<${titleTag}>${text(bib.title)}</${titleTag}>`;
|
|
82
129
|
}
|
|
83
130
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// date
|
|
117
|
-
if (fields.date && String(fields.date).length) {
|
|
118
|
-
const date = String(fields.date);
|
|
119
|
-
const dateParts = date.split("-");
|
|
120
|
-
start += `<date iso-8601-date="${date}" date-type="published">${dateParts.length > 2 ? `<day>${dateParts[2]}</day>` : ""}${dateParts.length > 1 ? `<month>${dateParts[1]}</month>` : ""}<year>${dateParts[0]}</year></date>`;
|
|
121
|
-
}
|
|
122
|
-
// volume
|
|
123
|
-
if (fields.volume && String(fields.volume).length) {
|
|
124
|
-
start += `<volume>${convertTexts(String(fields.volume))}</volume>`;
|
|
125
|
-
}
|
|
126
|
-
// issue
|
|
127
|
-
if (fields.issue && String(fields.issue).length) {
|
|
128
|
-
start += `<issue>${convertTexts(String(fields.issue))}</issue>`;
|
|
129
|
-
}
|
|
130
|
-
// pages
|
|
131
|
-
if (fields.pages && Array.isArray(fields.pages) && fields.pages.length) {
|
|
132
|
-
const pages = fields.pages;
|
|
133
|
-
start += `<fpage>${convertTexts((pages[0][0]))}</fpage>`;
|
|
134
|
-
const lastPageGroup = pages.slice(-1)[0];
|
|
135
|
-
start += `<lpage>${convertTexts((lastPageGroup.slice(-1)[0]))}</lpage>`;
|
|
136
|
-
if (pages.length > 1) {
|
|
137
|
-
start += `<page-range>${pages
|
|
138
|
-
.map(pageGroup => pageGroup.map(page => convertTexts((page))).join("-"))
|
|
139
|
-
.join(", ")}</page-range>`;
|
|
131
|
+
else if (bib.title) {
|
|
132
|
+
start += `<source>${text(bib.title)}</source>`;
|
|
133
|
+
}
|
|
134
|
+
start += renderNameList(bib.editor, "editor");
|
|
135
|
+
if (bib.publisher) {
|
|
136
|
+
const publishers = Array.isArray(bib.publisher)
|
|
137
|
+
? bib.publisher
|
|
138
|
+
: [bib.publisher];
|
|
139
|
+
publishers.forEach(publisher => (start += `<publisher-name>${text(publisher)}</publisher-name>`));
|
|
140
|
+
}
|
|
141
|
+
if (bib["publisher-place"]) {
|
|
142
|
+
const places = Array.isArray(bib["publisher-place"])
|
|
143
|
+
? bib["publisher-place"]
|
|
144
|
+
: [bib["publisher-place"]];
|
|
145
|
+
places.forEach(place => (start += `<publisher-loc>${text(place)}</publisher-loc>`));
|
|
146
|
+
}
|
|
147
|
+
start += renderDate(bib.issued, "published");
|
|
148
|
+
if (bib.volume) {
|
|
149
|
+
start += `<volume>${text(bib.volume)}</volume>`;
|
|
150
|
+
}
|
|
151
|
+
if (bib.issue) {
|
|
152
|
+
start += `<issue>${text(bib.issue)}</issue>`;
|
|
153
|
+
}
|
|
154
|
+
if (bib.page) {
|
|
155
|
+
const pageStr = String(bib.page);
|
|
156
|
+
const pageParts = pageStr.split("-");
|
|
157
|
+
start += `<fpage>${text(pageParts[0])}</fpage>`;
|
|
158
|
+
if (pageParts.length > 1) {
|
|
159
|
+
start += `<lpage>${text(pageParts[pageParts.length - 1])}</lpage>`;
|
|
160
|
+
}
|
|
161
|
+
if (pageParts.length > 2) {
|
|
162
|
+
start += `<page-range>${text(pageStr)}</page-range>`;
|
|
140
163
|
}
|
|
141
164
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
start += `<pub-id pub-id-type="doi">${escapeText(String(fields.doi))}</pub-id>`;
|
|
165
|
+
if (bib.DOI) {
|
|
166
|
+
start += `<pub-id pub-id-type="doi">${text(bib.DOI)}</pub-id>`;
|
|
145
167
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
start += `<ext-link ext-link-type="web" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${escapeText(String(fields.url))}"/>`;
|
|
168
|
+
if (bib.URL) {
|
|
169
|
+
start += `<ext-link ext-link-type="web" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${escapeText(bib.URL)}"/>`;
|
|
149
170
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const date = String(fields.urldate);
|
|
153
|
-
const dateParts = date.split("-");
|
|
154
|
-
start += `<date-in-citation content-type="access-date" iso-8601-date="${date}">${dateParts.length > 2 ? `<day>${dateParts[2]}</day>` : ""}${dateParts.length > 1 ? `<month>${dateParts[1]}</month>` : ""}<year>${dateParts[0]}</year></date-in-citation>`;
|
|
171
|
+
if (bib.accessed) {
|
|
172
|
+
start += renderDate(bib.accessed, "access-date").replace('date-type="access-date"', 'content-type="access-date"');
|
|
155
173
|
}
|
|
156
174
|
return start + end;
|
|
157
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bibliography.js","sourceRoot":"","sources":["../../../src/exporter/jats/bibliography.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"bibliography.js","sourceRoot":"","sources":["../../../src/exporter/jats/bibliography.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citations.d.ts","sourceRoot":"","sources":["../../../src/exporter/jats/citations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"citations.d.ts","sourceRoot":"","sources":["../../../src/exporter/jats/citations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAA;AAEzD,OAAO,KAAK,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAA;AAezD,qBAAa,qBAAqB;IAC9B,GAAG,EAAE,SAAS,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IAER,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,eAAe,GAAG,KAAK,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;gBAEvB,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;IAYlD,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAqGnC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CSLExporter } from "biblatex-csl-converter";
|
|
1
2
|
import { FormatCitations } from "../../citations/format.js";
|
|
2
3
|
import { jatsBib } from "./bibliography.js";
|
|
3
4
|
export class JATSExporterCitations {
|
|
@@ -64,9 +65,11 @@ export class JATSExporterCitations {
|
|
|
64
65
|
if (!bibliography) {
|
|
65
66
|
return Promise.resolve();
|
|
66
67
|
}
|
|
68
|
+
const entryIds = bibliography[0].entry_ids.map(id => String(id));
|
|
69
|
+
const cslItems = new CSLExporter(this.bibDB.db, entryIds).parse();
|
|
67
70
|
bibliography[0].entry_ids.forEach((id, index) => {
|
|
68
71
|
this.jatsIdConvert[id] = index + 1;
|
|
69
|
-
this.jatsBib += jatsBib(
|
|
72
|
+
this.jatsBib += jatsBib((cslItems[String(id)] || {}), index + 1);
|
|
70
73
|
});
|
|
71
74
|
this.citationTexts = citFm.citationTexts.map((ref, index) => {
|
|
72
75
|
const content = ref
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citations.js","sourceRoot":"","sources":["../../../src/exporter/jats/citations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"citations.js","sourceRoot":"","sources":["../../../src/exporter/jats/citations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,35 @@
|
|
|
1
1
|
import {escapeText} from "fwtoolkit"
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
// CSL-JSON item as produced by biblatex-csl-converter's CSLExporter.
|
|
4
|
+
interface CSLName {
|
|
5
|
+
family?: string
|
|
6
|
+
given?: string
|
|
7
|
+
literal?: string
|
|
8
|
+
prefix?: string
|
|
9
|
+
suffix?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface CSLDate {
|
|
13
|
+
"date-parts"?: number[][]
|
|
14
|
+
literal?: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface CSLItem {
|
|
18
|
+
type?: string
|
|
19
|
+
title?: string
|
|
20
|
+
"container-title"?: string
|
|
21
|
+
author?: CSLName[]
|
|
22
|
+
editor?: CSLName[]
|
|
23
|
+
publisher?: string | string[]
|
|
24
|
+
"publisher-place"?: string | string[]
|
|
25
|
+
issued?: CSLDate | string
|
|
26
|
+
volume?: string
|
|
27
|
+
issue?: string
|
|
28
|
+
page?: string
|
|
29
|
+
DOI?: string
|
|
30
|
+
URL?: string
|
|
31
|
+
accessed?: CSLDate | string
|
|
32
|
+
}
|
|
5
33
|
|
|
6
34
|
// This list is based on values listed at https://jats.nlm.nih.gov/archiving/tag-library/1.2/attribute/publication-type.html
|
|
7
35
|
// And the advice given here: https://jats4r.org/citations/#recommendation
|
|
@@ -44,155 +72,178 @@ const PUBLICATION_TYPES: Record<string, string> = {
|
|
|
44
72
|
unpublished: "standard"
|
|
45
73
|
}
|
|
46
74
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
75
|
+
function text(value: unknown): string {
|
|
76
|
+
if (value === undefined || value === null) {
|
|
77
|
+
return ""
|
|
78
|
+
}
|
|
79
|
+
if (Array.isArray(value)) {
|
|
80
|
+
return value.map(text).join("")
|
|
81
|
+
}
|
|
82
|
+
return escapeText(String(value))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function renderName(name: CSLName): string {
|
|
86
|
+
if (name.literal) {
|
|
87
|
+
return `<collab>${text(name.literal)}</collab>`
|
|
88
|
+
}
|
|
89
|
+
let nameStart = "<name>"
|
|
90
|
+
if (name.family) {
|
|
91
|
+
nameStart += `<surname>${text(name.family)}</surname>`
|
|
92
|
+
}
|
|
93
|
+
if (name.given) {
|
|
94
|
+
nameStart += ` <given-names>${text(name.given)}</given-names>`
|
|
95
|
+
}
|
|
96
|
+
if (name.prefix) {
|
|
97
|
+
nameStart += ` <prefix>${text(name.prefix)}</prefix>`
|
|
98
|
+
}
|
|
99
|
+
if (name.suffix) {
|
|
100
|
+
nameStart += ` <suffix>${text(name.suffix)}</suffix>`
|
|
101
|
+
}
|
|
102
|
+
return nameStart + "</name>"
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function renderNameList(
|
|
106
|
+
names: CSLName[] | undefined,
|
|
107
|
+
personGroupType: string
|
|
108
|
+
): string {
|
|
109
|
+
if (!names || !names.length) {
|
|
110
|
+
return ""
|
|
111
|
+
}
|
|
112
|
+
return `<person-group person-group-type="${personGroupType}">${names
|
|
113
|
+
.map(renderName)
|
|
114
|
+
.join(", ")}</person-group>`
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function parseDateParts(dateParts?: number[]): {
|
|
118
|
+
year: string
|
|
119
|
+
month: string
|
|
120
|
+
day: string
|
|
121
|
+
} {
|
|
122
|
+
return {
|
|
123
|
+
year: dateParts && dateParts[0] ? String(dateParts[0]) : "",
|
|
124
|
+
month: dateParts && dateParts[1] ? String(dateParts[1]) : "",
|
|
125
|
+
day: dateParts && dateParts[2] ? String(dateParts[2]) : ""
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function renderDate(
|
|
130
|
+
issued: CSLDate | string | undefined,
|
|
131
|
+
dateType: string
|
|
132
|
+
): string {
|
|
133
|
+
if (!issued) {
|
|
134
|
+
return ""
|
|
135
|
+
}
|
|
136
|
+
let isoDate: string
|
|
137
|
+
let year = ""
|
|
138
|
+
let month = ""
|
|
139
|
+
let day = ""
|
|
140
|
+
if (typeof issued === "string") {
|
|
141
|
+
isoDate = issued
|
|
142
|
+
const parts = issued.split("-")
|
|
143
|
+
year = parts[0] || ""
|
|
144
|
+
month = parts[1] || ""
|
|
145
|
+
day = parts[2] || ""
|
|
146
|
+
} else if (issued["date-parts"] && issued["date-parts"][0]) {
|
|
147
|
+
const parts = parseDateParts(issued["date-parts"][0])
|
|
148
|
+
year = parts.year
|
|
149
|
+
month = parts.month
|
|
150
|
+
day = parts.day
|
|
151
|
+
isoDate = `${year}${month ? "-" + month.padStart(2, "0") : ""}${
|
|
152
|
+
day ? "-" + day.padStart(2, "0") : ""
|
|
153
|
+
}`
|
|
154
|
+
} else if (issued.literal) {
|
|
155
|
+
isoDate = issued.literal
|
|
156
|
+
year = isoDate.split("-")[0] || ""
|
|
157
|
+
} else {
|
|
158
|
+
return ""
|
|
159
|
+
}
|
|
160
|
+
return `<date iso-8601-date="${escapeText(isoDate)}" date-type="${dateType}">${
|
|
161
|
+
day ? `<day>${text(day)}</day>` : ""
|
|
162
|
+
}${month ? `<month>${text(month)}</month>` : ""}<year>${text(
|
|
163
|
+
year
|
|
164
|
+
)}</year></date>`
|
|
53
165
|
}
|
|
54
166
|
|
|
55
|
-
export function jatsBib(bib:
|
|
56
|
-
let start = ""
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
// Type
|
|
61
|
-
const publicationType = PUBLICATION_TYPES[bib.bib_type || ""] ?? "standard"
|
|
167
|
+
export function jatsBib(bib: CSLItem, id: number): string {
|
|
168
|
+
let start = `<ref id="ref-${id}">`
|
|
169
|
+
let end = "</ref>"
|
|
170
|
+
|
|
171
|
+
const publicationType = PUBLICATION_TYPES[bib.type || ""] ?? "standard"
|
|
62
172
|
start += `<element-citation publication-type="${publicationType}">`
|
|
63
173
|
end = "</element-citation>" + end
|
|
64
174
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (
|
|
69
|
-
start += `<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
let nameStart = `<name><surname>${convertTexts((a.family || "") as unknown as FidusNode[])}</surname> <given-names>${convertTexts((a.given || "") as unknown as FidusNode[])}</given-names>`
|
|
76
|
-
if (a.prefix && a.prefix.length) {
|
|
77
|
-
nameStart += ` <prefix>${convertTexts((a.prefix) as unknown as FidusNode[])}</prefix>`
|
|
78
|
-
}
|
|
79
|
-
if (a.suffix && a.suffix.length) {
|
|
80
|
-
nameStart += ` <suffix>${convertTexts((a.suffix) as unknown as FidusNode[])}</suffix>`
|
|
81
|
-
}
|
|
82
|
-
const nameEnd = "</name>"
|
|
83
|
-
return nameStart + nameEnd
|
|
84
|
-
})
|
|
85
|
-
.join(", ")}</person-group>`
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// title && container title
|
|
89
|
-
if (fields.title) {
|
|
90
|
-
if (
|
|
91
|
-
fields.shortjournal ||
|
|
92
|
-
fields.booktitle ||
|
|
93
|
-
fields.journaltitle
|
|
94
|
-
) {
|
|
95
|
-
start += `<source>${convertTexts((String(fields.shortjournal || fields.booktitle || fields.journaltitle) as unknown as FidusNode[]))}</source>`
|
|
96
|
-
start += `<article-title>${convertTexts((String(fields.title) as unknown as FidusNode[]))}</article-title>`
|
|
97
|
-
} else {
|
|
98
|
-
start += `<source>${convertTexts((String(fields.title) as unknown as FidusNode[]))}</source>`
|
|
175
|
+
start += renderNameList(bib.author, "author")
|
|
176
|
+
|
|
177
|
+
const containerTitle = bib["container-title"]
|
|
178
|
+
if (containerTitle) {
|
|
179
|
+
start += `<source>${text(containerTitle)}</source>`
|
|
180
|
+
if (bib.title) {
|
|
181
|
+
const titleTag =
|
|
182
|
+
bib.type === "chapter" ? "chapter-title" : "article-title"
|
|
183
|
+
start += `<${titleTag}>${text(bib.title)}</${titleTag}>`
|
|
99
184
|
}
|
|
185
|
+
} else if (bib.title) {
|
|
186
|
+
start += `<source>${text(bib.title)}</source>`
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
start += renderNameList(bib.editor, "editor")
|
|
190
|
+
|
|
191
|
+
if (bib.publisher) {
|
|
192
|
+
const publishers = Array.isArray(bib.publisher)
|
|
193
|
+
? bib.publisher
|
|
194
|
+
: [bib.publisher]
|
|
195
|
+
publishers.forEach(
|
|
196
|
+
publisher =>
|
|
197
|
+
(start += `<publisher-name>${text(publisher)}</publisher-name>`)
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (bib["publisher-place"]) {
|
|
202
|
+
const places = Array.isArray(bib["publisher-place"])
|
|
203
|
+
? bib["publisher-place"]
|
|
204
|
+
: [bib["publisher-place"]]
|
|
205
|
+
places.forEach(
|
|
206
|
+
place => (start += `<publisher-loc>${text(place)}</publisher-loc>`)
|
|
207
|
+
)
|
|
100
208
|
}
|
|
101
209
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// publisher
|
|
124
|
-
if (fields.publisher && Array.isArray(fields.publisher) && fields.publisher.length) {
|
|
125
|
-
start += fields.publisher
|
|
126
|
-
.map(
|
|
127
|
-
publisher =>
|
|
128
|
-
`<publisher-name>${convertTexts((String(publisher) as unknown as FidusNode[]))}</publisher-name>`
|
|
129
|
-
)
|
|
130
|
-
.join("")
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// location
|
|
134
|
-
if (fields.location && Array.isArray(fields.location) && fields.location.length) {
|
|
135
|
-
start += fields.location
|
|
136
|
-
.map(
|
|
137
|
-
location =>
|
|
138
|
-
`<publisher-loc>${convertTexts((String(location) as unknown as FidusNode[]))}</publisher-loc>`
|
|
139
|
-
)
|
|
140
|
-
.join("")
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// date
|
|
144
|
-
if (fields.date && String(fields.date).length) {
|
|
145
|
-
const date = String(fields.date)
|
|
146
|
-
const dateParts = date.split("-")
|
|
147
|
-
start += `<date iso-8601-date="${date}" date-type="published">${
|
|
148
|
-
dateParts.length > 2 ? `<day>${dateParts[2]}</day>` : ""
|
|
149
|
-
}${
|
|
150
|
-
dateParts.length > 1 ? `<month>${dateParts[1]}</month>` : ""
|
|
151
|
-
}<year>${dateParts[0]}</year></date>`
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// volume
|
|
155
|
-
if (fields.volume && String(fields.volume).length) {
|
|
156
|
-
start += `<volume>${convertTexts((String(fields.volume) as unknown as FidusNode[]))}</volume>`
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// issue
|
|
160
|
-
if (fields.issue && String(fields.issue).length) {
|
|
161
|
-
start += `<issue>${convertTexts((String(fields.issue) as unknown as FidusNode[]))}</issue>`
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// pages
|
|
165
|
-
if (fields.pages && Array.isArray(fields.pages) && fields.pages.length) {
|
|
166
|
-
const pages = fields.pages as Array<string[]>
|
|
167
|
-
start += `<fpage>${convertTexts((pages[0][0]) as unknown as FidusNode[])}</fpage>`
|
|
168
|
-
const lastPageGroup = pages.slice(-1)[0]
|
|
169
|
-
start += `<lpage>${convertTexts((lastPageGroup.slice(-1)[0]) as unknown as FidusNode[])}</lpage>`
|
|
170
|
-
if (pages.length > 1) {
|
|
171
|
-
start += `<page-range>${pages
|
|
172
|
-
.map(pageGroup => pageGroup.map(page => convertTexts((page) as unknown as FidusNode[])).join("-"))
|
|
173
|
-
.join(", ")}</page-range>`
|
|
210
|
+
start += renderDate(bib.issued, "published")
|
|
211
|
+
|
|
212
|
+
if (bib.volume) {
|
|
213
|
+
start += `<volume>${text(bib.volume)}</volume>`
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (bib.issue) {
|
|
217
|
+
start += `<issue>${text(bib.issue)}</issue>`
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (bib.page) {
|
|
221
|
+
const pageStr = String(bib.page)
|
|
222
|
+
const pageParts = pageStr.split("-")
|
|
223
|
+
start += `<fpage>${text(pageParts[0])}</fpage>`
|
|
224
|
+
if (pageParts.length > 1) {
|
|
225
|
+
start += `<lpage>${text(pageParts[pageParts.length - 1])}</lpage>`
|
|
226
|
+
}
|
|
227
|
+
if (pageParts.length > 2) {
|
|
228
|
+
start += `<page-range>${text(pageStr)}</page-range>`
|
|
174
229
|
}
|
|
175
230
|
}
|
|
176
231
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
start += `<pub-id pub-id-type="doi">${escapeText(String(fields.doi))}</pub-id>`
|
|
232
|
+
if (bib.DOI) {
|
|
233
|
+
start += `<pub-id pub-id-type="doi">${text(bib.DOI)}</pub-id>`
|
|
180
234
|
}
|
|
181
235
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
236
|
+
if (bib.URL) {
|
|
237
|
+
start += `<ext-link ext-link-type="web" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${escapeText(
|
|
238
|
+
bib.URL
|
|
239
|
+
)}"/>`
|
|
185
240
|
}
|
|
186
241
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
dateParts.length > 2 ? `<day>${dateParts[2]}</day>` : ""
|
|
193
|
-
}${
|
|
194
|
-
dateParts.length > 1 ? `<month>${dateParts[1]}</month>` : ""
|
|
195
|
-
}<year>${dateParts[0]}</year></date-in-citation>`
|
|
242
|
+
if (bib.accessed) {
|
|
243
|
+
start += renderDate(bib.accessed, "access-date").replace(
|
|
244
|
+
'date-type="access-date"',
|
|
245
|
+
'content-type="access-date"'
|
|
246
|
+
)
|
|
196
247
|
}
|
|
197
248
|
|
|
198
249
|
return start + end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import {CSLExporter} from "biblatex-csl-converter"
|
|
2
|
+
|
|
1
3
|
import {FormatCitations} from "../../citations/format.js"
|
|
2
4
|
|
|
3
5
|
import type {BibDB, CSL, ExportDoc} from "../../types.js"
|
|
@@ -96,9 +98,17 @@ export class JATSExporterCitations {
|
|
|
96
98
|
if (!bibliography) {
|
|
97
99
|
return Promise.resolve()
|
|
98
100
|
}
|
|
101
|
+
const entryIds = bibliography[0].entry_ids.map(id => String(id))
|
|
102
|
+
const cslItems = new CSLExporter(
|
|
103
|
+
this.bibDB.db as Record<string, any>,
|
|
104
|
+
entryIds
|
|
105
|
+
).parse() as Record<string, Record<string, unknown>>
|
|
99
106
|
bibliography[0].entry_ids.forEach((id, index) => {
|
|
100
107
|
this.jatsIdConvert[id] = index + 1
|
|
101
|
-
this.jatsBib += jatsBib(
|
|
108
|
+
this.jatsBib += jatsBib(
|
|
109
|
+
(cslItems[String(id)] || {}) as any,
|
|
110
|
+
index + 1
|
|
111
|
+
)
|
|
102
112
|
})
|
|
103
113
|
this.citationTexts = citFm.citationTexts.map(
|
|
104
114
|
(ref, index) => {
|