@web-ppt/edit-core 0.5.0-beta.2 → 0.5.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/CHANGELOG.md +183 -0
- package/README.md +164 -21
- package/dist/alt-text.d.ts +5 -0
- package/dist/appearance/index.d.ts +12 -0
- package/dist/appearance/materialize.d.ts +4 -0
- package/dist/appearance/types.d.ts +26 -0
- package/dist/appearance/values.d.ts +9 -0
- package/dist/appearance.js +301 -0
- package/dist/cfb/index.d.ts +5 -0
- package/dist/cfb/read.d.ts +16 -0
- package/dist/cfb/write.d.ts +3 -0
- package/dist/cfb.js +208 -0
- package/dist/change-classification.d.ts +3 -3
- package/dist/chart/category-binding.d.ts +4 -0
- package/dist/chart/category-commands.d.ts +23 -0
- package/dist/chart/category-levels.d.ts +14 -0
- package/dist/chart/category-matrix.d.ts +2 -0
- package/dist/chart/category-value.d.ts +2 -0
- package/dist/chart/category-workbook.d.ts +13 -0
- package/dist/chart/commands.d.ts +28 -0
- package/dist/chart/context.d.ts +12 -0
- package/dist/chart/dataset-merge.d.ts +5 -0
- package/dist/chart/formula.d.ts +13 -0
- package/dist/chart/identity-frames.d.ts +4 -0
- package/dist/chart/identity-scopes.d.ts +6 -0
- package/dist/chart/identity.d.ts +24 -0
- package/dist/chart/index.d.ts +8 -0
- package/dist/chart/limits.d.ts +6 -0
- package/dist/chart/locator.d.ts +4 -0
- package/dist/chart/materialize.d.ts +7 -0
- package/dist/chart/ordering.d.ts +9 -0
- package/dist/chart/part-graph.d.ts +5 -0
- package/dist/chart/patch-validation.d.ts +3 -0
- package/dist/chart/plot-kinds.d.ts +2 -0
- package/dist/chart/projection.d.ts +8 -0
- package/dist/chart/save.d.ts +4 -0
- package/dist/chart/shared-added-plan.d.ts +19 -0
- package/dist/chart/shared-added-records.d.ts +8 -0
- package/dist/chart/shared-address.d.ts +5 -0
- package/dist/chart/shared-allocate.d.ts +7 -0
- package/dist/chart/shared-cache-codec.d.ts +5 -0
- package/dist/chart/shared-cache-identities.d.ts +3 -0
- package/dist/chart/shared-cache-migration.d.ts +7 -0
- package/dist/chart/shared-cache-save.d.ts +3 -0
- package/dist/chart/shared-cache-scopes.d.ts +13 -0
- package/dist/chart/shared-cache.d.ts +11 -0
- package/dist/chart/shared-category.d.ts +4 -0
- package/dist/chart/shared-cell.d.ts +9 -0
- package/dist/chart/shared-family.d.ts +26 -0
- package/dist/chart/shared-fields.d.ts +18 -0
- package/dist/chart/shared-graph.d.ts +19 -0
- package/dist/chart/shared-growth-space.d.ts +5 -0
- package/dist/chart/shared-inserted-cells.d.ts +14 -0
- package/dist/chart/shared-inserted-command.d.ts +7 -0
- package/dist/chart/shared-inserted-layout.d.ts +16 -0
- package/dist/chart/shared-inserted-project.d.ts +14 -0
- package/dist/chart/shared-inserted-records.d.ts +16 -0
- package/dist/chart/shared-inserted-save.d.ts +6 -0
- package/dist/chart/shared-joint-command.d.ts +9 -0
- package/dist/chart/shared-joint-records.d.ts +9 -0
- package/dist/chart/shared-record-axis.d.ts +25 -0
- package/dist/chart/shared-record-remove.d.ts +13 -0
- package/dist/chart/shared-record-stage.d.ts +2 -0
- package/dist/chart/shared-records.d.ts +2 -0
- package/dist/chart/shared-rows.d.ts +17 -0
- package/dist/chart/shared-runtime.d.ts +19 -0
- package/dist/chart/shared-save-plan.d.ts +4 -0
- package/dist/chart/shared-save.d.ts +3 -0
- package/dist/chart/shared-series.d.ts +6 -0
- package/dist/chart/shared-source-cache.d.ts +4 -0
- package/dist/chart/shared-topology.d.ts +9 -0
- package/dist/chart/shared-unresolved.d.ts +3 -0
- package/dist/chart/shared-validation.d.ts +6 -0
- package/dist/chart/shared-workbook-source.d.ts +6 -0
- package/dist/chart/shared-xy-command.d.ts +7 -0
- package/dist/chart/shared-xy-family.d.ts +16 -0
- package/dist/chart/shared-xy-project.d.ts +6 -0
- package/dist/chart/shared-xy-records.d.ts +23 -0
- package/dist/chart/shared-xy-save.d.ts +5 -0
- package/dist/chart/shared-xy-source.d.ts +39 -0
- package/dist/chart/shared.d.ts +13 -0
- package/dist/chart/source.d.ts +11 -0
- package/dist/chart/types.d.ts +86 -0
- package/dist/chart/validation.d.ts +24 -0
- package/dist/chart/workbook-range.d.ts +16 -0
- package/dist/chart/workbook-read.d.ts +7 -0
- package/dist/chart/workbook-write.d.ts +9 -0
- package/dist/chart/workbook.d.ts +25 -0
- package/dist/chart/xml-data.d.ts +14 -0
- package/dist/chart/xml-namespaces.d.ts +16 -0
- package/dist/chart-design/index.d.ts +10 -0
- package/dist/chart-design/types.d.ts +11 -0
- package/dist/chart-design/xml.d.ts +2 -0
- package/dist/chart-design.js +361 -0
- package/dist/chart-ex/index.d.ts +15 -0
- package/dist/chart-ex/workbook.d.ts +6 -0
- package/dist/chart-ex/xml.d.ts +14 -0
- package/dist/chart-ex.js +457 -0
- package/dist/chart-shared/index.d.ts +12 -0
- package/dist/chart-shared.js +1 -0
- package/dist/chart.js +1 -0
- package/dist/clipboard-links-GuPtqr1z.js +778 -0
- package/dist/clipboard-package.d.ts +4 -0
- package/dist/clipboard-source.d.ts +6 -2
- package/dist/clipboard-trees.d.ts +9 -0
- package/dist/commands/add-slide-identity.d.ts +2 -0
- package/dist/commands/bullet-image-resource.d.ts +11 -0
- package/dist/commands/clear-format.d.ts +4 -0
- package/dist/commands/common-object-slide-patch.d.ts +4 -0
- package/dist/commands/common-object-slide-types.d.ts +68 -0
- package/dist/commands/direct-format-patches.d.ts +11 -5
- package/dist/commands/distribute-elements.d.ts +4 -0
- package/dist/commands/edit-table-grid.d.ts +10 -0
- package/dist/commands/element-alt-text.d.ts +8 -0
- package/dist/commands/element-arrangement.d.ts +17 -0
- package/dist/commands/element-effects.d.ts +1 -1
- package/dist/commands/element-fill.d.ts +1 -1
- package/dist/commands/element-geometry.d.ts +5 -2
- package/dist/commands/element-image-content.d.ts +2 -2
- package/dist/commands/element-link.d.ts +1 -1
- package/dist/commands/element-name.d.ts +1 -1
- package/dist/commands/element-stroke.d.ts +1 -1
- package/dist/commands/element-text.d.ts +1 -1
- package/dist/commands/element-transform.d.ts +2 -2
- package/dist/commands/geometry-types.d.ts +23 -1
- package/dist/commands/hierarchy-record.d.ts +5 -0
- package/dist/commands/image-resource.d.ts +8 -1
- package/dist/commands/insertion-host.d.ts +14 -1
- package/dist/commands/layout-property.d.ts +7 -0
- package/dist/commands/master-property.d.ts +5 -0
- package/dist/commands/master-text-style-types.d.ts +27 -0
- package/dist/commands/master-text-style.d.ts +7 -0
- package/dist/commands/paste-resources.d.ts +9 -5
- package/dist/commands/patch-apply.d.ts +3 -0
- package/dist/commands/patch-count.d.ts +1 -0
- package/dist/commands/patch-invalidation.d.ts +1 -1
- package/dist/commands/patch-stage.d.ts +4 -0
- package/dist/commands/record-override.d.ts +5 -0
- package/dist/commands/replace-image.d.ts +6 -1
- package/dist/commands/sections.d.ts +10 -0
- package/dist/commands/set-preset.d.ts +5 -0
- package/dist/commands/slide-property-types.d.ts +55 -5
- package/dist/commands/slide-size.d.ts +7 -0
- package/dist/commands/spid.d.ts +1 -1
- package/dist/commands/table-grid-patch.d.ts +12 -0
- package/dist/commands/text-target.d.ts +2 -2
- package/dist/commands/theme-types.d.ts +47 -0
- package/dist/commands/theme.d.ts +9 -0
- package/dist/commands/types.d.ts +194 -17
- package/dist/commands/ungroup-source.d.ts +3 -0
- package/dist/comments/index.d.ts +35 -0
- package/dist/comments/save.d.ts +3 -0
- package/dist/comments/state.d.ts +10 -0
- package/dist/comments/xml.d.ts +12 -0
- package/dist/comments.js +782 -0
- package/dist/common-object-slide-types.d.ts +34 -0
- package/dist/data-validation.d.ts +1 -1
- package/dist/describe/budget.d.ts +3 -0
- package/dist/describe/index.d.ts +5 -0
- package/dist/describe/read.d.ts +4 -0
- package/dist/describe/types.d.ts +103 -0
- package/dist/describe.js +192 -0
- package/dist/design-dependencies.d.ts +8 -0
- package/dist/design-projection-package.d.ts +10 -0
- package/dist/design-target.d.ts +10 -0
- package/dist/design.d.ts +3 -0
- package/dist/document-extensions.d.ts +9 -0
- package/dist/document.d.ts +1 -1
- package/dist/dynamic-projection.d.ts +6 -0
- package/dist/edit-core.js +5420 -4111
- package/dist/editor.d.ts +15 -3
- package/dist/element-source.d.ts +11 -0
- package/dist/element-spids.d.ts +4 -0
- package/dist/extension-address-journal.d.ts +9 -0
- package/dist/extension-address-remap.d.ts +14 -0
- package/dist/extension-addresses.d.ts +20 -0
- package/dist/extension-copy-history.d.ts +7 -0
- package/dist/extension-copy.d.ts +16 -0
- package/dist/extension-migration-receipt.d.ts +34 -0
- package/dist/extension-recovery-context.d.ts +5 -0
- package/dist/extension-runtime.d.ts +64 -0
- package/dist/generate/comments.d.ts +3 -0
- package/dist/generate/compatibility-parts.d.ts +14 -0
- package/dist/generate/compatibility-references.d.ts +3 -0
- package/dist/generate/compatibility.d.ts +4 -0
- package/dist/generate/index.d.ts +1 -0
- package/dist/generate/master-defaults.d.ts +4 -0
- package/dist/generate/materialize.d.ts +2 -2
- package/dist/generate/math.d.ts +3 -0
- package/dist/generate/portable-clipboard.d.ts +4 -0
- package/dist/generate/projection-tree.d.ts +8 -0
- package/dist/generate/template.d.ts +68 -1
- package/dist/generate/text-body.d.ts +2 -0
- package/dist/generate/text-effects.d.ts +5 -0
- package/dist/generate/text-override.d.ts +8 -0
- package/dist/generate/validation.d.ts +3 -0
- package/dist/generate/warp.d.ts +2 -0
- package/dist/generate.js +1232 -512
- package/dist/history.d.ts +11 -1
- package/dist/identities.d.ts +4 -0
- package/dist/image-content.d.ts +5 -2
- package/dist/image-resource-history.d.ts +2 -0
- package/dist/index-C2r7c6G6.js +714 -0
- package/dist/index-CYDvbiwF.js +1 -0
- package/dist/index.d.ts +35 -7
- package/dist/ink/index.d.ts +27 -0
- package/dist/ink/model.d.ts +4 -0
- package/dist/ink/save.d.ts +3 -0
- package/dist/ink/source.d.ts +7 -0
- package/dist/ink.js +324 -0
- package/dist/layout-assets.d.ts +3 -1
- package/dist/layout-projection.d.ts +17 -5
- package/dist/layout-state.d.ts +2 -0
- package/dist/layout-types.d.ts +42 -0
- package/dist/layout.d.ts +5 -0
- package/dist/lint/color.d.ts +5 -0
- package/dist/lint/index.d.ts +7 -0
- package/dist/lint/prompts.d.ts +3 -0
- package/dist/lint/report.d.ts +21 -0
- package/dist/lint/sampler-batch.d.ts +4 -0
- package/dist/lint/sampler-images.d.ts +2 -0
- package/dist/lint/sampler.d.ts +9 -0
- package/dist/lint/snapshot.d.ts +34 -0
- package/dist/lint/types.d.ts +67 -0
- package/dist/lint-sampler.js +187 -0
- package/dist/lint.js +659 -0
- package/dist/master-state.d.ts +3 -0
- package/dist/master-text-style-state.d.ts +3 -0
- package/dist/master-types.d.ts +55 -0
- package/dist/master.d.ts +5 -0
- package/dist/media/audio-icon.d.ts +2 -0
- package/dist/media/commands.d.ts +3 -0
- package/dist/media/index.d.ts +10 -0
- package/dist/media/markup.d.ts +10 -0
- package/dist/media/mp4-boxes.d.ts +12 -0
- package/dist/media/mp4-fragments.d.ts +8 -0
- package/dist/media/mp4-samples.d.ts +4 -0
- package/dist/media/mp4.d.ts +2 -0
- package/dist/media/poster.d.ts +2 -0
- package/dist/media/replace-poster.d.ts +3 -0
- package/dist/media/resource.d.ts +4 -0
- package/dist/media/source.d.ts +14 -0
- package/dist/media/types.d.ts +33 -0
- package/dist/media-properties.d.ts +4 -0
- package/dist/media.js +1630 -0
- package/dist/model-invariants-BM19JVxy.js +8980 -0
- package/dist/object-source.d.ts +11 -0
- package/dist/ole/container.d.ts +14 -0
- package/dist/ole/content.d.ts +94 -0
- package/dist/ole/index.d.ts +20 -0
- package/dist/ole/preview.d.ts +3 -0
- package/dist/ole/save.d.ts +2 -0
- package/dist/ole/state.d.ts +16 -0
- package/dist/ole.js +870 -0
- package/dist/opc.js +1 -1
- package/dist/paragraph-level.d.ts +2 -2
- package/dist/paragraph-property-schema.d.ts +4 -1
- package/dist/{patch-D7lZelRa.js → patch-BwhfBbYE.js} +10 -10
- package/dist/patch-events.d.ts +5 -1
- package/dist/ppt/appearance.d.ts +11 -0
- package/dist/ppt/binary.d.ts +20 -0
- package/dist/ppt/drawing.d.ts +18 -0
- package/dist/ppt/geometry.d.ts +4 -0
- package/dist/ppt/index.d.ts +12 -0
- package/dist/ppt/pictures.d.ts +11 -0
- package/dist/ppt/text.d.ts +9 -0
- package/dist/ppt.js +774 -0
- package/dist/preset-geometry.d.ts +6 -0
- package/dist/projection.d.ts +2 -0
- package/dist/query-BHLjWjnu.js +903 -0
- package/dist/recovery-identity.d.ts +1 -0
- package/dist/recovery-migrations.d.ts +3 -0
- package/dist/recovery.d.ts +3 -0
- package/dist/resize/index.d.ts +6 -0
- package/dist/resize/text.d.ts +4 -0
- package/dist/resize.js +5090 -0
- package/dist/retained-element-origins.d.ts +6 -0
- package/dist/run-property-fields.d.ts +12 -0
- package/dist/run-property-schema.d.ts +3 -1
- package/dist/run-style.d.ts +15 -0
- package/dist/save/alt-text.d.ts +4 -0
- package/dist/save/comments.d.ts +3 -0
- package/dist/save/effects.d.ts +2 -1
- package/dist/save/extension-availability.d.ts +3 -0
- package/dist/save/extension-elements.d.ts +26 -0
- package/dist/save/index.d.ts +6 -1
- package/dist/save/insertion.d.ts +6 -5
- package/dist/save/layout-properties.d.ts +4 -0
- package/dist/save/master-properties.d.ts +5 -0
- package/dist/save/paragraph-overrides.d.ts +3 -0
- package/dist/save/slide-parts.d.ts +1 -0
- package/dist/save/table.d.ts +2 -0
- package/dist/save/xfrm.d.ts +8 -2
- package/dist/save.js +493 -498
- package/dist/sections.d.ts +8 -0
- package/dist/session-assets.d.ts +4 -0
- package/dist/slide-parts-D0o_DDhi.js +1331 -0
- package/dist/slide-size.d.ts +6 -0
- package/dist/smartart/drawing.d.ts +3 -0
- package/dist/smartart/index.d.ts +16 -0
- package/dist/smartart/model.d.ts +18 -0
- package/dist/smartart/save.d.ts +3 -0
- package/dist/smartart.js +604 -0
- package/dist/source-retention.d.ts +7 -0
- package/dist/space.d.ts +37 -0
- package/dist/table-cell.d.ts +7 -1
- package/dist/table-grid-projection.d.ts +6 -0
- package/dist/table-grid.d.ts +45 -0
- package/dist/table-invariants.d.ts +4 -0
- package/dist/table-rows.d.ts +2 -1
- package/dist/table-scale.d.ts +4 -0
- package/dist/table-style.d.ts +5 -4
- package/dist/templates/index.d.ts +4 -0
- package/dist/templates/recipes.d.ts +5 -0
- package/dist/templates/types.d.ts +17 -0
- package/dist/templates.js +543 -0
- package/dist/text-flatten.d.ts +6 -0
- package/dist/text-fragment.d.ts +5 -0
- package/dist/text-model.d.ts +8 -8
- package/dist/text-override-validation.d.ts +6 -2
- package/dist/text-selection.d.ts +4 -0
- package/dist/theme-projection.d.ts +8 -0
- package/dist/theme-xml.d.ts +3 -0
- package/dist/theme.d.ts +14 -0
- package/dist/types.d.ts +174 -8
- package/dist/xml/index.d.ts +1 -1
- package/dist/xml/nodes.d.ts +2 -2
- package/dist/xml/shape-ids.d.ts +3 -0
- package/dist/xml.js +19 -16
- package/package.json +79 -5
- package/schemas/describe.schema.json +479 -0
- package/schemas/lint.schema.json +145 -0
- package/dist/document-B1jjN-QB.js +0 -274
- package/dist/image-resource-DbgJS9n-.js +0 -24
- package/dist/index-D2JizcOQ.js +0 -706
- package/dist/insertion-CGpb504L.js +0 -6152
- package/dist/table-style-part-DBtpxmuo.js +0 -1042
package/dist/generate.js
CHANGED
|
@@ -1,100 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as
|
|
3
|
-
import { TEXT_RUN_DIRECT_BITS as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
function
|
|
9
|
-
const r =
|
|
10
|
-
if (!
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
if (!
|
|
1
|
+
import { am as lt, b as V, at as me, S as Ge, au as ct, ad as He, ae as Ue, av as Ee, g as Xe, h as pt, aw as mt, n as ut, a5 as dt, ax as ye, ay as ft, w as ue, Y as ht, az as gt, aA as xt, aB as $t, aC as yt, aD as we, o as wt, x as bt, a3 as vt, af as St, r as Y, a as Ce, aE as It, aF as Pt, l as Et, aG as Ct, aH as Tt, aI as qe, aJ as kt, y as Mt, A as Ft, aK as Lt, aL as Ot, aM as Te, q as Nt, s as Rt, aN as At, aO as jt, d as Dt, aP as ke, aQ as _t, an as Bt, aR as zt, aS as Gt, aT as Me, aU as Fe, R as Ht, v as Ut } from "./model-invariants-BM19JVxy.js";
|
|
2
|
+
import { c as We, d as Xt } from "./patch-BwhfBbYE.js";
|
|
3
|
+
import { TEXT_RUN_DIRECT_BITS as J, PARAGRAPH_LAYOUT_DIRECT_BITS as qt, THEME_COLOR_SLOTS as Wt } from "@web-ppt/core";
|
|
4
|
+
import { c as Le, m as Vt, s as Yt, i as Qt, a as Kt } from "./clipboard-links-GuPtqr1z.js";
|
|
5
|
+
import { P as H, D as _, s as G, g as Oe, d as Zt, p as R, h as Ve, t as Ye, O as ve, a as Q, x as ee, i as K, c as se, b as ne, X as Jt, r as Ne, k as er } from "./index-C2r7c6G6.js";
|
|
6
|
+
import { i as Qe, f as le, v as tr, s as rr, u as sr, m as nr, x as ar, k as or, y as ir, b as lr } from "./slide-parts-D0o_DDhi.js";
|
|
7
|
+
import { copyElements as Re } from "@web-ppt/edit-core";
|
|
8
|
+
function Ke(e, t, s, n) {
|
|
9
|
+
const r = lt(e, s);
|
|
10
|
+
if (!r) return;
|
|
11
|
+
if (r.kind === "external" || r.kind === "slide") return r;
|
|
12
|
+
if (r.kind === "unsupported") throw new Error(`${n} 的来源链接无法生成`);
|
|
13
|
+
const a = e.slideOrder.indexOf(t), o = r.action === "first" ? 0 : r.action === "last" ? e.slideOrder.length - 1 : r.action === "next" ? Math.min(a + 1, e.slideOrder.length - 1) : Math.max(a - 1, 0), i = e.slideOrder[o];
|
|
14
|
+
return i ? { kind: "slide", slideId: i } : void 0;
|
|
15
|
+
}
|
|
16
|
+
const cr = "http://schemas.microsoft.com/office/2007/relationships/media", pr = "http://schemas.microsoft.com/office/powerpoint/2010/main";
|
|
17
|
+
function mr(e, t, s, n = !1) {
|
|
18
|
+
return `<a:${e}File${t ? ` r:link="${t}"` : ""}/>` + (s ? `<p:extLst><p:ext uri="{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}"><p14:media r:${n ? "link" : "embed"}="${s}"/></p:ext></p:extLst>` : "");
|
|
19
|
+
}
|
|
20
|
+
const ur = /[A-Za-z]|[-+]?(?:\d*\.?\d+)(?:e[-+]?\d+)?/gi;
|
|
21
|
+
function te(e, t) {
|
|
22
|
+
const s = Math.round(e * 9525);
|
|
23
|
+
if (!Number.isSafeInteger(s)) throw new Error(`自定义几何 ${t} 超出 OOXML 安全整数范围`);
|
|
24
|
+
return String(s);
|
|
25
|
+
}
|
|
26
|
+
function z(e, t, s) {
|
|
27
|
+
const n = Number(e[t]), r = Number(e[t + 1]);
|
|
28
|
+
if (!Number.isFinite(n) || !Number.isFinite(r)) throw new Error(`自定义几何 ${s} 坐标无效`);
|
|
29
|
+
return [n, r];
|
|
30
|
+
}
|
|
31
|
+
const ce = ([e, t], s) => `<a:pt x="${te(e, `${s}.x`)}" y="${te(t, `${s}.y`)}"/>`;
|
|
32
|
+
function Ae(e, t) {
|
|
33
|
+
const s = Math.round(e * 180 * 6e4 / Math.PI);
|
|
34
|
+
if (!Number.isSafeInteger(s)) throw new Error(`自定义几何 ${t} 角度无效`);
|
|
35
|
+
return String(s);
|
|
36
|
+
}
|
|
37
|
+
function dr(e, t, s) {
|
|
38
|
+
if (!s) throw new Error("生成保存的自定义圆弧缺少起点");
|
|
39
|
+
let n = Math.abs(Number(e[t])), r = Math.abs(Number(e[t + 1]));
|
|
40
|
+
const a = Number(e[t + 2]), o = Number(e[t + 3]), i = Number(e[t + 4]), c = z(e, t + 5, "A");
|
|
41
|
+
if (![n, r, a, o, i].every(Number.isFinite) || o !== 0 && o !== 1 || i !== 0 && i !== 1)
|
|
29
42
|
throw new Error("自定义几何 A 参数无效");
|
|
30
|
-
if (Math.abs(
|
|
31
|
-
if (
|
|
32
|
-
return { markup: `<a:lnTo>${
|
|
33
|
-
const [
|
|
34
|
-
if (
|
|
35
|
-
const
|
|
36
|
-
if (
|
|
37
|
-
const
|
|
38
|
-
|
|
43
|
+
if (Math.abs(a) > 1e-9) throw new Error("生成保存不支持旋转椭圆的自定义圆弧");
|
|
44
|
+
if (n === 0 || r === 0)
|
|
45
|
+
return { markup: `<a:lnTo>${ce(c, "A")}</a:lnTo>`, target: c };
|
|
46
|
+
const [l, m] = s, [d, u] = c;
|
|
47
|
+
if (l === d && m === u) return { markup: "", target: c };
|
|
48
|
+
const p = (l - d) / 2, f = (m - u) / 2, y = p * p / (n * n) + f * f / (r * r);
|
|
49
|
+
if (y > 1) {
|
|
50
|
+
const T = Math.sqrt(y);
|
|
51
|
+
n *= T, r *= T;
|
|
39
52
|
}
|
|
40
|
-
const
|
|
41
|
-
let
|
|
42
|
-
return
|
|
43
|
-
markup: `<a:arcTo wR="${
|
|
53
|
+
const $ = n * n, x = r * r, h = $ * f * f + x * p * p, g = Math.max(0, $ * x - h), M = h === 0 ? 0 : (o === i ? -1 : 1) * Math.sqrt(g / h), S = (l + d) / 2 + M * (n * f / r), C = (m + u) / 2 - M * (r * p / n), E = Math.atan2((m - C) / r, (l - S) / n);
|
|
54
|
+
let v = Math.atan2((u - C) / r, (d - S) / n) - E;
|
|
55
|
+
return i === 1 && v < 0 && (v += Math.PI * 2), i === 0 && v > 0 && (v -= Math.PI * 2), {
|
|
56
|
+
markup: `<a:arcTo wR="${te(n, "A.rx")}" hR="${te(r, "A.ry")}" stAng="${Ae(E, "A.start")}" swAng="${Ae(v, "A.sweep")}"/>`,
|
|
44
57
|
target: c
|
|
45
58
|
};
|
|
46
59
|
}
|
|
47
|
-
function
|
|
48
|
-
const
|
|
49
|
-
let
|
|
50
|
-
for (;
|
|
51
|
-
const d =
|
|
60
|
+
function Ze(e, t, s, n) {
|
|
61
|
+
const r = e.match(ur) ?? [], a = [];
|
|
62
|
+
let o = 0, i = null, c = null;
|
|
63
|
+
for (; o < r.length; ) {
|
|
64
|
+
const d = r[o++];
|
|
52
65
|
if (d === "Z" || d === "z") {
|
|
53
|
-
|
|
66
|
+
a.push("<a:close/>"), i = c;
|
|
54
67
|
continue;
|
|
55
68
|
}
|
|
56
69
|
if (d === "M" || d === "L") {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
70
|
+
const u = z(r, o, d);
|
|
71
|
+
o += 2;
|
|
72
|
+
const p = d === "M" ? "moveTo" : "lnTo";
|
|
73
|
+
a.push(`<a:${p}>${ce(u, d)}</a:${p}>`), i = u, d === "M" && (c = u);
|
|
61
74
|
continue;
|
|
62
75
|
}
|
|
63
76
|
if (d === "C") {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
77
|
+
const u = [
|
|
78
|
+
z(r, o, "C1"),
|
|
79
|
+
z(r, o + 2, "C2"),
|
|
80
|
+
z(r, o + 4, "C3")
|
|
68
81
|
];
|
|
69
|
-
|
|
82
|
+
o += 6, a.push(`<a:cubicBezTo>${u.map((p, f) => ce(p, `C${f + 1}`)).join("")}</a:cubicBezTo>`), i = u[2];
|
|
70
83
|
continue;
|
|
71
84
|
}
|
|
72
85
|
if (d === "Q") {
|
|
73
|
-
const
|
|
74
|
-
|
|
86
|
+
const u = [z(r, o, "Q1"), z(r, o + 2, "Q2")];
|
|
87
|
+
o += 4, a.push(`<a:quadBezTo>${u.map((p, f) => ce(p, `Q${f + 1}`)).join("")}</a:quadBezTo>`), i = u[1];
|
|
75
88
|
continue;
|
|
76
89
|
}
|
|
77
90
|
if (d === "A") {
|
|
78
|
-
const
|
|
79
|
-
|
|
91
|
+
const u = dr(r, o, i);
|
|
92
|
+
o += 7, u.markup && a.push(u.markup), i = u.target;
|
|
80
93
|
continue;
|
|
81
94
|
}
|
|
82
95
|
throw new Error(`生成保存不支持自定义路径命令:${d}`);
|
|
83
96
|
}
|
|
84
|
-
if (!
|
|
85
|
-
const
|
|
97
|
+
if (!a.length) throw new Error("生成保存的自定义路径为空");
|
|
98
|
+
const l = te(t, "width"), m = te(s, "height");
|
|
86
99
|
return `<a:custGeom><a:avLst/><a:gdLst/><a:ahLst/><a:cxnLst/><a:rect l="0" t="0" r="r" b="b"/>
|
|
87
|
-
<a:pathLst><a:path w="${
|
|
88
|
-
}
|
|
89
|
-
function pe(a, t, r, s) {
|
|
90
|
-
const e = de(a, r);
|
|
91
|
-
if (!e) return;
|
|
92
|
-
if (e.kind === "external" || e.kind === "slide") return e;
|
|
93
|
-
if (e.kind === "unsupported") throw new Error(`${s} 的来源链接无法生成`);
|
|
94
|
-
const o = a.slideOrder.indexOf(t), n = e.action === "first" ? 0 : e.action === "last" ? a.slideOrder.length - 1 : e.action === "next" ? Math.min(o + 1, a.slideOrder.length - 1) : Math.max(o - 1, 0), l = a.slideOrder[n];
|
|
95
|
-
return l ? { kind: "slide", slideId: l } : void 0;
|
|
100
|
+
<a:pathLst><a:path w="${l}" h="${m}" fill="${n ? "none" : "norm"}" stroke="1">${a.join("")}</a:path></a:pathLst></a:custGeom>`;
|
|
96
101
|
}
|
|
97
|
-
const
|
|
102
|
+
const fr = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", hr = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", gr = {
|
|
98
103
|
"audio/mpeg": "mp3",
|
|
99
104
|
"audio/mp4": "m4a",
|
|
100
105
|
"audio/wav": "wav",
|
|
@@ -102,105 +107,354 @@ const je = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/
|
|
|
102
107
|
"video/webm": "webm",
|
|
103
108
|
"video/quicktime": "mov"
|
|
104
109
|
};
|
|
105
|
-
function
|
|
110
|
+
function xr(e, t) {
|
|
106
111
|
if (t.src.startsWith("web-ppt-resource:")) {
|
|
107
|
-
const
|
|
108
|
-
if (!
|
|
112
|
+
const r = e.imageResources[t.src.slice(17)];
|
|
113
|
+
if (!r) throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少会话资源`);
|
|
109
114
|
return {
|
|
110
|
-
hash:
|
|
111
|
-
mime:
|
|
112
|
-
extension:
|
|
113
|
-
bytes:
|
|
115
|
+
hash: r.hash,
|
|
116
|
+
mime: r.mime,
|
|
117
|
+
extension: r.extension,
|
|
118
|
+
bytes: r.bytes
|
|
114
119
|
};
|
|
115
120
|
}
|
|
116
|
-
const
|
|
117
|
-
if (
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
120
|
-
const
|
|
121
|
-
return
|
|
122
|
-
hash:
|
|
123
|
-
mime:
|
|
121
|
+
const s = me(e, t.src);
|
|
122
|
+
if (s) return Le(s.bytes, s.mime, "生成图片");
|
|
123
|
+
const n = /^data:([^;,]+)((?:;[^,]*)?),(.*)$/is.exec(t.src);
|
|
124
|
+
if (n) {
|
|
125
|
+
const r = /;base64/i.test(n[2]) ? Ge(n[3]) : new TextEncoder().encode(decodeURIComponent(n[3]));
|
|
126
|
+
return n[1] === "image/svg+xml" ? (ct(r, n[1], "svg", "生成图片", !0), {
|
|
127
|
+
hash: Ue(r),
|
|
128
|
+
mime: n[1],
|
|
124
129
|
extension: "svg",
|
|
125
|
-
bytes:
|
|
126
|
-
}) :
|
|
130
|
+
bytes: He(r)
|
|
131
|
+
}) : Le(r, n[1], "生成图片");
|
|
127
132
|
}
|
|
128
133
|
if (/^https?:\/\//i.test(t.src)) return null;
|
|
129
134
|
throw new Error(`图片 ${t.name ?? t.id ?? ""} 缺少可生成的资源字节`);
|
|
130
135
|
}
|
|
131
|
-
function
|
|
132
|
-
const
|
|
133
|
-
...
|
|
134
|
-
targetPart: `ppt/media/web-ppt-${
|
|
136
|
+
function ae(e, t, s, n) {
|
|
137
|
+
const r = xr(e, t), a = r ? {
|
|
138
|
+
...r,
|
|
139
|
+
targetPart: `ppt/media/web-ppt-${r.hash}.${r.extension}`,
|
|
135
140
|
created: !0
|
|
136
141
|
} : null;
|
|
137
142
|
return {
|
|
138
|
-
resource:
|
|
143
|
+
resource: a,
|
|
139
144
|
relationship: {
|
|
140
|
-
sourceId:
|
|
141
|
-
targetId:
|
|
142
|
-
type:
|
|
143
|
-
target:
|
|
144
|
-
...
|
|
145
|
+
sourceId: s,
|
|
146
|
+
targetId: s,
|
|
147
|
+
type: fr,
|
|
148
|
+
target: a ? V(n, a.targetPart) : t.src,
|
|
149
|
+
...a ? {} : { targetMode: "External" }
|
|
145
150
|
}
|
|
146
151
|
};
|
|
147
152
|
}
|
|
148
|
-
function
|
|
153
|
+
function $r(e, t, s, n) {
|
|
149
154
|
if (!t.src) return {};
|
|
150
|
-
const
|
|
151
|
-
if (!
|
|
155
|
+
const r = me(e, t.src), a = /^data:([^;,]+);base64,(.*)$/is.exec(t.src), o = (r == null ? void 0 : r.bytes) ?? (a ? Ge(a[2]) : null), i = (r == null ? void 0 : r.mime) ?? (a == null ? void 0 : a[1]) ?? t.mime ?? (t.kind === "audio" ? "audio/mpeg" : "video/mp4"), c = `http://schemas.openxmlformats.org/officeDocument/2006/relationships/${t.kind}`;
|
|
156
|
+
if (!o) {
|
|
152
157
|
if (!t.external && !/^https?:\/\//i.test(t.src))
|
|
153
158
|
throw new Error(`媒体 ${t.src} 缺少可生成的资源字节`);
|
|
154
159
|
return { relationship: {
|
|
155
|
-
sourceId:
|
|
156
|
-
targetId:
|
|
160
|
+
sourceId: s,
|
|
161
|
+
targetId: s,
|
|
157
162
|
type: c,
|
|
158
163
|
target: t.src,
|
|
159
164
|
targetMode: "External"
|
|
160
165
|
} };
|
|
161
166
|
}
|
|
162
|
-
const
|
|
163
|
-
hash:
|
|
164
|
-
mime:
|
|
165
|
-
extension:
|
|
166
|
-
bytes:
|
|
167
|
+
const l = Ue(o), m = gr[i] ?? (t.kind === "audio" ? "mp3" : "mp4"), d = {
|
|
168
|
+
hash: l,
|
|
169
|
+
mime: i,
|
|
170
|
+
extension: m,
|
|
171
|
+
bytes: He(o),
|
|
167
172
|
created: !0,
|
|
168
|
-
targetPart: `ppt/media/web-ppt-${
|
|
173
|
+
targetPart: `ppt/media/web-ppt-${l}.${m}`
|
|
169
174
|
};
|
|
170
175
|
return {
|
|
171
176
|
resource: d,
|
|
172
177
|
relationship: {
|
|
173
|
-
sourceId:
|
|
174
|
-
targetId:
|
|
178
|
+
sourceId: s,
|
|
179
|
+
targetId: s,
|
|
175
180
|
type: c,
|
|
176
|
-
target:
|
|
181
|
+
target: V(n, d.targetPart)
|
|
177
182
|
}
|
|
178
183
|
};
|
|
179
184
|
}
|
|
180
|
-
const
|
|
181
|
-
function
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
const fe = (e) => e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
186
|
+
function yr(e, t, s, n) {
|
|
187
|
+
var x;
|
|
188
|
+
const r = t.src;
|
|
189
|
+
if (r.kind !== "image") throw new Error(`元素 ${t.id} 不是图片`);
|
|
190
|
+
const a = r.src ? ae(e, r, `rIdImage${s}`, n) : null, o = r.media ? $r(e, r.media, `rIdMedia${s}`, n) : null, i = o != null && o.relationship ? {
|
|
191
|
+
...o.relationship,
|
|
192
|
+
sourceId: `rIdMediaCompat${s}`,
|
|
193
|
+
targetId: `rIdMediaCompat${s}`,
|
|
194
|
+
type: cr
|
|
195
|
+
} : void 0, c = a != null && a.resource ? "embed" : "link", l = r.alpha === void 0 ? "" : `<a:alphaModFix amt="${Math.round(r.alpha * 1e5)}"/>`, m = fe(r.name ?? `图片 ${s}`), d = r.media ? mr(
|
|
196
|
+
r.media.kind,
|
|
197
|
+
(x = o == null ? void 0 : o.relationship) == null ? void 0 : x.targetId,
|
|
198
|
+
i == null ? void 0 : i.targetId,
|
|
199
|
+
(i == null ? void 0 : i.targetMode) === "External"
|
|
200
|
+
) : "", u = a ? `<a:blip r:${c}="${a.relationship.targetId}">${l}</a:blip>` : "", p = t.meta.geom ? Object.entries(t.meta.geom.adj).map(([h, g]) => {
|
|
201
|
+
if (!Number.isSafeInteger(Math.round(g)))
|
|
186
202
|
throw new Error(`图片 ${t.id} 的几何调整值无效`);
|
|
187
|
-
return `<a:gd name="${
|
|
188
|
-
}).join("") : "",
|
|
203
|
+
return `<a:gd name="${fe(h)}" fmla="val ${Math.round(g)}"/>`;
|
|
204
|
+
}).join("") : "", f = t.meta.geom ? `<a:prstGeom prst="${fe(t.meta.geom.preset)}"><a:avLst>${p}</a:avLst></a:prstGeom>` : r.clipPath ? Ze(r.clipPath, r.w, r.h, !1) : '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom>', y = [a == null ? void 0 : a.relationship, o == null ? void 0 : o.relationship, i].filter((h) => !!h), $ = [a == null ? void 0 : a.resource, o == null ? void 0 : o.resource].filter((h) => !!h);
|
|
189
205
|
return {
|
|
190
|
-
markup: `<p:pic><p:nvPicPr><p:cNvPr id="${
|
|
191
|
-
<p:blipFill>${
|
|
192
|
-
<p:spPr><a:xfrm/>${
|
|
206
|
+
markup: `<p:pic><p:nvPicPr><p:cNvPr id="${s}" name="${m}"/><p:cNvPicPr/><p:nvPr>${d}</p:nvPr></p:nvPicPr>
|
|
207
|
+
<p:blipFill>${u}<a:stretch><a:fillRect/></a:stretch></p:blipFill>
|
|
208
|
+
<p:spPr><a:xfrm/>${f}</p:spPr></p:pic>`,
|
|
193
209
|
namespaces: {
|
|
194
|
-
"xmlns:a":
|
|
195
|
-
"xmlns:p":
|
|
196
|
-
"xmlns:r":
|
|
210
|
+
"xmlns:a": _,
|
|
211
|
+
"xmlns:p": H,
|
|
212
|
+
"xmlns:r": hr,
|
|
213
|
+
...i ? { "xmlns:p14": pr } : {}
|
|
197
214
|
},
|
|
198
|
-
spids: { [String(
|
|
199
|
-
...
|
|
200
|
-
|
|
215
|
+
spids: { [String(s)]: s },
|
|
216
|
+
...y.length ? { relationships: y } : {},
|
|
217
|
+
...$.length ? { resources: $ } : {}
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const Se = (e) => {
|
|
221
|
+
var t;
|
|
222
|
+
return !!(e.field || (t = e.math) != null && t.length || e.outline || e.gradient || e.gradientFill || e.shadow || e.shadowEffect || e.underlineColor);
|
|
223
|
+
};
|
|
224
|
+
function Je(e) {
|
|
225
|
+
var n;
|
|
226
|
+
if ((n = e.generationIssues) != null && n.length) throw new Error(`文字来源语义无法重建:${e.generationIssues.join("、")}`);
|
|
227
|
+
if (e.gradient && !e.gradientFill) throw new Error("文字渐变缺少 gradientFill 结构值");
|
|
228
|
+
if (e.shadow && !e.shadowEffect) throw new Error("文字阴影缺少 shadowEffect 结构值");
|
|
229
|
+
const t = e.gradientFill;
|
|
230
|
+
if (t && (!Number.isFinite(t.angle) || t.angle < 0 || t.angle >= 360 || t.stops.length < 2 || t.stops.some((r) => !Number.isFinite(r.pos) || r.pos < 0 || r.pos > 1)))
|
|
231
|
+
throw new Error("文字渐变角度或色标无效");
|
|
232
|
+
if (t && e.gradient) {
|
|
233
|
+
const r = `linear-gradient(${Math.round(t.angle + 90)}deg,${t.stops.map((a) => `${a.color} ${Math.round(a.pos * 100)}%`).join(",")})`;
|
|
234
|
+
if (e.gradient !== r) throw new Error("文字渐变 CSS 与结构值不一致");
|
|
235
|
+
}
|
|
236
|
+
if (e.outline && (!Number.isFinite(e.outline.width) || e.outline.width < 0)) throw new Error("文字描边宽度无效");
|
|
237
|
+
const s = e.shadowEffect;
|
|
238
|
+
if (s && (s.inner || ![s.dx, s.dy, s.blur].every(Number.isFinite) || s.blur < 0))
|
|
239
|
+
throw new Error("文字仅支持有效的外阴影");
|
|
240
|
+
if (s && e.shadow && e.shadow !== `${s.dx}px ${s.dy}px ${s.blur}px ${s.color}`)
|
|
241
|
+
throw new Error("文字阴影 CSS 与结构值不一致");
|
|
242
|
+
}
|
|
243
|
+
function wr(e, t) {
|
|
244
|
+
Je(t);
|
|
245
|
+
const s = (n, r) => {
|
|
246
|
+
const a = ut(n, _, r);
|
|
247
|
+
return Zt(n, a), a;
|
|
201
248
|
};
|
|
249
|
+
if (t.outline) {
|
|
250
|
+
const n = s(e, "ln");
|
|
251
|
+
G(n, "w", String(Math.round(t.outline.width * 9525))), Ee(s(n, "solidFill"), t.outline.color);
|
|
252
|
+
}
|
|
253
|
+
if (t.gradientFill) {
|
|
254
|
+
Xe(e), pt(e, { type: "gradient", ...t.gradientFill });
|
|
255
|
+
const n = Oe(e, { localName: "gradFill" });
|
|
256
|
+
G(Oe(n, { localName: "lin" }), "scaled", t.gradientFill.scaled ? "1" : "0");
|
|
257
|
+
}
|
|
258
|
+
t.shadowEffect && mt(s(e, "effectLst"), t.shadowEffect), t.underlineColor && Ee(s(s(e, "uFill"), "solidFill"), t.underlineColor);
|
|
259
|
+
}
|
|
260
|
+
function br(e, t, s, n) {
|
|
261
|
+
var o, i;
|
|
262
|
+
const r = (o = t.editInfo) == null ? void 0 : o.bullet, a = r && r.kind !== "none" ? {
|
|
263
|
+
...r.color !== void 0 ? { color: r.color } : {},
|
|
264
|
+
...r.font !== void 0 ? { font: r.font } : {},
|
|
265
|
+
...r.size !== void 0 ? { size: r.size } : {}
|
|
266
|
+
} : {};
|
|
267
|
+
if (t.bulletImage || (r == null ? void 0 : r.kind) === "image") {
|
|
268
|
+
const c = t.bulletImage ?? ((r == null ? void 0 : r.kind) === "image" ? r.src : null);
|
|
269
|
+
if (!c) throw new Error("生成保存的图片项目符号缺少资源来源");
|
|
270
|
+
const l = ae(
|
|
271
|
+
e,
|
|
272
|
+
{ src: c },
|
|
273
|
+
`${n.relationshipPrefix}P${s + 1}`,
|
|
274
|
+
n.part
|
|
275
|
+
);
|
|
276
|
+
if (!l.resource) throw new Error("外链图片项目符号不能生成独立包");
|
|
277
|
+
n.resources.set(l.resource.hash, l.resource);
|
|
278
|
+
const m = ye(l.resource.hash);
|
|
279
|
+
return {
|
|
280
|
+
bullet: { kind: "blip", image: { src: m }, ...a },
|
|
281
|
+
image: { src: m, relationships: [l.relationship], resourceHash: l.resource.hash }
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
return (r == null ? void 0 : r.kind) === "autoNum" ? {
|
|
285
|
+
bullet: {
|
|
286
|
+
kind: "autoNum",
|
|
287
|
+
type: r.type,
|
|
288
|
+
startAt: r.startAt,
|
|
289
|
+
...a
|
|
290
|
+
}
|
|
291
|
+
} : (r == null ? void 0 : r.kind) === "char" ? { bullet: { kind: "char", char: r.char, ...a } } : t.bullet !== null ? {
|
|
292
|
+
bullet: { kind: "char", char: t.bullet, ...a }
|
|
293
|
+
} : (i = t.editInfo) != null && i.directLayout && t.editInfo.directLayout & qt.bullet ? { bullet: { kind: "none" } } : {};
|
|
294
|
+
}
|
|
295
|
+
function je(e, t, s, n, r = !1) {
|
|
296
|
+
if (!s) return;
|
|
297
|
+
for (const i of s.paragraphs)
|
|
298
|
+
for (const c of i.runs)
|
|
299
|
+
Je(c);
|
|
300
|
+
const a = dt(s), o = s.autoFitShape ? "shape" : s.autoFitNormal ? "normal" : "none";
|
|
301
|
+
return {
|
|
302
|
+
...a,
|
|
303
|
+
bodyOverrides: {
|
|
304
|
+
anchor: s.anchor,
|
|
305
|
+
insets: s.insets,
|
|
306
|
+
wrap: s.wrap,
|
|
307
|
+
vert: s.vert ?? "horz",
|
|
308
|
+
anchorCtr: s.anchorCtr ?? !1,
|
|
309
|
+
columns: s.columns ?? 1,
|
|
310
|
+
columnGap: s.columnGap ?? 0,
|
|
311
|
+
autoFit: o
|
|
312
|
+
},
|
|
313
|
+
paragraphs: a.paragraphs.map((i, c) => {
|
|
314
|
+
const l = br(e, s.paragraphs[c], c, n);
|
|
315
|
+
return {
|
|
316
|
+
...i,
|
|
317
|
+
sourceParagraph: s.paragraphs[c].runs.some((m) => {
|
|
318
|
+
var d;
|
|
319
|
+
return (d = m.math) == null ? void 0 : d.length;
|
|
320
|
+
}) ? c : void 0,
|
|
321
|
+
paragraphOverrides: {
|
|
322
|
+
align: i.props.align,
|
|
323
|
+
lineHeight: i.props.lineHeight,
|
|
324
|
+
spaceBefore: i.props.spaceBefore,
|
|
325
|
+
spaceAfter: i.props.spaceAfter,
|
|
326
|
+
marginLeft: i.props.marL,
|
|
327
|
+
indent: i.props.indent,
|
|
328
|
+
...l.bullet ? { bullet: l.bullet } : {}
|
|
329
|
+
},
|
|
330
|
+
...l.image ? { bulletImageOverride: l.image } : {},
|
|
331
|
+
marks: i.marks.map((m, d) => {
|
|
332
|
+
var h, g;
|
|
333
|
+
const u = s.paragraphs[c], p = u == null ? void 0 : u.runs[d], f = (((h = u == null ? void 0 : u.editInfo) == null ? void 0 : h.directRun) ?? 0) | (((g = p == null ? void 0 : p.editInfo) == null ? void 0 : g.direct) ?? 0), y = m.props.underline ?? (m.props.u ? "sng" : "none"), $ = m.props.strikeType ?? (m.props.strike ? "sngStrike" : "noStrike"), x = !!p && Se(p);
|
|
334
|
+
return {
|
|
335
|
+
...m,
|
|
336
|
+
source: x ? { paragraph: c, run: d } : void 0,
|
|
337
|
+
preserveSource: x ? !0 : void 0,
|
|
338
|
+
// 生成包不再拥有原主题继承链;表样式控制的 b/color 只有真实直设才固定。
|
|
339
|
+
runOverrides: {
|
|
340
|
+
size: m.props.size,
|
|
341
|
+
...!r || f & J.b ? { b: m.props.b } : {},
|
|
342
|
+
...r && f & J.color && !m.props.gradientFill ? { color: m.props.color } : {},
|
|
343
|
+
i: m.props.i,
|
|
344
|
+
...y !== "none" ? { underline: y } : {},
|
|
345
|
+
...$ !== "noStrike" ? { strikeType: $ } : {},
|
|
346
|
+
...m.props.highlight ? { highlight: m.props.highlight } : {},
|
|
347
|
+
...m.props.spacing ? { spacing: m.props.spacing } : {},
|
|
348
|
+
...m.props.caps && m.props.caps !== "none" ? { caps: m.props.caps } : {},
|
|
349
|
+
...m.props.baseline ? { baseline: m.props.baseline } : {},
|
|
350
|
+
...m.props.link ? { link: Ke(e, t, m.props.link, "文字链接") } : {}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
})
|
|
354
|
+
};
|
|
355
|
+
})
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
const vr = new Set(`textNoShape textPlain textStop textTriangle textTriangleInverted
|
|
359
|
+
textChevron textChevronInverted textRingInside textRingOutside textArchUp textArchDown
|
|
360
|
+
textCircle textButton textArchUpPour textArchDownPour textCirclePour textButtonPour
|
|
361
|
+
textCurveUp textCurveDown textCanUp textCanDown textWave1 textWave2 textDoubleWave1 textWave4
|
|
362
|
+
textInflate textDeflate textInflateBottom textDeflateBottom textInflateTop textDeflateTop
|
|
363
|
+
textDeflateInflate textDeflateInflateDeflate textFadeRight textFadeLeft textFadeUp textFadeDown
|
|
364
|
+
textSlantUp textSlantDown textCascadeUp textCascadeDown`.split(/\s+/));
|
|
365
|
+
function Sr(e) {
|
|
366
|
+
var s;
|
|
367
|
+
if (!e) return "";
|
|
368
|
+
if ((s = e.generationIssues) != null && s.length) throw new Error(e.generationIssues.join("、"));
|
|
369
|
+
if (!vr.has(e.preset) || Object.entries(e.adj).some(([n, r]) => !/^[A-Za-z][\w]*$/.test(n) || !Number.isSafeInteger(r)))
|
|
370
|
+
throw new Error("艺术字预设或调整值无效");
|
|
371
|
+
const t = Object.entries(e.adj).map(([n, r]) => `<a:gd name="${n}" fmla="val ${r}"/>`).join("");
|
|
372
|
+
return `<a:prstTxWarp prst="${e.preset}"><a:avLst>${t}</a:avLst></a:prstTxWarp>`;
|
|
373
|
+
}
|
|
374
|
+
const et = (e) => e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">"), F = (e, t) => `<m:${e} m:val="${et(t)}"/>`;
|
|
375
|
+
function tt(e, t = 0) {
|
|
376
|
+
if (t > 14) throw new Error("公式嵌套超出可往返深度");
|
|
377
|
+
const s = (n, r) => `<m:${n}>${tt(r, t + 1)}</m:${n}>`;
|
|
378
|
+
return e.map((n) => {
|
|
379
|
+
switch (n.kind) {
|
|
380
|
+
case "run":
|
|
381
|
+
if (n.sty && !["p", "i", "b", "bi"].includes(n.sty)) throw new Error("公式字形样式无效");
|
|
382
|
+
return `<m:r><m:rPr>${F("sty", n.sty ?? "i")}</m:rPr><m:t xml:space="preserve">${et(n.text)}</m:t></m:r>`;
|
|
383
|
+
case "frac":
|
|
384
|
+
if (n.type && !["bar", "noBar", "skw", "lin"].includes(n.type)) throw new Error("分式类型无效");
|
|
385
|
+
return `<m:f><m:fPr>${F("type", n.type ?? "bar")}</m:fPr>${s("num", n.num)}${s("den", n.den)}</m:f>`;
|
|
386
|
+
case "rad":
|
|
387
|
+
return `<m:rad><m:radPr>${F("degHide", n.deg.length ? "0" : "1")}</m:radPr>${s("deg", n.deg)}${s("e", n.base)}</m:rad>`;
|
|
388
|
+
case "script": {
|
|
389
|
+
if (n.sub === void 0 && n.sup === void 0) throw new Error("公式脚标缺少上标或下标");
|
|
390
|
+
const r = n.sub !== void 0 && n.sup !== void 0 ? "sSubSup" : n.sub !== void 0 ? "sSub" : "sSup";
|
|
391
|
+
return `<m:${r}>${s("e", n.base)}${n.sub !== void 0 ? s("sub", n.sub) : ""}${n.sup !== void 0 ? s("sup", n.sup) : ""}</m:${r}>`;
|
|
392
|
+
}
|
|
393
|
+
case "nary":
|
|
394
|
+
return `<m:nary><m:naryPr>${F("chr", n.chr)}${F("limLoc", n.underOver ? "undOvr" : "subSup")}${F("subHide", n.sub.length ? "0" : "1")}${F("supHide", n.sup.length ? "0" : "1")}</m:naryPr>${s("sub", n.sub)}${s("sup", n.sup)}${s("e", n.base)}</m:nary>`;
|
|
395
|
+
case "delim":
|
|
396
|
+
return `<m:d><m:dPr>${F("begChr", n.beg)}${F("endChr", n.end)}${F("sepChr", n.sep)}</m:dPr>${n.items.map((r) => s("e", r)).join("")}</m:d>`;
|
|
397
|
+
case "matrix":
|
|
398
|
+
if (!n.rows.length || !n.rows[0].length || n.rows.some((r) => r.length !== n.rows[0].length)) throw new Error("公式矩阵必须为非空矩形");
|
|
399
|
+
return `<m:m>${n.rows.map((r) => `<m:mr>${r.map((a) => s("e", a)).join("")}</m:mr>`).join("")}</m:m>`;
|
|
400
|
+
case "acc": {
|
|
401
|
+
const r = n.chr === "̅", a = r ? "bar" : n.below !== void 0 ? "groupChr" : "acc";
|
|
402
|
+
return `<m:${a}><m:${a}Pr>${r ? "" : F("chr", n.chr)}${a !== "acc" ? F("pos", n.below ? "bot" : "top") : ""}</m:${a}Pr>${s("e", n.base)}</m:${a}>`;
|
|
403
|
+
}
|
|
404
|
+
case "lim": {
|
|
405
|
+
const r = n.below ? "limLow" : "limUpp";
|
|
406
|
+
return `<m:${r}>${s("e", n.base)}${s("lim", n.limit)}</m:${r}>`;
|
|
407
|
+
}
|
|
408
|
+
case "stack":
|
|
409
|
+
return `<m:eqArr>${n.rows.map((r) => s("e", r)).join("")}</m:eqArr>`;
|
|
410
|
+
default:
|
|
411
|
+
throw new Error(`不支持的公式节点:${String(n.kind)}`);
|
|
412
|
+
}
|
|
413
|
+
}).join("");
|
|
414
|
+
}
|
|
415
|
+
const De = (e) => e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
416
|
+
function Ir(e, t, s, n) {
|
|
417
|
+
const r = `${e}:${t}:${s}:${n}`;
|
|
418
|
+
let a = 2166136261, o = 2654435769;
|
|
419
|
+
for (let l = 0; l < r.length; l++)
|
|
420
|
+
a = Math.imul(a ^ r.charCodeAt(l), 16777619) >>> 0, o = Math.imul(o ^ r.charCodeAt(l), 2246822507) >>> 0;
|
|
421
|
+
const i = a.toString(16).padStart(8, "0"), c = o.toString(16).padStart(8, "0");
|
|
422
|
+
return `{00000000-0000-0000-${i.slice(0, 4)}-${i.slice(4)}${c}}`.toUpperCase();
|
|
423
|
+
}
|
|
424
|
+
function Pr(e, t) {
|
|
425
|
+
var a, o;
|
|
426
|
+
const s = R(`<a:rPr xmlns:a="${_}"/>`).root, { text: n, ...r } = e;
|
|
427
|
+
if (ft(s, { to: e.text.length, props: r }), wr(s, e), t) {
|
|
428
|
+
const i = (((a = t.editInfo) == null ? void 0 : a.directRun) ?? 0) | (((o = e.editInfo) == null ? void 0 : o.direct) ?? 0);
|
|
429
|
+
i & J.b || Ve(s, "b"), !(i & J.color) && !e.gradientFill && Xe(s);
|
|
430
|
+
}
|
|
431
|
+
return Ye(s);
|
|
202
432
|
}
|
|
203
|
-
|
|
433
|
+
function rt(e, t, s, n = "p", r = !1) {
|
|
434
|
+
const a = e.paragraphs.map((o, i) => {
|
|
435
|
+
const c = (p) => Pr(p, r ? o : void 0), l = o.runs.filter((p) => {
|
|
436
|
+
var f;
|
|
437
|
+
return (f = p.math) == null ? void 0 : f.length;
|
|
438
|
+
}).map(c);
|
|
439
|
+
if (l.some((p) => p !== l[0]))
|
|
440
|
+
throw new Error(`段落 ${i + 1} 的公式需要不同字符属性,当前不能共用段落默认值`);
|
|
441
|
+
const m = o.runs.map((p, f) => {
|
|
442
|
+
var x;
|
|
443
|
+
const y = De(p.text);
|
|
444
|
+
if ((x = p.math) != null && x.length) {
|
|
445
|
+
const h = `<m:oMath xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">${tt(p.math)}</m:oMath>`;
|
|
446
|
+
return `<a14:m xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main">${o.runs.length === 1 ? `<m:oMathPara xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">${h}</m:oMathPara>` : h}</a14:m>`;
|
|
447
|
+
}
|
|
448
|
+
return p.field ? `<a:fld id="${Ir(t, s, i, f)}" type="${De(p.field)}">${c(p)}<a:t>${y}</a:t></a:fld>` : `<a:r>${Se(p) ? c(p) : ""}<a:t>${y}</a:t></a:r>`;
|
|
449
|
+
}).join(""), d = o.runs.find((p) => {
|
|
450
|
+
var f;
|
|
451
|
+
return (f = p.math) == null ? void 0 : f.length;
|
|
452
|
+
});
|
|
453
|
+
return `<a:p>${d ? `<a:pPr lvl="${o.lvl}" rtl="${o.rtl ? "1" : "0"}">${c(d).replace(/a:rPr/g, "a:defRPr")}</a:pPr>` : ""}${m}<a:endParaRPr/></a:p>`;
|
|
454
|
+
}).join("");
|
|
455
|
+
return `<${n}:txBody><a:bodyPr>${Sr(e.warp)}</a:bodyPr><a:lstStyle/>${a}</${n}:txBody>`;
|
|
456
|
+
}
|
|
457
|
+
const _e = (e) => e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<"), Er = {
|
|
204
458
|
anchor: "top",
|
|
205
459
|
insets: [4.8, 9.6, 4.8, 9.6],
|
|
206
460
|
wrap: !0,
|
|
@@ -226,130 +480,149 @@ const J = (a) => a.replace(/&/g, "&").replace(/"/g, """).replace(/</g,
|
|
|
226
480
|
}]
|
|
227
481
|
}]
|
|
228
482
|
};
|
|
229
|
-
function
|
|
230
|
-
var
|
|
231
|
-
for (let
|
|
232
|
-
for (let
|
|
233
|
-
const
|
|
234
|
-
if (!(
|
|
483
|
+
function Cr(e, t, s) {
|
|
484
|
+
var n;
|
|
485
|
+
for (let r = 0; r <= t; r++)
|
|
486
|
+
for (let a = 0; a <= s; a++) {
|
|
487
|
+
const o = (n = e[r]) == null ? void 0 : n.cells[a];
|
|
488
|
+
if (!(o != null && o.merged) && r + o.rowSpan > t && a + o.colSpan > s) return { row: r, column: a };
|
|
235
489
|
}
|
|
236
490
|
return null;
|
|
237
491
|
}
|
|
238
|
-
function
|
|
239
|
-
var
|
|
240
|
-
const
|
|
241
|
-
if (!
|
|
242
|
-
|
|
492
|
+
function Tr(e, t, s, n) {
|
|
493
|
+
var p, f, y, $, x, h;
|
|
494
|
+
const r = e[t].cells[s], a = [];
|
|
495
|
+
if (!r.merged)
|
|
496
|
+
r.colSpan > 1 && a.push(`gridSpan="${r.colSpan}"`), r.rowSpan > 1 && a.push(`rowSpan="${r.rowSpan}"`);
|
|
243
497
|
else {
|
|
244
|
-
const
|
|
245
|
-
if (!
|
|
246
|
-
|
|
498
|
+
const g = Cr(e, t, s);
|
|
499
|
+
if (!g) throw new Error(`表格合并占位格缺少起始格:${t},${s}`);
|
|
500
|
+
s > g.column && a.push('hMerge="1"'), t > g.row && a.push('vMerge="1"');
|
|
247
501
|
}
|
|
248
|
-
const
|
|
249
|
-
...
|
|
250
|
-
fill: structuredClone(
|
|
251
|
-
borders: structuredClone(
|
|
252
|
-
text: structuredClone(
|
|
502
|
+
const o = n ? (p = r.editInfo) == null ? void 0 : p.styleBase : void 0, i = (o == null ? void 0 : o.textTemplate) ?? (o == null ? void 0 : o.text), c = i == null ? void 0 : i.paragraphs[0], l = c == null ? void 0 : c.runs[0], m = (((f = c == null ? void 0 : c.editInfo) == null ? void 0 : f.directRun) ?? 0) | (((y = l == null ? void 0 : l.editInfo) == null ? void 0 : y.direct) ?? 0), d = o ? {
|
|
503
|
+
...r,
|
|
504
|
+
fill: structuredClone(o.fill),
|
|
505
|
+
borders: structuredClone(o.borders),
|
|
506
|
+
text: structuredClone(o.text),
|
|
253
507
|
editInfo: {
|
|
254
|
-
...
|
|
255
|
-
...
|
|
508
|
+
...r.editInfo,
|
|
509
|
+
...o.textTemplate ? { textTemplate: structuredClone(o.textTemplate) } : {}
|
|
256
510
|
}
|
|
257
|
-
} :
|
|
511
|
+
} : r;
|
|
512
|
+
let u = gt({
|
|
258
513
|
...d,
|
|
259
|
-
...!((
|
|
260
|
-
|
|
261
|
-
l: ((u = e.borders) == null ? void 0 : u.l) === void 0 ? p : e.borders.l,
|
|
262
|
-
r: ((y = e.borders) == null ? void 0 : y.r) === void 0 ? p : e.borders.r,
|
|
263
|
-
t: ((w = e.borders) == null ? void 0 : w.t) === void 0 ? p : e.borders.t,
|
|
264
|
-
b: ((S = e.borders) == null ? void 0 : S.b) === void 0 ? p : e.borders.b
|
|
265
|
-
} }
|
|
266
|
-
}, n ? {
|
|
514
|
+
...!(($ = d.editInfo) != null && $.textTemplate) && !((h = (x = d.text) == null ? void 0 : x.paragraphs[0]) != null && h.runs[0]) ? { editInfo: { textTemplate: Er } } : {}
|
|
515
|
+
}, {
|
|
267
516
|
sparseAppearance: !0,
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
517
|
+
...o ? {
|
|
518
|
+
omitTextBold: !(m & J.b),
|
|
519
|
+
omitTextColor: !(m & J.color)
|
|
520
|
+
} : {}
|
|
521
|
+
});
|
|
522
|
+
return r.text && (r.text.warp || r.text.paragraphs.some((g) => g.runs.some(Se))) && (u = u.replace(
|
|
523
|
+
/<a:txBody>[\s\S]*?<\/a:txBody>/,
|
|
524
|
+
rt(r.text, `table/${t}/${s}`, 1, "a", !!o)
|
|
525
|
+
)), a.length ? u.replace("<a:tc>", `<a:tc ${a.join(" ")}>`) : u;
|
|
526
|
+
}
|
|
527
|
+
function kr(e, t) {
|
|
528
|
+
var m, d;
|
|
529
|
+
const s = e.src;
|
|
530
|
+
if (s.kind !== "table") throw new Error(`元素 ${e.id} 不是表格`);
|
|
531
|
+
const n = s.colWidths.map((u) => `<a:gridCol w="${Math.round(u * 9525)}"/>`).join(""), r = !!((m = s.editInfo) != null && m.tableStyle), a = s.rows.map((u, p) => `<a:tr h="${Math.round(u.height * 9525)}">${u.cells.map((f, y) => Tr(s.rows, p, y, r)).join("")}</a:tr>`).join(""), o = _e(s.name ?? `表格 ${t}`), i = (d = s.editInfo) == null ? void 0 : d.tableStyle, c = i ? [
|
|
278
532
|
"firstRow",
|
|
279
533
|
"lastRow",
|
|
280
534
|
"bandRow",
|
|
281
535
|
"firstCol",
|
|
282
536
|
"lastCol",
|
|
283
537
|
"bandCol"
|
|
284
|
-
].filter((
|
|
538
|
+
].filter((u) => i[u]).map((u) => `${u}="1"`).join(" ") : "", l = i ? `<a:tblPr${c ? ` ${c}` : ""}><a:tableStyleId>${_e(i.styleId)}</a:tableStyleId></a:tblPr>` : "<a:tblPr/>";
|
|
285
539
|
return {
|
|
286
|
-
markup: `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id="${t}" name="${
|
|
540
|
+
markup: `<p:graphicFrame><p:nvGraphicFramePr><p:cNvPr id="${t}" name="${o}"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>
|
|
287
541
|
<p:xfrm/><a:graphic><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table"><a:tbl>
|
|
288
|
-
${
|
|
289
|
-
namespaces: { "xmlns:a":
|
|
542
|
+
${l}<a:tblGrid>${n}</a:tblGrid>${a}</a:tbl></a:graphicData></a:graphic></p:graphicFrame>`,
|
|
543
|
+
namespaces: { "xmlns:a": _, "xmlns:p": H, "xmlns:r": ve },
|
|
290
544
|
spids: { [String(t)]: t }
|
|
291
545
|
};
|
|
292
546
|
}
|
|
293
|
-
function
|
|
294
|
-
var
|
|
547
|
+
function Mr(e) {
|
|
548
|
+
var s;
|
|
295
549
|
const t = /* @__PURE__ */ new Map();
|
|
296
|
-
for (const
|
|
297
|
-
const
|
|
298
|
-
if (!
|
|
299
|
-
const
|
|
300
|
-
if (!
|
|
301
|
-
t.set(
|
|
550
|
+
for (const n of Object.values(e.elements)) {
|
|
551
|
+
const r = n.src.kind === "table" ? (s = ue(e, n.id).editInfo) == null ? void 0 : s.tableStyle : void 0;
|
|
552
|
+
if (!r) continue;
|
|
553
|
+
const a = ht(e, n.id, r.styleId);
|
|
554
|
+
if (!a) throw new Error(`表格 ${n.id} 的样式定义不存在:${r.styleId}`);
|
|
555
|
+
t.set(a.styleId.toUpperCase(), a);
|
|
302
556
|
}
|
|
303
557
|
return [...t.values()];
|
|
304
558
|
}
|
|
305
|
-
const
|
|
306
|
-
`,
|
|
307
|
-
function
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
559
|
+
const D = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
560
|
+
`, q = "http://schemas.openxmlformats.org/drawingml/2006/main", re = "http://schemas.openxmlformats.org/presentationml/2006/main", P = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", Fr = "http://schemas.openxmlformats.org/package/2006/relationships", Lr = "http://schemas.openxmlformats.org/package/2006/content-types", Or = new TextEncoder(), k = (e) => Or.encode(e), W = (e) => e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
561
|
+
function Nr(e, t) {
|
|
562
|
+
var n;
|
|
563
|
+
const s = (n = /^rgb\((\d+),(\d+),(\d+)\)$/.exec(e)) == null ? void 0 : n.slice(1).map(Number);
|
|
564
|
+
if (!s || s.some((r) => r < 0 || r > 255))
|
|
565
|
+
throw new Error(`${t} 不是有效主题颜色`);
|
|
566
|
+
return s.map((r) => r.toString(16).padStart(2, "0")).join("").toUpperCase();
|
|
567
|
+
}
|
|
568
|
+
function Rr(e) {
|
|
569
|
+
return e ? Wt.map((t) => `<a:${t}><a:srgbClr val="${Nr(e.colors[t], `主题 ${t}`)}"/></a:${t}>`).join("") : `<a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1>
|
|
570
|
+
<a:dk2><a:srgbClr val="1F3864"/></a:dk2><a:lt2><a:srgbClr val="F2F2F2"/></a:lt2>
|
|
571
|
+
<a:accent1><a:srgbClr val="4472C4"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2>
|
|
572
|
+
<a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4>
|
|
573
|
+
<a:accent5><a:srgbClr val="5B9BD5"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6>
|
|
574
|
+
<a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink>`;
|
|
575
|
+
}
|
|
576
|
+
function Be(e) {
|
|
577
|
+
const t = `<a:latin typeface="${W(e.latin)}"/><a:ea typeface="${W(e.ea)}"/><a:cs typeface="${W(e.cs)}"/>`, s = Object.entries(e.scripts).sort(([n], [r]) => n < r ? -1 : n > r ? 1 : 0).map(([n, r]) => `<a:font script="${W(n)}" typeface="${W(r)}"/>`).join("");
|
|
578
|
+
return t + s;
|
|
311
579
|
}
|
|
312
|
-
|
|
580
|
+
function N(e, t) {
|
|
581
|
+
const s = Math.round(e * 9525);
|
|
582
|
+
if (!Number.isSafeInteger(s)) throw new Error(`${t} 超出 OOXML 安全整数范围`);
|
|
583
|
+
return String(s);
|
|
584
|
+
}
|
|
585
|
+
const X = (e) => `${D}<Relationships xmlns="${Fr}">${e}</Relationships>`, pe = `<p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
|
|
313
586
|
<p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr>`;
|
|
314
|
-
function
|
|
315
|
-
const
|
|
316
|
-
return `<p:sp><p:nvSpPr><p:cNvPr id="${
|
|
317
|
-
<p:spPr><a:xfrm><a:off x="${
|
|
587
|
+
function oe(e, t, s, n, r) {
|
|
588
|
+
const a = `<p:ph type="${s}"${r === void 0 ? "" : ` idx="${r}"`}/>`;
|
|
589
|
+
return `<p:sp><p:nvSpPr><p:cNvPr id="${e}" name="${t}"/><p:cNvSpPr/><p:nvPr>${a}</p:nvPr></p:nvSpPr>
|
|
590
|
+
<p:spPr><a:xfrm><a:off x="${N(n.x, `${t} x`)}" y="${N(n.y, `${t} y`)}"/><a:ext cx="${N(n.w, `${t} 宽度`)}" cy="${N(n.h, `${t} 高度`)}"/></a:xfrm></p:spPr>
|
|
318
591
|
<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="zh-CN"/></a:p></p:txBody></p:sp>`;
|
|
319
592
|
}
|
|
320
|
-
function
|
|
321
|
-
return `<p:sp><p:nvSpPr><p:cNvPr id="${
|
|
322
|
-
<p:spPr><a:xfrm><a:off x="${
|
|
593
|
+
function Ar(e, t, s) {
|
|
594
|
+
return `<p:sp><p:nvSpPr><p:cNvPr id="${e}" name="页码"/><p:cNvSpPr/><p:nvPr><p:ph type="sldNum" idx="12"/></p:nvPr></p:nvSpPr>
|
|
595
|
+
<p:spPr><a:xfrm><a:off x="${N(s.x, "页码 x")}" y="${N(s.y, "页码 y")}"/><a:ext cx="${N(s.w, "页码宽度")}" cy="${N(s.h, "页码高度")}"/></a:xfrm></p:spPr>
|
|
323
596
|
<p:txBody><a:bodyPr anchor="ctr"/><a:lstStyle/><a:p><a:pPr algn="r"/><a:fld id="{00000000-0000-0000-0000-${String(t).padStart(12, "0")}}" type="slidenum"><a:rPr lang="zh-CN" sz="1100"/><a:t>1</a:t></a:fld><a:endParaRPr lang="zh-CN" sz="1100"/></a:p></p:txBody></p:sp>`;
|
|
324
597
|
}
|
|
325
|
-
function
|
|
326
|
-
const
|
|
327
|
-
x:
|
|
328
|
-
y:
|
|
329
|
-
w: c *
|
|
330
|
-
h:
|
|
331
|
-
}),
|
|
598
|
+
function jr(e, t) {
|
|
599
|
+
const s = e / 1280, n = t / 720, r = (o, i, c, l) => ({
|
|
600
|
+
x: o * s,
|
|
601
|
+
y: i * n,
|
|
602
|
+
w: c * s,
|
|
603
|
+
h: l * n
|
|
604
|
+
}), a = (o, i) => Ar(o, i, r(1120, 662, 96, 34));
|
|
332
605
|
return [
|
|
333
606
|
{
|
|
334
607
|
part: 1,
|
|
335
608
|
type: "title",
|
|
336
609
|
name: "标题页",
|
|
337
|
-
shapes:
|
|
610
|
+
shapes: oe(2, "标题", "ctrTitle", r(120, 196, 1040, 154)) + oe(3, "副标题", "subTitle", r(200, 374, 880, 92), 1) + a(4, 1)
|
|
338
611
|
},
|
|
339
612
|
{
|
|
340
613
|
part: 2,
|
|
341
614
|
type: "obj",
|
|
342
615
|
name: "标题和内容",
|
|
343
|
-
shapes:
|
|
616
|
+
shapes: oe(2, "标题", "title", r(80, 52, 1120, 92)) + oe(3, "内容", "body", r(96, 166, 1088, 446), 1) + a(4, 2)
|
|
344
617
|
},
|
|
345
|
-
{ part: 3, type: "blank", name: "空白", shapes:
|
|
618
|
+
{ part: 3, type: "blank", name: "空白", shapes: a(2, 3) }
|
|
346
619
|
];
|
|
347
620
|
}
|
|
348
|
-
function
|
|
349
|
-
const
|
|
350
|
-
`),
|
|
621
|
+
function st(e, t, s = 0, n = [], r) {
|
|
622
|
+
const a = /* @__PURE__ */ Object.create(null), o = n.some(Boolean), i = Array.from({ length: s }, (p, f) => `<Override PartName="/ppt/slides/slide${f + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/>`).join(`
|
|
623
|
+
`), c = n.map((p, f) => p ? `<Override PartName="/ppt/notesSlides/notesSlide${f + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"/>` : "").filter(Boolean).join(`
|
|
351
624
|
`);
|
|
352
|
-
|
|
625
|
+
a["[Content_Types].xml"] = k(`${D}<Types xmlns="${Lr}">
|
|
353
626
|
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
|
354
627
|
<Default Extension="xml" ContentType="application/xml"/>
|
|
355
628
|
<Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/>
|
|
@@ -358,387 +631,834 @@ function ce(a, t, r = 0, s = []) {
|
|
|
358
631
|
<Override PartName="/ppt/slideLayouts/slideLayout2.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
|
|
359
632
|
<Override PartName="/ppt/slideLayouts/slideLayout3.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"/>
|
|
360
633
|
<Override PartName="/ppt/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
|
|
361
|
-
${
|
|
362
|
-
${
|
|
634
|
+
${i}
|
|
635
|
+
${c}
|
|
363
636
|
${o ? '<Override PartName="/ppt/notesMasters/notesMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml"/>' : ""}
|
|
364
|
-
</Types>`),
|
|
365
|
-
`<Relationship Id="rId1" Type="${
|
|
366
|
-
)),
|
|
637
|
+
</Types>`), a["_rels/.rels"] = k(X(
|
|
638
|
+
`<Relationship Id="rId1" Type="${P}/officeDocument" Target="ppt/presentation.xml"/>`
|
|
639
|
+
)), a["ppt/presentation.xml"] = k(`${D}<p:presentation xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
|
|
367
640
|
<p:sldMasterIdLst><p:sldMasterId id="2147483648" r:id="rId1"/></p:sldMasterIdLst>
|
|
368
|
-
${o ? `<p:notesMasterIdLst><p:notesMasterId r:id="rId${
|
|
369
|
-
<p:sldIdLst>${Array.from({ length:
|
|
370
|
-
<p:sldSz cx="${
|
|
371
|
-
<p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle/></p:presentation>`),
|
|
372
|
-
`<Relationship Id="rId1" Type="${
|
|
373
|
-
))
|
|
374
|
-
<a:
|
|
375
|
-
|
|
376
|
-
<a:
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
<a:
|
|
380
|
-
<a:
|
|
381
|
-
</a:clrScheme><a:fontScheme name="Web PPT">
|
|
382
|
-
<a:majorFont><a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/></a:majorFont>
|
|
383
|
-
<a:minorFont><a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/></a:minorFont>
|
|
641
|
+
${o ? `<p:notesMasterIdLst><p:notesMasterId r:id="rId${s + 2}"/></p:notesMasterIdLst>` : ""}
|
|
642
|
+
<p:sldIdLst>${Array.from({ length: s }, (p, f) => `<p:sldId id="${256 + f}" r:id="rId${f + 2}"/>`).join("")}</p:sldIdLst>
|
|
643
|
+
<p:sldSz cx="${N(e, "页面宽度")}" cy="${N(t, "页面高度")}"/>
|
|
644
|
+
<p:notesSz cx="6858000" cy="9144000"/><p:defaultTextStyle/></p:presentation>`), a["ppt/_rels/presentation.xml.rels"] = k(X(
|
|
645
|
+
`<Relationship Id="rId1" Type="${P}/slideMaster" Target="slideMasters/slideMaster1.xml"/>` + Array.from({ length: s }, (p, f) => `<Relationship Id="rId${f + 2}" Type="${P}/slide" Target="slides/slide${f + 1}.xml"/>`).join("") + (o ? `<Relationship Id="rId${s + 2}" Type="${P}/notesMaster" Target="notesMasters/notesMaster1.xml"/>` : "")
|
|
646
|
+
));
|
|
647
|
+
const l = W((r == null ? void 0 : r.name) ?? "Web PPT"), m = r ? Be(r.fonts.major) : '<a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/>', d = r ? Be(r.fonts.minor) : '<a:latin typeface=""/><a:ea typeface=""/><a:cs typeface=""/>';
|
|
648
|
+
a["ppt/theme/theme1.xml"] = k(`${D}<a:theme xmlns:a="${q}" name="${l}">
|
|
649
|
+
<a:themeElements><a:clrScheme name="${l}">
|
|
650
|
+
${Rr(r)}
|
|
651
|
+
</a:clrScheme><a:fontScheme name="${l}">
|
|
652
|
+
<a:majorFont>${m}</a:majorFont>
|
|
653
|
+
<a:minorFont>${d}</a:minorFont>
|
|
384
654
|
</a:fontScheme><a:fmtScheme name="Web PPT">
|
|
385
655
|
<a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:fillStyleLst>
|
|
386
656
|
<a:lnStyleLst><a:ln w="6350"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:ln><a:ln w="12700"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:ln><a:ln w="19050"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:ln></a:lnStyleLst>
|
|
387
657
|
<a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle></a:effectStyleLst>
|
|
388
658
|
<a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"/></a:solidFill></a:bgFillStyleLst>
|
|
389
|
-
</a:fmtScheme></a:themeElements></a:theme>`),
|
|
390
|
-
<p:cSld><p:bg><p:bgPr><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill><a:effectLst/></p:bgPr></p:bg><p:spTree>${
|
|
659
|
+
</a:fmtScheme></a:themeElements></a:theme>`), a["ppt/slideMasters/slideMaster1.xml"] = k(`${D}<p:sldMaster xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
|
|
660
|
+
<p:cSld><p:bg><p:bgPr><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill><a:effectLst/></p:bgPr></p:bg><p:spTree>${pe}</p:spTree></p:cSld>
|
|
391
661
|
<p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
|
|
392
662
|
<p:sldLayoutIdLst><p:sldLayoutId id="2147483649" r:id="rId1"/><p:sldLayoutId id="2147483650" r:id="rId2"/><p:sldLayoutId id="2147483651" r:id="rId3"/></p:sldLayoutIdLst>
|
|
393
|
-
<p:txStyles><p:titleStyle/><p:bodyStyle/><p:otherStyle/></p:txStyles></p:sldMaster>`),
|
|
394
|
-
`<Relationship Id="rId1" Type="${
|
|
663
|
+
<p:txStyles><p:titleStyle/><p:bodyStyle/><p:otherStyle/></p:txStyles></p:sldMaster>`), a["ppt/slideMasters/_rels/slideMaster1.xml.rels"] = k(X(
|
|
664
|
+
`<Relationship Id="rId1" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout1.xml"/><Relationship Id="rId2" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout2.xml"/><Relationship Id="rId3" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout3.xml"/><Relationship Id="rId4" Type="${P}/theme" Target="../theme/theme1.xml"/>`
|
|
395
665
|
));
|
|
396
|
-
const
|
|
397
|
-
for (const
|
|
398
|
-
|
|
399
|
-
<p:cSld name="${
|
|
400
|
-
<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`),
|
|
401
|
-
`<Relationship Id="rId1" Type="${
|
|
666
|
+
const u = jr(e, t);
|
|
667
|
+
for (const p of u)
|
|
668
|
+
a[`ppt/slideLayouts/slideLayout${p.part}.xml`] = k(`${D}<p:sldLayout xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}" type="${p.type}" showMasterSp="0">
|
|
669
|
+
<p:cSld name="${p.name}"><p:spTree>${pe}${p.shapes}</p:spTree></p:cSld>
|
|
670
|
+
<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`), a[`ppt/slideLayouts/_rels/slideLayout${p.part}.xml.rels`] = k(X(
|
|
671
|
+
`<Relationship Id="rId1" Type="${P}/slideMaster" Target="../slideMasters/slideMaster1.xml"/>`
|
|
402
672
|
));
|
|
403
|
-
o && (
|
|
404
|
-
<p:cSld><p:spTree>${
|
|
673
|
+
o && (a["ppt/notesMasters/notesMaster1.xml"] = k(`${D}<p:notesMaster xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
|
|
674
|
+
<p:cSld><p:spTree>${pe}</p:spTree></p:cSld>
|
|
405
675
|
<p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
|
|
406
|
-
<p:hf/><p:notesStyle/></p:notesMaster>`),
|
|
407
|
-
`<Relationship Id="rId1" Type="${
|
|
676
|
+
<p:hf/><p:notesStyle/></p:notesMaster>`), a["ppt/notesMasters/_rels/notesMaster1.xml.rels"] = k(X(
|
|
677
|
+
`<Relationship Id="rId1" Type="${P}/theme" Target="../theme/theme1.xml"/>`
|
|
408
678
|
)));
|
|
409
|
-
for (let
|
|
410
|
-
|
|
411
|
-
`<Relationship Id="rId1" Type="${
|
|
679
|
+
for (let p = 0; p < s; p++)
|
|
680
|
+
a[`ppt/slides/slide${p + 1}.xml`] = k(nt()), a[`ppt/slides/_rels/slide${p + 1}.xml.rels`] = k(X(
|
|
681
|
+
`<Relationship Id="rId1" Type="${P}/slideLayout" Target="../slideLayouts/slideLayout3.xml"/>`
|
|
412
682
|
));
|
|
413
|
-
return
|
|
683
|
+
return a;
|
|
414
684
|
}
|
|
415
|
-
function
|
|
416
|
-
return `${
|
|
417
|
-
<p:cSld><p:spTree>${
|
|
685
|
+
function nt() {
|
|
686
|
+
return `${D}<p:sld xmlns:a="${q}" xmlns:r="${P}" xmlns:p="${re}">
|
|
687
|
+
<p:cSld><p:spTree>${pe}</p:spTree></p:cSld>
|
|
418
688
|
<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld>`;
|
|
419
689
|
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
for (
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
}
|
|
430
|
-
const
|
|
690
|
+
function Dr(e, t) {
|
|
691
|
+
const s = /* @__PURE__ */ new Set([1]), n = /* @__PURE__ */ new Map();
|
|
692
|
+
let r = 2;
|
|
693
|
+
const a = (o) => {
|
|
694
|
+
const i = e[o].src.id;
|
|
695
|
+
let c = i && Number.isSafeInteger(i) && i > 1 && !s.has(i) ? i : 0;
|
|
696
|
+
for (; !c && s.has(r); ) r++;
|
|
697
|
+
c || (c = r++), s.add(c), n.set(o, c);
|
|
698
|
+
for (const l of e[o].children ?? []) a(l);
|
|
699
|
+
};
|
|
700
|
+
for (const o of t) a(o);
|
|
701
|
+
return n;
|
|
702
|
+
}
|
|
703
|
+
function _r(e, t) {
|
|
704
|
+
const s = /* @__PURE__ */ Object.create(null), n = [];
|
|
705
|
+
let r = 0;
|
|
706
|
+
const a = () => {
|
|
707
|
+
let c;
|
|
708
|
+
do
|
|
709
|
+
c = `${t}-layout-${++r}`;
|
|
710
|
+
while (e.elements[c] || s[c]);
|
|
711
|
+
return c;
|
|
712
|
+
}, o = (c, l, m) => {
|
|
713
|
+
var p, f;
|
|
714
|
+
const d = a(), u = {
|
|
715
|
+
id: d,
|
|
716
|
+
parent: l,
|
|
717
|
+
z: we(m),
|
|
718
|
+
src: structuredClone(c),
|
|
719
|
+
ovr: {},
|
|
720
|
+
meta: {
|
|
721
|
+
editable: "full",
|
|
722
|
+
created: !0,
|
|
723
|
+
...(p = c.editInfo) != null && p.geom ? { geom: structuredClone(c.editInfo.geom) } : {},
|
|
724
|
+
...(f = c.editInfo) != null && f.customGeometry ? { customGeometry: structuredClone(c.editInfo.customGeometry) } : {}
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
return s[d] = u, c.kind === "group" && (u.children = c.children.map((y, $) => o(y, d, $))), d;
|
|
728
|
+
};
|
|
729
|
+
xt(e, t) && $t(e, t, (l) => ue(e, l)).filter((l) => {
|
|
730
|
+
var m;
|
|
731
|
+
return !((m = l.editInfo) != null && m.placeholder);
|
|
732
|
+
}).forEach((l, m) => n.push(o(l, t, m)));
|
|
733
|
+
const i = (c) => {
|
|
734
|
+
const l = e.elements[c];
|
|
735
|
+
if (!l) throw new Error(`生成保存找不到投影元素:${c}`);
|
|
736
|
+
s[c] = l;
|
|
737
|
+
for (const m of l.children ?? []) i(m);
|
|
738
|
+
};
|
|
739
|
+
for (const c of yt(e, t))
|
|
740
|
+
n.push(c), i(c);
|
|
741
|
+
return n.forEach((c, l) => {
|
|
742
|
+
const { order: m, ...d } = s[c];
|
|
743
|
+
s[c] = { ...d, z: we(l) };
|
|
744
|
+
}), { roots: n, sourceRecords: s };
|
|
745
|
+
}
|
|
746
|
+
const he = "ppt/slideMasters/slideMaster1.xml";
|
|
747
|
+
function at(e) {
|
|
748
|
+
return e.flatMap((t) => [
|
|
749
|
+
...t.kind === "shape" && t.text ? [t.text] : [],
|
|
750
|
+
...t.kind === "table" ? t.rows.flatMap((s) => s.cells.flatMap((n) => n.text ? [n.text] : [])) : [],
|
|
751
|
+
...t.kind === "group" ? at(t.children) : []
|
|
752
|
+
]);
|
|
753
|
+
}
|
|
754
|
+
function ot(e) {
|
|
755
|
+
return e.runs[e.runs.length - 1] ?? {
|
|
756
|
+
text: "",
|
|
757
|
+
b: !1,
|
|
758
|
+
i: !1,
|
|
759
|
+
u: !1,
|
|
760
|
+
strike: !1,
|
|
761
|
+
size: 18,
|
|
762
|
+
color: "rgb(0,0,0)",
|
|
763
|
+
fonts: []
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
function Br(e) {
|
|
767
|
+
var s;
|
|
768
|
+
const t = St((s = e.editInfo) == null ? void 0 : s.bullet);
|
|
769
|
+
return (t == null ? void 0 : t.kind) === "blip" ? { kind: "none" } : t || (e.bullet === null ? { kind: "none" } : { kind: "char", char: e.bullet });
|
|
770
|
+
}
|
|
771
|
+
function zr(e) {
|
|
431
772
|
return {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
773
|
+
align: e.align,
|
|
774
|
+
lineHeight: e.lineHeight,
|
|
775
|
+
spaceBefore: e.spaceBefore,
|
|
776
|
+
spaceAfter: e.spaceAfter,
|
|
777
|
+
marginLeft: e.marL,
|
|
778
|
+
indent: e.indent,
|
|
779
|
+
bullet: Br(e)
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
function Gr(e) {
|
|
783
|
+
return vt(ot(e));
|
|
784
|
+
}
|
|
785
|
+
function ge(e) {
|
|
786
|
+
const t = e.paragraphs[0];
|
|
787
|
+
if (!t) throw new Error("生成母版文字默认值缺少段落来源");
|
|
788
|
+
return Object.fromEntries(Array.from({ length: 9 }, (s, n) => {
|
|
789
|
+
const r = e.paragraphs.find((a) => a.lvl === n) ?? t;
|
|
790
|
+
return [n, { paragraph: zr(r), run: Gr(r) }];
|
|
791
|
+
}));
|
|
792
|
+
}
|
|
793
|
+
function Hr() {
|
|
794
|
+
return {
|
|
795
|
+
anchor: "top",
|
|
796
|
+
insets: [0, 0, 0, 0],
|
|
797
|
+
wrap: !0,
|
|
798
|
+
fontScale: 1,
|
|
799
|
+
paragraphs: [{
|
|
800
|
+
align: "left",
|
|
801
|
+
lvl: 0,
|
|
802
|
+
marL: 0,
|
|
803
|
+
indent: 0,
|
|
804
|
+
bullet: null,
|
|
805
|
+
lineHeight: null,
|
|
806
|
+
spaceBefore: 0,
|
|
807
|
+
spaceAfter: 0,
|
|
808
|
+
runs: [ot({ runs: [] })]
|
|
809
|
+
}]
|
|
810
|
+
};
|
|
811
|
+
}
|
|
812
|
+
function Ur(e) {
|
|
813
|
+
const t = e.flatMap((o) => at(o.elements)), s = t[0] ?? Hr(), n = [...t].sort((o, i) => {
|
|
814
|
+
const c = (l) => Math.max(0, ...l.paragraphs.flatMap((m) => m.runs.map((d) => d.size)));
|
|
815
|
+
return c(i) - c(o);
|
|
816
|
+
}), r = n[0] ?? s, a = t.find((o) => o.paragraphs.length > 1) ?? n.find((o) => o !== r) ?? s;
|
|
817
|
+
return {
|
|
818
|
+
title: ge(r),
|
|
819
|
+
body: ge(a),
|
|
820
|
+
other: ge(s)
|
|
821
|
+
};
|
|
822
|
+
}
|
|
823
|
+
function Xr(e, t) {
|
|
824
|
+
const s = Vt(e, t);
|
|
825
|
+
return Object.fromEntries(Object.entries(s).map(([n, r]) => [
|
|
826
|
+
n,
|
|
827
|
+
Object.fromEntries(r.map((a) => {
|
|
828
|
+
const { level: o, ...i } = a.value.paragraph;
|
|
829
|
+
return [a.level, { paragraph: i, run: a.value.run }];
|
|
473
830
|
}))
|
|
831
|
+
]));
|
|
832
|
+
}
|
|
833
|
+
function qr(e, t, s) {
|
|
834
|
+
var l, m, d;
|
|
835
|
+
const n = (l = e.slides[e.slideOrder[0]]) == null ? void 0 : l.layoutId, r = n ? (m = e.layouts[n]) == null ? void 0 : m.origin.masterPart : e.masterOrder[0], a = r ? e.masters[r] : void 0, o = a ? wt(a.ovr, "background") ? a.ovr.background : a.background : (d = t[0]) == null ? void 0 : d.background, i = (o == null ? void 0 : o.type) === "image" ? void 0 : o === null ? { type: "none" } : o, c = R(s[he]);
|
|
836
|
+
bt(c, {
|
|
837
|
+
id: he,
|
|
838
|
+
ovr: {
|
|
839
|
+
...i ? { background: i } : {},
|
|
840
|
+
textStyles: a ? Xr(e, a.id) : Ur(t)
|
|
841
|
+
}
|
|
842
|
+
}), s[he] = Q(c);
|
|
843
|
+
}
|
|
844
|
+
const Wr = "http://schemas.openxmlformats.org/package/2006/relationships", B = (e, t) => {
|
|
845
|
+
var s;
|
|
846
|
+
return (s = ne(e, { localName: t, namespaceUri: null })) == null ? void 0 : s.value;
|
|
847
|
+
};
|
|
848
|
+
class Vr {
|
|
849
|
+
constructor(t) {
|
|
850
|
+
this.doc = t, this.parts = /* @__PURE__ */ new Map(), this.media = /* @__PURE__ */ new Map();
|
|
851
|
+
}
|
|
852
|
+
source(t) {
|
|
853
|
+
var s, n;
|
|
854
|
+
return ((s = this.media.get(t)) == null ? void 0 : s.bytes) ?? ((n = me(this.doc, `web-ppt-source:${t}`)) == null ? void 0 : n.bytes);
|
|
855
|
+
}
|
|
856
|
+
registerMedia(t) {
|
|
857
|
+
for (const s of t) {
|
|
858
|
+
const n = Qe(s), r = this.source(s.targetPart);
|
|
859
|
+
if (r && (r.length !== n.length || r.some((a, o) => a !== n[o])))
|
|
860
|
+
throw new Error(`兼容对象的图片资源冲突:${s.targetPart}`);
|
|
861
|
+
this.media.set(s.targetPart, { bytes: n, mime: s.mime });
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
relationships(t) {
|
|
865
|
+
const s = this.source(Y(t));
|
|
866
|
+
return s ? ee(R(s).root, {
|
|
867
|
+
localName: "Relationship",
|
|
868
|
+
namespaceUri: Wr
|
|
869
|
+
}).map((n) => {
|
|
870
|
+
const r = B(n, "Id"), a = B(n, "Type"), o = B(n, "Target"), i = B(n, "TargetMode");
|
|
871
|
+
if (!r || !a || !o || i && i !== "Internal" && i !== "External")
|
|
872
|
+
throw new Error(`兼容对象的关系无效:${t}`);
|
|
873
|
+
return {
|
|
874
|
+
sourceId: r,
|
|
875
|
+
targetId: r,
|
|
876
|
+
type: a,
|
|
877
|
+
target: o,
|
|
878
|
+
...i === "External" ? { targetMode: "External" } : {}
|
|
879
|
+
};
|
|
880
|
+
}) : [];
|
|
881
|
+
}
|
|
882
|
+
retain(t) {
|
|
883
|
+
if (this.parts.has(t)) return;
|
|
884
|
+
const s = this.source(t);
|
|
885
|
+
if (!s) throw new Error(`兼容对象缺少原包依赖:${t}`);
|
|
886
|
+
this.parts.set(t, s);
|
|
887
|
+
const n = Y(t), r = this.source(n);
|
|
888
|
+
r && this.parts.set(n, r);
|
|
889
|
+
for (const a of this.relationships(t))
|
|
890
|
+
a.targetMode || this.retain(Ce(t, a.target));
|
|
891
|
+
}
|
|
892
|
+
relocate(t, s, n, r) {
|
|
893
|
+
if (t.targetMode) return { ...t, targetId: r };
|
|
894
|
+
const a = Ce(s, t.target);
|
|
895
|
+
this.retain(a);
|
|
896
|
+
const o = t.target.includes("#") ? t.target.slice(t.target.indexOf("#")) : "";
|
|
897
|
+
return { ...t, targetId: r, target: V(n, a) + o };
|
|
898
|
+
}
|
|
899
|
+
mergeInto(t) {
|
|
900
|
+
var a;
|
|
901
|
+
if (!this.parts.size) return;
|
|
902
|
+
const s = this.source("[Content_Types].xml");
|
|
903
|
+
if (!s) throw new Error("兼容对象缺少原包 Content-Types");
|
|
904
|
+
const n = ee(R(s).root), r = R(t["[Content_Types].xml"]);
|
|
905
|
+
for (const [o, i] of this.parts) {
|
|
906
|
+
const c = t[o];
|
|
907
|
+
if (c && (c.length !== i.length || c.some((u, p) => u !== i[p])))
|
|
908
|
+
throw new Error(`兼容对象依赖与生成包 part 冲突:${o}`);
|
|
909
|
+
if (c) continue;
|
|
910
|
+
const l = n.find((u) => u.localName === "Override" && B(u, "PartName") === `/${o}`), m = n.find((u) => {
|
|
911
|
+
var p;
|
|
912
|
+
return u.localName === "Default" && ((p = B(u, "Extension")) == null ? void 0 : p.toLowerCase()) === o.split(".").pop().toLowerCase();
|
|
913
|
+
}), d = ((a = this.media.get(o)) == null ? void 0 : a.mime) ?? B(l ?? m ?? r.root, "ContentType");
|
|
914
|
+
if (!d) throw new Error(`兼容对象依赖缺少 Content-Type:${o}`);
|
|
915
|
+
K(r.root, se("Override", {
|
|
916
|
+
attributes: [["PartName", `/${o}`], ["ContentType", d]]
|
|
917
|
+
})), t[o] = i;
|
|
918
|
+
}
|
|
919
|
+
t["[Content_Types].xml"] = Q(r);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
function be(e, t) {
|
|
923
|
+
const s = e.namespaceUri === _ && ["stCxn", "endCxn"].includes(e.localName) ? "id" : e.namespaceUri === H && e.localName === "spTgt" ? "spid" : null;
|
|
924
|
+
if (s) {
|
|
925
|
+
const n = ne(e, { localName: s, namespaceUri: null }), r = n ? t[n.value] : void 0;
|
|
926
|
+
r !== void 0 && G(e, s, String(r));
|
|
927
|
+
}
|
|
928
|
+
for (const n of ee(e)) be(n, t);
|
|
929
|
+
}
|
|
930
|
+
function Yr(e, t, s, n, r, a) {
|
|
931
|
+
var S, C, E, U;
|
|
932
|
+
const o = t.meta.origin ?? ((S = t.src.editInfo) == null ? void 0 : S.origin);
|
|
933
|
+
if (!o) throw new Error(`兼容对象 ${t.id} 缺少原包来源`);
|
|
934
|
+
let i = t.parent;
|
|
935
|
+
for (; e.elements[i]; ) i = e.elements[i].parent;
|
|
936
|
+
const c = ((E = (C = e.slides[i]) == null ? void 0 : C.creation) == null ? void 0 : E.duplicateSourcePart) ?? o.part, l = It(e, t.id), m = ((U = l == null ? void 0 : l.meta.insertion) == null ? void 0 : U.containsDescendants) === !1 || l == null ? void 0 : l.meta.insertion, d = e.saveState.baselines[c] ?? a.source(c);
|
|
937
|
+
if (!m && !d) throw new Error(`兼容对象 ${t.id} 缺少原包来源`);
|
|
938
|
+
a.registerMedia((m == null ? void 0 : m.resources) ?? []);
|
|
939
|
+
const u = { ...t, meta: { ...t.meta, editable: "frame", origin: o } }, p = m ? Pt(e, l) : R(d), f = Et(p, u).host;
|
|
940
|
+
m && be(f, m.spids);
|
|
941
|
+
const y = {};
|
|
942
|
+
for (const v of Ct(p, u)) {
|
|
943
|
+
const T = ne(v, { localName: "id", namespaceUri: null }).value;
|
|
944
|
+
y[T] = n, G(v, "id", String(o.spid));
|
|
945
|
+
}
|
|
946
|
+
const $ = { [String(o.spid)]: n };
|
|
947
|
+
let x = 2;
|
|
948
|
+
for (const v of Yt(f))
|
|
949
|
+
if (!(v in $)) {
|
|
950
|
+
for (; r.has(x); ) x++;
|
|
951
|
+
$[v] = x, r.add(x++);
|
|
952
|
+
}
|
|
953
|
+
be(f, { ...$, ...y });
|
|
954
|
+
const h = {}, g = (v) => {
|
|
955
|
+
if (v !== f && !ee(v).some(g)) return !1;
|
|
956
|
+
for (const T of v.attributes)
|
|
957
|
+
T.namespaceUri === Jt && !(T.name in h) && (h[T.name] = T.value);
|
|
958
|
+
return !0;
|
|
959
|
+
};
|
|
960
|
+
g(p.root);
|
|
961
|
+
const b = (m == null ? void 0 : m.relationships) ?? a.relationships(c), M = Tt(f, !0).map((v, T) => {
|
|
962
|
+
const w = b.find((I) => I.targetId === v);
|
|
963
|
+
if (!w) throw new Error(`兼容对象缺少原包关系:${v}`);
|
|
964
|
+
return a.relocate(
|
|
965
|
+
{ ...w, sourceId: v },
|
|
966
|
+
m ? o.part : c,
|
|
967
|
+
s,
|
|
968
|
+
`rIdCompat${n}_${T + 1}`
|
|
969
|
+
);
|
|
970
|
+
});
|
|
971
|
+
return {
|
|
972
|
+
markup: Ye(f),
|
|
973
|
+
namespaces: h,
|
|
974
|
+
spids: $,
|
|
975
|
+
relationships: M,
|
|
976
|
+
unmodeledSpids: Object.values($).filter((v) => v !== n)
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
const ze = "{C676402C-5697-4E1C-873F-D02D1690AC5C}", Qr = "http://schemas.microsoft.com/office/powerpoint/2012/main", Kr = (e, t) => {
|
|
980
|
+
var s;
|
|
981
|
+
return (s = ne(e, { localName: t, namespaceUri: null })) == null ? void 0 : s.value;
|
|
982
|
+
}, xe = (e, t) => ee(e, { localName: t });
|
|
983
|
+
function ie(e, t, s = {}) {
|
|
984
|
+
const n = se(t, { attributes: Object.entries(s) });
|
|
985
|
+
return K(e, n), n;
|
|
986
|
+
}
|
|
987
|
+
function Zr(e, t, s, n) {
|
|
988
|
+
G(e, "authorId", s.author), G(e, "idx", String(s.idx)), t.date ? G(e, "dt", t.date) : Ve(e, "dt");
|
|
989
|
+
for (const u of ["pos", "text"]) for (const p of xe(e, u)) Ne(e, p);
|
|
990
|
+
const r = e.prefix ? e.prefix + ":" : "", a = (u) => String(Math.round(u * 9525)), o = se(`${r}pos`, { attributes: [["x", a(t.x)], ["y", a(t.y)]] }), i = se(`${r}text`);
|
|
991
|
+
K(i, er(t.text));
|
|
992
|
+
const c = e.children[0] ?? null;
|
|
993
|
+
K(e, o, c), K(e, i, c);
|
|
994
|
+
let l = xe(e, "extLst")[0];
|
|
995
|
+
if (l)
|
|
996
|
+
for (const u of xe(l, "ext")) Kr(u, "uri") === ze && Ne(l, u);
|
|
997
|
+
if (!n) return;
|
|
998
|
+
l ?? (l = ie(e, `${r}extLst`));
|
|
999
|
+
const m = ie(l, `${r}ext`, { uri: ze }), d = ie(m, "p15:threadingInfo", { "xmlns:p15": Qr });
|
|
1000
|
+
ie(d, "p15:parentCm", { authorId: n.author, idx: String(n.idx) });
|
|
1001
|
+
}
|
|
1002
|
+
function $e(e, t, s = {}) {
|
|
1003
|
+
const n = se(t, { attributes: Object.entries(s) });
|
|
1004
|
+
return K(e, n), n;
|
|
1005
|
+
}
|
|
1006
|
+
function Jr(e, t) {
|
|
1007
|
+
var m;
|
|
1008
|
+
if (!t.some((d) => {
|
|
1009
|
+
var u;
|
|
1010
|
+
return (u = d.comments) == null ? void 0 : u.length;
|
|
1011
|
+
})) return;
|
|
1012
|
+
const s = (d) => R(`<?xml version="1.0" encoding="UTF-8"?><p:${d} xmlns:p="${H}"/>`), n = R(e["[Content_Types].xml"]), r = s("cmAuthorLst"), a = /* @__PURE__ */ new Map(), o = (d, u, p) => {
|
|
1013
|
+
const f = Y(d), y = e[f], $ = new Set(y ? ee(R(y).root).map((g) => {
|
|
1014
|
+
var b;
|
|
1015
|
+
return (b = ne(g, { localName: "Id" })) == null ? void 0 : b.value;
|
|
1016
|
+
}) : []);
|
|
1017
|
+
let x = 1;
|
|
1018
|
+
for (; $.has(`rId${x}`); ) x++;
|
|
1019
|
+
const h = `rId${x}`;
|
|
1020
|
+
e[f] = le(y, [{
|
|
1021
|
+
sourceId: h,
|
|
1022
|
+
targetId: h,
|
|
1023
|
+
type: `${ve}/${p}`,
|
|
1024
|
+
target: u
|
|
1025
|
+
}]);
|
|
1026
|
+
}, i = (d, u) => {
|
|
1027
|
+
$e(n.root, "Override", {
|
|
1028
|
+
PartName: `/${d}`,
|
|
1029
|
+
ContentType: `application/vnd.openxmlformats-officedocument.presentationml.${u}+xml`
|
|
1030
|
+
});
|
|
474
1031
|
};
|
|
1032
|
+
let c = 0;
|
|
1033
|
+
for (const [d, u] of t.entries()) {
|
|
1034
|
+
if (!((m = u.comments) != null && m.length)) continue;
|
|
1035
|
+
const p = s("cmLst"), f = /* @__PURE__ */ new Map();
|
|
1036
|
+
for (const [$, x] of u.comments.entries()) {
|
|
1037
|
+
const h = JSON.stringify([x.author, x.initials]);
|
|
1038
|
+
let g = a.get(h);
|
|
1039
|
+
g || (g = {
|
|
1040
|
+
id: String(a.size),
|
|
1041
|
+
last: 0,
|
|
1042
|
+
name: x.author,
|
|
1043
|
+
initials: x.initials
|
|
1044
|
+
}, a.set(h, g));
|
|
1045
|
+
const b = ++c;
|
|
1046
|
+
if (b > 4294967295) throw new Error("批注索引超出 OOXML 可表示范围");
|
|
1047
|
+
g.last = b, f.set(x.id ?? `source:${$}`, { author: g.id, idx: b });
|
|
1048
|
+
}
|
|
1049
|
+
for (const [$, x] of u.comments.entries()) {
|
|
1050
|
+
const h = $e(p.root, "p:cm");
|
|
1051
|
+
Zr(
|
|
1052
|
+
h,
|
|
1053
|
+
x,
|
|
1054
|
+
f.get(x.id ?? `source:${$}`),
|
|
1055
|
+
x.parentId ? f.get(x.parentId) : void 0
|
|
1056
|
+
);
|
|
1057
|
+
}
|
|
1058
|
+
const y = `ppt/comments/comment${d + 1}.xml`;
|
|
1059
|
+
if (e[y]) throw new Error(`生成批注 part 冲突:${y}`);
|
|
1060
|
+
e[y] = Q(p), i(y, "comments"), o(`ppt/slides/slide${d + 1}.xml`, `../comments/comment${d + 1}.xml`, "comments");
|
|
1061
|
+
}
|
|
1062
|
+
for (const d of a.values()) $e(r.root, "p:cmAuthor", {
|
|
1063
|
+
id: d.id,
|
|
1064
|
+
name: d.name,
|
|
1065
|
+
initials: d.initials ?? "",
|
|
1066
|
+
lastIdx: String(d.last),
|
|
1067
|
+
clrIdx: d.id
|
|
1068
|
+
});
|
|
1069
|
+
const l = "ppt/commentAuthors.xml";
|
|
1070
|
+
if (e[l]) throw new Error(`生成批注作者 part 冲突:${l}`);
|
|
1071
|
+
e[l] = Q(r), i(l, "commentAuthors"), o("ppt/presentation.xml", "commentAuthors.xml", "commentAuthors"), e["[Content_Types].xml"] = Q(n);
|
|
475
1072
|
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
1073
|
+
const Z = (e) => e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<"), es = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide", ts = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster", rs = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide";
|
|
1074
|
+
function ss(e, t, s, n, r) {
|
|
1075
|
+
var l, m, d, u;
|
|
1076
|
+
const a = s.src, o = e.elements[s.id] ? _t(e, s.id) : {
|
|
1077
|
+
title: ((m = (l = a.editInfo) == null ? void 0 : l.altText) == null ? void 0 : m.title) ?? "",
|
|
1078
|
+
descr: ((u = (d = a.editInfo) == null ? void 0 : d.altText) == null ? void 0 : u.descr) ?? ""
|
|
1079
|
+
}, i = {
|
|
1080
|
+
x: a.x,
|
|
1081
|
+
y: a.y,
|
|
1082
|
+
w: a.w,
|
|
1083
|
+
h: a.h,
|
|
1084
|
+
rot: a.rot,
|
|
1085
|
+
flipH: a.flipH,
|
|
1086
|
+
flipV: a.flipV,
|
|
1087
|
+
...a.name ? { name: a.name } : {},
|
|
1088
|
+
...a.effects ? { effects: a.effects } : {},
|
|
1089
|
+
...o.title || o.descr ? {
|
|
1090
|
+
altText: { title: o.title, descr: o.descr }
|
|
1091
|
+
} : {},
|
|
1092
|
+
...a.link && Bt(a.kind) ? { link: Ke(e, t, a.link, `元素 ${s.id} 链接`) } : {}
|
|
1093
|
+
}, c = (p = "") => {
|
|
1094
|
+
var f;
|
|
1095
|
+
return {
|
|
1096
|
+
part: n,
|
|
1097
|
+
relationshipPrefix: `rIdBullet${((f = s.meta.origin) == null ? void 0 : f.spid) ?? s.id}${p}`,
|
|
1098
|
+
resources: r
|
|
1099
|
+
};
|
|
488
1100
|
};
|
|
489
|
-
if (
|
|
490
|
-
const
|
|
1101
|
+
if (a.kind === "shape") {
|
|
1102
|
+
const p = je(e, t, a.text, c());
|
|
491
1103
|
return {
|
|
492
|
-
...
|
|
493
|
-
...
|
|
494
|
-
...
|
|
1104
|
+
...i,
|
|
1105
|
+
...a.fill && a.fill.type !== "image" ? { fill: a.fill } : {},
|
|
1106
|
+
...p ? { text: p } : {}
|
|
495
1107
|
};
|
|
496
1108
|
}
|
|
497
|
-
if (
|
|
498
|
-
return { ...
|
|
499
|
-
if (
|
|
500
|
-
const
|
|
501
|
-
return
|
|
502
|
-
var
|
|
503
|
-
const
|
|
504
|
-
|
|
1109
|
+
if (a.kind === "image")
|
|
1110
|
+
return { ...i, ...a.crop ? { crop: a.crop } : {} };
|
|
1111
|
+
if (a.kind === "table") {
|
|
1112
|
+
const p = {};
|
|
1113
|
+
return a.rows.forEach((f, y) => f.cells.forEach(($, x) => {
|
|
1114
|
+
var g, b;
|
|
1115
|
+
const h = !$.merged && je(
|
|
1116
|
+
e,
|
|
505
1117
|
t,
|
|
506
|
-
|
|
507
|
-
|
|
1118
|
+
$.text,
|
|
1119
|
+
c(`R${y + 1}C${x + 1}`),
|
|
1120
|
+
!!((g = a.editInfo) != null && g.tableStyle) && !!((b = $.editInfo) != null && b.styleBase)
|
|
508
1121
|
);
|
|
509
|
-
|
|
510
|
-
})), { ...
|
|
1122
|
+
h && (p[zt({ r: y, c: x })] = { text: h });
|
|
1123
|
+
})), { ...i, ...Object.keys(p).length ? { tableCells: p } : {} };
|
|
511
1124
|
}
|
|
512
|
-
return
|
|
513
|
-
}
|
|
514
|
-
function
|
|
515
|
-
var
|
|
516
|
-
const
|
|
517
|
-
if (
|
|
518
|
-
const
|
|
519
|
-
if (!Number.isSafeInteger(Math.round(
|
|
520
|
-
return `<a:gd name="${
|
|
521
|
-
}).join(""), c =
|
|
522
|
-
if (
|
|
1125
|
+
return i;
|
|
1126
|
+
}
|
|
1127
|
+
function ns(e, t, s, n) {
|
|
1128
|
+
var p;
|
|
1129
|
+
const r = t.src;
|
|
1130
|
+
if (r.kind !== "shape") throw new Error(`生成保存暂不支持元素类型:${r.kind}`);
|
|
1131
|
+
const a = t.meta.geom, o = a == null ? void 0 : a.preset, i = Object.entries((a == null ? void 0 : a.adj) ?? {}).map(([f, y]) => {
|
|
1132
|
+
if (!Number.isSafeInteger(Math.round(y))) throw new Error(`形状 ${t.id} 的几何调整值无效`);
|
|
1133
|
+
return `<a:gd name="${Z(f)}" fmla="val ${Math.round(y)}"/>`;
|
|
1134
|
+
}).join(""), c = r.text ? rt(r.text, n, s) : "", l = Z(r.name ?? `形状 ${s}`), m = r.path === null, d = m ? "" : o ? `<a:prstGeom prst="${Z(o)}"><a:avLst>${i}</a:avLst></a:prstGeom>` : Ze(r.path, r.w, r.h, !!r.openGeom), u = ((p = r.fill) == null ? void 0 : p.type) === "image" ? ae(e, r.fill, `rIdFill${s}`, n) : null;
|
|
1135
|
+
if (u && !u.resource)
|
|
523
1136
|
throw new Error(`形状 ${t.id} 的外链图片填充不能生成独立包`);
|
|
524
1137
|
return {
|
|
525
|
-
markup: `<p:sp><p:nvSpPr><p:cNvPr id="${
|
|
1138
|
+
markup: `<p:sp><p:nvSpPr><p:cNvPr id="${s}" name="${l}"/><p:cNvSpPr${m ? ' txBox="1"' : ""}/><p:nvPr/></p:nvSpPr>
|
|
526
1139
|
<p:spPr><a:xfrm/>${d}</p:spPr>${c}</p:sp>`,
|
|
527
|
-
namespaces: { "xmlns:a":
|
|
528
|
-
spids: { [String(
|
|
529
|
-
...
|
|
530
|
-
...
|
|
1140
|
+
namespaces: { "xmlns:a": _, "xmlns:p": H, "xmlns:r": ve },
|
|
1141
|
+
spids: { [String(s)]: s },
|
|
1142
|
+
...u ? { relationships: [u.relationship] } : {},
|
|
1143
|
+
...u != null && u.resource ? { resources: [u.resource] } : {}
|
|
531
1144
|
};
|
|
532
1145
|
}
|
|
533
|
-
function
|
|
534
|
-
const
|
|
535
|
-
if (!Number.isSafeInteger(
|
|
536
|
-
return String(
|
|
1146
|
+
function j(e, t) {
|
|
1147
|
+
const s = Math.round(e * 9525);
|
|
1148
|
+
if (!Number.isSafeInteger(s)) throw new Error(`组合 ${t} 超出 OOXML 安全整数范围`);
|
|
1149
|
+
return String(s);
|
|
537
1150
|
}
|
|
538
|
-
function
|
|
539
|
-
const
|
|
540
|
-
if (
|
|
541
|
-
const
|
|
1151
|
+
function as(e, t) {
|
|
1152
|
+
const s = e.src;
|
|
1153
|
+
if (s.kind !== "group") throw new Error(`元素 ${e.id} 不是组合`);
|
|
1154
|
+
const n = s.w / s.scaleX, r = s.h / s.scaleY, a = Z(s.name ?? `组合 ${t}`);
|
|
542
1155
|
return {
|
|
543
|
-
markup: `<p:grpSp><p:nvGrpSpPr><p:cNvPr id="${t}" name="${
|
|
544
|
-
<p:grpSpPr><a:xfrm><a:off x="${
|
|
545
|
-
<a:ext cx="${
|
|
546
|
-
<a:chOff x="${
|
|
547
|
-
<a:chExt cx="${
|
|
1156
|
+
markup: `<p:grpSp><p:nvGrpSpPr><p:cNvPr id="${t}" name="${a}"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
|
|
1157
|
+
<p:grpSpPr><a:xfrm><a:off x="${j(s.x, "x")}" y="${j(s.y, "y")}"/>
|
|
1158
|
+
<a:ext cx="${j(s.w, "w")}" cy="${j(s.h, "h")}"/>
|
|
1159
|
+
<a:chOff x="${j(s.childX, "childX")}" y="${j(s.childY, "childY")}"/>
|
|
1160
|
+
<a:chExt cx="${j(n, "childWidth")}" cy="${j(r, "childHeight")}"/>
|
|
548
1161
|
</a:xfrm></p:grpSpPr></p:grpSp>`,
|
|
549
|
-
namespaces: { "xmlns:a":
|
|
1162
|
+
namespaces: { "xmlns:a": _, "xmlns:p": H },
|
|
550
1163
|
spids: { [String(t)]: t }
|
|
551
1164
|
};
|
|
552
1165
|
}
|
|
553
|
-
function
|
|
554
|
-
const
|
|
555
|
-
if (
|
|
556
|
-
const
|
|
557
|
-
if (
|
|
558
|
-
const c =
|
|
1166
|
+
function os(e, t, s, n) {
|
|
1167
|
+
const r = t.src;
|
|
1168
|
+
if (r.kind !== "unsupported") throw new Error(`元素 ${t.id} 不是框架占位`);
|
|
1169
|
+
const a = Z(r.name ?? `未支持对象 ${s}`), o = Z(r.label).replace(/>/g, ">"), i = r.preview ? ae(e, { src: r.preview, name: r.name, id: r.id }, `rIdUnsupportedPreview${s}`, n) : null;
|
|
1170
|
+
if (i && !i.resource) throw new Error(`框架占位 ${t.id} 的外链预览不能生成独立包`);
|
|
1171
|
+
const c = i ? `<a:blipFill><a:blip r:embed="${i.relationship.targetId}"/><a:stretch><a:fillRect/></a:stretch></a:blipFill>` : '<a:solidFill><a:srgbClr val="F2F2F2"/></a:solidFill>';
|
|
559
1172
|
return {
|
|
560
|
-
markup: `<p:sp><p:nvSpPr><p:cNvPr id="${
|
|
1173
|
+
markup: `<p:sp><p:nvSpPr><p:cNvPr id="${s}" name="${a}"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>
|
|
561
1174
|
<p:spPr><a:xfrm/><a:prstGeom prst="rect"><a:avLst/></a:prstGeom>
|
|
562
1175
|
${c}<a:ln w="12700"><a:solidFill><a:srgbClr val="AAAAAA"/></a:solidFill><a:prstDash val="dash"/></a:ln></p:spPr>
|
|
563
|
-
<p:txBody><a:bodyPr anchor="ctr"/><a:lstStyle/><a:p><a:pPr algn="ctr"/><a:r><a:rPr lang="zh-CN" sz="1200"><a:solidFill><a:srgbClr val="777777"/></a:solidFill></a:rPr><a:t>${
|
|
1176
|
+
<p:txBody><a:bodyPr anchor="ctr"/><a:lstStyle/><a:p><a:pPr algn="ctr"/><a:r><a:rPr lang="zh-CN" sz="1200"><a:solidFill><a:srgbClr val="777777"/></a:solidFill></a:rPr><a:t>${o}</a:t></a:r><a:endParaRPr lang="zh-CN"/></a:p></p:txBody></p:sp>`,
|
|
564
1177
|
namespaces: {
|
|
565
|
-
"xmlns:a":
|
|
566
|
-
"xmlns:p":
|
|
567
|
-
...
|
|
1178
|
+
"xmlns:a": _,
|
|
1179
|
+
"xmlns:p": H,
|
|
1180
|
+
...i ? { "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships" } : {}
|
|
568
1181
|
},
|
|
569
|
-
spids: { [String(
|
|
570
|
-
...
|
|
571
|
-
...
|
|
1182
|
+
spids: { [String(s)]: s },
|
|
1183
|
+
...i ? { relationships: [i.relationship] } : {},
|
|
1184
|
+
...i != null && i.resource ? { resources: [i.resource] } : {}
|
|
572
1185
|
};
|
|
573
1186
|
}
|
|
574
|
-
function
|
|
575
|
-
|
|
576
|
-
if (t.src.
|
|
1187
|
+
function is(e, t, s, n) {
|
|
1188
|
+
var a;
|
|
1189
|
+
if ((a = t.src.editInfo) != null && a.requiresOriginal)
|
|
1190
|
+
throw new Error(`兼容对象 ${t.id} 需要原包;请重新打开原文件并使用补丁保存`);
|
|
1191
|
+
if (t.src.scene3d && !ke(t.src)) throw new Error(`生成保存暂不支持三维元素:${t.id}`);
|
|
1192
|
+
if (t.src.kind === "image" && (t.src.filter || t.src.duotone) && !ke(t.src))
|
|
577
1193
|
throw new Error(`生成保存暂不支持图片滤镜:${t.id}`);
|
|
578
|
-
if (t.src.kind === "shape") return
|
|
579
|
-
if (t.src.kind === "image") return
|
|
580
|
-
if (t.src.kind === "table") return
|
|
581
|
-
if (t.src.kind === "group") return
|
|
582
|
-
if (t.src.kind === "unsupported") return
|
|
583
|
-
const
|
|
584
|
-
throw new Error(`生成保存遇到未知元素类型:${String(
|
|
585
|
-
}
|
|
586
|
-
function
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
const
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
for (const [u, y] of Object.entries(a.elements)) {
|
|
603
|
-
if (!o.has(u)) continue;
|
|
604
|
-
const w = structuredClone(ne(a, u)), S = {
|
|
605
|
-
...structuredClone(y),
|
|
606
|
-
src: w,
|
|
1194
|
+
if (t.src.kind === "shape") return ns(e, t, s, n);
|
|
1195
|
+
if (t.src.kind === "image") return yr(e, t, s, n);
|
|
1196
|
+
if (t.src.kind === "table") return kr(t, s);
|
|
1197
|
+
if (t.src.kind === "group") return as(t, s);
|
|
1198
|
+
if (t.src.kind === "unsupported") return os(e, t, s, n);
|
|
1199
|
+
const r = t.src;
|
|
1200
|
+
throw new Error(`生成保存遇到未知元素类型:${String(r)}`);
|
|
1201
|
+
}
|
|
1202
|
+
function ls(e, t, s, n, r) {
|
|
1203
|
+
var C, E, U, v, T;
|
|
1204
|
+
const a = `ppt/slides/slide${s + 1}.xml`, o = _r(e, t), i = Dr(o.sourceRecords, o.roots), c = /* @__PURE__ */ new Set([1, ...i.values()]), l = /* @__PURE__ */ Object.create(null), m = /* @__PURE__ */ new Map();
|
|
1205
|
+
for (const [w, I] of Object.entries(o.sourceRecords)) {
|
|
1206
|
+
let A = o.sourceRecords[I.parent], Ie = !1;
|
|
1207
|
+
for (; A; ) {
|
|
1208
|
+
if ((C = A.src.editInfo) != null && C.requiresOriginal) {
|
|
1209
|
+
Ie = !0;
|
|
1210
|
+
break;
|
|
1211
|
+
}
|
|
1212
|
+
A = o.sourceRecords[A.parent];
|
|
1213
|
+
}
|
|
1214
|
+
if (Ie) continue;
|
|
1215
|
+
const L = structuredClone(e.elements[w] ? ue(e, w) : I.src), Pe = L.kind === "shape" ? e.elements[w] ? Lt(e, w) : ((E = L.editInfo) == null ? void 0 : E.geom) ?? I.meta.geom ?? null : null, O = {
|
|
1216
|
+
...structuredClone(I),
|
|
1217
|
+
src: L,
|
|
607
1218
|
ovr: {},
|
|
608
1219
|
meta: {
|
|
609
|
-
...structuredClone(
|
|
1220
|
+
...structuredClone(I.meta),
|
|
610
1221
|
editable: "full",
|
|
611
1222
|
created: !0,
|
|
612
1223
|
inherited: void 0,
|
|
613
|
-
origin: { part:
|
|
1224
|
+
origin: { part: a, spid: i.get(w) },
|
|
1225
|
+
...L.kind === "shape" ? {
|
|
1226
|
+
geom: Pe ?? void 0,
|
|
1227
|
+
customGeometry: Pe ? void 0 : I.meta.customGeometry
|
|
1228
|
+
} : {}
|
|
614
1229
|
}
|
|
615
1230
|
};
|
|
616
|
-
|
|
1231
|
+
if ((U = I.src.editInfo) != null && U.requiresOriginal)
|
|
1232
|
+
O.meta.editable = "frame", O.meta.insertion = Yr(e, I, a, i.get(w), c, r), O.children = void 0, O.ovr = { ...structuredClone(I.ovr), x: L.x, y: L.y, w: L.w, h: L.h };
|
|
1233
|
+
else {
|
|
1234
|
+
O.meta.imageReplacement = void 0;
|
|
1235
|
+
try {
|
|
1236
|
+
O.meta.insertion = is(e, O, i.get(w), a), O.ovr = ss(e, t, O, a, m);
|
|
1237
|
+
} catch (de) {
|
|
1238
|
+
throw new Error(`元素 ${w}(${L.name ?? L.kind}):${de instanceof Error ? de.message : String(de)}`);
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
l[w] = O;
|
|
617
1242
|
}
|
|
618
|
-
const
|
|
619
|
-
|
|
620
|
-
const
|
|
621
|
-
if (
|
|
1243
|
+
const d = structuredClone(e.slides[t]);
|
|
1244
|
+
d.origin = { part: a };
|
|
1245
|
+
const u = qe(e, t), p = u.background, f = (p == null ? void 0 : p.type) === "image" ? ae(e, p, "rIdBackground", a) : null;
|
|
1246
|
+
if (f && !f.resource)
|
|
622
1247
|
throw new Error(`页面 ${t} 的外链图片背景不能生成独立包`);
|
|
623
|
-
if ((
|
|
624
|
-
const
|
|
625
|
-
|
|
626
|
-
src:
|
|
627
|
-
relationships: [
|
|
628
|
-
resourceHash:
|
|
629
|
-
resourceHashes: [
|
|
630
|
-
imageRelationshipId:
|
|
1248
|
+
if ((p == null ? void 0 : p.type) === "image" && (f != null && f.resource)) {
|
|
1249
|
+
const w = ye(f.resource.hash);
|
|
1250
|
+
d.backgroundImage = {
|
|
1251
|
+
src: w,
|
|
1252
|
+
relationships: [f.relationship],
|
|
1253
|
+
resourceHash: f.resource.hash,
|
|
1254
|
+
resourceHashes: [f.resource.hash],
|
|
1255
|
+
imageRelationshipId: f.relationship.targetId
|
|
631
1256
|
};
|
|
632
1257
|
}
|
|
633
|
-
const
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
hidden: !!
|
|
637
|
-
...
|
|
638
|
-
...
|
|
1258
|
+
const y = Ot(e, [t]).value, $ = (p == null ? void 0 : p.type) === "image" && (f != null && f.resource) ? { ...p, src: ye(f.resource.hash) } : p;
|
|
1259
|
+
d.ovr = {
|
|
1260
|
+
...$ ? { background: $ } : {},
|
|
1261
|
+
hidden: !!u.hidden,
|
|
1262
|
+
...u.transition ? { transition: u.transition } : {},
|
|
1263
|
+
...y.length ? { animations: y } : {}
|
|
639
1264
|
};
|
|
640
|
-
const
|
|
641
|
-
const
|
|
642
|
-
return
|
|
1265
|
+
const x = Object.fromEntries(e.slideOrder.map((w, I) => {
|
|
1266
|
+
const A = structuredClone(e.slides[w]);
|
|
1267
|
+
return A.origin = { part: `ppt/slides/slide${I + 1}.xml` }, delete A.backgroundImage, [w, A];
|
|
643
1268
|
}));
|
|
644
|
-
|
|
645
|
-
const
|
|
646
|
-
...structuredClone({ ...
|
|
647
|
-
slides:
|
|
648
|
-
elements:
|
|
1269
|
+
x[t] = d;
|
|
1270
|
+
const h = {
|
|
1271
|
+
...structuredClone({ ...e, package: null }),
|
|
1272
|
+
slides: x,
|
|
1273
|
+
elements: l,
|
|
649
1274
|
imageResources: {
|
|
650
|
-
...structuredClone(
|
|
651
|
-
...
|
|
1275
|
+
...structuredClone(e.imageResources),
|
|
1276
|
+
...Object.fromEntries(m),
|
|
1277
|
+
...f != null && f.resource ? { [f.resource.hash]: f.resource } : {}
|
|
652
1278
|
},
|
|
653
1279
|
removedElements: {},
|
|
654
1280
|
package: null
|
|
655
|
-
},
|
|
656
|
-
|
|
657
|
-
const
|
|
658
|
-
var
|
|
659
|
-
return ((
|
|
1281
|
+
}, g = [...o.roots].sort((w, I) => Te(l[w]).localeCompare(Te(l[I])));
|
|
1282
|
+
d.children = g;
|
|
1283
|
+
const b = R(nt()), M = Object.values(l).flatMap((w) => {
|
|
1284
|
+
var I;
|
|
1285
|
+
return ((I = w.meta.insertion) == null ? void 0 : I.relationships) ?? [];
|
|
660
1286
|
});
|
|
661
|
-
|
|
662
|
-
const
|
|
663
|
-
|
|
664
|
-
for (const
|
|
665
|
-
|
|
666
|
-
return { bytes:
|
|
667
|
-
}
|
|
668
|
-
function
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
1287
|
+
f && M.push(f.relationship);
|
|
1288
|
+
const S = Nt(h, a, n, M);
|
|
1289
|
+
Rt(b, h, a, g.map((w) => l[w]), [], { links: S }), lr(b, h, d);
|
|
1290
|
+
for (const w of Object.values(l))
|
|
1291
|
+
(v = w.src.editInfo) != null && v.requiresOriginal || (At(b, w, !0), w.src.kind === "shape" && ((T = w.src.fill) == null ? void 0 : T.type) === "image" && jt(b, w, w.src.fill, `rIdFill${i.get(w.id)}`), (w.src.kind === "shape" || w.src.kind === "image") && Dt(b, w, w.src.stroke ?? null));
|
|
1292
|
+
return { bytes: Q(b), work: h, links: S };
|
|
1293
|
+
}
|
|
1294
|
+
function it(e, t, s = e) {
|
|
1295
|
+
var p, f, y;
|
|
1296
|
+
const n = e.slideOrder.map(($) => qe(e, $)), r = e.slideOrder.map(($, x) => !!e.slides[$].notes || n[x].notes !== void 0), a = (p = e.slides[e.slideOrder[0]]) == null ? void 0 : p.layoutId, o = (a ? (f = e.layouts[a]) == null ? void 0 : f.themeId : void 0) ?? e.themeOrder[0], i = o ? e.themes[o] : void 0, c = i ? { id: i.id, name: i.name, ...kt(i) } : void 0, l = st(
|
|
1297
|
+
e.meta.width,
|
|
1298
|
+
e.meta.height,
|
|
1299
|
+
e.slideOrder.length,
|
|
1300
|
+
r,
|
|
1301
|
+
c
|
|
1302
|
+
);
|
|
1303
|
+
qr(e, n, l);
|
|
1304
|
+
const m = Mr(e);
|
|
1305
|
+
if (m.length) {
|
|
1306
|
+
const $ = "ppt/tableStyles.xml";
|
|
1307
|
+
l[$] = tr(void 0, m), l["[Content_Types].xml"] = rr(l["[Content_Types].xml"], $), l["ppt/_rels/presentation.xml.rels"] = sr(
|
|
1308
|
+
l["ppt/_rels/presentation.xml.rels"],
|
|
1309
|
+
$
|
|
680
1310
|
);
|
|
681
1311
|
}
|
|
682
|
-
const
|
|
683
|
-
|
|
684
|
-
const
|
|
685
|
-
|
|
686
|
-
const
|
|
687
|
-
for (const [
|
|
688
|
-
const
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
) :
|
|
1312
|
+
const d = /* @__PURE__ */ new Map(), u = new Vr(e);
|
|
1313
|
+
e.slideOrder.forEach(($, x) => {
|
|
1314
|
+
const h = `ppt/slides/slide${x + 1}.xml`, g = Y(h), b = ls(e, $, x, l[g], u);
|
|
1315
|
+
l[h] = b.bytes, t == null || t($, b.work);
|
|
1316
|
+
const M = nr(b.work);
|
|
1317
|
+
for (const [S, C] of M.relationships) {
|
|
1318
|
+
const E = Y(S);
|
|
1319
|
+
l[E] = S === h ? Mt(
|
|
1320
|
+
l[E],
|
|
1321
|
+
C,
|
|
1322
|
+
b.links,
|
|
1323
|
+
b.bytes
|
|
1324
|
+
) : le(l[E], C);
|
|
695
1325
|
}
|
|
696
|
-
for (const [
|
|
697
|
-
const
|
|
698
|
-
if (
|
|
699
|
-
|
|
1326
|
+
for (const [S, C] of M.resources) {
|
|
1327
|
+
const E = d.get(S);
|
|
1328
|
+
if (E && E.hash !== C.hash) throw new Error(`生成媒体 part 冲突:${S}`);
|
|
1329
|
+
d.set(S, C);
|
|
700
1330
|
}
|
|
701
|
-
if (r[
|
|
702
|
-
const
|
|
703
|
-
|
|
1331
|
+
if (r[x]) {
|
|
1332
|
+
const S = `ppt/notesSlides/notesSlide${x + 1}.xml`;
|
|
1333
|
+
l[S] = ar(n[x].notes ?? ""), l[Y(S)] = le(void 0, [{
|
|
704
1334
|
sourceId: "rId1",
|
|
705
1335
|
targetId: "rId1",
|
|
706
|
-
type:
|
|
707
|
-
target:
|
|
1336
|
+
type: ts,
|
|
1337
|
+
target: V(S, "ppt/notesMasters/notesMaster1.xml")
|
|
708
1338
|
}, {
|
|
709
1339
|
sourceId: "rId2",
|
|
710
1340
|
targetId: "rId2",
|
|
711
|
-
type:
|
|
712
|
-
target:
|
|
713
|
-
}]),
|
|
1341
|
+
type: rs,
|
|
1342
|
+
target: V(S, h)
|
|
1343
|
+
}]), l[g] = le(l[g], [{
|
|
714
1344
|
sourceId: "rIdNotes",
|
|
715
1345
|
targetId: "rIdNotes",
|
|
716
|
-
type:
|
|
717
|
-
target:
|
|
1346
|
+
type: es,
|
|
1347
|
+
target: V(h, S)
|
|
718
1348
|
}]);
|
|
719
1349
|
}
|
|
720
1350
|
});
|
|
721
|
-
for (const [
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
[...
|
|
725
|
-
),
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
1351
|
+
for (const [$, x] of d) l[$] = Qe(x);
|
|
1352
|
+
l["[Content_Types].xml"] = or(
|
|
1353
|
+
l["[Content_Types].xml"],
|
|
1354
|
+
[...d.values()]
|
|
1355
|
+
), l["ppt/presentation.xml"] = ir(
|
|
1356
|
+
l["ppt/presentation.xml"],
|
|
1357
|
+
e
|
|
1358
|
+
), u.mergeInto(l);
|
|
1359
|
+
for (const $ of Ft().values()) (y = $.generateParts) == null || y.call($, s, l);
|
|
1360
|
+
return Jr(l, n), l;
|
|
1361
|
+
}
|
|
1362
|
+
function cs(e) {
|
|
1363
|
+
var a, o, i;
|
|
1364
|
+
if (!((a = e.package) != null && a.disposed)) return e;
|
|
1365
|
+
const t = { ...e.saveState.baselines }, s = (c) => {
|
|
1366
|
+
var m;
|
|
1367
|
+
if (!c || t[c]) return;
|
|
1368
|
+
const l = (m = me(e, `web-ppt-source:${c}`)) == null ? void 0 : m.bytes;
|
|
1369
|
+
l && (t[c] = l);
|
|
1370
|
+
}, n = (c) => ({ ...c, created: !0 }), r = Object.fromEntries(Object.entries(e.elements).map(([c, l]) => {
|
|
1371
|
+
var d;
|
|
1372
|
+
const m = l.meta.insertion;
|
|
1373
|
+
if (!m) return [c, l];
|
|
1374
|
+
for (const u of Qt(l)) s(u);
|
|
1375
|
+
return [c, { ...l, meta: { ...l.meta, insertion: {
|
|
1376
|
+
...m,
|
|
1377
|
+
resources: (d = m.resources) == null ? void 0 : d.map(n)
|
|
1378
|
+
} } }];
|
|
1379
|
+
}));
|
|
1380
|
+
for (const c of Object.values(e.slides))
|
|
1381
|
+
s((o = c.creation) == null ? void 0 : o.duplicateSourcePart), s((i = c.creation) == null ? void 0 : i.duplicateNotesSourcePart);
|
|
1382
|
+
return {
|
|
1383
|
+
...e,
|
|
1384
|
+
elements: r,
|
|
1385
|
+
meta: { ...e.meta, readonly: !0 },
|
|
1386
|
+
package: null,
|
|
1387
|
+
imageResources: Object.fromEntries(Object.entries(e.imageResources).map(([c, l]) => [c, n(l)])),
|
|
1388
|
+
saveState: { ...e.saveState, baselines: t }
|
|
1389
|
+
};
|
|
1390
|
+
}
|
|
1391
|
+
function ps(e) {
|
|
1392
|
+
const t = Object.fromEntries(Object.entries(e.elements).map(([r, a]) => {
|
|
1393
|
+
const { extensions: o, ...i } = a.ovr;
|
|
1394
|
+
return [r, { ...a, ovr: i }];
|
|
1395
|
+
}));
|
|
1396
|
+
let s = 0;
|
|
1397
|
+
const n = (r, a, o) => {
|
|
1398
|
+
let i;
|
|
1399
|
+
do
|
|
1400
|
+
i = `clipboard-projection-${++s}`;
|
|
1401
|
+
while (t[i]);
|
|
1402
|
+
const c = r.kind === "group" ? r.children.map((l, m) => n(l, i, m)) : void 0;
|
|
1403
|
+
return t[i] = { id: i, parent: a, src: r, children: c, ovr: {}, z: we(o), meta: { editable: "none" } }, i;
|
|
1404
|
+
};
|
|
1405
|
+
for (const r of Object.values(t)) r.meta.editable === "frame" && r.src.kind === "group" && (t[r.id] = { ...r, children: r.src.children.map((a, o) => n(a, r.id, o)) });
|
|
1406
|
+
return t;
|
|
1407
|
+
}
|
|
1408
|
+
function $s(e, t) {
|
|
1409
|
+
var x;
|
|
1410
|
+
if (e.package && !e.package.disposed && t.every((h) => {
|
|
1411
|
+
var g;
|
|
1412
|
+
return (g = e.elements[h]) == null ? void 0 : g.meta.origin;
|
|
1413
|
+
})) return Re(e, t);
|
|
1414
|
+
if (!t.length || new Set(t).size !== t.length) throw new Error("复制元素必须提供不重复的非空 id");
|
|
1415
|
+
const s = (x = e.elements[t[0]]) == null ? void 0 : x.parent, n = Gt(e, t[0]);
|
|
1416
|
+
if (!s || !n || t.some((h) => {
|
|
1417
|
+
var g;
|
|
1418
|
+
return ((g = e.elements[h]) == null ? void 0 : g.parent) !== s;
|
|
1419
|
+
})) throw new Error("复制的根元素必须属于同一父级");
|
|
1420
|
+
for (const h of t) {
|
|
1421
|
+
const g = e.elements[h];
|
|
1422
|
+
if (g.meta.editable === "none" || g.meta.locked) throw new Error(`元素不可复制或已锁定:${h}`);
|
|
1423
|
+
}
|
|
1424
|
+
const r = /* @__PURE__ */ Object.create(null), a = (h) => {
|
|
1425
|
+
const g = e.elements[h];
|
|
1426
|
+
r[h] = { ...g };
|
|
1427
|
+
for (const b of g.children ?? []) a(b);
|
|
1428
|
+
};
|
|
1429
|
+
for (const h of t) a(h);
|
|
1430
|
+
let o = [...t], i = s;
|
|
1431
|
+
for (; e.elements[i]; )
|
|
1432
|
+
r[i] = { ...e.elements[i], children: o }, o = [i], i = e.elements[i].parent;
|
|
1433
|
+
const c = { ...e, elements: r, slides: { ...e.slides, [n]: { ...e.slides[n], children: o, layoutId: void 0 } }, slideOrder: [n] };
|
|
1434
|
+
Me(c, e);
|
|
1435
|
+
let l;
|
|
1436
|
+
const m = it(c, (h, g) => {
|
|
1437
|
+
l = g;
|
|
1438
|
+
}, e);
|
|
1439
|
+
if (!l) throw new Error("复制来源页面为空");
|
|
1440
|
+
const d = ps(l), u = { ...l, elements: d, extensions: {}, package: { format: "pptx", parts: m, bytes: new Uint8Array(), disposed: !1 }, saveState: { ...l.saveState, baselines: m } };
|
|
1441
|
+
Me(u, e);
|
|
1442
|
+
const p = Re(u, t), f = { ...p.records }, y = (h, g) => {
|
|
1443
|
+
const b = p.records[g];
|
|
1444
|
+
f[g] = { ...b, meta: { ...b.meta, ...Kt(e, h, ue(e, h)) } }, e.elements[h].meta.editable !== "frame" && (e.elements[h].children ?? []).forEach((M, S) => y(M, b.children[S]));
|
|
1445
|
+
};
|
|
1446
|
+
return [...t].sort((h, g) => (e.elements[h].order ?? e.elements[h].z).localeCompare(e.elements[g].order ?? e.elements[g].z)).forEach((h, g) => y(h, p.roots[g])), { ...p, records: f };
|
|
1447
|
+
}
|
|
1448
|
+
function ys(e = {}) {
|
|
1449
|
+
const t = e.width ?? 1280, s = e.height ?? 720;
|
|
1450
|
+
Fe(t, "页面宽度"), Fe(s, "页面高度");
|
|
1451
|
+
const n = We(st(t, s, 1));
|
|
1452
|
+
return Xt(n.package), n.bytes;
|
|
1453
|
+
}
|
|
1454
|
+
function ws(e) {
|
|
1455
|
+
if (e.meta.readonly) throw new Error("只读编辑文档不能生成保存");
|
|
1456
|
+
if (Ht(e), Ut(cs(e)), e.meta.source === "pptx" && e.package && !e.package.disposed)
|
|
738
1457
|
throw new Error("存在可补丁原包时必须使用补丁保存");
|
|
739
|
-
return
|
|
1458
|
+
return We(it(e));
|
|
740
1459
|
}
|
|
741
1460
|
export {
|
|
742
|
-
|
|
743
|
-
|
|
1461
|
+
$s as copyPortableElements,
|
|
1462
|
+
ys as createBlankPptx,
|
|
1463
|
+
ws as generateEditDoc
|
|
744
1464
|
};
|