postext-epub 0.1.0

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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/dist/__tests__/sampleBook.d.ts +17 -0
  4. package/dist/__tests__/sampleBook.d.ts.map +1 -0
  5. package/dist/__tests__/sampleBook.js +103 -0
  6. package/dist/__tests__/sampleBook.js.map +1 -0
  7. package/dist/epubcheck.test.d.ts +2 -0
  8. package/dist/epubcheck.test.d.ts.map +1 -0
  9. package/dist/epubcheck.test.js +69 -0
  10. package/dist/epubcheck.test.js.map +1 -0
  11. package/dist/fixed/fixed.test.d.ts +2 -0
  12. package/dist/fixed/fixed.test.d.ts.map +1 -0
  13. package/dist/fixed/fixed.test.js +225 -0
  14. package/dist/fixed/fixed.test.js.map +1 -0
  15. package/dist/fixed/fontUse.d.ts +21 -0
  16. package/dist/fixed/fontUse.d.ts.map +1 -0
  17. package/dist/fixed/fontUse.js +82 -0
  18. package/dist/fixed/fontUse.js.map +1 -0
  19. package/dist/fixed/index.d.ts +3 -0
  20. package/dist/fixed/index.d.ts.map +1 -0
  21. package/dist/fixed/index.js +254 -0
  22. package/dist/fixed/index.js.map +1 -0
  23. package/dist/fixed/outline.d.ts +40 -0
  24. package/dist/fixed/outline.d.ts.map +1 -0
  25. package/dist/fixed/outline.js +88 -0
  26. package/dist/fixed/outline.js.map +1 -0
  27. package/dist/index.d.ts +17 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +29 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/package/pack.d.ts +25 -0
  32. package/dist/package/pack.d.ts.map +1 -0
  33. package/dist/package/pack.js +253 -0
  34. package/dist/package/pack.js.map +1 -0
  35. package/dist/package/pack.test.d.ts +2 -0
  36. package/dist/package/pack.test.d.ts.map +1 -0
  37. package/dist/package/pack.test.js +164 -0
  38. package/dist/package/pack.test.js.map +1 -0
  39. package/dist/package/read.d.ts +15 -0
  40. package/dist/package/read.d.ts.map +1 -0
  41. package/dist/package/read.js +198 -0
  42. package/dist/package/read.js.map +1 -0
  43. package/dist/package/strings.d.ts +17 -0
  44. package/dist/package/strings.d.ts.map +1 -0
  45. package/dist/package/strings.js +24 -0
  46. package/dist/package/strings.js.map +1 -0
  47. package/dist/reflowable/__tests__/vdt.d.ts +13 -0
  48. package/dist/reflowable/__tests__/vdt.d.ts.map +1 -0
  49. package/dist/reflowable/__tests__/vdt.js +55 -0
  50. package/dist/reflowable/__tests__/vdt.js.map +1 -0
  51. package/dist/reflowable/__tests__/xml.d.ts +8 -0
  52. package/dist/reflowable/__tests__/xml.d.ts.map +1 -0
  53. package/dist/reflowable/__tests__/xml.js +107 -0
  54. package/dist/reflowable/__tests__/xml.js.map +1 -0
  55. package/dist/reflowable/css.d.ts +45 -0
  56. package/dist/reflowable/css.d.ts.map +1 -0
  57. package/dist/reflowable/css.js +491 -0
  58. package/dist/reflowable/css.js.map +1 -0
  59. package/dist/reflowable/index.d.ts +4 -0
  60. package/dist/reflowable/index.d.ts.map +1 -0
  61. package/dist/reflowable/index.js +257 -0
  62. package/dist/reflowable/index.js.map +1 -0
  63. package/dist/reflowable/inline.d.ts +56 -0
  64. package/dist/reflowable/inline.d.ts.map +1 -0
  65. package/dist/reflowable/inline.js +334 -0
  66. package/dist/reflowable/inline.js.map +1 -0
  67. package/dist/reflowable/model.d.ts +261 -0
  68. package/dist/reflowable/model.d.ts.map +1 -0
  69. package/dist/reflowable/model.js +6 -0
  70. package/dist/reflowable/model.js.map +1 -0
  71. package/dist/reflowable/reflowable.test.d.ts +2 -0
  72. package/dist/reflowable/reflowable.test.d.ts.map +1 -0
  73. package/dist/reflowable/reflowable.test.js +469 -0
  74. package/dist/reflowable/reflowable.test.js.map +1 -0
  75. package/dist/reflowable/rtl.test.d.ts +2 -0
  76. package/dist/reflowable/rtl.test.d.ts.map +1 -0
  77. package/dist/reflowable/rtl.test.js +217 -0
  78. package/dist/reflowable/rtl.test.js.map +1 -0
  79. package/dist/reflowable/walk.d.ts +42 -0
  80. package/dist/reflowable/walk.d.ts.map +1 -0
  81. package/dist/reflowable/walk.js +1096 -0
  82. package/dist/reflowable/walk.js.map +1 -0
  83. package/dist/reflowable/xhtml.d.ts +33 -0
  84. package/dist/reflowable/xhtml.d.ts.map +1 -0
  85. package/dist/reflowable/xhtml.js +472 -0
  86. package/dist/reflowable/xhtml.js.map +1 -0
  87. package/dist/shared/accessibility.d.ts +20 -0
  88. package/dist/shared/accessibility.d.ts.map +1 -0
  89. package/dist/shared/accessibility.js +30 -0
  90. package/dist/shared/accessibility.js.map +1 -0
  91. package/dist/shared/assets.d.ts +46 -0
  92. package/dist/shared/assets.d.ts.map +1 -0
  93. package/dist/shared/assets.js +143 -0
  94. package/dist/shared/assets.js.map +1 -0
  95. package/dist/shared/assets.test.d.ts +2 -0
  96. package/dist/shared/assets.test.d.ts.map +1 -0
  97. package/dist/shared/assets.test.js +106 -0
  98. package/dist/shared/assets.test.js.map +1 -0
  99. package/dist/shared/media.d.ts +11 -0
  100. package/dist/shared/media.d.ts.map +1 -0
  101. package/dist/shared/media.js +52 -0
  102. package/dist/shared/media.js.map +1 -0
  103. package/dist/shared/uuid.d.ts +7 -0
  104. package/dist/shared/uuid.d.ts.map +1 -0
  105. package/dist/shared/uuid.js +63 -0
  106. package/dist/shared/uuid.js.map +1 -0
  107. package/dist/shared/xml.d.ts +54 -0
  108. package/dist/shared/xml.d.ts.map +1 -0
  109. package/dist/shared/xml.js +214 -0
  110. package/dist/shared/xml.js.map +1 -0
  111. package/dist/shared/xml.test.d.ts +2 -0
  112. package/dist/shared/xml.test.d.ts.map +1 -0
  113. package/dist/shared/xml.test.js +71 -0
  114. package/dist/shared/xml.test.js.map +1 -0
  115. package/dist/shared/xmlRead.d.ts +19 -0
  116. package/dist/shared/xmlRead.d.ts.map +1 -0
  117. package/dist/shared/xmlRead.js +85 -0
  118. package/dist/shared/xmlRead.js.map +1 -0
  119. package/dist/types.d.ts +205 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +15 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/worker/client.d.ts +39 -0
  124. package/dist/worker/client.d.ts.map +1 -0
  125. package/dist/worker/client.js +184 -0
  126. package/dist/worker/client.js.map +1 -0
  127. package/dist/worker/epub.worker.d.ts +2 -0
  128. package/dist/worker/epub.worker.d.ts.map +1 -0
  129. package/dist/worker/epub.worker.js +7 -0
  130. package/dist/worker/epub.worker.js.map +1 -0
  131. package/dist/worker/protocol.d.ts +44 -0
  132. package/dist/worker/protocol.d.ts.map +1 -0
  133. package/dist/worker/protocol.js +6 -0
  134. package/dist/worker/protocol.js.map +1 -0
  135. package/dist/worker/serve.d.ts +11 -0
  136. package/dist/worker/serve.d.ts.map +1 -0
  137. package/dist/worker/serve.js +53 -0
  138. package/dist/worker/serve.js.map +1 -0
  139. package/dist/worker/worker.test.d.ts +2 -0
  140. package/dist/worker/worker.test.d.ts.map +1 -0
  141. package/dist/worker/worker.test.js +168 -0
  142. package/dist/worker/worker.test.js.map +1 -0
  143. package/package.json +68 -0
@@ -0,0 +1,217 @@
1
+ // Right-to-left books in the reflowable rendition (#402): bidi isolates
2
+ // for runs set against their paragraph, languages named on isolates,
3
+ // kashidas, `:::verse` poems, footnote markers, and the navigation and
4
+ // style sheet of an Arabic book. Fixtures mix Arabic with Latin marker
5
+ // words and digits, so the order a run is read in can be checked.
6
+ import { describe, expect, it } from 'vitest';
7
+ import { baseConfig, layOut, pt } from './__tests__/vdt';
8
+ import { checkXml } from './__tests__/xml';
9
+ import { buildReflowablePublication } from '.';
10
+ import { appendLine } from './inline';
11
+ import { bidiLevels } from './xhtml';
12
+ import { buildNav, buildOpf } from '../package/pack';
13
+ const arabic = { ...baseConfig, locale: 'ar' };
14
+ async function render(docs, extra = {}) {
15
+ const pub = await buildReflowablePublication(docs, {
16
+ layout: 'reflowable',
17
+ metadata: { title: 'كتاب', language: 'ar', modified: new Date(Date.UTC(2026, 9, 4)) },
18
+ ...extra,
19
+ });
20
+ const files = new Map();
21
+ for (const item of pub.items) {
22
+ if (item.mediaType === 'application/xhtml+xml')
23
+ files.set(item.href, item.data);
24
+ }
25
+ for (const [href, xml] of files)
26
+ expect(checkXml(xml).errors, href).toEqual([]);
27
+ const css = pub.items.find((i) => i.href === 'styles/book.css').data;
28
+ return { pub, files, chapter: files.get('text/chapter-001.xhtml'), css };
29
+ }
30
+ /** The body of a content document, line breaks removed. */
31
+ const bodyOf = (xhtml) => /<body>([\s\S]*)<\/body>/.exec(xhtml)[1].replace(/\n/g, '');
32
+ const text = (t, lvl) => ({ t: 'text', text: t, fmt: {}, ...(lvl !== undefined ? { lvl } : {}) });
33
+ describe('bidi levels of inline items', () => {
34
+ it('has none for a paragraph with nothing set against it', () => {
35
+ expect(bidiLevels([text('Plain'), text(' '), text('English 42.')], 0)).toBeUndefined();
36
+ expect(bidiLevels([text('نص', 1), text(' ', 1), text('١٤٤٥', 1)], 1)).toBeUndefined();
37
+ });
38
+ it('keeps the levels the engine resolved, neutrals between two runs of one direction joining them', () => {
39
+ // «قال AAA BBB جميلة»: the space between the two Latin words comes
40
+ // from a line join and carries no level.
41
+ expect(bidiLevels([text('قال ', 1), text('AAA', 2), text(' '), text('BBB', 2), text(' جميلة', 1)], 1)).toEqual([1, 2, 2, 2, 1]);
42
+ });
43
+ it('reads a level from the letters of an item that has none', () => {
44
+ expect(bidiLevels([text('An '), text('كتاب'), text(' here 42')], 0)).toEqual([0, 1, 0]);
45
+ expect(bidiLevels([text('قال '), text('Hello'), text(' ١٢')], 1)).toEqual([1, 2, 1]);
46
+ });
47
+ it('treats a level under the paragraph’s as unknown (a verse gap, an inserted mark)', () => {
48
+ expect(bidiLevels([text('AAA', 2), text('\t', 0), text('BBB', 2)], 1)).toEqual([2, 2, 2]);
49
+ });
50
+ });
51
+ describe('right-to-left runs and languages', () => {
52
+ it('isolates Latin runs of an Arabic paragraph, digits left bare', async () => {
53
+ const { chapter } = await render([layOut('قال AAA إن 2024 و١٤٤٥ (BBB) جميلة.', arabic)]);
54
+ const body = bodyOf(chapter);
55
+ expect(body).toContain('قال <span dir="ltr">AAA</span> إن 2024 و١٤٤٥ (<span dir="ltr">BBB</span>) جميلة.');
56
+ });
57
+ it('keeps a Latin phrase broken over two lines in one isolate', async () => {
58
+ const md = `${'كلام عربي طويل '.repeat(3)}The old man said hello there friend ${'كلام عربي '.repeat(4)}.`;
59
+ const doc = layOut(md, arabic);
60
+ const lines = doc.pages.flatMap((p) => p.columns.flatMap((c) => c.blocks.flatMap((b) => b.lines)));
61
+ // The phrase does run over a line break in this layout.
62
+ expect(lines.some((l, i) => /[A-Za-z]$/.test(l.text.trim()) && /^[A-Za-z]/.test(lines[i + 1]?.text ?? ''))).toBe(true);
63
+ const { chapter } = await render([doc]);
64
+ expect(bodyOf(chapter)).toContain('<span dir="ltr">The old man said hello there friend</span>');
65
+ });
66
+ it('declares the language an isolate names, inside its direction', async () => {
67
+ const { chapter } = await render([layOut('وقال الشيخ :ltr[the old man]{lang=en} ثم سكت.', arabic)]);
68
+ expect(bodyOf(chapter)).toContain('وقال الشيخ <span dir="ltr"><span lang="en" xml:lang="en">the old man</span></span> ثم سكت.');
69
+ });
70
+ it('sets an English block of an Arabic book left to right, its Arabic word isolated', async () => {
71
+ const { chapter } = await render([layOut('نص.\n\n:::paragraphs{dir=ltr}\nAn English paragraph with the word كتاب in it.\n:::', arabic)]);
72
+ expect(bodyOf(chapter)).toContain('<p dir="ltr">An English paragraph with the word <span dir="rtl">كتاب</span> in it.</p>');
73
+ });
74
+ it('isolates an Arabic quotation of an English book, nesting a Latin word inside it', async () => {
75
+ const { chapter } = await render([layOut('He wrote :rtl[AB كتاب] in the margin.')], { metadata: { title: 'Book', language: 'en' } });
76
+ const body = bodyOf(chapter);
77
+ expect(body).toContain('He wrote <span dir="rtl"><span dir="ltr">AB</span> كتاب</span> in the margin.');
78
+ expect(chapter).not.toContain(' dir="rtl">\n');
79
+ });
80
+ it('writes no isolate in a left-to-right book', async () => {
81
+ const { files } = await render([layOut('Plain text, 42 times (really).\n\n- one\n- two')], { metadata: { title: 'Book', language: 'en' } });
82
+ expect([...files.values()].join('\n')).not.toContain('dir=');
83
+ });
84
+ });
85
+ describe('kashidas', () => {
86
+ const ctx = { doc: 0, lang: 'ar', basePx: 16, noteRef: () => true };
87
+ const seg = (t, extra = {}) => ({ kind: 'text', text: t, width: 0, rtl: true, ...extra });
88
+ const line = (segments, extra = {}) => ({
89
+ text: segments.map((s) => s.text).join(''), bbox: { x: 0, y: 0, width: 0, height: 0 }, baseline: 0, hyphenated: false, segments, ...extra,
90
+ });
91
+ const joined = (l, segments) => {
92
+ const sink = { inl: [] };
93
+ appendLine(sink, l, ctx, [], segments);
94
+ return sink.inl.map((i) => (i.t === 'text' ? i.text : '')).join('');
95
+ };
96
+ it('drops the tatweels justification inserted and keeps the ones the author typed', () => {
97
+ // «جمـيـــل»: the first tatweel typed, the three after the second ي inserted.
98
+ expect(joined(line([seg('جمـيـــل', { kashida: [4, 5, 6] })], { kashida: 3 }))).toBe('جمـيل');
99
+ });
100
+ it('reads the offsets across a word’s styled runs', () => {
101
+ const word = seg('كتـــاب', { kashida: [2, 3, 4], runs: [{ text: 'كتـ' }, { text: 'ــاب', bold: true }] });
102
+ expect(joined(line([word], { kashida: 3 }))).toBe('كتاب');
103
+ });
104
+ it('keeps a typed tatweel of a hemistich whose line has inserted ones elsewhere', () => {
105
+ const sadr = seg('أَخْـ');
106
+ const gap = { kind: 'space', text: '\t', width: 0, labelTab: true };
107
+ const ajuz = seg('ــرَجَ', { kashida: [1] });
108
+ const l = line([sadr, gap, ajuz], { kashida: 1 });
109
+ expect(joined(l, [sadr])).toBe('أَخْـ');
110
+ expect(joined(l, [ajuz])).toBe('ـرَجَ');
111
+ });
112
+ it('drops every tatweel of a stretched line from a layout without offsets', () => {
113
+ expect(joined(line([seg('جمـيـــل')], { kashida: 3 }))).toBe('جميل');
114
+ });
115
+ it('writes justified Arabic text without the elongations', async () => {
116
+ const config = { ...arabic, bodyText: { textAlign: 'justify' } };
117
+ const doc = layOut(`${'قال الراوي إن الملك شهريار كان يحكم بلاد الهند والصين، '.repeat(8)}وكتب المؤلف جمـيل.`, config);
118
+ const stretched = doc.pages.flatMap((p) => p.columns.flatMap((c) => c.blocks.flatMap((b) => b.lines))).filter((l) => l.kashida);
119
+ expect(stretched.length).toBeGreaterThan(0);
120
+ const { chapter } = await render([doc]);
121
+ const tatweels = [...bodyOf(chapter)].filter((c) => c === 'ـ').length;
122
+ expect(tatweels).toBe(1);
123
+ expect(chapter).toContain('جمـيل.');
124
+ });
125
+ });
126
+ describe(':::verse', () => {
127
+ const poem = [
128
+ 'فأنشد:',
129
+ '',
130
+ ':::verse{ornament="٭"}',
131
+ 'يا حرقة الدهر كفي || إن لم تكفي فعفي',
132
+ 'فلا بحظي أعطي AAA || ولا بصنعة كفي',
133
+ 'بيت واحد',
134
+ ':::',
135
+ '',
136
+ 'ثم سكت.',
137
+ ].join('\n');
138
+ it('writes a bayt a row, its ṣadr and ʿajuz apart, the ornament hidden from the text', async () => {
139
+ const { chapter, css } = await render([layOut(poem, arabic)]);
140
+ const body = bodyOf(chapter);
141
+ expect(body).toContain('<div class="pt-verse">' +
142
+ '<p class="pt-bayt"><span class="pt-sadr">يا حرقة الدهر كفي</span> <span class="pt-verse-ornament" aria-hidden="true">٭</span> <span class="pt-ajuz">إن لم تكفي فعفي</span></p>' +
143
+ '<p class="pt-bayt"><span class="pt-sadr">فلا بحظي أعطي <span dir="ltr">AAA</span></span> <span class="pt-verse-ornament" aria-hidden="true">٭</span> <span class="pt-ajuz">ولا بصنعة كفي</span></p>' +
144
+ '<p class="pt-bayt pt-bayt-single"><span class="pt-sadr">بيت واحد</span></p>' +
145
+ '</div>');
146
+ expect(body).toContain('<p>ثم سكت.</p>');
147
+ expect(css).toMatch(/\.pt-bayt \{\n {2}display: grid;\n {2}grid-template-columns: minmax\(0, 1fr\) auto minmax\(0, 1fr\);/);
148
+ expect(css).toMatch(/\.pt-ajuz \{\n {2}grid-column: 3;\n {2}text-align: end;/);
149
+ expect(css).toContain('@media (max-width: 30em)');
150
+ });
151
+ it('joins a staggered bayt and a hemistich broken over lines back into one bayt', async () => {
152
+ const narrow = { ...arabic, page: { ...baseConfig.page, width: pt(150) } };
153
+ const long = 'كلام طويل جدا جدا جدا جدا جدا جدا';
154
+ const doc = layOut(`:::verse\n${long} || ${long} آخر\nقصير || قصير\n:::`, narrow);
155
+ const parts = doc.pages[0].columns[0].blocks[0].lines.map((l) => l.verse?.part);
156
+ expect(parts).toContain('sadr');
157
+ expect(parts).toContain('ajuz');
158
+ const { chapter } = await render([doc]);
159
+ const body = bodyOf(chapter);
160
+ expect(body).toContain(`<p class="pt-bayt"><span class="pt-sadr">${long}</span> <span class="pt-ajuz">${long} آخر</span></p>`);
161
+ expect(body).toContain('<p class="pt-bayt"><span class="pt-sadr">قصير</span> <span class="pt-ajuz">قصير</span></p>');
162
+ });
163
+ it('keeps a poem split across pages in one block, the page start in its bayt', async () => {
164
+ const short = { ...arabic, page: { ...baseConfig.page, height: pt(200) } };
165
+ const bayts = Array.from({ length: 30 }, (_, i) => `صدر البيت ${i + 1} هنا || عجز البيت ${i + 1} هنا`).join('\n');
166
+ const doc = layOut(`:::verse\n${bayts}\n:::`, short);
167
+ expect(doc.pages.length).toBeGreaterThan(1);
168
+ const { chapter } = await render([doc]);
169
+ const body = bodyOf(chapter);
170
+ expect(body.match(/<div class="pt-verse">/g)).toHaveLength(1);
171
+ expect(body.match(/class="pt-bayt"/g)).toHaveLength(30);
172
+ expect(body).toMatch(/<span class="pt-sadr"><span epub:type="pagebreak" role="doc-pagebreak" id="page-2" aria-label="[^"]+"><\/span>صدر البيت/);
173
+ });
174
+ it('writes no verse rules for a book without a poem', async () => {
175
+ const { css } = await render([layOut('نص.', arabic)]);
176
+ expect(css).not.toContain('pt-bayt');
177
+ });
178
+ });
179
+ describe('an Arabic book', () => {
180
+ it('gives notes their «(١)» markers, in the text and at the note (an en space after it)', async () => {
181
+ const config = { ...arabic, footnotes: { markerTemplate: '({n})' } };
182
+ const { chapter } = await render([layOut('قال الراوي[^a] كلاما.\n\n[^a]: حاشية NOTE-A.', config)]);
183
+ expect(chapter).toContain('<a epub:type="noteref" role="doc-noteref" class="pt-noteref" href="#fn-a" id="fnref-a"><sup>(١)</sup></a>');
184
+ expect(chapter).toMatch(/<aside epub:type="footnote" role="doc-footnote" id="fn-a" class="pt-footnote"><p><sup>\(١\)<\/sup>\u2002حاشية <span dir="ltr">NOTE-A<\/span>\. <a href="#fnref-a" role="doc-backlink" aria-label="العودة إلى النص">/);
185
+ });
186
+ it('names its landmarks and contents in Arabic, right to left, pages turning to the left', async () => {
187
+ const docs = [layOut('# الفصل الأول\n\nنص.', arabic)];
188
+ expect(docs[0].binding).toBe('right');
189
+ const { pub } = await render(docs, { cover: { bytes: new Uint8Array([0x89, 0x50, 0x4e, 0x47]), mediaType: 'image/png' } });
190
+ expect(pub.pageProgression).toBe('rtl');
191
+ expect(pub.landmarks.map((l) => l.label)).toEqual(['الغلاف', 'بداية المحتوى']);
192
+ expect(String(pub.items.find((i) => i.id === 'cover').data)).toContain('lang="ar" xml:lang="ar" dir="rtl"');
193
+ const nav = buildNav(pub);
194
+ expect(nav).toContain('lang="ar" xml:lang="ar" dir="rtl"');
195
+ expect(nav).toContain('<h1>المحتويات</h1>');
196
+ expect(buildOpf(pub)).toContain('<spine toc="ncx" page-progression-direction="rtl">');
197
+ });
198
+ it('keeps English landmark names in a left-to-right book', async () => {
199
+ const { pub } = await render([layOut('# Title\n\nText.')], { metadata: { title: 'Book', language: 'en' } });
200
+ expect(pub.landmarks.map((l) => l.label)).toEqual(['Start of content']);
201
+ });
202
+ it('puts a box’s left padding on the start side and aligns a cell’s right on its end', async () => {
203
+ const config = {
204
+ ...arabic,
205
+ calloutStyles: [{ id: 'note', padding: { top: pt(2), right: pt(4), bottom: pt(2), left: pt(12) } }],
206
+ };
207
+ const doc = layOut(':::callout{style=note}\nنص في صندوق.\n:::', config);
208
+ const { css } = await render([doc]);
209
+ // The 12pt left padding is on the start side: the page's right.
210
+ const rule = /aside\.pt-callout-note \{[^}]*padding: ([^;]+);/.exec(css)[1].split(' ');
211
+ expect(Number.parseFloat(rule[1])).toBeGreaterThan(Number.parseFloat(rule[3]));
212
+ const ltr = await render([layOut(':::callout{style=note}\nText in a box.\n:::', { ...config, locale: 'en' })], { metadata: { title: 'Book', language: 'en' } });
213
+ const ltrRule = /aside\.pt-callout-note \{[^}]*padding: ([^;]+);/.exec(ltr.css)[1].split(' ');
214
+ expect(Number.parseFloat(ltrRule[3])).toBeGreaterThan(Number.parseFloat(ltrRule[1]));
215
+ });
216
+ });
217
+ //# sourceMappingURL=rtl.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtl.test.js","sourceRoot":"","sources":["../../src/reflowable/rtl.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ResolvedConfig, VDTDocument } from 'postext';
2
+ import type { FileModel, HeadingEntry } from './model';
3
+ /** Where an id landed: its content document and element id. */
4
+ export interface Loc {
5
+ file: FileModel;
6
+ id: string;
7
+ }
8
+ /** Everything the walk found, for the serializer and the navigation. */
9
+ export interface BookModel {
10
+ files: FileModel[];
11
+ headings: HeadingEntry[];
12
+ anchors: Map<string, Loc>;
13
+ resources: Map<string, Loc>;
14
+ /** Printed pages by book page index, in the order their markers were
15
+ * set. */
16
+ pages: Map<number, {
17
+ loc: Loc;
18
+ label: string;
19
+ }>;
20
+ notes: Map<string, Loc>;
21
+ /** Pictures the text places (figures, table-cell images). */
22
+ images: Set<string>;
23
+ /** Whether a picture has a text alternative / lacks one. */
24
+ altText: boolean;
25
+ missingAlt: boolean;
26
+ maths: boolean;
27
+ /** Whether a `:::verse` poem was read. */
28
+ verse: boolean;
29
+ /** First entry of a back-of-book index, of a bibliography, and the
30
+ * contents a `:::toc` prints. */
31
+ index?: Loc;
32
+ bibliography?: Loc;
33
+ contents?: Loc;
34
+ }
35
+ /** The book language when a chapter does not set its own. */
36
+ export interface WalkOptions {
37
+ language: string;
38
+ }
39
+ /** The language a chapter document is written in. */
40
+ export declare function docLanguage(config: ResolvedConfig, fallback: string): string;
41
+ export declare function walkBook(docs: readonly VDTDocument[], options: WalkOptions): BookModel;
42
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/reflowable/walk.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAAY,WAAW,EAA2B,MAAM,SAAS,CAAC;AAE9F,OAAO,KAAK,EAEV,SAAS,EAET,YAAY,EAeb,MAAM,SAAS,CAAC;AAGjB,+DAA+D;AAC/D,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B;eACW;IACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,6DAA6D;IAC7D,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf;sCACkC;IAClC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5E;AAmCD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,CAiBtF"}