jspdf-md-renderer 3.3.3 → 3.4.1

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/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { marked as e } from "marked";
2
2
  import t from "jspdf-autotable";
3
3
  //#region src/enums/mdTokenType.ts
4
4
  var n = /* @__PURE__ */ function(e) {
5
- return e.Heading = "heading", e.Paragraph = "paragraph", e.List = "list", e.ListItem = "list_item", e.Blockquote = "blockquote", e.Code = "code", e.CodeSpan = "codespan", e.Table = "table", e.Html = "html", e.Hr = "hr", e.Image = "image", e.Link = "link", e.Strong = "strong", e.Em = "em", e.TableHeader = "table_header", e.TableCell = "table_cell", e.Raw = "raw", e.Text = "text", e;
5
+ return e.Heading = "heading", e.Paragraph = "paragraph", e.List = "list", e.ListItem = "list_item", e.Blockquote = "blockquote", e.Code = "code", e.CodeSpan = "codespan", e.Table = "table", e.Html = "html", e.Hr = "hr", e.Image = "image", e.Link = "link", e.Strong = "strong", e.Em = "em", e.TableHeader = "table_header", e.TableCell = "table_cell", e.Raw = "raw", e.Text = "text", e.Br = "br", e;
6
6
  }({}), r = "__jmr_", i = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, a = /(\w+)\s*=\s*(\w+)/g, o = [
7
7
  "left",
8
8
  "center",
@@ -168,84 +168,43 @@ var n = /* @__PURE__ */ function(e) {
168
168
  type: n.Blockquote,
169
169
  content: e.text,
170
170
  items: e.tokens ? f(e.tokens) : []
171
- })
172
- }, m = class {
173
- static {
174
- this.cursor = {
175
- x: 0,
176
- y: 0
171
+ }),
172
+ [n.Html]: (e) => {
173
+ let t = String(e.raw ?? e.text ?? "").trim();
174
+ return /^<br\s*\/?>$/i.test(t) ? {
175
+ type: n.Br,
176
+ content: "\n"
177
+ } : {
178
+ type: n.Raw,
179
+ content: e.raw ?? e.text ?? ""
177
180
  };
178
- }
179
- static {
180
- this.lastContentY_ = 0;
181
- }
182
- static {
183
- this.inlineLock = !1;
184
- }
185
- static initialize(e) {
186
- this.options_ = e, this.cursor = {
187
- x: e.cursor.x,
188
- y: e.cursor.y
189
- }, this.lastContentY_ = e.cursor.y;
190
- }
191
- static getCursor() {
192
- return this.cursor;
193
- }
194
- static setCursor(e) {
195
- this.cursor = e;
196
- }
197
- static get options() {
198
- return this.options_;
199
- }
200
- static get isInlineLockActive() {
201
- return this.inlineLock;
202
- }
203
- static activateInlineLock() {
204
- this.inlineLock = !0;
205
- }
206
- static deactivateInlineLock() {
207
- this.inlineLock = !1;
208
- }
209
- static updateX(e, t = "set") {
210
- t === "set" ? this.cursor.x = e : t === "add" && (this.cursor.x += e);
211
- }
212
- static updateY(e, t = "set") {
213
- t === "set" ? this.cursor.y = e : t === "add" && (this.cursor.y += e);
214
- }
215
- static recordContentY(e) {
216
- this.lastContentY_ = e === void 0 ? this.cursor.y : e;
217
- }
218
- static get lastContentY() {
219
- return this.lastContentY_;
220
- }
221
- static get X() {
222
- return this.cursor.x;
223
- }
224
- static get Y() {
225
- return this.cursor.y;
226
- }
227
- }, h = (e) => e.getTextDimensions("H").h * m.options.page.defaultLineHeightFactor, g = (e) => e.getTextDimensions("H").w * m.options.page.defaultLineHeightFactor, _ = (e, t, n, r) => {
228
- let i = 6 - (t?.depth ?? 0) > 0 ? 6 - (t?.depth ?? 0) : 1;
229
- if (e.setFontSize(m.options.page.defaultFontSize + i), t?.items && t?.items.length > 0) for (let e of t?.items ?? []) r(e, n, !1);
181
+ },
182
+ [n.Br]: () => ({
183
+ type: n.Br,
184
+ content: "\n"
185
+ })
186
+ }, m = (e) => e.getTextDimensions("H").h, h = (e) => e.getTextDimensions("H").w, g = (e, t, n, r, i) => {
187
+ let a = 6 - (t?.depth ?? 0) > 0 ? 6 - (t?.depth ?? 0) : 1;
188
+ if (e.setFontSize(r.options.page.defaultFontSize + a), t?.items && t?.items.length > 0) for (let e of t?.items ?? []) i(e, n, r, !1);
230
189
  else {
231
- let r = h(e);
232
- e.text(t?.content ?? "", m.X + n, m.Y, {
190
+ let i = m(e);
191
+ e.text(t?.content ?? "", r.X + n, r.Y, {
233
192
  align: "left",
234
- maxWidth: m.options.page.maxContentWidth - n,
193
+ maxWidth: r.options.page.maxContentWidth - n,
235
194
  baseline: "top"
236
- }), m.recordContentY(m.Y + r), m.updateY(r, "add");
195
+ }), r.recordContentY(r.Y + i), r.updateY(m(e), "add");
237
196
  }
238
- e.setFontSize(m.options.page.defaultFontSize), m.updateX(m.options.page.xpading, "set");
239
- }, v = (e) => {
240
- typeof m.options.pageBreakHandler == "function" ? m.options.pageBreakHandler(e) : e.addPage(m.options.page?.format, m.options.page?.orientation), m.updateY(m.options.page.topmargin), m.updateX(m.options.page.xpading);
241
- }, y = 96, b = (e, t = "mm") => {
197
+ e.setFontSize(r.options.page.defaultFontSize), r.updateX(r.options.page.xpading, "set");
198
+ }, _ = (e, t) => {
199
+ typeof t.options.pageBreakHandler == "function" ? t.options.pageBreakHandler(e) : e.addPage(t.options.page?.format, t.options.page?.orientation), t.updateY(t.options.page.topmargin), t.updateX(t.options.page.xpading);
200
+ }, v = 96, y = (e, t = "mm") => {
242
201
  switch (t) {
243
- case "pt": return e * 72 / y;
244
- case "in": return e / y;
202
+ case "pt": return e * 72 / v;
203
+ case "in": return e / v;
245
204
  case "px": return e;
246
- default: return e * 25.4 / y;
205
+ default: return e * 25.4 / v;
247
206
  }
248
- }, x = (e) => {
207
+ }, b = (e) => {
249
208
  try {
250
209
  let t = "";
251
210
  if (e.includes("base64,")) {
@@ -268,14 +227,14 @@ var n = /* @__PURE__ */ function(e) {
268
227
  console.warn("Failed to extract SVG dimensions:", e);
269
228
  }
270
229
  return null;
271
- }, S = (e, t, n, r, i = "mm") => {
230
+ }, x = (e, t, n, r, i = "mm") => {
272
231
  if (!t.data) return {
273
232
  finalWidth: 0,
274
233
  finalHeight: 0
275
234
  };
276
235
  let a = t.naturalWidth || 0, o = t.naturalHeight || 0;
277
236
  if (!a || !o) if (t.data.startsWith("data:image/svg")) {
278
- let e = x(t.data);
237
+ let e = b(t.data);
279
238
  e && (a = e.width, o = e.height);
280
239
  } else try {
281
240
  let n = e.getImageProperties(t.data);
@@ -284,7 +243,7 @@ var n = /* @__PURE__ */ function(e) {
284
243
  console.warn("Failed to get image properties for intrinsic sizing:", e);
285
244
  }
286
245
  let s = o > 0 ? a / o : 1, c, l;
287
- if (t.width && t.height ? (c = b(t.width, i), l = b(t.height, i)) : t.width ? (c = b(t.width, i), l = c / s) : t.height ? (l = b(t.height, i), c = l * s) : (c = b(a, i), l = b(o, i)), c > n) {
246
+ if (t.width && t.height ? (c = y(t.width, i), l = y(t.height, i)) : t.width ? (c = y(t.width, i), l = c / s) : t.height ? (l = y(t.height, i), c = l * s) : (c = y(a, i), l = y(o, i)), c > n) {
288
247
  let e = n / c;
289
248
  c = n, l *= e;
290
249
  }
@@ -296,7 +255,7 @@ var n = /* @__PURE__ */ function(e) {
296
255
  finalWidth: c,
297
256
  finalHeight: l
298
257
  };
299
- }, C = async (e) => {
258
+ }, S = async (e) => {
300
259
  for (let t of e) {
301
260
  if (t.type === n.Image && t.src) try {
302
261
  if (t.src.startsWith("data:")) t.data = t.src;
@@ -314,7 +273,7 @@ var n = /* @__PURE__ */ function(e) {
314
273
  t.data && t.data.startsWith("data:image/svg") && typeof window < "u" && typeof document < "u" && (t.data = await new Promise((e) => {
315
274
  let n = new Image();
316
275
  n.onload = () => {
317
- let r = document.createElement("canvas"), i = x(t.data), a = i ? i.width : n.width || 300, o = i ? i.height : n.height || 150;
276
+ let r = document.createElement("canvas"), i = b(t.data), a = i ? i.width : n.width || 300, o = i ? i.height : n.height || 150;
318
277
  t.naturalWidth = a, t.naturalHeight = o, r.width = a * 4, r.height = o * 4;
319
278
  let s = r.getContext("2d");
320
279
  s ? (s.scale(4, 4), s.drawImage(n, 0, 0, a, o), e(r.toDataURL("image/png"))) : e(t.data);
@@ -323,49 +282,49 @@ var n = /* @__PURE__ */ function(e) {
323
282
  } catch (e) {
324
283
  console.warn(`[jspdf-md-renderer] Warning: Failed to load image at ${t.src}. It will be skipped.`, e);
325
284
  }
326
- t.items && t.items.length > 0 && await C(t.items);
285
+ t.items && t.items.length > 0 && await S(t.items);
327
286
  }
328
- }, w = class {
329
- static getCodespanOptions() {
330
- let e = m.options.codespan ?? {};
287
+ }, C = class {
288
+ static getCodespanOptions(e) {
289
+ let t = e.options.codespan ?? {};
331
290
  return {
332
- backgroundColor: e.backgroundColor ?? "#EEEEEE",
333
- padding: e.padding ?? .5,
334
- showBackground: e.showBackground !== !1,
335
- fontSizeScale: e.fontSizeScale ?? .9
291
+ backgroundColor: t.backgroundColor ?? "#EEEEEE",
292
+ padding: t.padding ?? .5,
293
+ showBackground: t.showBackground !== !1,
294
+ fontSizeScale: t.fontSizeScale ?? .9
336
295
  };
337
296
  }
338
- static applyStyle(e, t) {
339
- let n = e.getFont().fontName, r = e.getFontSize(), i = () => {
340
- let e = m.options.font.bold?.name;
341
- return e && e !== "" ? e : n;
342
- }, a = () => {
343
- let e = m.options.font.regular?.name;
344
- return e && e !== "" ? e : n;
297
+ static applyStyle(e, t, n) {
298
+ let r = e.getFont().fontName, i = e.getFontSize(), a = () => {
299
+ let e = n.options.font.bold?.name;
300
+ return e && e !== "" ? e : r;
301
+ }, o = () => {
302
+ let e = n.options.font.regular?.name;
303
+ return e && e !== "" ? e : r;
345
304
  };
346
305
  switch (t) {
347
306
  case "bold":
348
- e.setFont(i(), m.options.font.bold?.style || "bold");
307
+ e.setFont(a(), n.options.font.bold?.style || "bold");
349
308
  break;
350
309
  case "italic":
351
- e.setFont(a(), "italic");
310
+ e.setFont(o(), "italic");
352
311
  break;
353
312
  case "bolditalic":
354
- e.setFont(i(), "bolditalic");
313
+ e.setFont(a(), "bolditalic");
355
314
  break;
356
315
  case "codespan":
357
- e.setFont("courier", "normal"), e.setFontSize(r * this.getCodespanOptions().fontSizeScale);
316
+ e.setFont("courier", "normal"), e.setFontSize(i * this.getCodespanOptions(n).fontSizeScale);
358
317
  break;
359
318
  default:
360
- e.setFont(a(), e.getFont().fontStyle);
319
+ e.setFont(o(), e.getFont().fontStyle);
361
320
  break;
362
321
  }
363
322
  }
364
- static measureWordWidth(e, t, n) {
365
- let r = e.getFont(), i = e.getFontSize();
366
- this.applyStyle(e, n);
367
- let a = e.getTextWidth(t), o = e.getCharSpace?.() ?? 0, s = a + t.length * o;
368
- return e.setFont(r.fontName, r.fontStyle), e.setFontSize(i), s;
323
+ static measureWordWidth(e, t, n, r) {
324
+ let i = e.getFont(), a = e.getFontSize();
325
+ this.applyStyle(e, n, r);
326
+ let o = e.getTextWidth(t), s = e.getCharSpace?.() ?? 0, c = o + t.length * s;
327
+ return e.setFont(i.fontName, i.fontStyle), e.setFontSize(a), c;
369
328
  }
370
329
  static getStyleFromType(e, t) {
371
330
  switch (e) {
@@ -375,91 +334,107 @@ var n = /* @__PURE__ */ function(e) {
375
334
  default: return t || "normal";
376
335
  }
377
336
  }
378
- static flattenToWords(e, t, n = "normal", r = !1, i) {
379
- let a = [];
380
- for (let o of t) {
381
- let t = this.getStyleFromType(o.type, n), s = o.type === "link" || r, c = o.href || i;
382
- if (o.items && o.items.length > 0) {
383
- let n = this.flattenToWords(e, o.items, t, s, c);
384
- a.push(...n);
385
- } else if (o.type === "image") {
386
- let n = m.options.page.maxContentHeight - m.options.page.topmargin, { finalWidth: r, finalHeight: i } = S(e, o, m.options.page.maxContentWidth - m.options.page.indent * 0, n, m.options.page.unit || "mm");
387
- a.push({
337
+ static flattenToWords(e, t, n, r = "normal", i = !1, a) {
338
+ let o = [];
339
+ for (let s of t) {
340
+ let t = this.getStyleFromType(s.type, r), c = s.type === "link" || i, l = s.href || a;
341
+ if (s.items && s.items.length > 0) {
342
+ let r = this.flattenToWords(e, s.items, n, t, c, l);
343
+ o.push(...r);
344
+ } else if (s.type === "image") {
345
+ let r = n.options.page.maxContentHeight - n.options.page.topmargin, { finalWidth: i, finalHeight: a } = x(e, s, n.options.page.maxContentWidth - n.options.page.indent * 0, r, n.options.page.unit || "mm");
346
+ o.push({
388
347
  text: "",
389
- width: r,
348
+ width: i,
390
349
  style: t,
391
- isLink: s,
392
- href: c,
393
- linkColor: s ? m.options.link?.linkColor || [
350
+ isLink: c,
351
+ href: l,
352
+ linkColor: c ? n.options.link?.linkColor || [
394
353
  0,
395
354
  0,
396
355
  255
397
356
  ] : void 0,
398
357
  isImage: !0,
399
- imageElement: o,
400
- imageHeight: i
358
+ imageElement: s,
359
+ imageHeight: a
401
360
  });
402
- } else {
403
- let n = o.content || o.text || "";
404
- if (!n) continue;
405
- if (t === "codespan") {
406
- let r = n.trim();
407
- r && a.push({
408
- text: r,
409
- width: this.measureWordWidth(e, r, t),
361
+ } else if (s.type === "br") o.push({
362
+ text: "",
363
+ width: 0,
364
+ style: t,
365
+ isBr: !0
366
+ });
367
+ else {
368
+ let r = s.content || s.text || "";
369
+ if (!r) continue;
370
+ if (/^\s/.test(r) && o.length > 0 && (o[o.length - 1].hasTrailingSpace = !0), t === "codespan") {
371
+ let i = r.trim();
372
+ i && o.push({
373
+ text: i,
374
+ width: this.measureWordWidth(e, i, t, n),
410
375
  style: t,
411
- isLink: s,
412
- href: c,
413
- linkColor: s ? m.options.link?.linkColor || [
376
+ isLink: c,
377
+ href: l,
378
+ linkColor: c ? n.options.link?.linkColor || [
414
379
  0,
415
380
  0,
416
381
  255
417
- ] : void 0
382
+ ] : void 0,
383
+ hasTrailingSpace: /\s$/.test(r)
418
384
  });
419
385
  continue;
420
386
  }
421
- let r = n.split(/\s+/).filter((e) => e.length > 0);
422
- if (r.length === 0) continue;
423
- for (let n = 0; n < r.length; n++) {
424
- let i = r[n];
425
- a.push({
426
- text: i,
427
- width: this.measureWordWidth(e, i, t),
387
+ let i = r.trim().split(/\s+/).filter((e) => e.length > 0);
388
+ for (let a = 0; a < i.length; a++) {
389
+ let s = a !== i.length - 1 || /\s$/.test(r);
390
+ o.push({
391
+ text: i[a],
392
+ width: this.measureWordWidth(e, i[a], t, n),
428
393
  style: t,
429
- isLink: s,
430
- href: c,
431
- linkColor: s ? m.options.link?.linkColor || [
394
+ isLink: c,
395
+ href: l,
396
+ linkColor: c ? n.options.link?.linkColor || [
432
397
  0,
433
398
  0,
434
399
  255
435
- ] : void 0
400
+ ] : void 0,
401
+ hasTrailingSpace: s
436
402
  });
437
403
  }
438
404
  }
439
405
  }
440
- return a;
441
- }
442
- static breakIntoLines(e, t, n) {
443
- let r = [], i = [], a = 0, o = 0, s = h(e) * m.options.page.defaultLineHeightFactor, c = e.getTextWidth(" ");
444
- for (let l = 0; l < t.length; l++) {
445
- let u = t[l], d = i.length > 0 ? c + u.width : u.width, f = u.isImage && u.imageHeight ? u.imageHeight : h(e) * m.options.page.defaultLineHeightFactor;
446
- o + d > n && i.length > 0 ? (r.push({
447
- words: i,
448
- totalTextWidth: a,
406
+ return o;
407
+ }
408
+ static breakIntoLines(e, t, n, r) {
409
+ let i = [], a = [], o = 0, s = 0, c = m(e) * r.options.page.defaultLineHeightFactor, l = e.getTextWidth(" ");
410
+ for (let u = 0; u < t.length; u++) {
411
+ let d = t[u], f = a[a.length - 1]?.hasTrailingSpace ? l + d.width : d.width, p = d.isImage && d.imageHeight ? d.imageHeight : m(e) * r.options.page.defaultLineHeightFactor;
412
+ if (d.isBr) {
413
+ i.push({
414
+ words: a,
415
+ totalTextWidth: o,
416
+ isLastLine: !0,
417
+ lineHeight: c
418
+ }), a = [], o = 0, s = 0, c = m(e) * r.options.page.defaultLineHeightFactor;
419
+ continue;
420
+ }
421
+ s + f > n && a.length > 0 ? (i.push({
422
+ words: a,
423
+ totalTextWidth: o,
449
424
  isLastLine: !1,
450
- lineHeight: s
451
- }), i = [u], a = u.width, o = u.width, s = f) : (i.push(u), a += u.width, o += d, s = Math.max(s, f));
425
+ lineHeight: c
426
+ }), a = [d], o = d.width, s = d.width, c = p) : (a.push(d), o += d.width, s += f, c = Math.max(c, p));
452
427
  }
453
- return i.length > 0 && r.push({
454
- words: i,
455
- totalTextWidth: a,
428
+ return a.length > 0 && i.push({
429
+ words: a,
430
+ totalTextWidth: o,
456
431
  isLastLine: !0,
457
- lineHeight: s
458
- }), r;
432
+ lineHeight: c
433
+ }), i;
459
434
  }
460
- static renderWord(e, t, n, r) {
461
- let i = e.getFont(), a = e.getFontSize(), o = e.getTextColor();
462
- if (this.applyStyle(e, t.style), t.isLink && t.linkColor && e.setTextColor(...t.linkColor), t.isImage && t.imageElement && t.imageElement.data) try {
435
+ static renderWord(e, t, n, r, i) {
436
+ let a = e.getFont(), o = e.getFontSize(), s = e.getTextColor();
437
+ if (this.applyStyle(e, t.style, i), t.isLink && t.linkColor && e.setTextColor(...t.linkColor), t.isImage && t.imageElement && t.imageElement.data) try {
463
438
  let i = "JPEG";
464
439
  if (t.imageElement.data.startsWith("data:image/png")) i = "PNG";
465
440
  else if (t.imageElement.data.startsWith("data:image/webp")) i = "WEBP";
@@ -483,179 +458,183 @@ var n = /* @__PURE__ */ function(e) {
483
458
  }
484
459
  else {
485
460
  if (t.style === "codespan") {
486
- let i = this.getCodespanOptions();
487
- if (i.showBackground) {
488
- let a = h(e), o = i.padding;
489
- e.setFillColor(i.backgroundColor), e.rect(n - o, r - o, t.width + o * 2, a + o * 2, "F"), e.setFillColor("#000000");
461
+ let a = this.getCodespanOptions(i);
462
+ if (a.showBackground) {
463
+ let i = m(e), o = a.padding;
464
+ e.setFillColor(a.backgroundColor), e.rect(n - o, r - o, t.width + o * 2, i + o * 2, "F"), e.setFillColor("#000000");
490
465
  }
491
466
  }
492
467
  e.text(t.text, n, r, { baseline: "top" });
493
468
  }
494
469
  if (t.isLink && t.href) {
495
- let i = t.isImage && t.imageHeight ? t.imageHeight : h(e);
470
+ let i = t.isImage && t.imageHeight ? t.imageHeight : m(e);
496
471
  e.link(n, r, t.width, i, { url: t.href });
497
472
  }
498
- e.setFont(i.fontName, i.fontStyle), e.setFontSize(a), e.setTextColor(o);
473
+ e.setFont(a.fontName, a.fontStyle), e.setFontSize(o), e.setTextColor(s);
499
474
  }
500
- static renderAlignedLine(e, t, n, r, i, a = "left") {
501
- let { words: o, totalTextWidth: s, isLastLine: c } = t;
502
- if (o.length === 0) return;
503
- let l = e.getTextWidth(" "), u = n, d = l, f = s + (o.length - 1) * l;
504
- switch (a) {
475
+ static renderAlignedLine(e, t, n, r, i, a, o = "left") {
476
+ let { words: s, totalTextWidth: c, isLastLine: l } = t;
477
+ if (s.length === 0) return;
478
+ let u = e.getTextWidth(" "), d = n, f = u, p = c, h = 0;
479
+ for (let e = 0; e < s.length - 1; e++) s[e].hasTrailingSpace && (p += u, h++);
480
+ switch (o) {
505
481
  case "right":
506
- u = n + i - f;
482
+ d = n + i - p;
507
483
  break;
508
484
  case "center":
509
- u = n + (i - f) / 2;
485
+ d = n + (i - p) / 2;
510
486
  break;
511
487
  case "justify":
512
- !c && o.length > 1 && (d = (i - s) / (o.length - 1));
488
+ !l && h > 0 && (f = (i - c) / h);
513
489
  break;
514
490
  default: break;
515
491
  }
516
- let p = u, g = h(e) * m.options.page.defaultLineHeightFactor;
517
- for (let n = 0; n < o.length; n++) {
518
- let i = o[n], a = r, s = i.isImage && i.imageHeight ? i.imageHeight : g;
519
- i.isImage ? a = r : s < t.lineHeight && (a = r + (t.lineHeight - s)), this.renderWord(e, i, p, a), p += i.width, n < o.length - 1 && (p += d);
492
+ let g = d, _ = m(e) * a.options.page.defaultLineHeightFactor;
493
+ for (let n = 0; n < s.length; n++) {
494
+ let i = s[n], o = r, c = i.isImage && i.imageHeight ? i.imageHeight : _;
495
+ i.isImage ? o = r : c < t.lineHeight && (o = r + (t.lineHeight - c)), this.renderWord(e, i, g, o, a), g += i.width, n < s.length - 1 && i.hasTrailingSpace && (g += f);
520
496
  }
521
497
  }
522
- static renderStyledParagraph(e, t, n, r, i, a) {
523
- let o = a ?? m.options.content?.textAlignment ?? "left", s = this.flattenToWords(e, t);
524
- if (s.length === 0) return;
525
- let c = this.breakIntoLines(e, s, i), l = r;
526
- for (let t of c) l + t.lineHeight > m.options.page.maxContentHeight && (v(e), l = m.Y), this.renderAlignedLine(e, t, n, l, i, o), m.recordContentY(l + t.lineHeight), l += t.lineHeight, m.updateY(t.lineHeight, "add");
527
- let u = c[c.length - 1];
528
- if (u) {
529
- let t = u.totalTextWidth + (u.words.length - 1) * e.getTextWidth(" ");
530
- m.updateX(n + t, "set");
498
+ static renderStyledParagraph(e, t, n, r, i, a, o) {
499
+ let s = o ?? a.options.content?.textAlignment ?? "left", c = this.flattenToWords(e, t, a);
500
+ if (c.length === 0) return;
501
+ let l = this.breakIntoLines(e, c, i, a), u = r;
502
+ for (let t of l) u + t.lineHeight > a.options.page.maxContentHeight && (_(e, a), u = a.Y), this.renderAlignedLine(e, t, n, u, i, a, s), a.recordContentY(u + t.lineHeight), u += t.lineHeight, a.updateY(t.lineHeight, "add");
503
+ let d = l[l.length - 1];
504
+ if (d) {
505
+ let t = 0;
506
+ for (let e = 0; e < d.words.length - 1; e++) d.words[e].hasTrailingSpace && t++;
507
+ let r = d.totalTextWidth + t * e.getTextWidth(" ");
508
+ a.updateX(n + r, "set");
531
509
  }
532
510
  }
533
- static renderJustifiedParagraph(e, t, n, r, i) {
534
- this.renderStyledParagraph(e, t, n, r, i);
511
+ static renderJustifiedParagraph(e, t, n, r, i, a) {
512
+ this.renderStyledParagraph(e, t, n, r, i, a);
535
513
  }
536
- }, T = class {
537
- static renderText(e, t, n = m.X, r = m.Y, i, a = !1) {
538
- let o = e.splitTextToSize(t, i), s = h(e), c = s * m.options.page.defaultLineHeightFactor, l = r;
539
- for (let t = 0; t < o.length; t++) {
540
- let r = o[t];
541
- l + c > m.options.page.maxContentHeight && (v(e), l = m.Y), a ? t === o.length - 1 ? e.text(r, n, l, { baseline: "top" }) : e.text(r, n, l, {
542
- maxWidth: i,
514
+ }, w = class {
515
+ static renderText(e, t, n, r = n.X, i = n.Y, a, o = !1) {
516
+ let s = e.splitTextToSize(t, a), c = m(e), l = c * n.options.page.defaultLineHeightFactor, u = i;
517
+ for (let t = 0; t < s.length; t++) {
518
+ let i = s[t];
519
+ u + l > n.options.page.maxContentHeight && (_(e, n), u = n.Y), o ? t === s.length - 1 ? e.text(i, r, u, { baseline: "top" }) : e.text(i, r, u, {
520
+ maxWidth: a,
543
521
  align: "justify",
544
522
  baseline: "top"
545
- }) : e.text(r, n, l, { baseline: "top" }), m.recordContentY(l + s), l += c, m.updateY(c, "add");
523
+ }) : e.text(i, r, u, { baseline: "top" }), n.recordContentY(u + c), u += l, n.updateY(l, "add");
546
524
  }
547
- return l;
525
+ return u;
548
526
  }
549
- }, E = (e, t, n, r) => {
550
- m.activateInlineLock(), e.setFontSize(m.options.page.defaultFontSize);
551
- let i = m.options.page.maxContentWidth - n;
527
+ }, T = (e, t, r, i, a) => {
528
+ i.activateInlineLock(), e.setFontSize(i.options.page.defaultFontSize);
529
+ let o = i.options.page.maxContentWidth - r;
552
530
  if (t?.items && t?.items.length > 0) {
553
531
  if (t.items.length === 1 && t.items[0].type === "image") {
554
- r(t.items[0], n, !1), m.updateX(m.options.page.xpading), m.deactivateInlineLock();
532
+ a(t.items[0], r, i, !1), i.updateX(i.options.page.xpading), i.deactivateInlineLock();
555
533
  return;
556
534
  }
557
- let a = [
558
- "strong",
559
- "em",
560
- "text",
561
- "codespan",
562
- "link",
563
- "image"
535
+ let s = [
536
+ n.Strong,
537
+ n.Em,
538
+ n.Text,
539
+ n.CodeSpan,
540
+ n.Link,
541
+ n.Image,
542
+ n.Br
564
543
  ];
565
- if (t.items.some((e) => !a.includes(e.type))) {
566
- let o = [], s = () => {
567
- o.length > 0 && (w.renderStyledParagraph(e, o, m.X + n, m.Y, i), o.length = 0);
544
+ if (t.items.some((e) => !s.includes(e.type))) {
545
+ let n = [], c = () => {
546
+ n.length > 0 && (C.renderStyledParagraph(e, n, i.X + r, i.Y, o, i), n.length = 0);
568
547
  };
569
- for (let e of t.items) a.includes(e.type) ? o.push(e) : (s(), r(e, n, !1));
570
- s();
571
- } else w.renderStyledParagraph(e, t.items, m.X + n, m.Y, i);
548
+ for (let e of t.items) s.includes(e.type) ? n.push(e) : (c(), a(e, r, i, !1));
549
+ c();
550
+ } else C.renderStyledParagraph(e, t.items, i.X + r, i.Y, o, i);
572
551
  } else {
573
- let r = t.content ?? "", a = m.options.content?.textAlignment ?? "left";
574
- r.trim() && T.renderText(e, r, m.X + n, m.Y, i, a === "justify");
575
- }
576
- m.updateX(m.options.page.xpading), m.deactivateInlineLock();
577
- }, D = (e, t, n, r) => {
578
- e.setFontSize(m.options.page.defaultFontSize);
579
- for (let [e, i] of t?.items?.entries() ?? []) {
580
- let a = t.ordered ? (t.start ?? 0) + e : t.start;
581
- r(i, n + 1, !0, a, t.ordered);
582
- }
583
- }, O = (e, t, r, i, a, o) => {
584
- m.Y + h(e) >= m.options.page.maxContentHeight && v(e);
585
- let s = m.options, c = r * s.page.indent, l = o ? `${a}. ` : "• ", u = s.page.xpading;
586
- m.updateX(u, "set"), e.setFont(s.font.regular.name, s.font.regular.style), e.text(l, u + c, m.Y, { baseline: "top" });
587
- let d = e.getTextWidth(l), f = u + c + d, p = s.page.maxContentWidth - c - d;
552
+ let n = t.content ?? "", a = i.options.content?.textAlignment ?? "left";
553
+ n.trim() && w.renderText(e, n, i, i.X + r, i.Y, o, a === "justify");
554
+ }
555
+ i.updateX(i.options.page.xpading), i.deactivateInlineLock();
556
+ }, E = (e, t, n, r, i) => {
557
+ e.setFontSize(r.options.page.defaultFontSize);
558
+ for (let [e, a] of t?.items?.entries() ?? []) {
559
+ let o = t.ordered ? (t.start ?? 0) + e : t.start;
560
+ i(a, n + 1, r, !0, o, t.ordered);
561
+ }
562
+ }, D = (e, t, r, i, a, o, s) => {
563
+ i.Y + m(e) >= i.options.page.maxContentHeight && _(e, i);
564
+ let c = i.options, l = r * c.page.indent, u = s ? `${o}. ` : "• ", d = c.page.xpading;
565
+ i.updateX(d, "set"), e.setFont(c.font.regular.name, c.font.regular.style), e.text(u, d + l, i.Y, { baseline: "top" });
566
+ let f = e.getTextWidth(u), p = d + l + f, h = c.page.maxContentWidth - l - f;
588
567
  if (t.items && t.items.length > 0) {
589
- let s = [], c = () => {
590
- s.length > 0 && (w.renderStyledParagraph(e, s, f, m.Y, p), s.length = 0, m.updateX(u, "set"));
568
+ let c = [], l = () => {
569
+ c.length > 0 && (C.renderStyledParagraph(e, c, p, i.Y, h, i), c.length = 0, i.updateX(d, "set"));
591
570
  };
592
- for (let e of t.items) e.type === n.List ? (c(), i(e, r, !0, a, e.ordered ?? !1)) : e.type === n.ListItem ? (c(), i(e, r, !0, a, o)) : s.push(e);
593
- c();
571
+ for (let e of t.items) e.type === n.List ? (l(), a(e, r, i, !0, o, e.ordered ?? !1)) : e.type === n.ListItem ? (l(), a(e, r, i, !0, o, s)) : c.push(e);
572
+ l();
594
573
  } else if (t.content) {
595
- let n = s.content?.textAlignment ?? "left";
596
- T.renderText(e, t.content, f, m.Y, p, n === "justify");
574
+ let n = c.content?.textAlignment ?? "left";
575
+ w.renderText(e, t.content, i, p, i.Y, h, n === "justify");
597
576
  }
598
- }, k = (e, t, n, r, i, a, o, s = !0) => {
599
- if (t?.items && t?.items.length > 0) for (let e of t?.items ?? []) i(e, n, r, a, o, s);
577
+ }, O = (e, t, n, r, i, a, o, s, c = !0) => {
578
+ if (t?.items && t?.items.length > 0) for (let e of t?.items ?? []) a(e, n, r, i, o, s, c);
600
579
  else {
601
- let i = m.options, c = n * i.page.indent, l = r ? o ? `${a}. ` : "• " : "", u = t.content || "", d = i.page.xpading;
602
- if (!u && !l) return;
603
- if (!u.trim() && !l) {
604
- let t = (u.match(/\n/g) || []).length;
580
+ let a = r.options, l = n * a.page.indent, u = i ? s ? `${o}. ` : "• " : "", d = t.content || "", f = a.page.xpading;
581
+ if (!d && !u) return;
582
+ if (!d.trim() && !u) {
583
+ let t = (d.match(/\n/g) || []).length;
605
584
  if (t > 1) {
606
- let n = (t - 1) * (e.getTextDimensions("A").h * i.page.defaultLineHeightFactor);
607
- m.Y + n > i.page.maxContentHeight ? v(e) : (m.updateY(n, "add"), m.recordContentY(m.Y));
585
+ let n = (t - 1) * (e.getTextDimensions("A").h * a.page.defaultLineHeightFactor);
586
+ r.Y + n > a.page.maxContentHeight ? _(e, r) : (r.updateY(n, "add"), r.recordContentY(r.Y));
608
587
  }
609
588
  return;
610
589
  }
611
- if (m.updateX(d, "set"), r && l) {
612
- let t = e.getTextWidth(l), n = i.page.maxContentWidth - c - t;
613
- e.setFont(i.font.regular.name, i.font.regular.style), e.text(l, d + c, m.Y, { baseline: "top" }), T.renderText(e, u, d + c + t, m.Y, n, s);
590
+ if (r.updateX(f, "set"), i && u) {
591
+ let t = e.getTextWidth(u), n = a.page.maxContentWidth - l - t;
592
+ e.setFont(a.font.regular.name, a.font.regular.style), e.text(u, f + l, r.Y, { baseline: "top" }), w.renderText(e, d, r, f + l + t, r.Y, n, c);
614
593
  } else {
615
- let t = i.page.maxContentWidth - c;
616
- T.renderText(e, u, d + c, m.Y, t, s);
594
+ let t = a.page.maxContentWidth - l;
595
+ w.renderText(e, d, r, f + l, r.Y, t, c);
617
596
  }
618
- m.updateX(d, "set");
597
+ r.updateX(f, "set");
619
598
  }
620
- }, A = (e) => {
621
- let t = e.internal.pageSize.getWidth();
622
- e.setLineDashPattern([1, 1], 0), e.setLineWidth(.1), e.line(m.options.page.xpading, m.Y, t - m.options.page.xpading, m.Y), e.setLineWidth(.1), e.setLineDashPattern([], 0), m.updateY(h(e), "add");
623
- }, j = (e, t, n) => {
624
- let r = e.getFont(), i = e.getFontSize();
599
+ }, k = (e, t) => {
600
+ let n = e.internal.pageSize.getWidth();
601
+ e.setLineDashPattern([1, 1], 0), e.setLineWidth(.1), e.line(t.options.page.xpading, t.Y, n - t.options.page.xpading, t.Y), e.setLineWidth(.1), e.setLineDashPattern([], 0), t.updateY(m(e), "add");
602
+ }, A = (e, t, n, r) => {
603
+ let i = e.getFont(), a = e.getFontSize();
625
604
  e.setFont("courier", "normal");
626
- let a = m.options.page.defaultFontSize * .9;
627
- e.setFontSize(a);
628
- let o = n * m.options.page.indent, s = m.options.page.maxContentWidth - o - 8, c = e.getLineHeightFactor(), l = a / e.internal.scaleFactor * c, u = (t.code ?? "").replace(/[\r\n\s]+$/, "");
629
- if (!u) {
630
- e.setFont(r.fontName, r.fontStyle), e.setFontSize(i);
605
+ let o = r.options.page.defaultFontSize * .9;
606
+ e.setFontSize(o);
607
+ let s = n * r.options.page.indent, c = r.options.page.maxContentWidth - s - 8, l = e.getLineHeightFactor(), u = o / e.internal.scaleFactor * l, d = (t.code ?? "").replace(/[\r\n\s]+$/, "");
608
+ if (!d) {
609
+ e.setFont(i.fontName, i.fontStyle), e.setFontSize(a);
631
610
  return;
632
611
  }
633
- let d = e.splitTextToSize(u, s);
634
- for (; d.length > 0 && d[d.length - 1].trim() === "";) d.pop();
635
- if (d.length === 0) {
636
- e.setFont(r.fontName, r.fontStyle), e.setFontSize(i);
612
+ let f = e.splitTextToSize(d, c);
613
+ for (; f.length > 0 && f[f.length - 1].trim() === "";) f.pop();
614
+ if (f.length === 0) {
615
+ e.setFont(i.fontName, i.fontStyle), e.setFontSize(a);
637
616
  return;
638
617
  }
639
- let f = 0;
640
- for (; f < d.length;) {
641
- let n = m.options.page.maxContentHeight - m.Y, r = d.length - f, i = n - 8, a = Math.floor(i / l);
642
- if (a <= 0) {
643
- v(e);
618
+ let p = 0;
619
+ for (; p < f.length;) {
620
+ let n = r.options.page.maxContentHeight - r.Y, i = f.length - p, a = n - 8, o = Math.floor(a / u);
621
+ if (o <= 0) {
622
+ _(e, r);
644
623
  continue;
645
624
  }
646
- a > r && (a = r);
647
- let o = d.slice(f, f + a), s = f === 0, c = f + a >= d.length, u = a * l;
648
- if (s && m.updateY(4, "add"), e.setFillColor("#EEEEEE"), e.setDrawColor("#DDDDDD"), e.roundedRect(m.X, m.Y - 4, m.options.page.maxContentWidth, u + (s ? 4 : 0) + (c ? 4 : 0), 2, 2, "FD"), s && t.lang) {
625
+ o > i && (o = i);
626
+ let s = f.slice(p, p + o), c = p === 0, l = p + o >= f.length, d = o * u;
627
+ if (c && r.updateY(4, "add"), e.setFillColor("#EEEEEE"), e.setDrawColor("#DDDDDD"), e.roundedRect(r.X, r.Y - 4, r.options.page.maxContentWidth, d + (c ? 4 : 0) + (l ? 4 : 0), 2, 2, "FD"), c && t.lang) {
649
628
  let n = e.getFontSize();
650
- e.setFontSize(10), e.setTextColor("#666666"), e.text(t.lang, m.X + m.options.page.maxContentWidth - e.getTextWidth(t.lang) - 4, m.Y, { baseline: "top" }), e.setFontSize(n), e.setTextColor("#000000");
629
+ e.setFontSize(10), e.setTextColor("#666666"), e.text(t.lang, r.X + r.options.page.maxContentWidth - e.getTextWidth(t.lang) - 4, r.Y, { baseline: "top" }), e.setFontSize(n), e.setTextColor("#000000");
651
630
  }
652
- let p = m.Y;
653
- for (let t of o) e.text(t, m.X + 4, p, { baseline: "top" }), p += l;
654
- m.updateY(u, "add"), m.recordContentY(m.Y + (c ? 4 : 0)), c && m.updateY(4, "add"), f += a, f < d.length && v(e);
631
+ let m = r.Y;
632
+ for (let t of s) e.text(t, r.X + 4, m, { baseline: "top" }), m += u;
633
+ r.updateY(d, "add"), r.recordContentY(r.Y + (l ? 4 : 0)), l && r.updateY(4, "add"), p += o, p < f.length && _(e, r);
655
634
  }
656
- e.setFont(r.fontName, r.fontStyle), e.setFontSize(i);
657
- }, M = (e, t, n) => {
658
- let r = e.getFont().fontName, i = e.getFont().fontStyle, a = e.getFontSize(), o = (e) => {
635
+ e.setFont(i.fontName, i.fontStyle), e.setFontSize(a);
636
+ }, j = (e, t, n, r) => {
637
+ let i = e.getFont().fontName, a = e.getFont().fontStyle, o = e.getFontSize(), s = (e) => {
659
638
  switch (e) {
660
639
  case "normal": return 0;
661
640
  case "bold": return 1;
@@ -664,110 +643,110 @@ var n = /* @__PURE__ */ function(e) {
664
643
  case "codespan": return .5;
665
644
  default: return 0;
666
645
  }
667
- }, s = (t, s) => {
668
- s === "bold" ? e.setFont(m.options.font.bold.name && m.options.font.bold.name !== "" ? m.options.font.bold.name : r, m.options.font.bold.style || "bold") : s === "italic" ? e.setFont(m.options.font.regular.name, "italic") : s === "bolditalic" ? e.setFont(m.options.font.bold.name && m.options.font.bold.name !== "" ? m.options.font.bold.name : r, "bolditalic") : s === "codespan" ? (e.setFont("courier", "normal"), e.setFontSize(a * .9)) : e.setFont(m.options.font.regular.name, i);
669
- let c = m.options.page.maxContentWidth - n - m.X, l = e.splitTextToSize(t, c), u = s === "codespan", d = "#EEEEEE";
670
- if (m.isInlineLockActive) for (let t = 0; t < l.length; t++) {
671
- if (u) {
672
- let r = e.getTextWidth(l[t]) + g(e), i = h(e);
673
- e.setFillColor(d), e.roundedRect(m.X + n - 1, m.Y - 1, r + 2, i + 2, 2, 2, "F"), e.setFillColor("#000000");
646
+ }, c = (t, c) => {
647
+ c === "bold" ? e.setFont(r.options.font.bold.name && r.options.font.bold.name !== "" ? r.options.font.bold.name : i, r.options.font.bold.style || "bold") : c === "italic" ? e.setFont(r.options.font.regular.name, "italic") : c === "bolditalic" ? e.setFont(r.options.font.bold.name && r.options.font.bold.name !== "" ? r.options.font.bold.name : i, "bolditalic") : c === "codespan" ? (e.setFont("courier", "normal"), e.setFontSize(o * .9)) : e.setFont(r.options.font.regular.name, a);
648
+ let l = r.options.page.maxContentWidth - n - r.X, u = e.splitTextToSize(t, l), d = c === "codespan", f = "#EEEEEE";
649
+ if (r.isInlineLockActive) for (let t = 0; t < u.length; t++) {
650
+ if (d) {
651
+ let i = e.getTextWidth(u[t]) + h(e), a = m(e);
652
+ e.setFillColor(f), e.roundedRect(r.X + n - 1, r.Y - 1, i + 2, a + 2, 2, 2, "F"), e.setFillColor("#000000");
674
653
  }
675
- e.text(l[t], m.X + n, m.Y, {
654
+ e.text(u[t], r.X + n, r.Y, {
676
655
  baseline: "top",
677
- maxWidth: c
678
- }), m.updateX(e.getTextDimensions(l[t]).w + (u ? 2 : 1), "add"), t < l.length - 1 && (m.updateY(h(e), "add"), m.updateX(m.options.page.xpading, "set"));
656
+ maxWidth: l
657
+ }), r.updateX(e.getTextDimensions(u[t]).w + (d ? 2 : 1), "add"), t < u.length - 1 && (r.updateY(m(e), "add"), r.updateX(r.options.page.xpading, "set"));
679
658
  }
680
- else if (l.length > 1) {
681
- let t = l[0], r = l?.slice(1)?.join(" ");
682
- if (u) {
683
- let r = e.getTextWidth(t) + g(e), i = h(e);
684
- e.setFillColor(d), e.roundedRect(m.X + (n >= 2 ? n + 2 : 0) - 1, m.Y - 1, r + 2, i + 2, 2, 2, "F"), e.setFillColor("#000000");
659
+ else if (u.length > 1) {
660
+ let t = u[0], i = u?.slice(1)?.join(" ");
661
+ if (d) {
662
+ let i = e.getTextWidth(t) + h(e), a = m(e);
663
+ e.setFillColor(f), e.roundedRect(r.X + (n >= 2 ? n + 2 : 0) - 1, r.Y - 1, i + 2, a + 2, 2, 2, "F"), e.setFillColor("#000000");
685
664
  }
686
- e.text(t, m.X + (n >= 2 ? n + 2 * o(s) : 0), m.Y, {
665
+ e.text(t, r.X + (n >= 2 ? n + 2 * s(c) : 0), r.Y, {
687
666
  baseline: "top",
688
- maxWidth: c
689
- }), m.updateX(m.options.page.xpading + n), m.updateY(h(e), "add");
690
- let i = m.options.page.maxContentWidth - n - m.options.page.xpading;
691
- e.splitTextToSize(r, i).forEach((t) => {
692
- if (u) {
693
- let n = e.getTextWidth(t) + g(e), r = h(e);
694
- e.setFillColor(d), e.roundedRect(m.X + g(e) - 1, m.Y - 1, n + 2, r + 2, 2, 2, "F"), e.setFillColor("#000000");
667
+ maxWidth: l
668
+ }), r.updateX(r.options.page.xpading + n), r.updateY(m(e), "add");
669
+ let a = r.options.page.maxContentWidth - n - r.options.page.xpading;
670
+ e.splitTextToSize(i, a).forEach((t) => {
671
+ if (d) {
672
+ let n = e.getTextWidth(t) + h(e), i = m(e);
673
+ e.setFillColor(f), e.roundedRect(r.X + h(e) - 1, r.Y - 1, n + 2, i + 2, 2, 2, "F"), e.setFillColor("#000000");
695
674
  }
696
- e.text(t, m.X + g(e), m.Y, {
675
+ e.text(t, r.X + h(e), r.Y, {
697
676
  baseline: "top",
698
- maxWidth: i
677
+ maxWidth: a
699
678
  });
700
679
  });
701
680
  } else {
702
- if (u) {
703
- let r = e.getTextWidth(t) + g(e), i = h(e);
704
- e.setFillColor(d), e.roundedRect(m.X + n - 1, m.Y - 1, r + 2, i + 2, 2, 2, "F"), e.setFillColor("#000000");
681
+ if (d) {
682
+ let i = e.getTextWidth(t) + h(e), a = m(e);
683
+ e.setFillColor(f), e.roundedRect(r.X + n - 1, r.Y - 1, i + 2, a + 2, 2, 2, "F"), e.setFillColor("#000000");
705
684
  }
706
- e.text(t, m.X + n, m.Y, {
685
+ e.text(t, r.X + n, r.Y, {
707
686
  baseline: "top",
708
- maxWidth: c
709
- }), m.updateX(e.getTextDimensions(t).w + (n >= 2 ? t.split(" ").length + 2 : 2) * o(s) * .5 + (u ? 2 : 0), "add");
687
+ maxWidth: l
688
+ }), r.updateX(e.getTextDimensions(t).w + (n >= 2 ? t.split(" ").length + 2 : 2) * s(c) * .5 + (d ? 2 : 0), "add");
710
689
  }
711
690
  };
712
- if (t.type === "text" && t.items && t.items.length > 0) for (let e of t.items) if (e.type === "codespan") s(e.content || "", "codespan");
691
+ if (t.type === "text" && t.items && t.items.length > 0) for (let e of t.items) if (e.type === "codespan") c(e.content || "", "codespan");
713
692
  else if (e.type === "em" || e.type === "strong") {
714
693
  let t = e.type === "em" ? "italic" : "bold";
715
- if (e.items && e.items.length > 0) for (let n of e.items) n.type === "strong" && t === "italic" || n.type === "em" && t === "bold" ? s(n.content || "", "bolditalic") : s(n.content || "", t);
716
- else s(e.content || "", t);
717
- } else s(e.content || "", "normal");
718
- else t.type === "em" ? s(t.content || "", "italic") : t.type === "strong" ? s(t.content || "", "bold") : t.type === "codespan" ? s(t.content || "", "codespan") : s(t.content || "", "normal");
719
- e.setFont(r, i), e.setFontSize(a);
720
- }, N = (e, t, n) => {
721
- let r = e.getFont().fontName, i = e.getFont().fontStyle, a = e.getFontSize(), o = e.getTextColor(), s = m.options.link?.linkColor || [
694
+ if (e.items && e.items.length > 0) for (let n of e.items) n.type === "strong" && t === "italic" || n.type === "em" && t === "bold" ? c(n.content || "", "bolditalic") : c(n.content || "", t);
695
+ else c(e.content || "", t);
696
+ } else c(e.content || "", "normal");
697
+ else t.type === "em" ? c(t.content || "", "italic") : t.type === "strong" ? c(t.content || "", "bold") : t.type === "codespan" ? c(t.content || "", "codespan") : c(t.content || "", "normal");
698
+ e.setFont(i, a), e.setFontSize(o);
699
+ }, M = (e, t, n, r) => {
700
+ let i = e.getFont().fontName, a = e.getFont().fontStyle, o = e.getFontSize(), s = e.getTextColor(), c = r.options.link?.linkColor || [
722
701
  0,
723
702
  0,
724
703
  255
725
704
  ];
726
- e.setTextColor(...s);
727
- let c = m.options.page.maxContentWidth - n - m.X, l = t.text || t.content || "", u = t.href || "", d = e.splitTextToSize(l, c);
728
- if (m.isInlineLockActive) for (let t = 0; t < d.length; t++) {
729
- let r = e.getTextDimensions(d[t]).w, i = h(e) / 2;
730
- e.link(m.X + n, m.Y, r, i, { url: u }), e.text(d[t], m.X + n, m.Y, {
705
+ e.setTextColor(...c);
706
+ let l = r.options.page.maxContentWidth - n - r.X, u = t.text || t.content || "", d = t.href || "", f = e.splitTextToSize(u, l);
707
+ if (r.isInlineLockActive) for (let t = 0; t < f.length; t++) {
708
+ let i = e.getTextDimensions(f[t]).w, a = m(e) / 2;
709
+ e.link(r.X + n, r.Y, i, a, { url: d }), e.text(f[t], r.X + n, r.Y, {
731
710
  baseline: "top",
732
- maxWidth: c
733
- }), m.updateX(r + 1, "add"), m.X + r > m.options.page.maxContentWidth - n && (m.updateY(i, "add"), m.updateX(m.options.page.xpading + n, "set")), t < d.length - 1 && (m.updateY(i, "add"), m.updateX(m.options.page.xpading + n, "set"));
711
+ maxWidth: l
712
+ }), r.updateX(i + 1, "add"), r.X + i > r.options.page.maxContentWidth - n && (r.updateY(a, "add"), r.updateX(r.options.page.xpading + n, "set")), t < f.length - 1 && (r.updateY(a, "add"), r.updateX(r.options.page.xpading + n, "set"));
734
713
  }
735
- else if (d.length > 1) {
736
- let t = d[0], r = d?.slice(1)?.join(" "), i = e.getTextDimensions(t).w, a = h(e) / 2;
737
- e.link(m.X + n, m.Y, i, a, { url: u }), e.text(t, m.X + n, m.Y, {
714
+ else if (f.length > 1) {
715
+ let t = f[0], i = f?.slice(1)?.join(" "), a = e.getTextDimensions(t).w, o = m(e) / 2;
716
+ e.link(r.X + n, r.Y, a, o, { url: d }), e.text(t, r.X + n, r.Y, {
738
717
  baseline: "top",
739
- maxWidth: c
740
- }), m.updateX(m.options.page.xpading + n), m.updateY(a, "add");
741
- let o = m.options.page.maxContentWidth - n - m.options.page.xpading;
742
- e.splitTextToSize(r, o).forEach((t) => {
718
+ maxWidth: l
719
+ }), r.updateX(r.options.page.xpading + n), r.updateY(o, "add");
720
+ let s = r.options.page.maxContentWidth - n - r.options.page.xpading;
721
+ e.splitTextToSize(i, s).forEach((t) => {
743
722
  let n = e.getTextDimensions(t).w;
744
- e.link(m.X + g(e), m.Y, n, a, { url: u }), e.text(t, m.X + g(e), m.Y, {
723
+ e.link(r.X + h(e), r.Y, n, o, { url: d }), e.text(t, r.X + h(e), r.Y, {
745
724
  baseline: "top",
746
- maxWidth: o
725
+ maxWidth: s
747
726
  });
748
727
  });
749
728
  } else {
750
- let t = e.getTextDimensions(l).w, r = h(e) / 2;
751
- e.link(m.X + n, m.Y, t, r, { url: u }), e.text(l, m.X + n, m.Y, {
729
+ let t = e.getTextDimensions(u).w, i = m(e) / 2;
730
+ e.link(r.X + n, r.Y, t, i, { url: d }), e.text(u, r.X + n, r.Y, {
752
731
  baseline: "top",
753
- maxWidth: c
754
- }), m.updateX(t + 2, "add");
732
+ maxWidth: l
733
+ }), r.updateX(t + 2, "add");
755
734
  }
756
- e.setFont(r, i), e.setFontSize(a), e.setTextColor(o);
757
- }, P = (e, t, n, r) => {
758
- let i = m.options, a = n + 1, o = m.X + n * i.page.indent, s = m.Y, c = o + i.page.indent / 2, l = s, u = e.internal.getCurrentPageInfo().pageNumber;
735
+ e.setFont(i, a), e.setFontSize(o), e.setTextColor(s);
736
+ }, N = (e, t, n, r, i) => {
737
+ let a = r.options, o = n + 1, s = r.X + n * a.page.indent, c = r.Y, l = s + a.page.indent / 2, u = c, d = e.internal.getCurrentPageInfo().pageNumber;
759
738
  t.items && t.items.length > 0 && t.items.forEach((e) => {
760
- r(e, a);
739
+ i(e, o, r);
761
740
  });
762
- let d = m.Y, f = e.internal.getCurrentPageInfo().pageNumber;
741
+ let f = r.Y, p = e.internal.getCurrentPageInfo().pageNumber;
763
742
  e.setDrawColor(100), e.setLineWidth(1);
764
- for (let t = u; t <= f; t++) {
743
+ for (let t = d; t <= p; t++) {
765
744
  e.setPage(t);
766
- let n = t === u, r = t === f, a = n ? l : i.page.topmargin, o = r ? d : i.page.maxContentHeight;
767
- e.line(c, a, c, o);
745
+ let n = t === d, r = t === p, i = n ? u : a.page.topmargin, o = r ? f : a.page.maxContentHeight;
746
+ e.line(l, i, l, o);
768
747
  }
769
- m.recordContentY(), e.setPage(f);
770
- }, F = (e) => {
748
+ r.recordContentY(), e.setPage(p);
749
+ }, P = (e) => {
771
750
  if (e.data) {
772
751
  if (e.data.startsWith("data:image/png")) return "PNG";
773
752
  if (e.data.startsWith("data:image/jpeg") || e.data.startsWith("data:image/jpg")) return "JPEG";
@@ -785,57 +764,102 @@ var n = /* @__PURE__ */ function(e) {
785
764
  ].includes(t)) return t === "JPG" ? "JPEG" : t;
786
765
  }
787
766
  return "JPEG";
788
- }, I = (e, t, n) => {
767
+ }, F = (e, t, n, r) => {
789
768
  if (!t.data) return;
790
- let r = m.options, i = r.page.unit || "mm", a = n * r.page.indent, o = r.page.maxContentWidth - a, s = m.X + a, c = m.Y;
769
+ let i = r.options, a = i.page.unit || "mm", o = n * i.page.indent, s = i.page.maxContentWidth - o, c = r.X + o, l = r.Y;
791
770
  try {
792
- let { finalWidth: n, finalHeight: a } = S(e, t, o, r.page.maxContentHeight - r.page.topmargin, i);
793
- c + a > r.page.maxContentHeight && (v(e), c = m.Y);
794
- let l = t.align || r.image?.defaultAlign || "left", u;
795
- switch (l) {
771
+ let { finalWidth: n, finalHeight: o } = x(e, t, s, i.page.maxContentHeight - i.page.topmargin, a);
772
+ l + o > i.page.maxContentHeight && (_(e, r), l = r.Y);
773
+ let u = t.align || i.image?.defaultAlign || "left", d;
774
+ switch (u) {
796
775
  case "right":
797
- u = s + o - n;
776
+ d = c + s - n;
798
777
  break;
799
778
  case "center":
800
- u = s + (o - n) / 2;
779
+ d = c + (s - n) / 2;
801
780
  break;
802
781
  default:
803
- u = s;
782
+ d = c;
804
783
  break;
805
784
  }
806
- let d = F(t);
807
- n > 0 && a > 0 && e.addImage(t.data, d, u, c, n, a), m.updateY(a, "add"), m.recordContentY();
785
+ let f = P(t);
786
+ n > 0 && o > 0 && e.addImage(t.data, f, d, l, n, o), r.updateY(o, "add"), r.recordContentY();
808
787
  } catch (e) {
809
788
  console.warn("Failed to render image", e);
810
789
  }
811
- }, L = () => {
790
+ }, I = () => {
812
791
  let e = t;
813
792
  if (typeof t == "function") return t;
814
793
  if (typeof e.default == "function") return e.default;
815
794
  if (typeof e.autoTable == "function") return e.autoTable;
816
795
  throw Error("Could not resolve jspdf-autotable export. Expected a callable export.");
817
- }, R = (e, t, n) => {
796
+ }, L = (e, t, n, r) => {
818
797
  if (!t.header || !t.rows) return;
819
- let r = m.options, i = r.page.xmargin + n * r.page.indent, a = [t.header.map((e) => e.content || "")], o = t.rows.map((e) => e.map((e) => e.content || "")), s = r.table || {};
820
- L()(e, {
821
- head: a,
822
- body: o,
823
- startY: m.Y,
798
+ let i = r.options, a = i.page.xmargin + n * i.page.indent, o = [t.header.map((e) => e.content || "")], s = t.rows.map((e) => e.map((e) => e.content || "")), c = i.table || {};
799
+ I()(e, {
800
+ head: o,
801
+ body: s,
802
+ startY: r.Y,
824
803
  margin: {
825
- left: i,
826
- right: r.page.xmargin
804
+ left: a,
805
+ right: i.page.xmargin
827
806
  },
828
- ...s,
807
+ ...c,
829
808
  didDrawPage: (e) => {
830
- s.didDrawPage && s.didDrawPage(e);
809
+ c.didDrawPage && c.didDrawPage(e);
831
810
  },
832
811
  didDrawCell: (e) => {
833
- s.didDrawCell && s.didDrawCell(e), m.setCursor({
834
- x: m.X,
835
- y: e.cell.y + e.cell.height + 2 * r.page.lineSpace
836
- });
812
+ c.didDrawCell && c.didDrawCell(e);
837
813
  }
838
814
  });
815
+ let l = e.lastAutoTable?.finalY;
816
+ typeof l == "number" && (r.updateY(l + i.page.lineSpace, "set"), r.updateX(i.page.xpading, "set"), r.recordContentY());
817
+ }, R = class {
818
+ constructor(e) {
819
+ this.cursor = {
820
+ x: 0,
821
+ y: 0
822
+ }, this.lastContentY_ = 0, this.inlineLock = !1, this.options_ = e, this.cursor = {
823
+ x: e.cursor.x,
824
+ y: e.cursor.y
825
+ }, this.lastContentY_ = e.cursor.y;
826
+ }
827
+ getCursor() {
828
+ return this.cursor;
829
+ }
830
+ setCursor(e) {
831
+ this.cursor = e;
832
+ }
833
+ get options() {
834
+ return this.options_;
835
+ }
836
+ get isInlineLockActive() {
837
+ return this.inlineLock;
838
+ }
839
+ activateInlineLock() {
840
+ this.inlineLock = !0;
841
+ }
842
+ deactivateInlineLock() {
843
+ this.inlineLock = !1;
844
+ }
845
+ updateX(e, t = "set") {
846
+ t === "set" ? this.cursor.x = e : t === "add" && (this.cursor.x += e);
847
+ }
848
+ updateY(e, t = "set") {
849
+ t === "set" ? this.cursor.y = e : t === "add" && (this.cursor.y += e);
850
+ }
851
+ recordContentY(e) {
852
+ this.lastContentY_ = e === void 0 ? this.cursor.y : e;
853
+ }
854
+ get lastContentY() {
855
+ return this.lastContentY_;
856
+ }
857
+ get X() {
858
+ return this.cursor.x;
859
+ }
860
+ get Y() {
861
+ return this.cursor.y;
862
+ }
839
863
  }, z = {
840
864
  page: {
841
865
  indent: 10,
@@ -885,51 +909,55 @@ var n = /* @__PURE__ */ function(e) {
885
909
  image: r
886
910
  };
887
911
  }, V = async (e, t, r) => {
888
- let i = B(r);
889
- m.initialize(i);
890
- let a = await d(t);
891
- await C(a);
892
- let o = (t, r = 0, a = !1, s = 0, c = !1) => {
893
- let l = r * i.page.indent;
912
+ let i = B(r), a = new R(i), o = await d(t);
913
+ await S(o);
914
+ let s = (t, r = 0, a, o = !1, c = 0, l = !1) => {
915
+ let u = r * i.page.indent;
894
916
  switch (t.type) {
895
917
  case n.Heading:
896
- _(e, t, l, o);
918
+ g(e, t, u, a, s);
897
919
  break;
898
920
  case n.Paragraph:
899
- E(e, t, l, o);
921
+ T(e, t, u, a, s);
900
922
  break;
901
923
  case n.List:
902
- D(e, t, r, o);
924
+ E(e, t, r, a, s);
903
925
  break;
904
926
  case n.ListItem:
905
- O(e, t, r, o, s, c);
927
+ D(e, t, r, a, s, c, l);
906
928
  break;
907
929
  case n.Hr:
908
- A(e);
930
+ k(e, a);
909
931
  break;
910
932
  case n.Code:
911
- j(e, t, r);
933
+ A(e, t, r, a);
912
934
  break;
913
935
  case n.Strong:
914
936
  case n.Em:
915
937
  case n.CodeSpan:
916
- M(e, t, l);
938
+ j(e, t, u, a);
917
939
  break;
918
940
  case n.Link:
919
- N(e, t, l);
941
+ M(e, t, u, a);
920
942
  break;
921
943
  case n.Blockquote:
922
- P(e, t, r, o);
944
+ N(e, t, r, a, s);
923
945
  break;
924
946
  case n.Image:
925
- I(e, t, r);
947
+ F(e, t, r, a);
926
948
  break;
949
+ case n.Br: {
950
+ a.updateX(i.page.xpading, "set");
951
+ let t = m(e) * i.page.defaultLineHeightFactor;
952
+ a.Y + t > i.page.maxContentHeight ? _(e, a) : a.updateY(t, "add"), a.recordContentY();
953
+ break;
954
+ }
927
955
  case n.Table:
928
- R(e, t, r);
956
+ L(e, t, r, a);
929
957
  break;
930
958
  case n.Raw:
931
959
  case n.Text:
932
- k(e, t, r, a, o, s, c, i.content?.textAlignment === "justify");
960
+ O(e, t, r, a, o, s, c, l, i.content?.textAlignment === "justify");
933
961
  break;
934
962
  default:
935
963
  console.warn(`Warning: Unsupported element type encountered: ${t.type}.
@@ -939,8 +967,8 @@ var n = /* @__PURE__ */ function(e) {
939
967
  break;
940
968
  }
941
969
  };
942
- for (let e of a) o(e);
943
- i.endCursorYHandler(m.Y);
970
+ for (let e of o) s(e, 0, a);
971
+ i.endCursorYHandler(a.Y);
944
972
  };
945
973
  //#endregion
946
974
  export { d as MdTextParser, V as MdTextRender };