postext 1.39.1 → 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/comics/frames.test.js +0 -8
- package/dist/__tests__/comics/frames.test.js.map +1 -1
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.d.ts +2 -0
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.d.ts.map +1 -0
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.js +277 -0
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.js.map +1 -0
- package/dist/__tests__/composed/fit.test.js +77 -0
- package/dist/__tests__/composed/fit.test.js.map +1 -1
- package/dist/__tests__/composed/frameModesChain.test.d.ts +2 -0
- package/dist/__tests__/composed/frameModesChain.test.d.ts.map +1 -0
- package/dist/__tests__/composed/frameModesChain.test.js +69 -0
- package/dist/__tests__/composed/frameModesChain.test.js.map +1 -0
- package/dist/__tests__/composed/framePictures.test.d.ts +2 -0
- package/dist/__tests__/composed/framePictures.test.d.ts.map +1 -0
- package/dist/__tests__/composed/framePictures.test.js +121 -0
- package/dist/__tests__/composed/framePictures.test.js.map +1 -0
- package/dist/__tests__/composed/frameWritingMode.test.js +79 -3
- package/dist/__tests__/composed/frameWritingMode.test.js.map +1 -1
- package/dist/__tests__/composed/labels.test.js +19 -0
- package/dist/__tests__/composed/labels.test.js.map +1 -1
- package/dist/__tests__/composed/labelsMirrored.test.d.ts +2 -0
- package/dist/__tests__/composed/labelsMirrored.test.d.ts.map +1 -0
- package/dist/__tests__/composed/labelsMirrored.test.js +128 -0
- package/dist/__tests__/composed/labelsMirrored.test.js.map +1 -0
- package/dist/__tests__/composed/measureMemo.test.d.ts +2 -0
- package/dist/__tests__/composed/measureMemo.test.d.ts.map +1 -0
- package/dist/__tests__/composed/measureMemo.test.js +45 -0
- package/dist/__tests__/composed/measureMemo.test.js.map +1 -0
- package/dist/__tests__/composedTemplates.test.js +5 -2
- package/dist/__tests__/composedTemplates.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +3 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/migrate/labelsOnPictures.test.js +49 -1
- package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -1
- package/dist/canvas-backend/composed.d.ts +2 -2
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +11 -2
- package/dist/canvas-backend/composed.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +10 -1
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/mirrorFrame.d.ts +19 -0
- package/dist/canvas-backend/mirrorFrame.d.ts.map +1 -1
- package/dist/canvas-backend/mirrorFrame.js +47 -0
- package/dist/canvas-backend/mirrorFrame.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +35 -26
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/comics/frames.d.ts +5 -0
- package/dist/comics/frames.d.ts.map +1 -1
- package/dist/comics/frames.js +7 -0
- package/dist/comics/frames.js.map +1 -1
- package/dist/comics/layoutPage.d.ts +5 -0
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +9 -0
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/comics/sourceMap.d.ts.map +1 -1
- package/dist/comics/sourceMap.js +6 -4
- package/dist/comics/sourceMap.js.map +1 -1
- package/dist/comics/spread.d.ts +6 -1
- package/dist/comics/spread.d.ts.map +1 -1
- package/dist/comics/spread.js +15 -1
- package/dist/comics/spread.js.map +1 -1
- package/dist/comics/textPanels.d.ts +30 -6
- package/dist/comics/textPanels.d.ts.map +1 -1
- package/dist/comics/textPanels.js +226 -69
- package/dist/comics/textPanels.js.map +1 -1
- package/dist/comics/transform.d.ts.map +1 -1
- package/dist/comics/transform.js +4 -2
- package/dist/comics/transform.js.map +1 -1
- package/dist/composed/labels.d.ts +9 -0
- package/dist/composed/labels.d.ts.map +1 -1
- package/dist/composed/labels.js +36 -4
- package/dist/composed/labels.js.map +1 -1
- package/dist/composed/paint.d.ts +10 -6
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +38 -7
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/sourceMap.d.ts.map +1 -1
- package/dist/composed/sourceMap.js +7 -1
- package/dist/composed/sourceMap.js.map +1 -1
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +9 -4
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +9 -4
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +36 -14
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate/pageDesign.d.ts +6 -1
- package/dist/migrate/pageDesign.d.ts.map +1 -1
- package/dist/migrate/pageDesign.js +26 -10
- package/dist/migrate/pageDesign.js.map +1 -1
- package/dist/migrate/textToMarkdown.js +4 -3
- package/dist/migrate/textToMarkdown.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +67 -10
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +11 -0
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +20 -1
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +103 -24
- package/dist/pipeline/composedLayout.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +5 -1
- package/dist/pipeline/frameLayout.d.ts.map +1 -1
- package/dist/pipeline/frameLayout.js +1 -0
- package/dist/pipeline/frameLayout.js.map +1 -1
- package/dist/pipeline/measureMemo.d.ts +39 -0
- package/dist/pipeline/measureMemo.d.ts.map +1 -0
- package/dist/pipeline/measureMemo.js +61 -0
- package/dist/pipeline/measureMemo.js.map +1 -0
- package/dist/pipeline/mirrorFrame.d.ts +2 -1
- package/dist/pipeline/mirrorFrame.d.ts.map +1 -1
- package/dist/pipeline/mirrorFrame.js +31 -5
- package/dist/pipeline/mirrorFrame.js.map +1 -1
- package/dist/vdt.d.ts +17 -0
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-backend.d.ts","sourceRoot":"","sources":["../src/html-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAuBX,aAAa,EACd,MAAM,OAAO,CAAC;AAIf,OAAO,EAA8B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA8InF,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kDAI8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;QAC5D;;;0BAGkB;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF;;;;;;;;;;;;iEAY6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;4DAGwD;IACxD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D;;;;;;;2DAOuD;IACvD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;IACnG;;;wDAGoD;IACpD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C;;;;;;;uEAOmE;IACnE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;uBAUmB;IACnB,cAAc,CAAC,EAAE,OAAO,GAAG;QACzB,KAAK,CAAC,EAAE,mBAAmB,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;KACxC,CAAC;CACH;AA4VD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;
|
|
1
|
+
{"version":3,"file":"html-backend.d.ts","sourceRoot":"","sources":["../src/html-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAuBX,aAAa,EACd,MAAM,OAAO,CAAC;AAIf,OAAO,EAA8B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA8InF,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kDAI8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;QAC5D;;;0BAGkB;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF;;;;;;;;;;;;iEAY6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;4DAGwD;IACxD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D;;;;;;;2DAOuD;IACvD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;IACnG;;;wDAGoD;IACpD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C;;;;;;;uEAOmE;IACnE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;uBAUmB;IACnB,cAAc,CAAC,EAAE,OAAO,GAAG;QACzB,KAAK,CAAC,EAAE,mBAAmB,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;KACxC,CAAC;CACH;AA4VD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;AAq5FD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB;4EACwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,QAS4B,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,iBAAsB,GAC9B,eAAe,CAuGjB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAEtF"}
|
package/dist/html-backend.js
CHANGED
|
@@ -25,7 +25,7 @@ import { isHlsMimeType, mediaFragment, videoElementAttributes, videoEmbedAllow }
|
|
|
25
25
|
import { renderComicHtml } from './htmlComic';
|
|
26
26
|
import { comicBlockOnSheet, pageComics } from './comics/transform';
|
|
27
27
|
import { altWithLabels } from './composed/labelText';
|
|
28
|
-
import { figureLabelMatrix, undrawnLabels } from './composed/labels';
|
|
28
|
+
import { figureLabelMatrix, undrawnLabels, unmirrorLabelLayout } from './composed/labels';
|
|
29
29
|
import { comicFramePaintOrder, composedFrameBlockIds, composedPaintOrder, composedReadingOrder, composedSheetClip, composedSheetClipOnSheet, frameClips, frameContentRect, frameMatrix } from './composed/paint';
|
|
30
30
|
import { taskBoxSvgBody, taskBoxText } from './taskBox';
|
|
31
31
|
/**
|
|
@@ -2469,9 +2469,15 @@ function renderFigureLabelsHtml(rb, bx, by, options) {
|
|
|
2469
2469
|
const n2 = (v) => String(+v.toFixed(4));
|
|
2470
2470
|
const parts = [];
|
|
2471
2471
|
for (const label of rb.labels ?? []) {
|
|
2472
|
-
|
|
2472
|
+
let layout = label.layout;
|
|
2473
2473
|
if (!layout)
|
|
2474
2474
|
continue;
|
|
2475
|
+
// A vertical label on a mirrored page (#955): set from its unmirrored
|
|
2476
|
+
// layout in a wrapper that reflects the flow's mirror back about the
|
|
2477
|
+
// body, so its runs and cells read as they do on any page.
|
|
2478
|
+
const unmirrored = layout.mirrored === true && !rb.rotation;
|
|
2479
|
+
if (unmirrored)
|
|
2480
|
+
layout = unmirrorLabelLayout(layout, rb.bodyRect.width);
|
|
2475
2481
|
const m = figureLabelMatrix(layout, bx, by);
|
|
2476
2482
|
const fonts = { normal: layout.fontString, bold: layout.boldFontString, italic: layout.italicFontString, boldItalic: layout.boldItalicFontString };
|
|
2477
2483
|
const halo = layout.halo && layout.halo.widthPx > 0
|
|
@@ -2501,8 +2507,11 @@ function renderFigureLabelsHtml(rb, bx, by, options) {
|
|
|
2501
2507
|
}
|
|
2502
2508
|
const dir = layout.direction === 'rtl' ? ' dir="rtl"' : '';
|
|
2503
2509
|
const id = label.id ? ` data-label="${esc(label.id)}"` : '';
|
|
2504
|
-
|
|
2505
|
-
`transform:matrix(${m.map(n2).join(',')});${halo}">` + inner.join('') + '</div>'
|
|
2510
|
+
const box = `<div class="pt-figure-label"${id}${dir} style="position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0;` +
|
|
2511
|
+
`transform:matrix(${m.map(n2).join(',')});${halo}">` + inner.join('') + '</div>';
|
|
2512
|
+
parts.push(unmirrored
|
|
2513
|
+
? `<div class="pt-unmirrored" style="position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0;transform:matrix(-1,0,0,1,${n2(2 * bx + rb.bodyRect.width)},0);">${box}</div>`
|
|
2514
|
+
: box);
|
|
2506
2515
|
}
|
|
2507
2516
|
return parts.join('');
|
|
2508
2517
|
}
|
|
@@ -2968,6 +2977,7 @@ verticalRegion, verticalDigits) {
|
|
|
2968
2977
|
const plainFlow = !vflow && page.flow?.writingMode !== 'horizontal-tb';
|
|
2969
2978
|
// A comic page's text panels (#885): each frame's blocks laid over its
|
|
2970
2979
|
// panel, before the panel's lettering, inside the comic's markup.
|
|
2980
|
+
// Those of a strip (#959) likewise, inside the strip's markup.
|
|
2971
2981
|
const comicText = new Map();
|
|
2972
2982
|
const comicTextBlocks = [];
|
|
2973
2983
|
// On a vertical or right-to-left page the text is set in the page's flow
|
|
@@ -2978,15 +2988,22 @@ verticalRegion, verticalDigits) {
|
|
|
2978
2988
|
: page.flow?.writingMode === 'horizontal-tb'
|
|
2979
2989
|
? `<div class="pt-flow pt-flow-mirrored" style="position:absolute;left:0;top:0;width:${page.width}px;height:${page.height}px;transform:scaleX(-1);transform-origin:${page.flow.mirror.originX / 2}px 0;">${MIRRORED_FLOW_STYLE}`
|
|
2980
2990
|
: '';
|
|
2981
|
-
for (const
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2991
|
+
for (const comic of comics) {
|
|
2992
|
+
for (const item of comicFramePaintOrder(page, comic)) {
|
|
2993
|
+
if (item.kind !== 'frame' || item.frame.panel === undefined)
|
|
2994
|
+
continue;
|
|
2995
|
+
const parts = item.blocks.map((b) => ({ id: b.id, html: renderBlock(b, options) }));
|
|
2996
|
+
comicTextBlocks.push(...parts);
|
|
2997
|
+
const frameHtml = composedFrameOpen(item.frame, 'auto') + parts.map((b) => b.html).join('') + '</div>';
|
|
2998
|
+
const byPanel = comicText.get(comic) ?? new Map();
|
|
2999
|
+
byPanel.set(item.frame.panel, flowBox ? `${flowBox}${frameHtml}</div>` : frameHtml);
|
|
3000
|
+
comicText.set(comic, byPanel);
|
|
3001
|
+
}
|
|
2988
3002
|
}
|
|
2989
|
-
const comicMarkup = (comic) =>
|
|
3003
|
+
const comicMarkup = (comic) => {
|
|
3004
|
+
const text = comicText.get(comic);
|
|
3005
|
+
return renderComicPageHtml(page, comic, comics.indexOf(comic), options.vertical ? { ...options, vertical: undefined } : options, text ? (panel) => text.get(panel.index) ?? '' : undefined);
|
|
3006
|
+
};
|
|
2990
3007
|
const stripInBlock = (block) => plainFlow && block.comic && !block.hidden ? comicMarkup(comicBlockOnSheet(page, block)) : '';
|
|
2991
3008
|
const blocks = [];
|
|
2992
3009
|
for (const col of page.columns) {
|
|
@@ -3161,7 +3178,7 @@ function composedFrameOpen(frame, z, facing = false) {
|
|
|
3161
3178
|
const [l, t, r, b] = [x, y, x + width, y + height].map(frameNum);
|
|
3162
3179
|
decls.push(`clip-path:polygon(${l}px ${t}px,${r}px ${t}px,${r}px ${b}px,${l}px ${b}px)`);
|
|
3163
3180
|
}
|
|
3164
|
-
return `<div class="pt-frame" data-frame-id="${esc(frame.id)}" data-layer="${frame.layer}"${facing ? ' data-facing="true" aria-hidden="true"' : ''} style="${decls.join(';')};">`;
|
|
3181
|
+
return `<div class="pt-frame${frame.unmirrorX !== undefined ? ' pt-unmirrored' : ''}" data-frame-id="${esc(frame.id)}" data-layer="${frame.layer}"${facing ? ' data-facing="true" aria-hidden="true"' : ''} style="${decls.join(';')};">`;
|
|
3165
3182
|
}
|
|
3166
3183
|
/** The markup of a comic on a page (its comic page, a half of a spread or
|
|
3167
3184
|
* a strip, on the sheet; #565): see `renderComicHtml`. Its pictures come
|
|
@@ -3187,7 +3204,12 @@ function renderComicPageHtml(page, comic, k, options, overPanel) {
|
|
|
3187
3204
|
* mirrored layout put it. A box that sets a transform of its own (a
|
|
3188
3205
|
* stretched dash, a turned design picture) keeps it and stays mirrored. */
|
|
3189
3206
|
const MIRRORED_FLOW_STYLE = '<style>.pt-flow-mirrored [style*="white-space:pre"],.pt-flow-mirrored img,' +
|
|
3190
|
-
'.pt-flow-mirrored svg:not(.pt-char-grid),.pt-flow-mirrored .pt-video{transform:scaleX(-1);}
|
|
3207
|
+
'.pt-flow-mirrored svg:not(.pt-char-grid),.pt-flow-mirrored .pt-video{transform:scaleX(-1);}' +
|
|
3208
|
+
// A box reflected back about its body (a vertical label, #955) or a
|
|
3209
|
+
// vertical frame of the page placed by a matrix that includes the mirror
|
|
3210
|
+
// (#960): what is in it is not mirrored, so nothing is turned back.
|
|
3211
|
+
'.pt-flow-mirrored .pt-unmirrored [style*="white-space:pre"],.pt-flow-mirrored .pt-unmirrored img,' +
|
|
3212
|
+
'.pt-flow-mirrored .pt-unmirrored svg:not(.pt-char-grid),.pt-flow-mirrored .pt-unmirrored .pt-video{transform:none;}</style>';
|
|
3191
3213
|
/** The character grid (稿纸) as one SVG path over the page, under the
|
|
3192
3214
|
* text (see `cjkGridCells`). */
|
|
3193
3215
|
function renderCharacterGridSvg(cells, width, height) {
|