@pdfme/schemas 6.2.4-dev.4 → 6.2.4-dev.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{builtins-Ch7UBNGU.js → builtins-BW_NgJf9.js} +7 -7
- package/dist/builtins-BW_NgJf9.js.map +1 -0
- package/dist/builtins.js +1 -1
- package/dist/dynamicLayout.js +4 -4
- package/dist/{dynamicTemplate-CcnCXHfM.js → dynamicTemplate-CFTFLfQg.js} +2 -2
- package/dist/{dynamicTemplate-CcnCXHfM.js.map → dynamicTemplate-CFTFLfQg.js.map} +1 -1
- package/dist/{dynamicTemplate-Bnu4jVaz.js → dynamicTemplate-CkX3dzIQ.js} +2 -2
- package/dist/{dynamicTemplate-Bnu4jVaz.js.map → dynamicTemplate-CkX3dzIQ.js.map} +1 -1
- package/dist/{dynamicTemplate-DEwOv_DE.js → dynamicTemplate-NEXRhw3N.js} +4 -4
- package/dist/{dynamicTemplate-DEwOv_DE.js.map → dynamicTemplate-NEXRhw3N.js.map} +1 -1
- package/dist/{helper-BR4_UZA5.js → helper-C57xgwUE.js} +2 -2
- package/dist/{helper-BR4_UZA5.js.map → helper-C57xgwUE.js.map} +1 -1
- package/dist/index.js +8 -8
- package/dist/lists.js +2 -2
- package/dist/{measure-BarlRI1L.js → measure-BzuDatEc.js} +2 -2
- package/dist/{measure-BarlRI1L.js.map → measure-BzuDatEc.js.map} +1 -1
- package/dist/{splitRange-B6311Noc.js → splitRange-BkQuwzIU.js} +4 -6
- package/dist/{splitRange-B6311Noc.js.map → splitRange-BkQuwzIU.js.map} +1 -1
- package/dist/tables.js +2 -2
- package/dist/texts.js +3 -3
- package/dist/{utils-BfzehhiZ.js → utils-C361jF7a.js} +2 -2
- package/dist/{utils-BfzehhiZ.js.map → utils-C361jF7a.js.map} +1 -1
- package/dist/utils.js +2 -2
- package/package.json +1 -1
- package/dist/builtins-Ch7UBNGU.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as getBoxVerticalInset, D as getBoxContentArea, M as hasBoxDimension, Q as SYNTHETIC_BOLD_OFFSET_RATIO, R as CODE_HORIZONTAL_PADDING, _ as getLineBoxHeightPt, b as splitTextToSize, d as calculateDynamicFontSize, g as getFontKitFont, j as getSplitBoxDimension, k as getBoxInsets, p as fitDynamicFontSize, u as getTextLineRange, v as heightOfFontAtSize, w as layoutStyledRuns, x as widthOfTextAtSize } from "./splitRange-
|
|
1
|
+
import { A as getBoxVerticalInset, D as getBoxContentArea, M as hasBoxDimension, Q as SYNTHETIC_BOLD_OFFSET_RATIO, R as CODE_HORIZONTAL_PADDING, _ as getLineBoxHeightPt, b as splitTextToSize, d as calculateDynamicFontSize, g as getFontKitFont, j as getSplitBoxDimension, k as getBoxInsets, p as fitDynamicFontSize, u as getTextLineRange, v as heightOfFontAtSize, w as layoutStyledRuns, x as widthOfTextAtSize } from "./splitRange-BkQuwzIU.js";
|
|
2
2
|
import { getDefaultFont, getFallbackFontName, mm2pt, normalizeLinkHref, pt2mm } from "@pdfme/common";
|
|
3
3
|
//#region src/text/inlineMarkdown.ts
|
|
4
4
|
var MARKDOWN_ESCAPABLE_CHARS = /* @__PURE__ */ new Set([
|
|
@@ -454,4 +454,4 @@ var measureRichTextLineHeights = (lines, fontSize, lineHeight, fallbackFont) =>
|
|
|
454
454
|
//#endregion
|
|
455
455
|
export { measureTextLines as a, sumLineHeights as c, layoutRichTextLines as d, resolveFontVariant as f, stripInlineMarkdown as g, parseInlineMarkdown as h, measureTextHeight as i, calculateDynamicRichTextFontSize as l, escapeInlineMarkdown as m, getTextLineHeightsWithBox as n, mergeTextLineRangeValue as o, resolveRichTextRuns as p, getTextSplitBoxStyle as r, plainTextLinesToValue as s, applyTextLineRange as t, isInlineMarkdownTextSchema as u };
|
|
456
456
|
|
|
457
|
-
//# sourceMappingURL=measure-
|
|
457
|
+
//# sourceMappingURL=measure-BzuDatEc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"measure-BarlRI1L.js","names":[],"sources":["../src/text/inlineMarkdown.ts","../src/text/richText.ts","../src/text/measure.ts"],"sourcesContent":["import { normalizeLinkHref } from '@pdfme/common';\nimport type { RichTextRun } from './types.js';\n\ntype InlineStyle = Omit<RichTextRun, 'text'>;\n\nconst MARKDOWN_ESCAPABLE_CHARS = new Set(['\\\\', '*', '~', '`', '[', ']', '(', ')']);\nconst MARKDOWN_ESCAPE_PATTERN = /[\\\\*~`[\\]()]/g;\nconst MARKDOWN_UNESCAPE_PATTERN = /\\\\([\\\\*~`[\\]()])/g;\n\nconst sameStyle = (a: InlineStyle, b: InlineStyle) =>\n Boolean(a.bold) === Boolean(b.bold) &&\n Boolean(a.italic) === Boolean(b.italic) &&\n Boolean(a.strikethrough) === Boolean(b.strikethrough) &&\n Boolean(a.code) === Boolean(b.code) &&\n a.href === b.href;\n\nconst appendRun = (runs: RichTextRun[], text: string, style: InlineStyle) => {\n if (!text) return;\n\n const lastRun = runs.at(-1);\n if (lastRun && sameStyle(lastRun, style)) {\n lastRun.text += text;\n return;\n }\n\n runs.push({\n text,\n ...(style.bold ? { bold: true } : {}),\n ...(style.italic ? { italic: true } : {}),\n ...(style.strikethrough ? { strikethrough: true } : {}),\n ...(style.code ? { code: true } : {}),\n ...(style.href ? { href: style.href } : {}),\n });\n};\n\nconst findClosingDelimiter = (value: string, delimiter: string, from: number): number => {\n for (let i = from; i < value.length; i++) {\n if (value[i] === '\\\\') {\n i += 1;\n continue;\n }\n\n if (delimiter !== '`' && value[i] === '`') {\n const codeEnd = findClosingDelimiter(value, '`', i + 1);\n if (codeEnd === -1) continue;\n i = codeEnd;\n continue;\n }\n\n if (value.startsWith(delimiter, i)) {\n return i;\n }\n }\n\n return -1;\n};\n\nconst getDelimiter = (value: string, index: number) => {\n if (value[index] === '`') return '`';\n if (value.startsWith('***', index)) return '***';\n if (value.startsWith('**', index)) return '**';\n if (value.startsWith('~~', index)) return '~~';\n if (value[index] === '*') return '*';\n return '';\n};\n\nconst findLinkLabelEnd = (value: string, from: number, to: number): number => {\n for (let index = from; index < to; index += 1) {\n if (value[index] === '\\\\') {\n index += 1;\n continue;\n }\n\n if (value[index] === ']') return index;\n }\n\n return -1;\n};\n\nconst findLinkDestinationEnd = (value: string, from: number, to: number): number => {\n let depth = 0;\n\n for (let index = from; index < to; index += 1) {\n if (value[index] === '\\\\') {\n index += 1;\n continue;\n }\n\n if (value[index] === '(') {\n depth += 1;\n continue;\n }\n\n if (value[index] === ')') {\n if (depth === 0) return index;\n depth -= 1;\n }\n }\n\n return -1;\n};\n\nconst parseLinkAt = (value: string, index: number, to: number) => {\n if (value[index] !== '[') return undefined;\n\n const labelEnd = findLinkLabelEnd(value, index + 1, to);\n if (labelEnd === -1 || value[labelEnd + 1] !== '(') return undefined;\n\n const destinationStart = labelEnd + 2;\n const destinationEnd = findLinkDestinationEnd(value, destinationStart, to);\n if (destinationEnd === -1) return undefined;\n\n const href = value\n .slice(destinationStart, destinationEnd)\n .replace(MARKDOWN_UNESCAPE_PATTERN, '$1');\n const safeHref = normalizeLinkHref(href);\n if (!safeHref) return undefined;\n\n return {\n labelStart: index + 1,\n labelEnd,\n href: safeHref,\n end: destinationEnd + 1,\n };\n};\n\nconst mergeStyle = (style: InlineStyle, delimiter: string): InlineStyle => {\n if (delimiter === '***') {\n return { ...style, bold: true, italic: true };\n }\n if (delimiter === '**') {\n return { ...style, bold: true };\n }\n if (delimiter === '*') {\n return { ...style, italic: true };\n }\n if (delimiter === '~~') {\n return { ...style, strikethrough: true };\n }\n return style;\n};\n\nconst parseRange = (value: string, from: number, to: number, style: InlineStyle): RichTextRun[] => {\n const runs: RichTextRun[] = [];\n let buffer = '';\n\n const flush = () => {\n appendRun(runs, buffer, style);\n buffer = '';\n };\n\n for (let index = from; index < to; index++) {\n const char = value[index];\n\n if (char === '\\\\' && index + 1 < to && MARKDOWN_ESCAPABLE_CHARS.has(value[index + 1])) {\n buffer += value[index + 1];\n index += 1;\n continue;\n }\n\n const link = style.href ? undefined : parseLinkAt(value, index, to);\n if (link) {\n flush();\n const nestedRuns = parseRange(value, link.labelStart, link.labelEnd, {\n ...style,\n href: link.href,\n });\n nestedRuns.forEach((run) => appendRun(runs, run.text, run));\n index = link.end - 1;\n continue;\n }\n\n const delimiter = getDelimiter(value, index);\n if (!delimiter) {\n buffer += char;\n continue;\n }\n\n const closingIndex = findClosingDelimiter(value, delimiter, index + delimiter.length);\n if (closingIndex === -1 || closingIndex + delimiter.length > to) {\n buffer += char;\n continue;\n }\n\n flush();\n\n if (delimiter === '`') {\n appendRun(\n runs,\n value.slice(index + 1, closingIndex).replace(MARKDOWN_UNESCAPE_PATTERN, '$1'),\n { ...style, code: true },\n );\n } else {\n const nestedRuns = parseRange(\n value,\n index + delimiter.length,\n closingIndex,\n mergeStyle(style, delimiter),\n );\n nestedRuns.forEach((run) => appendRun(runs, run.text, run));\n }\n\n index = closingIndex + delimiter.length - 1;\n }\n\n flush();\n return runs;\n};\n\nexport const parseInlineMarkdown = (value: string): RichTextRun[] => {\n if (!value) return [];\n return parseRange(value, 0, value.length, {});\n};\n\nexport const escapeInlineMarkdown = (value: string): string =>\n value.replace(MARKDOWN_ESCAPE_PATTERN, (char) => `\\\\${char}`);\n\nexport const stripInlineMarkdown = (value: string): string =>\n parseInlineMarkdown(value)\n .map((run) => run.text)\n .join('');\n","import { getFallbackFontName, mm2pt, pt2mm, type Font } from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport {\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_DYNAMIC_FIT,\n DEFAULT_FONT_SIZE,\n DEFAULT_LINE_HEIGHT,\n DEFAULT_FONT_VARIANT_FALLBACK,\n CODE_HORIZONTAL_PADDING,\n DYNAMIC_FIT_HORIZONTAL,\n DYNAMIC_FIT_VERTICAL,\n FONT_VARIANT_FALLBACK_ERROR,\n FONT_VARIANT_FALLBACK_PLAIN,\n SYNTHETIC_BOLD_OFFSET_RATIO,\n SYNTHETIC_BOLD_PDF_EXTRA_DRAWS,\n SYNTHETIC_ITALIC_SKEW_DEGREES,\n TEXT_FORMAT_INLINE_MARKDOWN,\n} from './constants.js';\nimport {\n fitDynamicFontSize,\n getFontKitFont,\n getLineBoxHeightPt,\n heightOfFontAtSize,\n widthOfTextAtSize,\n} from './helper.js';\nimport { parseInlineMarkdown } from './inlineMarkdown.js';\nimport type { RichTextRun, TextSchema } from './types.js';\nimport { getBoxContentArea } from '../box.js';\nimport { countGraphemes, layoutStyledRuns } from './wrap.js';\n\nexport type ResolvedRichTextRun = RichTextRun & {\n fontName: string;\n fontKitFont: FontKitFont;\n syntheticBold: boolean;\n syntheticItalic: boolean;\n};\n\nexport type RichTextLineRun = ResolvedRichTextRun & {\n width: number;\n};\n\nexport type RichTextLine = {\n runs: RichTextLineRun[];\n width: number;\n hardBreak: boolean;\n};\n\ntype FontVariantResolution = {\n fontName: string;\n syntheticBold: boolean;\n syntheticItalic: boolean;\n};\n\nconst getBaseFontName = (schema: TextSchema, font: Font) =>\n schema.fontName && font[schema.fontName] ? schema.fontName : getFallbackFontName(font);\n\nconst getLoadedFontName = (font: Font, fontName?: string) =>\n fontName && font[fontName] ? fontName : undefined;\n\nexport const isInlineMarkdownTextSchema = (schema: TextSchema) =>\n schema.textFormat === TEXT_FORMAT_INLINE_MARKDOWN &&\n !(schema.type === 'text' && schema.readOnly !== true);\n\nexport const resolveFontVariant = (\n run: RichTextRun,\n schema: TextSchema,\n font: Font,\n): FontVariantResolution => {\n const baseFontName = getBaseFontName(schema, font);\n const variants = schema.fontVariants ?? {};\n const fallback = schema.fontVariantFallback ?? DEFAULT_FONT_VARIANT_FALLBACK;\n\n let fontName = baseFontName;\n let needsBold = Boolean(run.bold);\n let needsItalic = Boolean(run.italic);\n\n if (run.code) {\n fontName = getLoadedFontName(font, variants.code) ?? baseFontName;\n } else if (run.bold && run.italic) {\n const boldItalic = getLoadedFontName(font, variants.boldItalic);\n const italic = getLoadedFontName(font, variants.italic);\n const bold = getLoadedFontName(font, variants.bold);\n\n if (boldItalic) {\n fontName = boldItalic;\n needsBold = false;\n needsItalic = false;\n } else if (italic) {\n fontName = italic;\n needsItalic = false;\n } else if (bold) {\n fontName = bold;\n needsBold = false;\n }\n } else if (run.bold) {\n const bold = getLoadedFontName(font, variants.bold);\n if (bold) {\n fontName = bold;\n needsBold = false;\n }\n } else if (run.italic) {\n const italic = getLoadedFontName(font, variants.italic);\n if (italic) {\n fontName = italic;\n needsItalic = false;\n }\n }\n\n if (\n (needsBold || needsItalic || (run.code && !getLoadedFontName(font, variants.code))) &&\n fallback === FONT_VARIANT_FALLBACK_ERROR\n ) {\n throw new Error(\n `[@pdfme/schemas] Missing font variant for markdown text in field \"${schema.name}\".`,\n );\n }\n\n return {\n fontName,\n syntheticBold: fallback !== FONT_VARIANT_FALLBACK_PLAIN && needsBold,\n syntheticItalic: fallback !== FONT_VARIANT_FALLBACK_PLAIN && needsItalic,\n };\n};\n\nexport const resolveRichTextRuns = async (arg: {\n runs: RichTextRun[];\n schema: TextSchema;\n font: Font;\n _cache: Map<string | number, unknown>;\n}): Promise<ResolvedRichTextRun[]> => {\n const { runs, schema, font, _cache } = arg;\n const fontKitCache = new Map<string, FontKitFont>();\n\n const getResolvedFontKitFont = async (fontName: string) => {\n const cached = fontKitCache.get(fontName);\n if (cached) return cached;\n\n const fontKitFont = await getFontKitFont(fontName, font, _cache as Map<string, FontKitFont>);\n fontKitCache.set(fontName, fontKitFont);\n return fontKitFont;\n };\n\n return Promise.all(\n runs.map(async (run) => {\n const resolution = resolveFontVariant(run, schema, font);\n return {\n ...run,\n ...resolution,\n fontKitFont: await getResolvedFontKitFont(resolution.fontName),\n };\n }),\n );\n};\n\nexport const measureRunText = (\n run: ResolvedRichTextRun,\n text: string,\n fontSize: number,\n characterSpacing: number,\n) => {\n const syntheticBoldWidth = run.syntheticBold\n ? fontSize * SYNTHETIC_BOLD_OFFSET_RATIO * SYNTHETIC_BOLD_PDF_EXTRA_DRAWS\n : 0;\n const syntheticItalicWidth = run.syntheticItalic\n ? heightOfFontAtSize(run.fontKitFont, fontSize) *\n Math.tan((SYNTHETIC_ITALIC_SKEW_DEGREES * Math.PI) / 180)\n : 0;\n return (\n widthOfTextAtSize(text, run.fontKitFont, fontSize, characterSpacing) +\n syntheticBoldWidth +\n syntheticItalicWidth +\n (run.code ? CODE_HORIZONTAL_PADDING * 2 : 0)\n );\n};\n\nexport const countRichTextLineGraphemes = (line: RichTextLine) =>\n countGraphemes(line.runs.map((run) => run.text).join(''));\n\nexport const getRichTextLineText = (line: RichTextLine) =>\n line.runs.map((run) => run.text).join('');\n\nexport const layoutRichTextLines = (arg: {\n runs: ResolvedRichTextRun[];\n fontSize: number;\n characterSpacing: number;\n boxWidthInPt: number;\n}): RichTextLine[] => {\n const { runs, fontSize, characterSpacing, boxWidthInPt } = arg;\n return layoutStyledRuns(\n runs.map((run) => ({\n text: run.text,\n measure: (text) => measureRunText(run, text, fontSize, characterSpacing),\n style: run,\n })),\n boxWidthInPt,\n { characterSpacing },\n ).map((line) => ({\n runs: line.spans.map((span) => ({\n ...span.style,\n text: span.text,\n width: span.width,\n })),\n width: line.width,\n hardBreak: line.hardBreak,\n }));\n};\n\nconst measureParagraphWidths = (\n runs: ResolvedRichTextRun[],\n fontSize: number,\n characterSpacing: number,\n) => {\n const widths: number[] = [];\n let paragraphText = '';\n let paragraphRuns: ResolvedRichTextRun[] = [];\n\n const pushWidth = () => {\n if (paragraphRuns.length === 0 && paragraphText === '') {\n widths.push(0);\n return;\n }\n let width = 0;\n paragraphRuns.forEach((run, index) => {\n if (index > 0) width += characterSpacing;\n width += measureRunText(run, run.text, fontSize, characterSpacing);\n });\n widths.push(width);\n paragraphText = '';\n paragraphRuns = [];\n };\n\n runs.forEach((run) => {\n run.text.split(/(\\r\\n|\\r|\\n|\\f|\\v)/).forEach((part) => {\n if (part === '\\r\\n' || part === '\\r' || part === '\\n' || part === '\\f' || part === '\\v') {\n pushWidth();\n return;\n }\n\n if (part) {\n paragraphText += part;\n paragraphRuns.push({ ...run, text: part });\n }\n });\n });\n\n pushWidth();\n return widths;\n};\n\nexport const getRichTextLineBoxHeightPt = (\n line: RichTextLine,\n fontSize: number,\n isFirstLine: boolean,\n fallbackFont: FontKitFont,\n) =>\n getLineBoxHeightPt(\n fontSize,\n isFirstLine,\n line.runs.map((run) => run.fontKitFont),\n fallbackFont,\n );\n\nexport const calculateDynamicRichTextFontSize = async (arg: {\n value: string;\n schema: TextSchema;\n font: Font;\n _cache: Map<string | number, unknown>;\n startingFontSize?: number | undefined;\n}) => {\n const { value, schema, font, _cache, startingFontSize } = arg;\n const {\n fontSize: schemaFontSize,\n dynamicFontSize: dynamicFontSizeSetting,\n characterSpacing: schemaCharacterSpacing,\n lineHeight = DEFAULT_LINE_HEIGHT,\n } = schema;\n const { width: boxWidth, height: boxHeight } = getBoxContentArea(schema);\n const fontSize = startingFontSize || schemaFontSize || DEFAULT_FONT_SIZE;\n if (!dynamicFontSizeSetting) return fontSize;\n\n const richTextRuns = parseInlineMarkdown(value);\n const resolvedRuns = await resolveRichTextRuns({ runs: richTextRuns, schema, font, _cache });\n const fallbackFont =\n resolvedRuns[0]?.fontKitFont ??\n (await getFontKitFont(schema.fontName, font, _cache as Map<string, FontKitFont>));\n const characterSpacing = schemaCharacterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const dynamicFontFit = dynamicFontSizeSetting.fit ?? DEFAULT_DYNAMIC_FIT;\n const boxWidthInPt = mm2pt(boxWidth);\n\n return fitDynamicFontSize({\n startSize: fontSize,\n setting: dynamicFontSizeSetting,\n boxWidth,\n boxHeight,\n calculateConstraints: (size) => {\n let totalWidthInMm = 0;\n let totalHeightInMm = 0;\n\n const lines = layoutRichTextLines({\n runs: resolvedRuns,\n fontSize: size,\n characterSpacing,\n boxWidthInPt,\n });\n\n lines.forEach((line, lineIndex) => {\n if (dynamicFontFit === DYNAMIC_FIT_VERTICAL) {\n totalWidthInMm = Math.max(totalWidthInMm, pt2mm(line.width));\n }\n\n totalHeightInMm += pt2mm(\n getRichTextLineBoxHeightPt(line, size, lineIndex === 0, fallbackFont) * lineHeight,\n );\n });\n\n if (dynamicFontFit === DYNAMIC_FIT_HORIZONTAL) {\n measureParagraphWidths(resolvedRuns, size, characterSpacing).forEach((paragraphWidth) => {\n totalWidthInMm = Math.max(totalWidthInMm, pt2mm(paragraphWidth));\n });\n }\n\n return { totalWidthInMm, totalHeightInMm };\n },\n });\n};\n","import { getDefaultFont, mm2pt, pt2mm, type DynamicLayoutRange, type Font } from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport { DEFAULT_CHARACTER_SPACING, DEFAULT_FONT_SIZE, DEFAULT_LINE_HEIGHT } from './constants.js';\nimport {\n calculateDynamicFontSize,\n getFontKitFont,\n getLineBoxHeightPt,\n splitTextToSize,\n} from './helper.js';\nimport { parseInlineMarkdown } from './inlineMarkdown.js';\nimport {\n calculateDynamicRichTextFontSize,\n isInlineMarkdownTextSchema,\n layoutRichTextLines,\n resolveRichTextRuns,\n type RichTextLine,\n} from './richText.js';\nimport type { TextSchema } from './types.js';\nimport { getTextLineRange } from '../splitRange.js';\nimport {\n getBoxContentArea,\n getBoxInsets,\n getBoxVerticalInset,\n getSplitBoxDimension,\n hasBoxDimension,\n} from '../box.js';\n\ntype MeasureTextHeightArgs = {\n value: string;\n schema: TextSchema;\n font?: Font;\n _cache?: Map<string | number, unknown>;\n ignoreDynamicFontSize?: boolean;\n};\n\ntype MeasureTextLinesResult = {\n lines: string[];\n lineHeights: number[];\n};\n\nexport const applyTextLineRange = <T>(lines: T[], range?: DynamicLayoutRange) => {\n if (!range) return lines;\n return lines.slice(range.start, range.end ?? lines.length);\n};\n\nexport const plainTextLinesToValue = (lines: string[]) =>\n lines.map((line) => line.replace(/[\\r\\n]+$/g, '')).join('\\n');\n\nconst splitReplacementTextToLines = (value: string) => {\n const lines: string[] = [];\n let start = 0;\n\n for (let i = 0; i < value.length; i += 1) {\n const charCode = value.charCodeAt(i);\n if (charCode !== 10 && charCode !== 13) continue;\n\n lines.push(value.slice(start, i));\n if (charCode === 13 && value.charCodeAt(i + 1) === 10) i += 1;\n start = i + 1;\n }\n\n lines.push(value.slice(start));\n return lines;\n};\n\nexport const measureTextLines = async ({\n value,\n schema,\n font = getDefaultFont(),\n _cache = new Map<string | number, unknown>(),\n ignoreDynamicFontSize = false,\n}: MeasureTextHeightArgs): Promise<MeasureTextLinesResult> => {\n const fontSize = schema.fontSize ?? DEFAULT_FONT_SIZE;\n const lineHeight = schema.lineHeight ?? DEFAULT_LINE_HEIGHT;\n const characterSpacing = schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const boxWidthInPt = mm2pt(getBoxContentArea(schema).width);\n\n if (isInlineMarkdownTextSchema(schema)) {\n const richTextRuns = parseInlineMarkdown(value);\n const resolvedRuns = await resolveRichTextRuns({ runs: richTextRuns, schema, font, _cache });\n const resolvedFontSize =\n schema.dynamicFontSize && schema.height > 0 && !ignoreDynamicFontSize\n ? await calculateDynamicRichTextFontSize({ value, schema, font, _cache })\n : fontSize;\n const lines = layoutRichTextLines({\n runs: resolvedRuns,\n fontSize: resolvedFontSize,\n characterSpacing,\n boxWidthInPt,\n });\n\n const fallbackFont =\n resolvedRuns[0]?.fontKitFont ??\n (await getFontKitFont(schema.fontName, font, _cache as Map<string, FontKitFont>));\n return {\n lines: lines.map((line) => line.runs.map((run) => run.text).join('')),\n lineHeights: measureRichTextLineHeights(lines, resolvedFontSize, lineHeight, fallbackFont),\n };\n }\n\n const fontKitFont = await getFontKitFont(\n schema.fontName,\n font,\n _cache as Map<string, FontKitFont>,\n );\n const resolvedFontSize =\n schema.dynamicFontSize && schema.height > 0 && !ignoreDynamicFontSize\n ? calculateDynamicFontSize({ textSchema: schema, fontKitFont, value })\n : fontSize;\n const lines = splitTextToSize({\n value,\n characterSpacing,\n fontSize: resolvedFontSize,\n fontKitFont,\n boxWidthInPt,\n });\n\n return {\n lines,\n lineHeights: measurePlainTextLineHeights(lines, fontKitFont, resolvedFontSize, lineHeight),\n };\n};\n\nexport const mergeTextLineRangeValue = async ({\n value,\n replacement,\n schema,\n font = getDefaultFont(),\n _cache = new Map<string | number, unknown>(),\n}: {\n value: string;\n replacement: string;\n schema: TextSchema;\n font?: Font;\n _cache?: Map<string | number, unknown>;\n}) => {\n const range = getTextLineRange(schema);\n if (!range) return replacement;\n\n const { lines } = await measureTextLines({\n value,\n schema,\n font,\n _cache,\n ignoreDynamicFontSize: true,\n });\n const { start, end = lines.length } = range;\n const nextLines = [...lines];\n nextLines.splice(start, end - start, ...splitReplacementTextToLines(replacement));\n return plainTextLinesToValue(nextLines);\n};\n\nexport const measureTextHeight = async (args: MeasureTextHeightArgs): Promise<number> => {\n const { lineHeights } = await measureTextLines(args);\n return sumLineHeights(lineHeights) + getBoxVerticalInset(args.schema);\n};\n\nexport const sumLineHeights = (lineHeights: number[]) =>\n lineHeights.reduce((sum, height) => sum + height, 0);\n\nexport const getTextLineHeightsWithBox = (lineHeights: number[], schema: TextSchema) =>\n lineHeights.map(\n (height, index) =>\n height +\n getTextBoxVerticalInsetForRange(schema, { start: index, end: index + 1 }, lineHeights.length),\n );\n\nexport const getTextSplitBoxStyle = (\n schema: TextSchema,\n range: DynamicLayoutRange,\n totalLines: number,\n) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n return {\n ...(hasBoxDimension(schema.borderWidth)\n ? { borderWidth: getSplitBoxDimension(borderWidth, range, totalLines) }\n : {}),\n ...(hasBoxDimension(schema.padding)\n ? { padding: getSplitBoxDimension(padding, range, totalLines) }\n : {}),\n };\n};\n\nexport const getTextBoxVerticalInsetForRange = (\n schema: TextSchema,\n range: DynamicLayoutRange,\n totalLines: number,\n) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n const splitBorderWidth = getSplitBoxDimension(borderWidth, range, totalLines);\n const splitPadding = getSplitBoxDimension(padding, range, totalLines);\n return splitBorderWidth.top + splitBorderWidth.bottom + splitPadding.top + splitPadding.bottom;\n};\n\nconst measurePlainTextLineHeights = (\n lines: string[],\n fontKitFont: FontKitFont,\n fontSize: number,\n lineHeight: number,\n) => {\n if (lines.length === 0) return [];\n return lines.map((_, index) =>\n pt2mm(getLineBoxHeightPt(fontSize, index === 0, [fontKitFont], fontKitFont) * lineHeight),\n );\n};\n\nconst measureRichTextLineHeights = (\n lines: RichTextLine[],\n fontSize: number,\n lineHeight: number,\n fallbackFont: FontKitFont,\n) => {\n if (lines.length === 0) return [];\n return lines.map((line, index) =>\n pt2mm(\n getLineBoxHeightPt(\n fontSize,\n index === 0,\n line.runs.map((run) => run.fontKitFont),\n fallbackFont,\n ) * lineHeight,\n ),\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"measure-BzuDatEc.js","names":[],"sources":["../src/text/inlineMarkdown.ts","../src/text/richText.ts","../src/text/measure.ts"],"sourcesContent":["import { normalizeLinkHref } from '@pdfme/common';\nimport type { RichTextRun } from './types.js';\n\ntype InlineStyle = Omit<RichTextRun, 'text'>;\n\nconst MARKDOWN_ESCAPABLE_CHARS = new Set(['\\\\', '*', '~', '`', '[', ']', '(', ')']);\nconst MARKDOWN_ESCAPE_PATTERN = /[\\\\*~`[\\]()]/g;\nconst MARKDOWN_UNESCAPE_PATTERN = /\\\\([\\\\*~`[\\]()])/g;\n\nconst sameStyle = (a: InlineStyle, b: InlineStyle) =>\n Boolean(a.bold) === Boolean(b.bold) &&\n Boolean(a.italic) === Boolean(b.italic) &&\n Boolean(a.strikethrough) === Boolean(b.strikethrough) &&\n Boolean(a.code) === Boolean(b.code) &&\n a.href === b.href;\n\nconst appendRun = (runs: RichTextRun[], text: string, style: InlineStyle) => {\n if (!text) return;\n\n const lastRun = runs.at(-1);\n if (lastRun && sameStyle(lastRun, style)) {\n lastRun.text += text;\n return;\n }\n\n runs.push({\n text,\n ...(style.bold ? { bold: true } : {}),\n ...(style.italic ? { italic: true } : {}),\n ...(style.strikethrough ? { strikethrough: true } : {}),\n ...(style.code ? { code: true } : {}),\n ...(style.href ? { href: style.href } : {}),\n });\n};\n\nconst findClosingDelimiter = (value: string, delimiter: string, from: number): number => {\n for (let i = from; i < value.length; i++) {\n if (value[i] === '\\\\') {\n i += 1;\n continue;\n }\n\n if (delimiter !== '`' && value[i] === '`') {\n const codeEnd = findClosingDelimiter(value, '`', i + 1);\n if (codeEnd === -1) continue;\n i = codeEnd;\n continue;\n }\n\n if (value.startsWith(delimiter, i)) {\n return i;\n }\n }\n\n return -1;\n};\n\nconst getDelimiter = (value: string, index: number) => {\n if (value[index] === '`') return '`';\n if (value.startsWith('***', index)) return '***';\n if (value.startsWith('**', index)) return '**';\n if (value.startsWith('~~', index)) return '~~';\n if (value[index] === '*') return '*';\n return '';\n};\n\nconst findLinkLabelEnd = (value: string, from: number, to: number): number => {\n for (let index = from; index < to; index += 1) {\n if (value[index] === '\\\\') {\n index += 1;\n continue;\n }\n\n if (value[index] === ']') return index;\n }\n\n return -1;\n};\n\nconst findLinkDestinationEnd = (value: string, from: number, to: number): number => {\n let depth = 0;\n\n for (let index = from; index < to; index += 1) {\n if (value[index] === '\\\\') {\n index += 1;\n continue;\n }\n\n if (value[index] === '(') {\n depth += 1;\n continue;\n }\n\n if (value[index] === ')') {\n if (depth === 0) return index;\n depth -= 1;\n }\n }\n\n return -1;\n};\n\nconst parseLinkAt = (value: string, index: number, to: number) => {\n if (value[index] !== '[') return undefined;\n\n const labelEnd = findLinkLabelEnd(value, index + 1, to);\n if (labelEnd === -1 || value[labelEnd + 1] !== '(') return undefined;\n\n const destinationStart = labelEnd + 2;\n const destinationEnd = findLinkDestinationEnd(value, destinationStart, to);\n if (destinationEnd === -1) return undefined;\n\n const href = value\n .slice(destinationStart, destinationEnd)\n .replace(MARKDOWN_UNESCAPE_PATTERN, '$1');\n const safeHref = normalizeLinkHref(href);\n if (!safeHref) return undefined;\n\n return {\n labelStart: index + 1,\n labelEnd,\n href: safeHref,\n end: destinationEnd + 1,\n };\n};\n\nconst mergeStyle = (style: InlineStyle, delimiter: string): InlineStyle => {\n if (delimiter === '***') {\n return { ...style, bold: true, italic: true };\n }\n if (delimiter === '**') {\n return { ...style, bold: true };\n }\n if (delimiter === '*') {\n return { ...style, italic: true };\n }\n if (delimiter === '~~') {\n return { ...style, strikethrough: true };\n }\n return style;\n};\n\nconst parseRange = (value: string, from: number, to: number, style: InlineStyle): RichTextRun[] => {\n const runs: RichTextRun[] = [];\n let buffer = '';\n\n const flush = () => {\n appendRun(runs, buffer, style);\n buffer = '';\n };\n\n for (let index = from; index < to; index++) {\n const char = value[index];\n\n if (char === '\\\\' && index + 1 < to && MARKDOWN_ESCAPABLE_CHARS.has(value[index + 1])) {\n buffer += value[index + 1];\n index += 1;\n continue;\n }\n\n const link = style.href ? undefined : parseLinkAt(value, index, to);\n if (link) {\n flush();\n const nestedRuns = parseRange(value, link.labelStart, link.labelEnd, {\n ...style,\n href: link.href,\n });\n nestedRuns.forEach((run) => appendRun(runs, run.text, run));\n index = link.end - 1;\n continue;\n }\n\n const delimiter = getDelimiter(value, index);\n if (!delimiter) {\n buffer += char;\n continue;\n }\n\n const closingIndex = findClosingDelimiter(value, delimiter, index + delimiter.length);\n if (closingIndex === -1 || closingIndex + delimiter.length > to) {\n buffer += char;\n continue;\n }\n\n flush();\n\n if (delimiter === '`') {\n appendRun(\n runs,\n value.slice(index + 1, closingIndex).replace(MARKDOWN_UNESCAPE_PATTERN, '$1'),\n { ...style, code: true },\n );\n } else {\n const nestedRuns = parseRange(\n value,\n index + delimiter.length,\n closingIndex,\n mergeStyle(style, delimiter),\n );\n nestedRuns.forEach((run) => appendRun(runs, run.text, run));\n }\n\n index = closingIndex + delimiter.length - 1;\n }\n\n flush();\n return runs;\n};\n\nexport const parseInlineMarkdown = (value: string): RichTextRun[] => {\n if (!value) return [];\n return parseRange(value, 0, value.length, {});\n};\n\nexport const escapeInlineMarkdown = (value: string): string =>\n value.replace(MARKDOWN_ESCAPE_PATTERN, (char) => `\\\\${char}`);\n\nexport const stripInlineMarkdown = (value: string): string =>\n parseInlineMarkdown(value)\n .map((run) => run.text)\n .join('');\n","import { getFallbackFontName, mm2pt, pt2mm, type Font } from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport {\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_DYNAMIC_FIT,\n DEFAULT_FONT_SIZE,\n DEFAULT_LINE_HEIGHT,\n DEFAULT_FONT_VARIANT_FALLBACK,\n CODE_HORIZONTAL_PADDING,\n DYNAMIC_FIT_HORIZONTAL,\n DYNAMIC_FIT_VERTICAL,\n FONT_VARIANT_FALLBACK_ERROR,\n FONT_VARIANT_FALLBACK_PLAIN,\n SYNTHETIC_BOLD_OFFSET_RATIO,\n SYNTHETIC_BOLD_PDF_EXTRA_DRAWS,\n SYNTHETIC_ITALIC_SKEW_DEGREES,\n TEXT_FORMAT_INLINE_MARKDOWN,\n} from './constants.js';\nimport {\n fitDynamicFontSize,\n getFontKitFont,\n getLineBoxHeightPt,\n heightOfFontAtSize,\n widthOfTextAtSize,\n} from './helper.js';\nimport { parseInlineMarkdown } from './inlineMarkdown.js';\nimport type { RichTextRun, TextSchema } from './types.js';\nimport { getBoxContentArea } from '../box.js';\nimport { countGraphemes, layoutStyledRuns } from './wrap.js';\n\nexport type ResolvedRichTextRun = RichTextRun & {\n fontName: string;\n fontKitFont: FontKitFont;\n syntheticBold: boolean;\n syntheticItalic: boolean;\n};\n\nexport type RichTextLineRun = ResolvedRichTextRun & {\n width: number;\n};\n\nexport type RichTextLine = {\n runs: RichTextLineRun[];\n width: number;\n hardBreak: boolean;\n};\n\ntype FontVariantResolution = {\n fontName: string;\n syntheticBold: boolean;\n syntheticItalic: boolean;\n};\n\nconst getBaseFontName = (schema: TextSchema, font: Font) =>\n schema.fontName && font[schema.fontName] ? schema.fontName : getFallbackFontName(font);\n\nconst getLoadedFontName = (font: Font, fontName?: string) =>\n fontName && font[fontName] ? fontName : undefined;\n\nexport const isInlineMarkdownTextSchema = (schema: TextSchema) =>\n schema.textFormat === TEXT_FORMAT_INLINE_MARKDOWN &&\n !(schema.type === 'text' && schema.readOnly !== true);\n\nexport const resolveFontVariant = (\n run: RichTextRun,\n schema: TextSchema,\n font: Font,\n): FontVariantResolution => {\n const baseFontName = getBaseFontName(schema, font);\n const variants = schema.fontVariants ?? {};\n const fallback = schema.fontVariantFallback ?? DEFAULT_FONT_VARIANT_FALLBACK;\n\n let fontName = baseFontName;\n let needsBold = Boolean(run.bold);\n let needsItalic = Boolean(run.italic);\n\n if (run.code) {\n fontName = getLoadedFontName(font, variants.code) ?? baseFontName;\n } else if (run.bold && run.italic) {\n const boldItalic = getLoadedFontName(font, variants.boldItalic);\n const italic = getLoadedFontName(font, variants.italic);\n const bold = getLoadedFontName(font, variants.bold);\n\n if (boldItalic) {\n fontName = boldItalic;\n needsBold = false;\n needsItalic = false;\n } else if (italic) {\n fontName = italic;\n needsItalic = false;\n } else if (bold) {\n fontName = bold;\n needsBold = false;\n }\n } else if (run.bold) {\n const bold = getLoadedFontName(font, variants.bold);\n if (bold) {\n fontName = bold;\n needsBold = false;\n }\n } else if (run.italic) {\n const italic = getLoadedFontName(font, variants.italic);\n if (italic) {\n fontName = italic;\n needsItalic = false;\n }\n }\n\n if (\n (needsBold || needsItalic || (run.code && !getLoadedFontName(font, variants.code))) &&\n fallback === FONT_VARIANT_FALLBACK_ERROR\n ) {\n throw new Error(\n `[@pdfme/schemas] Missing font variant for markdown text in field \"${schema.name}\".`,\n );\n }\n\n return {\n fontName,\n syntheticBold: fallback !== FONT_VARIANT_FALLBACK_PLAIN && needsBold,\n syntheticItalic: fallback !== FONT_VARIANT_FALLBACK_PLAIN && needsItalic,\n };\n};\n\nexport const resolveRichTextRuns = async (arg: {\n runs: RichTextRun[];\n schema: TextSchema;\n font: Font;\n _cache: Map<string | number, unknown>;\n}): Promise<ResolvedRichTextRun[]> => {\n const { runs, schema, font, _cache } = arg;\n const fontKitCache = new Map<string, FontKitFont>();\n\n const getResolvedFontKitFont = async (fontName: string) => {\n const cached = fontKitCache.get(fontName);\n if (cached) return cached;\n\n const fontKitFont = await getFontKitFont(fontName, font, _cache as Map<string, FontKitFont>);\n fontKitCache.set(fontName, fontKitFont);\n return fontKitFont;\n };\n\n return Promise.all(\n runs.map(async (run) => {\n const resolution = resolveFontVariant(run, schema, font);\n return {\n ...run,\n ...resolution,\n fontKitFont: await getResolvedFontKitFont(resolution.fontName),\n };\n }),\n );\n};\n\nexport const measureRunText = (\n run: ResolvedRichTextRun,\n text: string,\n fontSize: number,\n characterSpacing: number,\n) => {\n const syntheticBoldWidth = run.syntheticBold\n ? fontSize * SYNTHETIC_BOLD_OFFSET_RATIO * SYNTHETIC_BOLD_PDF_EXTRA_DRAWS\n : 0;\n const syntheticItalicWidth = run.syntheticItalic\n ? heightOfFontAtSize(run.fontKitFont, fontSize) *\n Math.tan((SYNTHETIC_ITALIC_SKEW_DEGREES * Math.PI) / 180)\n : 0;\n return (\n widthOfTextAtSize(text, run.fontKitFont, fontSize, characterSpacing) +\n syntheticBoldWidth +\n syntheticItalicWidth +\n (run.code ? CODE_HORIZONTAL_PADDING * 2 : 0)\n );\n};\n\nexport const countRichTextLineGraphemes = (line: RichTextLine) =>\n countGraphemes(line.runs.map((run) => run.text).join(''));\n\nexport const getRichTextLineText = (line: RichTextLine) =>\n line.runs.map((run) => run.text).join('');\n\nexport const layoutRichTextLines = (arg: {\n runs: ResolvedRichTextRun[];\n fontSize: number;\n characterSpacing: number;\n boxWidthInPt: number;\n}): RichTextLine[] => {\n const { runs, fontSize, characterSpacing, boxWidthInPt } = arg;\n return layoutStyledRuns(\n runs.map((run) => ({\n text: run.text,\n measure: (text) => measureRunText(run, text, fontSize, characterSpacing),\n style: run,\n })),\n boxWidthInPt,\n { characterSpacing },\n ).map((line) => ({\n runs: line.spans.map((span) => ({\n ...span.style,\n text: span.text,\n width: span.width,\n })),\n width: line.width,\n hardBreak: line.hardBreak,\n }));\n};\n\nconst measureParagraphWidths = (\n runs: ResolvedRichTextRun[],\n fontSize: number,\n characterSpacing: number,\n) => {\n const widths: number[] = [];\n let paragraphText = '';\n let paragraphRuns: ResolvedRichTextRun[] = [];\n\n const pushWidth = () => {\n if (paragraphRuns.length === 0 && paragraphText === '') {\n widths.push(0);\n return;\n }\n let width = 0;\n paragraphRuns.forEach((run, index) => {\n if (index > 0) width += characterSpacing;\n width += measureRunText(run, run.text, fontSize, characterSpacing);\n });\n widths.push(width);\n paragraphText = '';\n paragraphRuns = [];\n };\n\n runs.forEach((run) => {\n run.text.split(/(\\r\\n|\\r|\\n|\\f|\\v)/).forEach((part) => {\n if (part === '\\r\\n' || part === '\\r' || part === '\\n' || part === '\\f' || part === '\\v') {\n pushWidth();\n return;\n }\n\n if (part) {\n paragraphText += part;\n paragraphRuns.push({ ...run, text: part });\n }\n });\n });\n\n pushWidth();\n return widths;\n};\n\nexport const getRichTextLineBoxHeightPt = (\n line: RichTextLine,\n fontSize: number,\n isFirstLine: boolean,\n fallbackFont: FontKitFont,\n) =>\n getLineBoxHeightPt(\n fontSize,\n isFirstLine,\n line.runs.map((run) => run.fontKitFont),\n fallbackFont,\n );\n\nexport const calculateDynamicRichTextFontSize = async (arg: {\n value: string;\n schema: TextSchema;\n font: Font;\n _cache: Map<string | number, unknown>;\n startingFontSize?: number | undefined;\n}) => {\n const { value, schema, font, _cache, startingFontSize } = arg;\n const {\n fontSize: schemaFontSize,\n dynamicFontSize: dynamicFontSizeSetting,\n characterSpacing: schemaCharacterSpacing,\n lineHeight = DEFAULT_LINE_HEIGHT,\n } = schema;\n const { width: boxWidth, height: boxHeight } = getBoxContentArea(schema);\n const fontSize = startingFontSize || schemaFontSize || DEFAULT_FONT_SIZE;\n if (!dynamicFontSizeSetting) return fontSize;\n\n const richTextRuns = parseInlineMarkdown(value);\n const resolvedRuns = await resolveRichTextRuns({ runs: richTextRuns, schema, font, _cache });\n const fallbackFont =\n resolvedRuns[0]?.fontKitFont ??\n (await getFontKitFont(schema.fontName, font, _cache as Map<string, FontKitFont>));\n const characterSpacing = schemaCharacterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const dynamicFontFit = dynamicFontSizeSetting.fit ?? DEFAULT_DYNAMIC_FIT;\n const boxWidthInPt = mm2pt(boxWidth);\n\n return fitDynamicFontSize({\n startSize: fontSize,\n setting: dynamicFontSizeSetting,\n boxWidth,\n boxHeight,\n calculateConstraints: (size) => {\n let totalWidthInMm = 0;\n let totalHeightInMm = 0;\n\n const lines = layoutRichTextLines({\n runs: resolvedRuns,\n fontSize: size,\n characterSpacing,\n boxWidthInPt,\n });\n\n lines.forEach((line, lineIndex) => {\n if (dynamicFontFit === DYNAMIC_FIT_VERTICAL) {\n totalWidthInMm = Math.max(totalWidthInMm, pt2mm(line.width));\n }\n\n totalHeightInMm += pt2mm(\n getRichTextLineBoxHeightPt(line, size, lineIndex === 0, fallbackFont) * lineHeight,\n );\n });\n\n if (dynamicFontFit === DYNAMIC_FIT_HORIZONTAL) {\n measureParagraphWidths(resolvedRuns, size, characterSpacing).forEach((paragraphWidth) => {\n totalWidthInMm = Math.max(totalWidthInMm, pt2mm(paragraphWidth));\n });\n }\n\n return { totalWidthInMm, totalHeightInMm };\n },\n });\n};\n","import { getDefaultFont, mm2pt, pt2mm, type DynamicLayoutRange, type Font } from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport { DEFAULT_CHARACTER_SPACING, DEFAULT_FONT_SIZE, DEFAULT_LINE_HEIGHT } from './constants.js';\nimport {\n calculateDynamicFontSize,\n getFontKitFont,\n getLineBoxHeightPt,\n splitTextToSize,\n} from './helper.js';\nimport { parseInlineMarkdown } from './inlineMarkdown.js';\nimport {\n calculateDynamicRichTextFontSize,\n isInlineMarkdownTextSchema,\n layoutRichTextLines,\n resolveRichTextRuns,\n type RichTextLine,\n} from './richText.js';\nimport type { TextSchema } from './types.js';\nimport { getTextLineRange } from '../splitRange.js';\nimport {\n getBoxContentArea,\n getBoxInsets,\n getBoxVerticalInset,\n getSplitBoxDimension,\n hasBoxDimension,\n} from '../box.js';\n\ntype MeasureTextHeightArgs = {\n value: string;\n schema: TextSchema;\n font?: Font;\n _cache?: Map<string | number, unknown>;\n ignoreDynamicFontSize?: boolean;\n};\n\ntype MeasureTextLinesResult = {\n lines: string[];\n lineHeights: number[];\n};\n\nexport const applyTextLineRange = <T>(lines: T[], range?: DynamicLayoutRange) => {\n if (!range) return lines;\n return lines.slice(range.start, range.end ?? lines.length);\n};\n\nexport const plainTextLinesToValue = (lines: string[]) =>\n lines.map((line) => line.replace(/[\\r\\n]+$/g, '')).join('\\n');\n\nconst splitReplacementTextToLines = (value: string) => {\n const lines: string[] = [];\n let start = 0;\n\n for (let i = 0; i < value.length; i += 1) {\n const charCode = value.charCodeAt(i);\n if (charCode !== 10 && charCode !== 13) continue;\n\n lines.push(value.slice(start, i));\n if (charCode === 13 && value.charCodeAt(i + 1) === 10) i += 1;\n start = i + 1;\n }\n\n lines.push(value.slice(start));\n return lines;\n};\n\nexport const measureTextLines = async ({\n value,\n schema,\n font = getDefaultFont(),\n _cache = new Map<string | number, unknown>(),\n ignoreDynamicFontSize = false,\n}: MeasureTextHeightArgs): Promise<MeasureTextLinesResult> => {\n const fontSize = schema.fontSize ?? DEFAULT_FONT_SIZE;\n const lineHeight = schema.lineHeight ?? DEFAULT_LINE_HEIGHT;\n const characterSpacing = schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const boxWidthInPt = mm2pt(getBoxContentArea(schema).width);\n\n if (isInlineMarkdownTextSchema(schema)) {\n const richTextRuns = parseInlineMarkdown(value);\n const resolvedRuns = await resolveRichTextRuns({ runs: richTextRuns, schema, font, _cache });\n const resolvedFontSize =\n schema.dynamicFontSize && schema.height > 0 && !ignoreDynamicFontSize\n ? await calculateDynamicRichTextFontSize({ value, schema, font, _cache })\n : fontSize;\n const lines = layoutRichTextLines({\n runs: resolvedRuns,\n fontSize: resolvedFontSize,\n characterSpacing,\n boxWidthInPt,\n });\n\n const fallbackFont =\n resolvedRuns[0]?.fontKitFont ??\n (await getFontKitFont(schema.fontName, font, _cache as Map<string, FontKitFont>));\n return {\n lines: lines.map((line) => line.runs.map((run) => run.text).join('')),\n lineHeights: measureRichTextLineHeights(lines, resolvedFontSize, lineHeight, fallbackFont),\n };\n }\n\n const fontKitFont = await getFontKitFont(\n schema.fontName,\n font,\n _cache as Map<string, FontKitFont>,\n );\n const resolvedFontSize =\n schema.dynamicFontSize && schema.height > 0 && !ignoreDynamicFontSize\n ? calculateDynamicFontSize({ textSchema: schema, fontKitFont, value })\n : fontSize;\n const lines = splitTextToSize({\n value,\n characterSpacing,\n fontSize: resolvedFontSize,\n fontKitFont,\n boxWidthInPt,\n });\n\n return {\n lines,\n lineHeights: measurePlainTextLineHeights(lines, fontKitFont, resolvedFontSize, lineHeight),\n };\n};\n\nexport const mergeTextLineRangeValue = async ({\n value,\n replacement,\n schema,\n font = getDefaultFont(),\n _cache = new Map<string | number, unknown>(),\n}: {\n value: string;\n replacement: string;\n schema: TextSchema;\n font?: Font;\n _cache?: Map<string | number, unknown>;\n}) => {\n const range = getTextLineRange(schema);\n if (!range) return replacement;\n\n const { lines } = await measureTextLines({\n value,\n schema,\n font,\n _cache,\n ignoreDynamicFontSize: true,\n });\n const { start, end = lines.length } = range;\n const nextLines = [...lines];\n nextLines.splice(start, end - start, ...splitReplacementTextToLines(replacement));\n return plainTextLinesToValue(nextLines);\n};\n\nexport const measureTextHeight = async (args: MeasureTextHeightArgs): Promise<number> => {\n const { lineHeights } = await measureTextLines(args);\n return sumLineHeights(lineHeights) + getBoxVerticalInset(args.schema);\n};\n\nexport const sumLineHeights = (lineHeights: number[]) =>\n lineHeights.reduce((sum, height) => sum + height, 0);\n\nexport const getTextLineHeightsWithBox = (lineHeights: number[], schema: TextSchema) =>\n lineHeights.map(\n (height, index) =>\n height +\n getTextBoxVerticalInsetForRange(schema, { start: index, end: index + 1 }, lineHeights.length),\n );\n\nexport const getTextSplitBoxStyle = (\n schema: TextSchema,\n range: DynamicLayoutRange,\n totalLines: number,\n) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n return {\n ...(hasBoxDimension(schema.borderWidth)\n ? { borderWidth: getSplitBoxDimension(borderWidth, range, totalLines) }\n : {}),\n ...(hasBoxDimension(schema.padding)\n ? { padding: getSplitBoxDimension(padding, range, totalLines) }\n : {}),\n };\n};\n\nexport const getTextBoxVerticalInsetForRange = (\n schema: TextSchema,\n range: DynamicLayoutRange,\n totalLines: number,\n) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n const splitBorderWidth = getSplitBoxDimension(borderWidth, range, totalLines);\n const splitPadding = getSplitBoxDimension(padding, range, totalLines);\n return splitBorderWidth.top + splitBorderWidth.bottom + splitPadding.top + splitPadding.bottom;\n};\n\nconst measurePlainTextLineHeights = (\n lines: string[],\n fontKitFont: FontKitFont,\n fontSize: number,\n lineHeight: number,\n) => {\n if (lines.length === 0) return [];\n return lines.map((_, index) =>\n pt2mm(getLineBoxHeightPt(fontSize, index === 0, [fontKitFont], fontKitFont) * lineHeight),\n );\n};\n\nconst measureRichTextLineHeights = (\n lines: RichTextLine[],\n fontSize: number,\n lineHeight: number,\n fallbackFont: FontKitFont,\n) => {\n if (lines.length === 0) return [];\n return lines.map((line, index) =>\n pt2mm(\n getLineBoxHeightPt(\n fontSize,\n index === 0,\n line.runs.map((run) => run.fontKitFont),\n fallbackFont,\n ) * lineHeight,\n ),\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DEFAULT_FONT_NAME, b64toUint8Array, createDynamicLayoutSplitRange, getDefaultFont, getDynamicLayoutSplitRange, getFallbackFontName, isUrlSafeToFetch, mm2pt, pt2mm, pt2px } from "@pdfme/common";
|
|
2
2
|
import * as fontkit from "fontkit";
|
|
3
|
-
import {
|
|
3
|
+
import { parseFont } from "@pdfme/pdf-lib";
|
|
4
4
|
//#region src/text/constants.ts
|
|
5
5
|
var ALIGN_LEFT = "left";
|
|
6
6
|
var ALIGN_CENTER = "center";
|
|
@@ -10764,10 +10764,8 @@ var getFontKitFont = async (fontName, font, _cache) => {
|
|
|
10764
10764
|
if (fontData.startsWith("http")) fontData = await fetchRemoteFontData(fontData);
|
|
10765
10765
|
else fontData = b64toUint8Array(fontData);
|
|
10766
10766
|
}
|
|
10767
|
-
|
|
10768
|
-
|
|
10769
|
-
else fontDataBuffer = Buffer.from(fontData);
|
|
10770
|
-
return fontkit.create(fontDataBuffer);
|
|
10767
|
+
const fontBytes = fontData instanceof Uint8Array ? fontData : new Uint8Array(fontData);
|
|
10768
|
+
return parseFont(fontkit, fontBytes);
|
|
10771
10769
|
})();
|
|
10772
10770
|
fontCache.set(cacheKey, fontKitFontPromise);
|
|
10773
10771
|
try {
|
|
@@ -10851,4 +10849,4 @@ var getTextLineRange = (schema) => getDynamicLayoutSplitRange(schema, TEXT_LINE_
|
|
|
10851
10849
|
//#endregion
|
|
10852
10850
|
export { TEXT_FORMAT_INLINE_MARKDOWN as $, getBoxVerticalInset as A, DEFAULT_DYNAMIC_FIT as B, getLineAlignment as C, getBoxContentArea as D, createBoxDimension as E, ALIGN_LEFT as F, DYNAMIC_FIT_HORIZONTAL as G, DEFAULT_FONT_VARIANT_FALLBACK as H, ALIGN_RIGHT as I, FONT_VARIANT_FALLBACK_PLAIN as J, DYNAMIC_FIT_VERTICAL as K, CODE_BACKGROUND_COLOR as L, hasBoxDimension as M, ALIGN_CENTER as N, getBoxDimensionPropPanelSchema as O, ALIGN_JUSTIFY as P, SYNTHETIC_BOLD_OFFSET_RATIO as Q, CODE_HORIZONTAL_PADDING as R, wrapTextToSize as S, splitGraphemes as T, DEFAULT_TEXT_FORMAT as U, DEFAULT_FONT_COLOR as V, DEFAULT_TEXT_OVERFLOW as W, PLACEHOLDER_FONT_COLOR as X, FONT_VARIANT_FALLBACK_SYNTHETIC as Y, SYNTHETIC_BOLD_CSS_TEXT_SHADOW as Z, getLineBoxHeightPt as _, createListItemSplitRange as a, splitTextToSize as b, getListItemRange as c, calculateDynamicFontSize as d, TEXT_FORMAT_PLAIN as et, fetchRemoteFontData as f, getFontKitFont as g, getFontDescentInPt as h, TEXT_LINE_SPLIT_UNIT as i, VERTICAL_ALIGN_MIDDLE as it, getSplitBoxDimension as j, getBoxInsets as k, getTableBodyRange as l, getBrowserVerticalFontAdjustments as m, LIST_ITEM_SPLIT_UNIT as n, TEXT_OVERFLOW_VISIBLE as nt, createTableBodySplitRange as o, fitDynamicFontSize as p, FONT_VARIANT_FALLBACK_ERROR as q, TABLE_BODY_SPLIT_UNIT as r, VERTICAL_ALIGN_BOTTOM as rt, createTextLineSplitRange as s, BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS as t, TEXT_OVERFLOW_EXPAND as tt, getTextLineRange as u, heightOfFontAtSize as v, layoutStyledRuns as w, widthOfTextAtSize as x, isFirefox as y, DEFAULT_ALIGNMENT as z };
|
|
10853
10851
|
|
|
10854
|
-
//# sourceMappingURL=splitRange-
|
|
10852
|
+
//# sourceMappingURL=splitRange-BkQuwzIU.js.map
|