postext 1.12.0 → 1.12.2
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/__tests__/parse/citations.test.js +13 -0
- package/dist/__tests__/parse/citations.test.js.map +1 -1
- package/dist/__tests__/pipeline/bibliographyScope.test.d.ts +2 -0
- package/dist/__tests__/pipeline/bibliographyScope.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/bibliographyScope.test.js +63 -0
- package/dist/__tests__/pipeline/bibliographyScope.test.js.map +1 -0
- package/dist/__tests__/pipeline/citationMarkers.test.d.ts +2 -0
- package/dist/__tests__/pipeline/citationMarkers.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/citationMarkers.test.js +50 -0
- package/dist/__tests__/pipeline/citationMarkers.test.js.map +1 -0
- package/dist/__tests__/pipeline/citationNotes.test.d.ts +2 -0
- package/dist/__tests__/pipeline/citationNotes.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/citationNotes.test.js +46 -0
- package/dist/__tests__/pipeline/citationNotes.test.js.map +1 -0
- package/dist/__tests__/pipeline/footnoteNumberGap.test.d.ts +2 -0
- package/dist/__tests__/pipeline/footnoteNumberGap.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/footnoteNumberGap.test.js +75 -0
- package/dist/__tests__/pipeline/footnoteNumberGap.test.js.map +1 -0
- package/dist/__tests__/vertical/inlineResourceShortTier.test.d.ts +2 -0
- package/dist/__tests__/vertical/inlineResourceShortTier.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/inlineResourceShortTier.test.js +52 -0
- package/dist/__tests__/vertical/inlineResourceShortTier.test.js.map +1 -0
- package/dist/bundle/book.d.ts +1 -1
- package/dist/bundle/book.d.ts.map +1 -1
- package/dist/bundle/book.js +1 -1
- package/dist/bundle/book.js.map +1 -1
- package/dist/citations/bibtex.d.ts.map +1 -1
- package/dist/citations/bibtex.js +5 -0
- package/dist/citations/bibtex.js.map +1 -1
- package/dist/citations/types.d.ts +6 -0
- package/dist/citations/types.d.ts.map +1 -1
- package/dist/measure/cache.js +1 -1
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +7 -0
- package/dist/measure/rich.js.map +1 -1
- package/dist/parse/citations.d.ts.map +1 -1
- package/dist/parse/citations.js +11 -3
- package/dist/parse/citations.js.map +1 -1
- package/dist/parse/types.d.ts +4 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/citations.d.ts.map +1 -1
- package/dist/pipeline/citations.js +47 -12
- package/dist/pipeline/citations.js.map +1 -1
- package/dist/pipeline/footnotes.d.ts.map +1 -1
- package/dist/pipeline/footnotes.js +5 -3
- package/dist/pipeline/footnotes.js.map +1 -1
- package/dist/pipeline/measureContentBlock.js +1 -1
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +5 -4
- package/dist/pipeline/placement.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,7 @@ import { parseLocator } from '../../parse/citations';
|
|
|
4
4
|
import { htmlToSpans } from '../../citations/html';
|
|
5
5
|
import { documentReferences, nociteKeys, normalizeCslItem } from '../../citations/data';
|
|
6
6
|
import { bookCitationContexts } from '../../citations/context';
|
|
7
|
+
import { parseBibtex } from '../../citations/bibtex';
|
|
7
8
|
const cites = (md) => parseMarkdown(md).flatMap((b) => b.spans.filter((s) => s.citation).map((s) => s.citation));
|
|
8
9
|
describe('citation syntax (#268)', () => {
|
|
9
10
|
it('reads parenthetical citations with prefixes, locators, suffixes and suppressed authors', () => {
|
|
@@ -69,6 +70,10 @@ describe('reference data (#268)', () => {
|
|
|
69
70
|
expect(data.items.map((i) => [i.id, i.title])).toEqual([['bib1', 'Front'], ['json1', 'Dos'], ['yaml1', 'Tres']]);
|
|
70
71
|
expect(data.issues).toHaveLength(1);
|
|
71
72
|
});
|
|
73
|
+
it('keeps the short titles Zotero and BibLaTeX write', () => {
|
|
74
|
+
const [item] = parseBibtex('@article{k, title={Letters of {John} Keats}, shorttitle={Letters}, journal={The Journal of Hellenic Studies}, shortjournal={J. Hell. Stud.}}');
|
|
75
|
+
expect(item).toMatchObject({ title: 'Letters of John Keats', 'title-short': 'Letters', 'container-title-short': 'J. Hell. Stud.' });
|
|
76
|
+
});
|
|
72
77
|
});
|
|
73
78
|
describe('book contexts (#272)', () => {
|
|
74
79
|
it('orders citations by note and maps each document to its share', () => {
|
|
@@ -95,4 +100,12 @@ describe('citeproc HTML (#269)', () => {
|
|
|
95
100
|
]);
|
|
96
101
|
});
|
|
97
102
|
});
|
|
103
|
+
describe('citation keys next to Chinese text', () => {
|
|
104
|
+
it('ends a Latin key where Chinese text begins, and reads a key right after a Chinese word', () => {
|
|
105
|
+
expect(cites('周明远@zhou2019认为如此。').map((c) => [c.cluster.mode, c.cluster.items[0].id])).toEqual([['narrative', 'zhou2019']]);
|
|
106
|
+
expect(cites('见[@zhou2019]。').map((c) => c.cluster.items[0].id)).toEqual(['zhou2019']);
|
|
107
|
+
expect(cites('[@张三2020]').map((c) => c.cluster.items[0].id)).toEqual(['张三2020']);
|
|
108
|
+
expect(cites('Write to me@example.com.')).toEqual([]);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
98
111
|
//# sourceMappingURL=citations.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citations.test.js","sourceRoot":"","sources":["../../../src/__tests__/parse/citations.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"citations.test.js","sourceRoot":"","sources":["../../../src/__tests__/parse/citations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bibliographyScope.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/bibliographyScope.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline/build';
|
|
3
|
+
import { registerCitationEngine } from '../../citations/registry';
|
|
4
|
+
class StubCtx {
|
|
5
|
+
font = '';
|
|
6
|
+
measureText(s) {
|
|
7
|
+
return { width: s.length * 7 };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
globalThis.OffscreenCanvas = class {
|
|
11
|
+
getContext() {
|
|
12
|
+
return new StubCtx();
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/** An author-date style that lists every work by its title. */
|
|
16
|
+
const authorDate = {
|
|
17
|
+
styles: () => [],
|
|
18
|
+
createProcessor: ({ items }) => {
|
|
19
|
+
const title = (id) => String(items.find((i) => i.id === id)?.title);
|
|
20
|
+
let cited = [];
|
|
21
|
+
return {
|
|
22
|
+
kind: 'in-text',
|
|
23
|
+
numeric: false,
|
|
24
|
+
cite: (clusters) => {
|
|
25
|
+
cited = [...new Set(clusters.flatMap((c) => c.items.map((it) => it.id)))];
|
|
26
|
+
return clusters.map((c) => `(${c.items.map((it) => title(it.id)).join('; ')})`);
|
|
27
|
+
},
|
|
28
|
+
bibliography: () => ({ entries: cited.map((id) => ({ id, html: `Entry ${title(id)}` })), hangingIndent: true, labelColumn: false, entrySpacing: 0 }),
|
|
29
|
+
citationNumbers: () => new Map(),
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const pt = (value) => ({ value, unit: 'pt' });
|
|
34
|
+
const config = (auto) => ({
|
|
35
|
+
page: { width: pt(400), height: pt(600), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
|
|
36
|
+
citations: { bibliography: { scope: 'chapter', auto, title: 'References' } },
|
|
37
|
+
});
|
|
38
|
+
const front = '---\nreferences:\n - {id: a, title: Alpha}\n - {id: b, title: Beta}\n - {id: c, title: Gamma}\n---\n';
|
|
39
|
+
/** The entries of each list, in order. */
|
|
40
|
+
const lists = (doc) => {
|
|
41
|
+
const out = [];
|
|
42
|
+
for (const b of doc.blocks) {
|
|
43
|
+
const text = b.lines.map((l) => l.text).join(' ');
|
|
44
|
+
if (text === 'References')
|
|
45
|
+
out.push([]);
|
|
46
|
+
else if (text.startsWith('Entry '))
|
|
47
|
+
out[out.length - 1].push(text.slice(6));
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
};
|
|
51
|
+
describe("bibliography.scope 'chapter' in a document of several chapters", () => {
|
|
52
|
+
beforeAll(() => registerCitationEngine(authorDate));
|
|
53
|
+
afterAll(() => registerCitationEngine(undefined));
|
|
54
|
+
it('lists in each chapter only the works that chapter cites', () => {
|
|
55
|
+
const md = `${front}# One\n\nSee [@a] and [@b].\n\n:::bibliography\n\n# Two\n\nSee [@a] and [@c].\n\n:::bibliography\n`;
|
|
56
|
+
expect(lists(buildDocument({ markdown: md }, config(false)))).toEqual([['Alpha', 'Beta'], ['Alpha', 'Gamma']]);
|
|
57
|
+
});
|
|
58
|
+
it('sets a list at the end of each chapter when nothing places it', () => {
|
|
59
|
+
const md = `${front}# One\n\nSee [@a] and [@b].\n\n# Two\n\nSee [@c].\n`;
|
|
60
|
+
expect(lists(buildDocument({ markdown: md }, config(true)))).toEqual([['Alpha', 'Beta'], ['Gamma']]);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=bibliographyScope.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bibliographyScope.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/bibliographyScope.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citationMarkers.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/citationMarkers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline/build';
|
|
3
|
+
import { registerCitationEngine } from '../../citations/registry';
|
|
4
|
+
class StubCtx {
|
|
5
|
+
font = '';
|
|
6
|
+
measureText(s) {
|
|
7
|
+
return { width: s.length * 7 };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
globalThis.OffscreenCanvas = class {
|
|
11
|
+
getContext() {
|
|
12
|
+
return new StubCtx();
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/** A numbered style: works numbered in the order they are first cited. */
|
|
16
|
+
const numbered = {
|
|
17
|
+
styles: () => [],
|
|
18
|
+
createProcessor: () => {
|
|
19
|
+
const order = new Map();
|
|
20
|
+
return {
|
|
21
|
+
kind: 'in-text',
|
|
22
|
+
numeric: true,
|
|
23
|
+
cite: (clusters) => clusters.map((c) => {
|
|
24
|
+
for (const it of c.items)
|
|
25
|
+
if (!order.has(it.id))
|
|
26
|
+
order.set(it.id, order.size + 1);
|
|
27
|
+
return `[${c.items.map((it) => order.get(it.id)).join(', ')}]`;
|
|
28
|
+
}),
|
|
29
|
+
bibliography: () => ({ entries: [], hangingIndent: false, labelColumn: true, entrySpacing: 0 }),
|
|
30
|
+
citationNumbers: () => order,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const pt = (value) => ({ value, unit: 'pt' });
|
|
35
|
+
const config = {
|
|
36
|
+
page: { width: pt(400), height: pt(600), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
|
|
37
|
+
citations: { marker: 'superscript', bibliography: { auto: false } },
|
|
38
|
+
};
|
|
39
|
+
const front = '---\nreferences:\n - {id: a, title: A}\n - {id: b, title: B}\n - {id: c, title: C}\n---\n';
|
|
40
|
+
describe('superscript citation numbers', () => {
|
|
41
|
+
beforeAll(() => registerCitationEngine(numbered));
|
|
42
|
+
afterAll(() => registerCitationEngine(undefined));
|
|
43
|
+
it('are set close, with no space after the comma', () => {
|
|
44
|
+
const doc = buildDocument({ markdown: `${front}One [@a], two [@b], then both [@a; @c].` }, config);
|
|
45
|
+
const raised = doc.blocks.flatMap((b) => b.lines.flatMap((l) => l.segments)).filter((s) => s?.script === 'sup').map((s) => s.text).join('|');
|
|
46
|
+
expect(raised).toContain('1,3');
|
|
47
|
+
expect(raised).not.toContain(', ');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=citationMarkers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citationMarkers.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/citationMarkers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citationNotes.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/citationNotes.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline/build';
|
|
3
|
+
import { renderToHtml } from '../../html-backend';
|
|
4
|
+
import { registerCitationEngine } from '../../citations/registry';
|
|
5
|
+
class StubCtx {
|
|
6
|
+
font = '';
|
|
7
|
+
measureText(s) {
|
|
8
|
+
return { width: s.length * 7 };
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
globalThis.OffscreenCanvas = class {
|
|
12
|
+
getContext() {
|
|
13
|
+
return new StubCtx();
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
/** A note style that writes "Title, locator." for every citation. */
|
|
17
|
+
const notes = {
|
|
18
|
+
styles: () => [],
|
|
19
|
+
createProcessor: ({ items }) => ({
|
|
20
|
+
kind: 'note',
|
|
21
|
+
numeric: false,
|
|
22
|
+
cite: (clusters) => clusters.map((c) => c.items.map((it) => `${String(items.find((i) => i.id === it.id)?.title)}${it.locator ? `, ${it.locator}` : ''}`).join('; ') + '.'),
|
|
23
|
+
bibliography: () => ({ entries: [], hangingIndent: true, labelColumn: false, entrySpacing: 0 }),
|
|
24
|
+
citationNumbers: () => new Map(),
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
const pt = (value) => ({ value, unit: 'pt' });
|
|
28
|
+
const config = {
|
|
29
|
+
page: { width: pt(400), height: pt(600), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
|
|
30
|
+
citations: { bibliography: { auto: false } },
|
|
31
|
+
};
|
|
32
|
+
const front = '---\nreferences:\n - {id: howse, title: Greenwich Time, author: [{family: Howse, given: Derek}]}\n---\n';
|
|
33
|
+
const text = (markdown) => renderToHtml(buildDocument({ markdown: front + markdown }, config)).replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ');
|
|
34
|
+
describe('note styles (cookbook findings)', () => {
|
|
35
|
+
beforeAll(() => registerCitationEngine(notes));
|
|
36
|
+
afterAll(() => registerCitationEngine(undefined));
|
|
37
|
+
it('keeps the author of a narrative citation in the sentence', () => {
|
|
38
|
+
expect(text('As @howse [p. 4] says, the clocks agreed.')).toContain('As Howse');
|
|
39
|
+
});
|
|
40
|
+
it('prints one full stop where a citation ends the sentence of a note', () => {
|
|
41
|
+
const out = text('The clocks agreed.[^n]\n\n[^n]: See [@howse, chap. 3].').replace(/\s/g, '');
|
|
42
|
+
expect(out).toContain('GreenwichTime,3.');
|
|
43
|
+
expect(out).not.toContain('3..');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=citationNotes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citationNotes.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/citationNotes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footnoteNumberGap.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/footnoteNumberGap.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline';
|
|
3
|
+
import { createMeasurementCache } from '../../measure';
|
|
4
|
+
// Deterministic text measurement stub (no DOM in the node test env): a
|
|
5
|
+
// word space narrower than a letter, an en space wider than a word space.
|
|
6
|
+
class StubCtx {
|
|
7
|
+
font = '';
|
|
8
|
+
measureText(s) {
|
|
9
|
+
let width = 0;
|
|
10
|
+
for (const ch of s)
|
|
11
|
+
width += ch === ' ' ? 3 : ch === '\u2002' ? 5 : 7;
|
|
12
|
+
return { width };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
globalThis.OffscreenCanvas = class {
|
|
16
|
+
getContext() {
|
|
17
|
+
return new StubCtx();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const mm = (value) => ({ value, unit: 'mm' });
|
|
21
|
+
const CONFIG = {
|
|
22
|
+
headings: { balancing: { enabled: false } },
|
|
23
|
+
page: { width: mm(160), height: mm(200), margins: { top: mm(10), bottom: mm(10), left: mm(10), right: mm(10) } },
|
|
24
|
+
layout: { layoutType: 'double' },
|
|
25
|
+
footnotes: { textAlign: 'justify' },
|
|
26
|
+
};
|
|
27
|
+
/** The stub's word space. */
|
|
28
|
+
const WORD_SPACE = 3;
|
|
29
|
+
/** The width the renderers give each segment of a line: a justified line
|
|
30
|
+
* sets every space segment alike, at `justifiedSpaceRatio` word spaces
|
|
31
|
+
* (see `canvas-backend/blockRender.ts`). */
|
|
32
|
+
function setWidths(line) {
|
|
33
|
+
const ratio = line.justifiedSpaceRatio;
|
|
34
|
+
return (line.segments ?? []).map((s) => (s.kind === 'space' && ratio !== undefined ? ratio * WORD_SPACE : s.width));
|
|
35
|
+
}
|
|
36
|
+
/** The gap between a note's number and its first word, as set. */
|
|
37
|
+
function numberGap(note) {
|
|
38
|
+
const line = note.lines[0];
|
|
39
|
+
const segs = line.segments;
|
|
40
|
+
const widths = setWidths(line);
|
|
41
|
+
// The number is the first segment; the gap runs to the first word.
|
|
42
|
+
expect(segs[0].text).toMatch(/^\d+$/);
|
|
43
|
+
let i = 1;
|
|
44
|
+
let gap = 0;
|
|
45
|
+
while (i < segs.length && !/\p{L}/u.test(segs[i].text))
|
|
46
|
+
gap += widths[i++];
|
|
47
|
+
return gap;
|
|
48
|
+
}
|
|
49
|
+
describe('the gap after a footnote number', () => {
|
|
50
|
+
it.each(['superscript', 'inline'])('is as wide in a justified multi-line note as in a one-line note (%s number)', (markerPosition) => {
|
|
51
|
+
const md = [
|
|
52
|
+
'Una frase corta con nota.[^corta] Otra frase con otra nota.[^larga]',
|
|
53
|
+
'[^corta]: Nota breve.',
|
|
54
|
+
'[^larga]: Esta nota es bastante más larga que la anterior y ocupa varias líneas justificadas en la columna, de modo que sus espacios entre palabras se estiran para llenar la medida.',
|
|
55
|
+
].join('\n\n');
|
|
56
|
+
const doc = buildDocument({ markdown: md }, { ...CONFIG, footnotes: { ...CONFIG.footnotes, markerPosition } }, createMeasurementCache());
|
|
57
|
+
const notes = doc.blocks.filter((b) => b.footnoteNote !== undefined);
|
|
58
|
+
const short = notes.find((n) => n.footnoteNote === 'corta');
|
|
59
|
+
const long = notes.find((n) => n.footnoteNote === 'larga');
|
|
60
|
+
expect(short.lines).toHaveLength(1);
|
|
61
|
+
expect(long.lines.length).toBeGreaterThan(1);
|
|
62
|
+
// The long note's first line is justified: its word spaces are not at their natural width.
|
|
63
|
+
const first = long.lines[0];
|
|
64
|
+
expect(first.isLastLine).toBe(false);
|
|
65
|
+
expect(first.justifiedSpaceRatio).toBeDefined();
|
|
66
|
+
expect(first.justifiedSpaceRatio).not.toBeCloseTo(1, 6);
|
|
67
|
+
const shortGap = numberGap(short);
|
|
68
|
+
expect(shortGap).toBeGreaterThan(0);
|
|
69
|
+
expect(numberGap(long)).toBeCloseTo(shortGap, 6);
|
|
70
|
+
// The en space keeps its own width, and the line never breaks after the number.
|
|
71
|
+
expect(shortGap).toBe(5);
|
|
72
|
+
expect(long.lines[0].segments.slice(0, 3).map((s) => s.kind)).toEqual(['text', 'text', 'text']);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=footnoteNumberGap.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footnoteNumberGap.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/footnoteNumberGap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineResourceShortTier.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/vertical/inlineResourceShortTier.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline';
|
|
3
|
+
import { flowRectToPage } from '../../vdt';
|
|
4
|
+
import { installSizedStub } from './stub';
|
|
5
|
+
installSizedStub();
|
|
6
|
+
const pt = (value) => ({ value, unit: 'pt' });
|
|
7
|
+
const P = '冰川缓缓向前推进,把谷底的岩石磨得光滑圆润,留下一道道擦痕与沟槽。';
|
|
8
|
+
/** Two tiers on a vertical page; the chapter heading spans both, so the
|
|
9
|
+
* tiers of the opener page are cut short beside it. */
|
|
10
|
+
const config = {
|
|
11
|
+
page: { width: pt(300), height: pt(420), margins: { top: pt(40), right: pt(30), bottom: pt(40), left: pt(30) } },
|
|
12
|
+
bodyText: { fontSize: pt(10), lineHeight: pt(16) },
|
|
13
|
+
layout: { writingMode: 'vertical-rl', layoutType: 'double', gutterWidth: pt(20) },
|
|
14
|
+
headings: { levels: [{ level: 1, fontSize: pt(24), lineHeight: pt(32), span: 'page', marginBottom: pt(48) }] },
|
|
15
|
+
locale: 'zh-Hans',
|
|
16
|
+
};
|
|
17
|
+
/** An SVG fills its slot: upright on a vertical page, as long as the flow
|
|
18
|
+
* is tall — the length of a whole tier's line run, more than the tiers
|
|
19
|
+
* cut short by the heading hold. */
|
|
20
|
+
const roche = {
|
|
21
|
+
id: 'roche', typeId: 'figure', kind: 'svg', caption: '羊背石', createdAt: 0, updatedAt: 0,
|
|
22
|
+
svg: { fileId: 'roche.svg', width: 200, height: 120 }, placement: { position: 'here' },
|
|
23
|
+
};
|
|
24
|
+
function resourceOutside(doc) {
|
|
25
|
+
const out = [];
|
|
26
|
+
for (const page of doc.pages) {
|
|
27
|
+
for (const c of page.columns) {
|
|
28
|
+
for (const b of c.blocks) {
|
|
29
|
+
if (!b.resourceBlock)
|
|
30
|
+
continue;
|
|
31
|
+
const r = flowRectToPage(page, b.bbox);
|
|
32
|
+
const off = r.x < -0.5 || r.y < -0.5 || r.x + r.width > page.width + 0.5 || r.y + r.height > page.height + 0.5;
|
|
33
|
+
if (off || b.bbox.y + b.bbox.height > c.bbox.y + c.bbox.height + 0.5)
|
|
34
|
+
out.push(`page ${page.index}, tier ${c.index}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
describe('an in-flow resource at the end of a short tier (#288)', () => {
|
|
41
|
+
it('moves on to a tier that holds it instead of running off the sheet', () => {
|
|
42
|
+
let placed = 0;
|
|
43
|
+
for (let n = 2; n <= 20; n++) {
|
|
44
|
+
const markdown = `# 冰川\n\n${P.repeat(n)}羊背石:\n\n::resource{id="roche"}\n\n${P.repeat(6)}`;
|
|
45
|
+
const doc = buildDocument({ markdown, resources: [roche] }, config);
|
|
46
|
+
placed += doc.pages.flatMap((p) => p.columns.flatMap((c) => c.blocks)).filter((b) => b.resourceBlock).length;
|
|
47
|
+
expect(resourceOutside(doc), `${n} sentences`).toEqual([]);
|
|
48
|
+
}
|
|
49
|
+
expect(placed).toBe(19);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=inlineResourceShortTier.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineResourceShortTier.test.js","sourceRoot":"","sources":["../../../src/__tests__/vertical/inlineResourceShortTier.test.ts"],"names":[],"mappings":"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"}
|
package/dist/bundle/book.d.ts
CHANGED
|
@@ -24,6 +24,6 @@ export interface BuildBundleOptions extends BuildDocumentOptions {
|
|
|
24
24
|
export declare function buildBundle(bundle: {
|
|
25
25
|
chapters: readonly Pick<BundleChapter, 'markdown'>[];
|
|
26
26
|
config: PostextConfig;
|
|
27
|
-
resources
|
|
27
|
+
resources?: readonly Resource[];
|
|
28
28
|
}, options?: BuildBundleOptions): VDTDocument[];
|
|
29
29
|
//# sourceMappingURL=book.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../../src/bundle/book.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC5G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,iEAAiE;IACjE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;mBACe;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;sCAGkC;IAClC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;kCAC8B;IAC9B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACvD;AA2CD;;uCAEuC;AACvC,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,QAAQ,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../../src/bundle/book.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC5G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,iEAAiE;IACjE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;mBACe;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;sCAGkC;IAClC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;kCAC8B;IAC9B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACvD;AA2CD;;uCAEuC;AACvC,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,QAAQ,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,EACxH,OAAO,GAAE,kBAAuB,GAC/B,WAAW,EAAE,CA6Ff"}
|
package/dist/bundle/book.js
CHANGED
|
@@ -55,7 +55,7 @@ function firstContentPage(doc) {
|
|
|
55
55
|
export function buildBundle(bundle, options = {}) {
|
|
56
56
|
const { config: configOverride, cache: sharedCache, onChapter, metadata: givenMetadata, ...buildOptions } = options;
|
|
57
57
|
const config = configOverride ?? bundle.config;
|
|
58
|
-
const resources = [...bundle.resources];
|
|
58
|
+
const resources = [...(bundle.resources ?? [])];
|
|
59
59
|
const cache = sharedCache ?? createMeasurementCache();
|
|
60
60
|
const chapters = bundle.chapters;
|
|
61
61
|
// The book's metadata: the first chapter's front matter over the given
|
package/dist/bundle/book.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"book.js","sourceRoot":"","sources":["../../src/bundle/book.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"book.js","sourceRoot":"","sources":["../../src/bundle/book.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bibtex.d.ts","sourceRoot":"","sources":["../../src/citations/bibtex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,OAAO,EAAW,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"bibtex.d.ts","sourceRoot":"","sources":["../../src/citations/bibtex.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,OAAO,EAAW,MAAM,SAAS,CAAC;AAwDzD;mDACmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcjD;AAyFD,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAwHD,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,WAAW,EAAO,GAAG,OAAO,EAAE,CA4CjF"}
|
package/dist/citations/bibtex.js
CHANGED
|
@@ -51,6 +51,7 @@ const SYMBOLS = {
|
|
|
51
51
|
ss: 'ß', o: 'ø', O: 'Ø', aa: 'å', AA: 'Å', ae: 'æ', AE: 'Æ', oe: 'œ', OE: 'Œ', l: 'ł', L: 'Ł', i: 'ı', j: 'ȷ',
|
|
52
52
|
textendash: '–', textemdash: '—', textquoteleft: '‘', textquoteright: '’', textquotedblleft: '“', textquotedblright: '”',
|
|
53
53
|
dag: '†', ddag: '‡', S: '§', P: '¶', copyright: '©', textregistered: '®', texttrademark: '™', ldots: '…', dots: '…',
|
|
54
|
+
TeX: 'TeX', LaTeX: 'LaTeX', LaTeXe: 'LaTeX2ε', BibTeX: 'BibTeX', XeTeX: 'XeTeX', LuaTeX: 'LuaTeX', ConTeXt: 'ConTeXt',
|
|
54
55
|
};
|
|
55
56
|
/** LaTeX markup of a field value as plain text: accents composed,
|
|
56
57
|
* escapes and dashes resolved, braces dropped. */
|
|
@@ -334,6 +335,9 @@ export function parseBibtex(source, issues = []) {
|
|
|
334
335
|
item[field] = value;
|
|
335
336
|
};
|
|
336
337
|
set('title', f.title);
|
|
338
|
+
// Zotero writes the short title it shows in its own lists; MLA and
|
|
339
|
+
// Chicago print it in a work's later citations (`title-short`).
|
|
340
|
+
set('title-short', f.shorttitle);
|
|
337
341
|
if (raw.author)
|
|
338
342
|
item.author = parseNames(raw.author);
|
|
339
343
|
if (raw.editor)
|
|
@@ -341,6 +345,7 @@ export function parseBibtex(source, issues = []) {
|
|
|
341
345
|
if (raw.translator)
|
|
342
346
|
item.translator = parseNames(raw.translator);
|
|
343
347
|
set('container-title', f.journaltitle ?? f.journal ?? f.booktitle);
|
|
348
|
+
set('container-title-short', f.shortjournal);
|
|
344
349
|
set('collection-title', f.series);
|
|
345
350
|
set('publisher', f.publisher ?? f.school ?? f.institution ?? f.organization);
|
|
346
351
|
set('publisher-place', f.location ?? f.address);
|