ooxml-core 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PptxHandler-G63S6YZU.mjs → PptxHandler-75LOVF7I.mjs} +2 -2
- package/dist/automation/index.cjs +2559 -1169
- package/dist/automation/index.mjs +2559 -1169
- package/dist/chart/gradient-definition.d.ts +2 -2
- package/dist/chart/gradient-definition.d.ts.map +1 -1
- package/dist/chart/index.cjs +7 -7
- package/dist/chart/index.mjs +7 -7
- package/dist/{chunk-BICQYRPW.mjs → chunk-75LA7H3F.mjs} +1339 -1435
- package/dist/{chunk-CKJSWE7N.mjs → chunk-LA7D6ZYQ.mjs} +244 -115
- package/dist/{chunk-ROM5MZ7O.mjs → chunk-OMGH6IKY.mjs} +3 -3
- package/dist/{chunk-RWXFQJVF.mjs → chunk-Q27H4HFS.mjs} +1 -1
- package/dist/{chunk-DDG5HTGX.mjs → chunk-RFX7AJDZ.mjs} +1 -1
- package/dist/crypto/index.cjs +1406 -184
- package/dist/crypto/index.mjs +1406 -184
- package/dist/diagram/dom.d.ts +1 -14
- package/dist/diagram/dom.d.ts.map +1 -1
- package/dist/diagram/index.cjs +15 -15
- package/dist/diagram/index.d.ts +12 -12
- package/dist/diagram/index.d.ts.map +1 -1
- package/dist/diagram/index.mjs +15 -15
- package/dist/diagram/types.d.ts +12 -148
- package/dist/diagram/types.d.ts.map +1 -1
- package/dist/digest/algorithm-names.d.ts +2 -2
- package/dist/digest/algorithm-names.d.ts.map +1 -1
- package/dist/digest/bit-ops.d.ts +30 -0
- package/dist/digest/bit-ops.d.ts.map +1 -0
- package/dist/digest/digest.d.ts +2 -2
- package/dist/digest/digest.d.ts.map +1 -1
- package/dist/digest/index.cjs +1319 -90
- package/dist/digest/index.d.ts +7 -1
- package/dist/digest/index.d.ts.map +1 -1
- package/dist/digest/index.mjs +1313 -91
- package/dist/digest/md2.d.ts +22 -0
- package/dist/digest/md2.d.ts.map +1 -0
- package/dist/digest/md4.d.ts +3 -0
- package/dist/digest/md4.d.ts.map +1 -0
- package/dist/digest/md5.d.ts +3 -0
- package/dist/digest/md5.d.ts.map +1 -0
- package/dist/digest/password-hash.d.ts +7 -0
- package/dist/digest/password-hash.d.ts.map +1 -1
- package/dist/digest/ripemd-functions.d.ts +18 -0
- package/dist/digest/ripemd-functions.d.ts.map +1 -0
- package/dist/digest/ripemd128.d.ts +3 -0
- package/dist/digest/ripemd128.d.ts.map +1 -0
- package/dist/digest/ripemd160.d.ts +3 -0
- package/dist/digest/ripemd160.d.ts.map +1 -0
- package/dist/digest/whirlpool-sbox.d.ts +15 -0
- package/dist/digest/whirlpool-sbox.d.ts.map +1 -0
- package/dist/digest/whirlpool-table.d.ts +12 -0
- package/dist/digest/whirlpool-table.d.ts.map +1 -0
- package/dist/digest/whirlpool.d.ts +3 -0
- package/dist/digest/whirlpool.d.ts.map +1 -0
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/diagram-theme.d.ts +3 -3
- package/dist/docx/diagram-theme.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +470 -276
- package/dist/docx/embedded.mjs +470 -276
- package/dist/docx/field-flags.d.ts +8 -0
- package/dist/docx/field-flags.d.ts.map +1 -0
- package/dist/docx/field-lock.d.ts +6 -0
- package/dist/docx/field-lock.d.ts.map +1 -0
- package/dist/docx/field-runs.d.ts +4 -1
- package/dist/docx/field-runs.d.ts.map +1 -1
- package/dist/docx/index.cjs +1029 -850
- package/dist/docx/index.d.ts +2 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +1027 -850
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +61 -47
- package/dist/docx/layout/index.mjs +61 -47
- package/dist/docx/layout/page-fields.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +1883 -467
- package/dist/docx/load/index.mjs +1883 -467
- package/dist/docx/model-run.d.ts +5 -0
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/numbering-model.d.ts +1 -1
- package/dist/docx/numbering-model.d.ts.map +1 -1
- package/dist/docx/numbering-package.d.ts +4 -4
- package/dist/docx/numbering-package.d.ts.map +1 -1
- package/dist/docx/numbering-start-edit.d.ts +8 -0
- package/dist/docx/numbering-start-edit.d.ts.map +1 -0
- package/dist/docx/numbering-start-patch.d.ts +13 -0
- package/dist/docx/numbering-start-patch.d.ts.map +1 -0
- package/dist/docx/theme-color.d.ts.map +1 -1
- package/dist/docx/theme-model.d.ts +3 -2
- package/dist/docx/theme-model.d.ts.map +1 -1
- package/dist/docx/theme.d.ts +5 -1
- package/dist/docx/theme.d.ts.map +1 -1
- package/dist/docx/ui/field-guard.d.ts +2 -0
- package/dist/docx/ui/field-guard.d.ts.map +1 -1
- package/dist/docx/ui/field-results.d.ts.map +1 -1
- package/dist/docx/ui/index.cjs +547 -375
- package/dist/docx/ui/index.mjs +547 -376
- package/dist/docx/ui/review-commands.d.ts.map +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
- package/dist/docx/ui/simple-field-input.d.ts +3 -0
- package/dist/docx/ui/simple-field-input.d.ts.map +1 -1
- package/dist/docx/ui/track-changes-mode.d.ts.map +1 -1
- package/dist/docx/ui/track-paragraph-boundaries.d.ts +5 -0
- package/dist/docx/ui/track-paragraph-boundaries.d.ts.map +1 -0
- package/dist/docx/write-inline.d.ts.map +1 -1
- package/dist/docx/write-run.d.ts.map +1 -1
- package/dist/drawingml/dom.d.ts +15 -0
- package/dist/drawingml/dom.d.ts.map +1 -0
- package/dist/drawingml/drawing-color-brightness.d.ts +6 -0
- package/dist/drawingml/drawing-color-brightness.d.ts.map +1 -0
- package/dist/drawingml/drawing-color-css.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-color.d.ts +5 -5
- package/dist/drawingml/drawing-color.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-fill.d.ts +3 -3
- package/dist/drawingml/drawing-fill.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-geometry.d.ts +4 -4
- package/dist/drawingml/drawing-geometry.d.ts.map +1 -0
- package/dist/drawingml/drawing-shadow.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-text.d.ts +2 -2
- package/dist/drawingml/drawing-text.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/gradient-geometry.d.ts +2 -2
- package/dist/drawingml/gradient-geometry.d.ts.map +1 -0
- package/dist/drawingml/gradient-preset-data.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/gradient-presets.d.ts +3 -3
- package/dist/drawingml/gradient-presets.d.ts.map +1 -0
- package/dist/drawingml/index.cjs +1545 -0
- package/dist/drawingml/index.d.ts +19 -0
- package/dist/drawingml/index.d.ts.map +1 -0
- package/dist/drawingml/index.mjs +1497 -0
- package/dist/{diagram → drawingml}/ordered-color-transforms.d.ts +2 -2
- package/dist/drawingml/ordered-color-transforms.d.ts.map +1 -0
- package/dist/drawingml/rect-path-gradient.d.ts.map +1 -0
- package/dist/drawingml/theme-color.d.ts +19 -0
- package/dist/drawingml/theme-color.d.ts.map +1 -0
- package/dist/drawingml/theme-model.d.ts +40 -0
- package/dist/drawingml/theme-model.d.ts.map +1 -0
- package/dist/drawingml/theme.d.ts +21 -0
- package/dist/drawingml/theme.d.ts.map +1 -0
- package/dist/drawingml/types.d.ts +152 -0
- package/dist/drawingml/types.d.ts.map +1 -0
- package/dist/drawingml/write-color.d.ts +4 -0
- package/dist/drawingml/write-color.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/write-fill.d.ts +2 -2
- package/dist/drawingml/write-fill.d.ts.map +1 -0
- package/dist/geometry/connector-elbow-geometry.d.ts +14 -0
- package/dist/geometry/connector-elbow-geometry.d.ts.map +1 -1
- package/dist/geometry/index.cjs +43 -0
- package/dist/geometry/index.mjs +42 -1
- package/dist/i18n/dictionary.d.ts +13 -0
- package/dist/i18n/dictionary.d.ts.map +1 -0
- package/dist/i18n/index.cjs +68 -0
- package/dist/i18n/index.d.ts +4 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.mjs +60 -0
- package/dist/i18n/locale.d.ts +17 -0
- package/dist/i18n/locale.d.ts.map +1 -0
- package/dist/i18n/translator.d.ts +18 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/index.cjs +3712 -2178
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +3711 -2179
- package/dist/pptx/automation/index.cjs +2852 -1568
- package/dist/pptx/automation/index.d.ts +3 -3
- package/dist/pptx/automation/index.mjs +5 -5
- package/dist/pptx/chunks/{index-C4mfzVoY.d.ts → index-BHqL5KXH.d.ts} +2 -2
- package/dist/pptx/chunks/{index-C4mfzVoY.d.ts.map → index-BHqL5KXH.d.ts.map} +1 -1
- package/dist/pptx/chunks/{index-lk7dyOPS.d.ts → index-BYkdcS8J.d.ts} +12 -16
- package/dist/pptx/chunks/index-BYkdcS8J.d.ts.map +1 -0
- package/dist/pptx/chunks/smart-art-CO2jmJFf.d.ts.map +1 -1
- package/dist/pptx/chunks/{text-operations-CDLx4hD5.d.ts → text-operations-DEJ7alZR.d.ts} +2 -2
- package/dist/pptx/chunks/text-operations-DEJ7alZR.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +2680 -1396
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +4 -4
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +2 -2
- package/dist/pptx/index.cjs +1771 -1756
- package/dist/pptx/index.d.ts +3 -3
- package/dist/pptx/index.mjs +5 -5
- package/dist/teams/index.cjs +144 -74
- package/dist/teams/index.mjs +144 -74
- package/dist/visio/ui/index.cjs +14 -3
- package/dist/visio/ui/index.mjs +14 -3
- package/dist/visio/ui/shape-rotation.d.ts +1 -1
- package/dist/visio/ui/shape-rotation.d.ts.map +1 -1
- package/dist/xlsx/edit/chart-series-gradient.d.ts +1 -1
- package/dist/xlsx/edit/chart-series-gradient.d.ts.map +1 -1
- package/dist/xlsx/edit/protection.d.ts +1 -1
- package/dist/xlsx/index.cjs +3222 -1886
- package/dist/xlsx/index.mjs +3222 -1886
- package/dist/xlsx/layout/chart-appearance.d.ts +1 -1
- package/dist/xlsx/layout/chart-appearance.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-scale.d.ts +5 -1
- package/dist/xlsx/layout/chart-scale.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-svg-legend.d.ts +13 -0
- package/dist/xlsx/layout/chart-svg-legend.d.ts.map +1 -0
- package/dist/xlsx/layout/chart-svg.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-view.d.ts +3 -1
- package/dist/xlsx/layout/chart-view.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +2110 -838
- package/dist/xlsx/load/index.mjs +2110 -838
- package/dist/xlsx/read/theme.d.ts +2 -4
- package/dist/xlsx/read/theme.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +2017 -771
- package/dist/xlsx/ui/index.mjs +2017 -771
- package/dist/xlsx/ui/locales/merge.d.ts +2 -1
- package/dist/xlsx/ui/locales/merge.d.ts.map +1 -1
- package/dist/xlsx/ui/localization.d.ts.map +1 -1
- package/dist/xlsx/write/theme.d.ts.map +1 -1
- package/package.json +11 -1
- package/dist/diagram/drawing-color-brightness.d.ts +0 -6
- package/dist/diagram/drawing-color-brightness.d.ts.map +0 -1
- package/dist/diagram/drawing-color-css.d.ts.map +0 -1
- package/dist/diagram/drawing-color.d.ts.map +0 -1
- package/dist/diagram/drawing-fill.d.ts.map +0 -1
- package/dist/diagram/drawing-geometry.d.ts.map +0 -1
- package/dist/diagram/drawing-shadow.d.ts.map +0 -1
- package/dist/diagram/drawing-text.d.ts.map +0 -1
- package/dist/diagram/gradient-geometry.d.ts.map +0 -1
- package/dist/diagram/gradient-preset-data.d.ts.map +0 -1
- package/dist/diagram/gradient-presets.d.ts.map +0 -1
- package/dist/diagram/ordered-color-transforms.d.ts.map +0 -1
- package/dist/diagram/rect-path-gradient.d.ts.map +0 -1
- package/dist/diagram/write-color.d.ts +0 -4
- package/dist/diagram/write-color.d.ts.map +0 -1
- package/dist/diagram/write-fill.d.ts.map +0 -1
- package/dist/pptx/chunks/index-lk7dyOPS.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-CDLx4hD5.d.ts.map +0 -1
- /package/dist/{diagram → drawingml}/drawing-color-css.d.ts +0 -0
- /package/dist/{diagram → drawingml}/drawing-shadow.d.ts +0 -0
- /package/dist/{diagram → drawingml}/gradient-preset-data.d.ts +0 -0
- /package/dist/{diagram → drawingml}/rect-path-gradient.d.ts +0 -0
package/dist/docx/embedded.cjs
CHANGED
|
@@ -873,9 +873,101 @@ function isValidLanguageTag(value) {
|
|
|
873
873
|
return /^(?:[A-Za-z]{2,8})(?:-[A-Za-z0-9]{1,8})*$/.test(value);
|
|
874
874
|
}
|
|
875
875
|
|
|
876
|
-
//
|
|
877
|
-
|
|
878
|
-
|
|
876
|
+
// color/color-primitives.ts
|
|
877
|
+
function toHex(value) {
|
|
878
|
+
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
// drawingml/dom.ts
|
|
882
|
+
function attributeReader(element) {
|
|
883
|
+
return (name) => {
|
|
884
|
+
if (!element) return void 0;
|
|
885
|
+
const direct = element.getAttribute(name);
|
|
886
|
+
if (direct !== null) return direct;
|
|
887
|
+
const attributes = element.attributes;
|
|
888
|
+
for (let index = 0; index < attributes.length; index++) {
|
|
889
|
+
const candidate = attributes.item(index);
|
|
890
|
+
if (candidate && candidate.localName === name) return candidate.value;
|
|
891
|
+
}
|
|
892
|
+
return void 0;
|
|
893
|
+
};
|
|
894
|
+
}
|
|
895
|
+
function stringAttribute(element, name) {
|
|
896
|
+
const value = attributeReader(element)(name)?.trim();
|
|
897
|
+
return value ? value : void 0;
|
|
898
|
+
}
|
|
899
|
+
function integerAttribute(element, name) {
|
|
900
|
+
const parsed = Number.parseInt(attributeReader(element)(name) ?? "", 10);
|
|
901
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
902
|
+
}
|
|
903
|
+
function booleanAttribute(element, name) {
|
|
904
|
+
const value = attributeReader(element)(name)?.trim().toLowerCase();
|
|
905
|
+
if (value === "1" || value === "true") return true;
|
|
906
|
+
if (value === "0" || value === "false") return false;
|
|
907
|
+
return void 0;
|
|
908
|
+
}
|
|
909
|
+
function descendants(root, local) {
|
|
910
|
+
const result = [];
|
|
911
|
+
const visit = (node) => {
|
|
912
|
+
for (const child3 of Array.from(node.childNodes)) {
|
|
913
|
+
if (!isElement(child3)) continue;
|
|
914
|
+
if (child3.localName === local) result.push(child3);
|
|
915
|
+
visit(child3);
|
|
916
|
+
}
|
|
917
|
+
};
|
|
918
|
+
visit(root);
|
|
919
|
+
return result;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// drawingml/drawing-color.ts
|
|
923
|
+
var COLOR_ELEMENTS = {
|
|
924
|
+
srgbClr: "srgb",
|
|
925
|
+
schemeClr: "scheme",
|
|
926
|
+
sysClr: "system",
|
|
927
|
+
prstClr: "preset",
|
|
928
|
+
scrgbClr: "scrgb",
|
|
929
|
+
hslClr: "hsl"
|
|
930
|
+
};
|
|
931
|
+
function colorValue(kind, element) {
|
|
932
|
+
const attribute = (name) => element.getAttribute(name) ?? "";
|
|
933
|
+
if (kind === "scrgb") return `${attribute("r")},${attribute("g")},${attribute("b")}`;
|
|
934
|
+
if (kind === "hsl") return `${attribute("hue")},${attribute("sat")},${attribute("lum")}`;
|
|
935
|
+
return attribute("val");
|
|
936
|
+
}
|
|
937
|
+
function parseDrawingColorIn(container) {
|
|
938
|
+
if (!container) return void 0;
|
|
939
|
+
for (const element of elements(container)) {
|
|
940
|
+
const kind = COLOR_ELEMENTS[element.localName];
|
|
941
|
+
if (!kind || element.namespaceURI && element.namespaceURI !== NS.a) continue;
|
|
942
|
+
return parseDrawingColor(element);
|
|
943
|
+
}
|
|
944
|
+
return void 0;
|
|
945
|
+
}
|
|
946
|
+
function parseDrawingColor(element) {
|
|
947
|
+
const kind = COLOR_ELEMENTS[element.localName];
|
|
948
|
+
if (!kind) return void 0;
|
|
949
|
+
const color = {
|
|
950
|
+
kind,
|
|
951
|
+
value: colorValue(kind, element),
|
|
952
|
+
transforms: elements(element).map((child3) => ({
|
|
953
|
+
name: child3.localName,
|
|
954
|
+
value: child3.getAttribute("val") ?? ""
|
|
955
|
+
}))
|
|
956
|
+
};
|
|
957
|
+
const fallback = kind === "system" ? element.getAttribute("lastClr") : null;
|
|
958
|
+
if (fallback) color.fallback = fallback;
|
|
959
|
+
return color;
|
|
960
|
+
}
|
|
961
|
+
function parseDrawingColorList(container) {
|
|
962
|
+
if (!container) return [];
|
|
963
|
+
return elements(container).flatMap((element) => {
|
|
964
|
+
const color = parseDrawingColor(element);
|
|
965
|
+
return color ? [color] : [];
|
|
966
|
+
});
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
// drawingml/theme-model.ts
|
|
970
|
+
var THEME_COLOR_SLOTS = [
|
|
879
971
|
"dk1",
|
|
880
972
|
"lt1",
|
|
881
973
|
"dk2",
|
|
@@ -889,46 +981,89 @@ var SCHEME_ORDER = [
|
|
|
889
981
|
"hlink",
|
|
890
982
|
"folHlink"
|
|
891
983
|
];
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
984
|
+
|
|
985
|
+
// drawingml/theme.ts
|
|
986
|
+
new Set(THEME_COLOR_SLOTS);
|
|
987
|
+
function nonEmpty(value) {
|
|
988
|
+
return value ? value : void 0;
|
|
989
|
+
}
|
|
990
|
+
function parseThemeColorScheme(scheme) {
|
|
991
|
+
const result = { colors: {} };
|
|
992
|
+
if (!scheme) return result;
|
|
993
|
+
const name = nonEmpty(scheme.getAttribute("name"));
|
|
994
|
+
if (name) result.name = name;
|
|
995
|
+
for (const slot2 of THEME_COLOR_SLOTS) {
|
|
996
|
+
const color = parseDrawingColorIn(first(scheme, slot2, NS.a));
|
|
997
|
+
if (color) result.colors[slot2] = color;
|
|
898
998
|
}
|
|
899
|
-
return
|
|
999
|
+
return result;
|
|
900
1000
|
}
|
|
901
|
-
function
|
|
902
|
-
const
|
|
903
|
-
if (
|
|
904
|
-
const
|
|
905
|
-
|
|
906
|
-
|
|
1001
|
+
function parseFontCollection(collection) {
|
|
1002
|
+
const result = { scripts: {} };
|
|
1003
|
+
if (!collection) return result;
|
|
1004
|
+
const typeface = (local) => nonEmpty(first(collection, local, NS.a)?.getAttribute("typeface"));
|
|
1005
|
+
const latin = typeface("latin");
|
|
1006
|
+
const eastAsia = typeface("ea");
|
|
1007
|
+
const complexScript = typeface("cs");
|
|
1008
|
+
if (latin) result.latin = latin;
|
|
1009
|
+
if (eastAsia) result.eastAsia = eastAsia;
|
|
1010
|
+
if (complexScript) result.complexScript = complexScript;
|
|
1011
|
+
for (const font of elements(collection)) {
|
|
1012
|
+
if (font.localName !== "font") continue;
|
|
1013
|
+
const script = nonEmpty(font.getAttribute("script"));
|
|
1014
|
+
const face = nonEmpty(font.getAttribute("typeface"));
|
|
1015
|
+
if (script && face && !Object.hasOwn(result.scripts, script)) result.scripts[script] = face;
|
|
1016
|
+
}
|
|
1017
|
+
return result;
|
|
907
1018
|
}
|
|
908
|
-
function
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
1019
|
+
function parseThemeFontScheme(scheme) {
|
|
1020
|
+
const result = {
|
|
1021
|
+
major: parseFontCollection(first(scheme, "majorFont", NS.a)),
|
|
1022
|
+
minor: parseFontCollection(first(scheme, "minorFont", NS.a))
|
|
1023
|
+
};
|
|
1024
|
+
const name = nonEmpty(scheme?.getAttribute("name"));
|
|
1025
|
+
if (name) result.name = name;
|
|
1026
|
+
return result;
|
|
1027
|
+
}
|
|
1028
|
+
function rootOf(source) {
|
|
1029
|
+
return "documentElement" in source ? source.documentElement : source;
|
|
1030
|
+
}
|
|
1031
|
+
function parseTheme(source) {
|
|
1032
|
+
const root = rootOf(source);
|
|
1033
|
+
const holder = first(root, "themeElements", NS.a) ?? root;
|
|
1034
|
+
const theme = {
|
|
1035
|
+
colorScheme: parseThemeColorScheme(first(holder, "clrScheme", NS.a)),
|
|
1036
|
+
fontScheme: parseThemeFontScheme(first(holder, "fontScheme", NS.a))
|
|
1037
|
+
};
|
|
1038
|
+
const name = nonEmpty(root.getAttribute("name"));
|
|
1039
|
+
if (name) theme.name = name;
|
|
1040
|
+
return theme;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// drawingml/theme-color.ts
|
|
1044
|
+
function themeSlotHex(color) {
|
|
1045
|
+
if (!color) return void 0;
|
|
1046
|
+
const value = color.kind === "srgb" ? color.value : color.kind === "system" ? color.fallback : void 0;
|
|
1047
|
+
return value ? value.toUpperCase() : void 0;
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
// docx/theme.ts
|
|
1051
|
+
function fontSetOf(collection) {
|
|
1052
|
+
const { latin, eastAsia, complexScript } = collection;
|
|
913
1053
|
return {
|
|
914
1054
|
...latin ? { latin } : {},
|
|
915
|
-
...
|
|
916
|
-
...
|
|
1055
|
+
...eastAsia ? { eastAsia } : {},
|
|
1056
|
+
...complexScript ? { complexScript } : {}
|
|
917
1057
|
};
|
|
918
1058
|
}
|
|
919
|
-
function
|
|
920
|
-
const
|
|
921
|
-
const root = document.documentElement;
|
|
922
|
-
const clrScheme = Array.from(root.getElementsByTagNameNS(DRAWING_NS, "clrScheme"))[0];
|
|
1059
|
+
function parseTheme2(xml) {
|
|
1060
|
+
const theme = parseTheme(parseXml2(xml));
|
|
923
1061
|
const colors = {};
|
|
924
|
-
for (const
|
|
925
|
-
const
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
}
|
|
929
|
-
const fontScheme = Array.from(root.getElementsByTagNameNS(DRAWING_NS, "fontScheme"))[0];
|
|
930
|
-
const major = drawingChild(fontScheme, "majorFont");
|
|
931
|
-
const minor = drawingChild(fontScheme, "minorFont");
|
|
1062
|
+
for (const slot2 of THEME_COLOR_SLOTS) {
|
|
1063
|
+
const value = themeSlotHex(theme.colorScheme.colors[slot2]);
|
|
1064
|
+
if (value) colors[slot2] = value;
|
|
1065
|
+
}
|
|
1066
|
+
const { major, minor } = theme.fontScheme;
|
|
932
1067
|
return { colors, colorMapping: {}, fonts: { major: fontSetOf(major), minor: fontSetOf(minor) } };
|
|
933
1068
|
}
|
|
934
1069
|
var MAPPING_KEYS = ["bg1", "tx1", "bg2", "tx2"];
|
|
@@ -966,9 +1101,6 @@ function parseColorSchemeMapping(xml) {
|
|
|
966
1101
|
function isThemeColorToken(value) {
|
|
967
1102
|
return isStThemeColor(value);
|
|
968
1103
|
}
|
|
969
|
-
function toHex(value) {
|
|
970
|
-
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
971
|
-
}
|
|
972
1104
|
function fractionToThemeByte(fraction) {
|
|
973
1105
|
return toHex(Math.round(Math.min(1, Math.max(0, fraction)) * 255));
|
|
974
1106
|
}
|
|
@@ -3004,7 +3136,7 @@ var NAMED = {
|
|
|
3004
3136
|
var POINT_TO_PX = 96 / 72;
|
|
3005
3137
|
var WATERMARK_PREFIX = "PowerPlusWaterMarkObject";
|
|
3006
3138
|
var DEFAULT_WATERMARK_COLOR = "#c0c0c0";
|
|
3007
|
-
function
|
|
3139
|
+
function colorOf(value) {
|
|
3008
3140
|
const text = (value ?? "").trim().toLowerCase().split(/\s/)[0] ?? "";
|
|
3009
3141
|
if (NAMED[text]) return NAMED[text];
|
|
3010
3142
|
const hex = /^#?([0-9a-f]{6})$/.exec(text);
|
|
@@ -3025,7 +3157,7 @@ function parseWatermarkShape(shape) {
|
|
|
3025
3157
|
const rotation = /rotation:\s*(-?[\d.]+)/i.exec(style);
|
|
3026
3158
|
const spec = {
|
|
3027
3159
|
text: path.getAttribute("string") ?? "",
|
|
3028
|
-
color:
|
|
3160
|
+
color: colorOf(shape.getAttribute("fillcolor")),
|
|
3029
3161
|
semitransparent: opacity !== null && opacity !== "" && opacity !== "1",
|
|
3030
3162
|
layout: rotation && Math.abs(Number(rotation[1]) % 360) > 1 ? "diagonal" : "horizontal",
|
|
3031
3163
|
...family ? { fontFamily: family.trim() } : {}
|
|
@@ -3137,7 +3269,7 @@ var add = (parent, ...items) => {
|
|
|
3137
3269
|
return parent;
|
|
3138
3270
|
};
|
|
3139
3271
|
var emu = (px2) => String(Math.max(1, Math.round(px2 * EMU_PER_PIXEL)));
|
|
3140
|
-
var
|
|
3272
|
+
var descendants2 = (root, ns, local) => Array.from(root.getElementsByTagNameNS(ns, local));
|
|
3141
3273
|
function paragraphsFor(doc, lines) {
|
|
3142
3274
|
return (lines.length ? lines : [""]).map((line) => {
|
|
3143
3275
|
const paragraph = makeW(doc, "p");
|
|
@@ -3229,23 +3361,23 @@ function buildTextBoxDrawing(doc, image, docPrId) {
|
|
|
3229
3361
|
}
|
|
3230
3362
|
function isSimpleTextBox(graphicData, anchored) {
|
|
3231
3363
|
if (!graphicData || anchored) return false;
|
|
3232
|
-
const content =
|
|
3364
|
+
const content = descendants2(graphicData, W_NS, "txbxContent")[0];
|
|
3233
3365
|
if (!content) return false;
|
|
3234
3366
|
const plain = (node, allowed) => Array.from(node.childNodes).filter(isElement).every((child3) => child3.namespaceURI === W_NS && allowed.includes(child3.localName));
|
|
3235
|
-
return plain(content, ["p"]) &&
|
|
3236
|
-
(paragraph) => plain(paragraph, ["r"]) &&
|
|
3367
|
+
return plain(content, ["p"]) && descendants2(content, W_NS, "p").every(
|
|
3368
|
+
(paragraph) => plain(paragraph, ["r"]) && descendants2(paragraph, W_NS, "r").every((run) => plain(run, ["t"]))
|
|
3237
3369
|
);
|
|
3238
3370
|
}
|
|
3239
3371
|
function textBoxHasBorder(graphicData) {
|
|
3240
|
-
const spPr = graphicData &&
|
|
3372
|
+
const spPr = graphicData && descendants2(graphicData, WPS_NS, "spPr")[0];
|
|
3241
3373
|
const ln = spPr && Array.from(spPr.getElementsByTagNameNS(A_NS, "ln"))[0];
|
|
3242
3374
|
return Boolean(ln && !ln.getElementsByTagNameNS(A_NS, "noFill").length);
|
|
3243
3375
|
}
|
|
3244
3376
|
function patchTextBox(doc, drawing, image, base) {
|
|
3245
3377
|
if (image.widthPx !== base.widthPx || image.heightPx !== base.heightPx)
|
|
3246
3378
|
for (const node of [
|
|
3247
|
-
...
|
|
3248
|
-
...
|
|
3379
|
+
...descendants2(drawing, WP_NS, "extent"),
|
|
3380
|
+
...descendants2(drawing, A_NS, "ext").filter(
|
|
3249
3381
|
(ext) => ext.parentNode?.localName === "xfrm"
|
|
3250
3382
|
)
|
|
3251
3383
|
]) {
|
|
@@ -3253,14 +3385,14 @@ function patchTextBox(doc, drawing, image, base) {
|
|
|
3253
3385
|
node.setAttribute("cy", emu(image.heightPx));
|
|
3254
3386
|
}
|
|
3255
3387
|
if (JSON.stringify(image.textBoxText) !== JSON.stringify(base.textBoxText)) {
|
|
3256
|
-
const content =
|
|
3388
|
+
const content = descendants2(drawing, W_NS, "txbxContent")[0];
|
|
3257
3389
|
if (content) {
|
|
3258
3390
|
for (const child3 of Array.from(content.childNodes)) content.removeChild(child3);
|
|
3259
3391
|
add(content, ...paragraphsFor(doc, image.textBoxText ?? []));
|
|
3260
3392
|
}
|
|
3261
3393
|
}
|
|
3262
3394
|
if (image.textBoxBorder !== false !== (base.textBoxBorder !== false)) {
|
|
3263
|
-
const spPr =
|
|
3395
|
+
const spPr = descendants2(drawing, WPS_NS, "spPr")[0];
|
|
3264
3396
|
if (spPr) {
|
|
3265
3397
|
for (const old of Array.from(spPr.childNodes).filter(
|
|
3266
3398
|
(node) => isElement(node) && node.localName === "ln"
|
|
@@ -3423,47 +3555,6 @@ var DIAGRAM_RELATIONSHIP_TYPES = {
|
|
|
3423
3555
|
drawing: RELATIONSHIP_TYPES.diagramDrawing
|
|
3424
3556
|
};
|
|
3425
3557
|
|
|
3426
|
-
// diagram/dom.ts
|
|
3427
|
-
function attributeReader(element) {
|
|
3428
|
-
return (name) => {
|
|
3429
|
-
if (!element) return void 0;
|
|
3430
|
-
const direct = element.getAttribute(name);
|
|
3431
|
-
if (direct !== null) return direct;
|
|
3432
|
-
const attributes = element.attributes;
|
|
3433
|
-
for (let index = 0; index < attributes.length; index++) {
|
|
3434
|
-
const candidate = attributes.item(index);
|
|
3435
|
-
if (candidate && candidate.localName === name) return candidate.value;
|
|
3436
|
-
}
|
|
3437
|
-
return void 0;
|
|
3438
|
-
};
|
|
3439
|
-
}
|
|
3440
|
-
function stringAttribute(element, name) {
|
|
3441
|
-
const value = attributeReader(element)(name)?.trim();
|
|
3442
|
-
return value ? value : void 0;
|
|
3443
|
-
}
|
|
3444
|
-
function integerAttribute(element, name) {
|
|
3445
|
-
const parsed = Number.parseInt(attributeReader(element)(name) ?? "", 10);
|
|
3446
|
-
return Number.isFinite(parsed) ? parsed : void 0;
|
|
3447
|
-
}
|
|
3448
|
-
function booleanAttribute(element, name) {
|
|
3449
|
-
const value = attributeReader(element)(name)?.trim().toLowerCase();
|
|
3450
|
-
if (value === "1" || value === "true") return true;
|
|
3451
|
-
if (value === "0" || value === "false") return false;
|
|
3452
|
-
return void 0;
|
|
3453
|
-
}
|
|
3454
|
-
function descendants2(root, local) {
|
|
3455
|
-
const result = [];
|
|
3456
|
-
const visit = (node) => {
|
|
3457
|
-
for (const child3 of Array.from(node.childNodes)) {
|
|
3458
|
-
if (!isElement(child3)) continue;
|
|
3459
|
-
if (child3.localName === local) result.push(child3);
|
|
3460
|
-
visit(child3);
|
|
3461
|
-
}
|
|
3462
|
-
};
|
|
3463
|
-
visit(root);
|
|
3464
|
-
return result;
|
|
3465
|
-
}
|
|
3466
|
-
|
|
3467
3558
|
// diagram/data-model.ts
|
|
3468
3559
|
var TRANSITION_TYPES = /* @__PURE__ */ new Set(["parTrans", "sibTrans"]);
|
|
3469
3560
|
var STRUCTURAL_TYPES = /* @__PURE__ */ new Set(["doc", "pres", "parTrans", "sibTrans"]);
|
|
@@ -3487,7 +3578,7 @@ function connectionLabel(connection, transitionText) {
|
|
|
3487
3578
|
function textBodyParagraphs(body) {
|
|
3488
3579
|
if (!body) return [];
|
|
3489
3580
|
return children(body, "p", NS.a).map(
|
|
3490
|
-
(paragraph) =>
|
|
3581
|
+
(paragraph) => descendants(paragraph, "t").map((run) => run.textContent ?? "").join("")
|
|
3491
3582
|
);
|
|
3492
3583
|
}
|
|
3493
3584
|
function parsePoint(element) {
|
|
@@ -3567,7 +3658,7 @@ function parseDiagramDataModel(source, part) {
|
|
|
3567
3658
|
if ((!connection.type || connection.type === "parOf") && !parentById.has(connection.destId))
|
|
3568
3659
|
parentById.set(connection.destId, connection.sourceId);
|
|
3569
3660
|
}
|
|
3570
|
-
const ext =
|
|
3661
|
+
const ext = descendants(root, "dataModelExt")[0];
|
|
3571
3662
|
const drawingRelId = stringAttribute(ext, "relId");
|
|
3572
3663
|
return {
|
|
3573
3664
|
points,
|
|
@@ -3579,55 +3670,8 @@ function parseDiagramDataModel(source, part) {
|
|
|
3579
3670
|
};
|
|
3580
3671
|
}
|
|
3581
3672
|
|
|
3582
|
-
// diagram/drawing-color.ts
|
|
3583
|
-
var COLOR_ELEMENTS = {
|
|
3584
|
-
srgbClr: "srgb",
|
|
3585
|
-
schemeClr: "scheme",
|
|
3586
|
-
sysClr: "system",
|
|
3587
|
-
prstClr: "preset",
|
|
3588
|
-
scrgbClr: "scrgb",
|
|
3589
|
-
hslClr: "hsl"
|
|
3590
|
-
};
|
|
3591
|
-
function colorValue(kind, element) {
|
|
3592
|
-
const attribute = (name) => element.getAttribute(name) ?? "";
|
|
3593
|
-
if (kind === "scrgb") return `${attribute("r")},${attribute("g")},${attribute("b")}`;
|
|
3594
|
-
if (kind === "hsl") return `${attribute("hue")},${attribute("sat")},${attribute("lum")}`;
|
|
3595
|
-
return attribute("val");
|
|
3596
|
-
}
|
|
3597
|
-
function parseDrawingColorIn(container) {
|
|
3598
|
-
if (!container) return void 0;
|
|
3599
|
-
for (const element of elements(container)) {
|
|
3600
|
-
const kind = COLOR_ELEMENTS[element.localName];
|
|
3601
|
-
if (!kind || element.namespaceURI && element.namespaceURI !== NS.a) continue;
|
|
3602
|
-
return parseDrawingColor(element);
|
|
3603
|
-
}
|
|
3604
|
-
return void 0;
|
|
3605
|
-
}
|
|
3606
|
-
function parseDrawingColor(element) {
|
|
3607
|
-
const kind = COLOR_ELEMENTS[element.localName];
|
|
3608
|
-
if (!kind) return void 0;
|
|
3609
|
-
const color = {
|
|
3610
|
-
kind,
|
|
3611
|
-
value: colorValue(kind, element),
|
|
3612
|
-
transforms: elements(element).map((child3) => ({
|
|
3613
|
-
name: child3.localName,
|
|
3614
|
-
value: child3.getAttribute("val") ?? ""
|
|
3615
|
-
}))
|
|
3616
|
-
};
|
|
3617
|
-
const fallback = kind === "system" ? element.getAttribute("lastClr") : null;
|
|
3618
|
-
if (fallback) color.fallback = fallback;
|
|
3619
|
-
return color;
|
|
3620
|
-
}
|
|
3621
|
-
function parseDrawingColorList(container) {
|
|
3622
|
-
if (!container) return [];
|
|
3623
|
-
return elements(container).flatMap((element) => {
|
|
3624
|
-
const color = parseDrawingColor(element);
|
|
3625
|
-
return color ? [color] : [];
|
|
3626
|
-
});
|
|
3627
|
-
}
|
|
3628
|
-
|
|
3629
3673
|
// diagram/definitions.ts
|
|
3630
|
-
var
|
|
3674
|
+
var rootOf2 = (source) => (typeof source === "string" ? parseXml(source, { label: "DiagramML" }) : source).documentElement;
|
|
3631
3675
|
function parseDefinitionHeader(root) {
|
|
3632
3676
|
const header = {
|
|
3633
3677
|
uniqueId: stringAttribute(root, "uniqueId") ?? "",
|
|
@@ -3648,7 +3692,7 @@ function colorList(container) {
|
|
|
3648
3692
|
return { ...method ? { method } : {}, colors: parseDrawingColorList(container) };
|
|
3649
3693
|
}
|
|
3650
3694
|
function parseDiagramColors(source) {
|
|
3651
|
-
const root =
|
|
3695
|
+
const root = rootOf2(source);
|
|
3652
3696
|
const labels = children(root, "styleLbl", NS.dgm).map((label) => ({
|
|
3653
3697
|
name: stringAttribute(label, "name") ?? "",
|
|
3654
3698
|
fill: colorList(first(label, "fillClrLst", NS.dgm)),
|
|
@@ -3688,7 +3732,7 @@ function parseStyleReferences(style) {
|
|
|
3688
3732
|
}
|
|
3689
3733
|
var hasContent = (element) => Boolean(element && (element.attributes.length > 0 || elements(element).length > 0));
|
|
3690
3734
|
function parseDiagramQuickStyle(source) {
|
|
3691
|
-
const root =
|
|
3735
|
+
const root = rootOf2(source);
|
|
3692
3736
|
const labels = children(root, "styleLbl", NS.dgm).map((label) => ({
|
|
3693
3737
|
name: stringAttribute(label, "name") ?? "",
|
|
3694
3738
|
...parseStyleReferences(first(label, "style", NS.dgm)),
|
|
@@ -3702,7 +3746,7 @@ function parseDiagramQuickStyle(source) {
|
|
|
3702
3746
|
};
|
|
3703
3747
|
}
|
|
3704
3748
|
function parseDiagramLayoutSummary(source) {
|
|
3705
|
-
const root =
|
|
3749
|
+
const root = rootOf2(source);
|
|
3706
3750
|
const header = parseDefinitionHeader(root);
|
|
3707
3751
|
const family = resolveDiagramLayoutCategory(
|
|
3708
3752
|
header.uniqueId,
|
|
@@ -3714,11 +3758,11 @@ function parseDiagramLayoutSummary(source) {
|
|
|
3714
3758
|
...header,
|
|
3715
3759
|
...family ? { family } : {},
|
|
3716
3760
|
...rootAlgorithm ? { rootAlgorithm } : {},
|
|
3717
|
-
layoutNodeCount:
|
|
3761
|
+
layoutNodeCount: descendants(root, "layoutNode").length
|
|
3718
3762
|
};
|
|
3719
3763
|
}
|
|
3720
3764
|
|
|
3721
|
-
//
|
|
3765
|
+
// drawingml/drawing-fill.ts
|
|
3722
3766
|
var FILL_ELEMENTS = /* @__PURE__ */ new Set([
|
|
3723
3767
|
"noFill",
|
|
3724
3768
|
"solidFill",
|
|
@@ -3810,7 +3854,7 @@ function parseDrawingLine(ln) {
|
|
|
3810
3854
|
return line;
|
|
3811
3855
|
}
|
|
3812
3856
|
|
|
3813
|
-
//
|
|
3857
|
+
// drawingml/drawing-text.ts
|
|
3814
3858
|
function parseSpacing(parent) {
|
|
3815
3859
|
for (const [name, unit, divisor] of [
|
|
3816
3860
|
["spcPts", "points", 100],
|
|
@@ -3889,7 +3933,7 @@ function parseDrawingTextBody(body) {
|
|
|
3889
3933
|
return result;
|
|
3890
3934
|
}
|
|
3891
3935
|
|
|
3892
|
-
//
|
|
3936
|
+
// drawingml/drawing-geometry.ts
|
|
3893
3937
|
var int = (element, name) => Number.parseInt(element?.getAttribute(name) ?? "", 10);
|
|
3894
3938
|
function parseFrame(container) {
|
|
3895
3939
|
const off = first(container, "off", NS.a);
|
|
@@ -4691,6 +4735,23 @@ function parseRunPropertiesSnapshot(xml) {
|
|
|
4691
4735
|
return parsePropertiesSnapshot(xml, "rPr");
|
|
4692
4736
|
}
|
|
4693
4737
|
|
|
4738
|
+
// docx/field-flags.ts
|
|
4739
|
+
function parseFieldFlags(element) {
|
|
4740
|
+
const locked = onOffAttribute(element, "fldLock");
|
|
4741
|
+
const dirty = onOffAttribute(element, "dirty");
|
|
4742
|
+
if (locked === void 0 && dirty === void 0) return void 0;
|
|
4743
|
+
return { ...locked !== void 0 && { locked }, ...dirty !== void 0 && { dirty } };
|
|
4744
|
+
}
|
|
4745
|
+
function writeFieldFlags(element, flags) {
|
|
4746
|
+
for (const [name, value] of [
|
|
4747
|
+
["fldLock", flags?.locked],
|
|
4748
|
+
["dirty", flags?.dirty]
|
|
4749
|
+
]) {
|
|
4750
|
+
if (value === void 0) element.removeAttributeNS(WORD_NS, name);
|
|
4751
|
+
else element.setAttributeNS(WORD_NS, `w:${name}`, value ? "true" : "false");
|
|
4752
|
+
}
|
|
4753
|
+
}
|
|
4754
|
+
|
|
4694
4755
|
// docx/write-run.ts
|
|
4695
4756
|
function setAttribute6(element, local, value) {
|
|
4696
4757
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -4876,6 +4937,7 @@ function createRun(doc, run, base, old, allocator) {
|
|
|
4876
4937
|
if (run.fieldChar) {
|
|
4877
4938
|
const marker = makeW(doc, "fldChar");
|
|
4878
4939
|
setAttribute6(marker, "fldCharType", run.fieldChar);
|
|
4940
|
+
writeFieldFlags(marker, run.fieldFlags);
|
|
4879
4941
|
node.appendChild(marker);
|
|
4880
4942
|
return node;
|
|
4881
4943
|
}
|
|
@@ -4956,6 +5018,11 @@ function takeSimpleFieldCommentEdges(doc, runs, start, end, opens, closes) {
|
|
|
4956
5018
|
after: take(closes, end - 1).reverse().flatMap((edge) => rangeEndNodes(doc, edge))
|
|
4957
5019
|
};
|
|
4958
5020
|
}
|
|
5021
|
+
|
|
5022
|
+
// docx/field-lock.ts
|
|
5023
|
+
function sameFieldFlags(a, b) {
|
|
5024
|
+
return a?.locked === b?.locked && a?.dirty === b?.dirty;
|
|
5025
|
+
}
|
|
4959
5026
|
var MATH_NAMESPACES = /* @__PURE__ */ new Set([
|
|
4960
5027
|
"http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
4961
5028
|
"http://purl.oclc.org/ooxml/officeDocument/math"
|
|
@@ -5280,6 +5347,7 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
5280
5347
|
container = makeW(doc, "fldSimple");
|
|
5281
5348
|
setW6(container, "instr", ` ${group.instr} `);
|
|
5282
5349
|
}
|
|
5350
|
+
if (group.kind === "simpleField") writeFieldFlags(container, runAt(start).fieldFlags);
|
|
5283
5351
|
const edges = group.kind === "simpleField" ? takeSimpleFieldCommentEdges(doc, runs, start, index, opens, closes) : { before: [], after: [] };
|
|
5284
5352
|
for (let item = start; item < index; item++)
|
|
5285
5353
|
for (const node of nodesFor(item)) container.appendChild(node);
|
|
@@ -5290,13 +5358,18 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
5290
5358
|
function containerGroup(run) {
|
|
5291
5359
|
if (run.link) return { kind: "link", link: run.link };
|
|
5292
5360
|
if (run.field?.simple)
|
|
5293
|
-
return {
|
|
5361
|
+
return {
|
|
5362
|
+
kind: "simpleField",
|
|
5363
|
+
instr: run.field.instr,
|
|
5364
|
+
instanceId: run.fieldInstanceId,
|
|
5365
|
+
fieldFlags: run.fieldFlags
|
|
5366
|
+
};
|
|
5294
5367
|
return void 0;
|
|
5295
5368
|
}
|
|
5296
5369
|
function sameGroup(a, b) {
|
|
5297
5370
|
if (!a || !b) return a === b;
|
|
5298
5371
|
if (a.kind === "link" && b.kind === "link") return sameLink(a.link, b.link);
|
|
5299
|
-
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId;
|
|
5372
|
+
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId && sameFieldFlags(a.fieldFlags, b.fieldFlags);
|
|
5300
5373
|
}
|
|
5301
5374
|
|
|
5302
5375
|
// docx/paragraph-properties.ts
|
|
@@ -6220,6 +6293,217 @@ async function registerNumberingPart(zip) {
|
|
|
6220
6293
|
zip.file(relsPath, buildXml(relsDoc));
|
|
6221
6294
|
}
|
|
6222
6295
|
|
|
6296
|
+
// docx/numbering-parse.ts
|
|
6297
|
+
var integer2 = (value, fallback) => parseInteger(value) ?? fallback;
|
|
6298
|
+
var flag = (element) => onOffElement(element) === true;
|
|
6299
|
+
function byName(root, local) {
|
|
6300
|
+
return Array.from(root.getElementsByTagName("*")).filter(
|
|
6301
|
+
(node) => node.nodeType === 1 && named2(node, local)
|
|
6302
|
+
);
|
|
6303
|
+
}
|
|
6304
|
+
function parseMarkerFormat(rPr) {
|
|
6305
|
+
if (!rPr) return void 0;
|
|
6306
|
+
const format = {};
|
|
6307
|
+
const family = getW(first2(rPr, "rFonts"), "ascii");
|
|
6308
|
+
if (family) format.fontFamily = family;
|
|
6309
|
+
const size = parseInteger(getW(first2(rPr, "sz"), "val"));
|
|
6310
|
+
if (size !== void 0 && size > 0) format.fontSizeHalfPoints = size;
|
|
6311
|
+
if (onOffElement(first2(rPr, "b")) === true) format.bold = true;
|
|
6312
|
+
if (onOffElement(first2(rPr, "i")) === true) format.italic = true;
|
|
6313
|
+
const color = getW(first2(rPr, "color"), "val");
|
|
6314
|
+
if (color && /^[0-9a-f]{6}$/i.test(color)) format.color = `#${color.toLowerCase()}`;
|
|
6315
|
+
return Object.keys(format).length ? format : void 0;
|
|
6316
|
+
}
|
|
6317
|
+
function parseNumberingLevel(lvl) {
|
|
6318
|
+
const level = integer2(getW(lvl, "ilvl"), 0);
|
|
6319
|
+
const start = integer2(getW(first2(lvl, "start"), "val"), 1);
|
|
6320
|
+
const numFmt = enumValue(isStNumberFormat, getW(first2(lvl, "numFmt"), "val"), "w:numFmt") ?? "decimal";
|
|
6321
|
+
const lvlText = getW(first2(lvl, "lvlText"), "val") ?? "";
|
|
6322
|
+
const jc = getW(first2(lvl, "lvlJc"), "val");
|
|
6323
|
+
const ind = first2(first2(lvl, "pPr"), "ind");
|
|
6324
|
+
const suffRaw = getW(first2(lvl, "suff"), "val");
|
|
6325
|
+
const result = { level, start, numFmt, lvlText };
|
|
6326
|
+
if (!first2(lvl, "start")) result.startWasOmitted = true;
|
|
6327
|
+
const paragraphStyleId = getW(first2(lvl, "pStyle"), "val");
|
|
6328
|
+
if (paragraphStyleId) result.paragraphStyleId = paragraphStyleId;
|
|
6329
|
+
if (jc === "left" || jc === "center" || jc === "right") result.lvlJc = jc;
|
|
6330
|
+
const left = getW(ind, "left") ?? getW(ind, "start");
|
|
6331
|
+
if (left !== void 0) result.indentLeftTwips = parseSignedTwips(left) ?? signedTwips(0);
|
|
6332
|
+
const hanging = getW(ind, "hanging");
|
|
6333
|
+
if (hanging !== void 0) result.hangingTwips = parseTwips(hanging) ?? twips(0);
|
|
6334
|
+
const firstLine = getW(ind, "firstLine");
|
|
6335
|
+
if (firstLine !== void 0) result.firstLineTwips = parseTwips(firstLine) ?? twips(0);
|
|
6336
|
+
const tabs = first2(first2(lvl, "pPr"), "tabs");
|
|
6337
|
+
const tab = tabs ? children2(tabs, "tab").find((stop) => getW(stop, "val") !== "clear") : void 0;
|
|
6338
|
+
const tabPos = tab ? parseTwips(getW(tab, "pos")) : void 0;
|
|
6339
|
+
if (tabPos !== void 0) result.tabStopTwips = tabPos;
|
|
6340
|
+
if (flag(first2(lvl, "isLgl"))) result.isLgl = true;
|
|
6341
|
+
const restart = getW(first2(lvl, "lvlRestart"), "val");
|
|
6342
|
+
if (restart !== void 0) result.lvlRestart = integer2(restart, 0);
|
|
6343
|
+
const marker = parseMarkerFormat(first2(lvl, "rPr"));
|
|
6344
|
+
if (marker) result.markerFormat = marker;
|
|
6345
|
+
result.suffix = suffRaw === "space" ? "space" : suffRaw === "nothing" ? "none" : "tab";
|
|
6346
|
+
return result;
|
|
6347
|
+
}
|
|
6348
|
+
function parseAbstractNum(element) {
|
|
6349
|
+
const id = getW(element, "abstractNumId");
|
|
6350
|
+
if (!id) return void 0;
|
|
6351
|
+
const levels = {};
|
|
6352
|
+
for (const lvl of children2(element, "lvl")) {
|
|
6353
|
+
const parsed = parseNumberingLevel(lvl);
|
|
6354
|
+
levels[parsed.level] = parsed;
|
|
6355
|
+
}
|
|
6356
|
+
return { id, levels };
|
|
6357
|
+
}
|
|
6358
|
+
function parseNum(element) {
|
|
6359
|
+
const id = getW(element, "numId");
|
|
6360
|
+
if (!id) return void 0;
|
|
6361
|
+
const abstractNumId = getW(first2(element, "abstractNumId"), "val") ?? "";
|
|
6362
|
+
const levelOverrides = {};
|
|
6363
|
+
for (const override of children2(element, "lvlOverride")) {
|
|
6364
|
+
const level = integer2(getW(override, "ilvl"), 0);
|
|
6365
|
+
const entry = {};
|
|
6366
|
+
const startOverride = getW(first2(override, "startOverride"), "val");
|
|
6367
|
+
if (startOverride !== void 0) entry.startOverride = integer2(startOverride, 1);
|
|
6368
|
+
const lvl = first2(override, "lvl");
|
|
6369
|
+
if (lvl) entry.lvl = parseNumberingLevel(lvl);
|
|
6370
|
+
if (Object.keys(entry).length) levelOverrides[level] = entry;
|
|
6371
|
+
}
|
|
6372
|
+
return {
|
|
6373
|
+
id,
|
|
6374
|
+
abstractNumId,
|
|
6375
|
+
...Object.keys(levelOverrides).length ? { levelOverrides } : {}
|
|
6376
|
+
};
|
|
6377
|
+
}
|
|
6378
|
+
function parseNumberingCatalog(xml) {
|
|
6379
|
+
const document = parseXml2(xml);
|
|
6380
|
+
const root = document.documentElement;
|
|
6381
|
+
const abstractNums = {};
|
|
6382
|
+
const warnings = [];
|
|
6383
|
+
for (const element of byName(root, "abstractNum")) {
|
|
6384
|
+
const parsed = parseAbstractNum(element);
|
|
6385
|
+
if (!parsed) continue;
|
|
6386
|
+
abstractNums[parsed.id] = parsed;
|
|
6387
|
+
const link = getW(first2(element, "numStyleLink"), "val");
|
|
6388
|
+
if (link)
|
|
6389
|
+
warnings.push(
|
|
6390
|
+
`Numbering definition abstractNum ${parsed.id} links to style "${link}"; style-linked numbering levels are not resolved.`
|
|
6391
|
+
);
|
|
6392
|
+
if (byName(element, "lvlPicBulletId").length)
|
|
6393
|
+
warnings.push(
|
|
6394
|
+
`Numbering definition abstractNum ${parsed.id} uses a picture bullet; picture bullets are not rendered.`
|
|
6395
|
+
);
|
|
6396
|
+
}
|
|
6397
|
+
const nums = {};
|
|
6398
|
+
for (const element of byName(root, "num")) {
|
|
6399
|
+
const parsed = parseNum(element);
|
|
6400
|
+
if (parsed) nums[parsed.id] = parsed;
|
|
6401
|
+
}
|
|
6402
|
+
return { abstractNums, nums, warnings: [...new Set(warnings)] };
|
|
6403
|
+
}
|
|
6404
|
+
function resolveNumberingLevel(catalog, numId, level) {
|
|
6405
|
+
const num = catalog.nums[numId];
|
|
6406
|
+
if (!num) return void 0;
|
|
6407
|
+
const override = num.levelOverrides?.[level];
|
|
6408
|
+
const sourceAbstract = catalog.abstractNums[num.abstractNumId]?.levels[level];
|
|
6409
|
+
const abstract = sourceAbstract?.startWasOmitted && sourceAbstract.start === 1 ? { ...sourceAbstract, start: 0 } : sourceAbstract;
|
|
6410
|
+
let base = override?.lvl ?? abstract;
|
|
6411
|
+
if (!base) return void 0;
|
|
6412
|
+
if (override?.lvl) {
|
|
6413
|
+
const { lvlRestart: _ignored, ...properties } = base;
|
|
6414
|
+
base = {
|
|
6415
|
+
...properties,
|
|
6416
|
+
...abstract?.lvlRestart !== void 0 ? { lvlRestart: abstract.lvlRestart } : {}
|
|
6417
|
+
};
|
|
6418
|
+
}
|
|
6419
|
+
let start = override?.startOverride ?? base.start;
|
|
6420
|
+
if (override?.lvl) {
|
|
6421
|
+
if (abstract?.lvlRestart === 0 && override.startOverride === void 0) start = abstract.start;
|
|
6422
|
+
else if (!override.lvl.startWasOmitted || override.lvl.start !== 1) start = override.lvl.start;
|
|
6423
|
+
else start = override.startOverride ?? 0;
|
|
6424
|
+
}
|
|
6425
|
+
return start !== base.start ? { ...base, start } : base;
|
|
6426
|
+
}
|
|
6427
|
+
|
|
6428
|
+
// docx/numbering-start-edit.ts
|
|
6429
|
+
function assertListStartValue(level, start) {
|
|
6430
|
+
if (!Number.isInteger(level) || level < 0 || level > 8)
|
|
6431
|
+
throw new Error("List level must be an integer from 0 through 8.");
|
|
6432
|
+
if (!Number.isInteger(start) || start < 0 || start > 2147483647)
|
|
6433
|
+
throw new Error("List start must be an integer from 0 through 2147483647.");
|
|
6434
|
+
}
|
|
6435
|
+
|
|
6436
|
+
// docx/numbering-start-patch.ts
|
|
6437
|
+
function withoutStarts(num) {
|
|
6438
|
+
const { levelOverrides, ...properties } = num;
|
|
6439
|
+
const kept = {};
|
|
6440
|
+
for (const [level, override] of Object.entries(levelOverrides ?? {})) {
|
|
6441
|
+
const { startOverride: _start, ...rest } = override;
|
|
6442
|
+
if (Object.keys(rest).length) kept[level] = rest;
|
|
6443
|
+
}
|
|
6444
|
+
return { ...properties, ...Object.keys(kept).length ? { levelOverrides: kept } : {} };
|
|
6445
|
+
}
|
|
6446
|
+
function numberingStartChanges(prior, next) {
|
|
6447
|
+
const changes = [];
|
|
6448
|
+
for (const [id, previous] of Object.entries(prior?.nums ?? {})) {
|
|
6449
|
+
const current = next.nums[id];
|
|
6450
|
+
if (!current || JSON.stringify(withoutStarts(current)) !== JSON.stringify(withoutStarts(previous)))
|
|
6451
|
+
throw new Error(
|
|
6452
|
+
`Cannot edit numbering definition num "${id}" except its supported start overrides.`
|
|
6453
|
+
);
|
|
6454
|
+
for (const key of /* @__PURE__ */ new Set([
|
|
6455
|
+
...Object.keys(previous.levelOverrides ?? {}),
|
|
6456
|
+
...Object.keys(current.levelOverrides ?? {})
|
|
6457
|
+
])) {
|
|
6458
|
+
const level = Number(key);
|
|
6459
|
+
const old = previous.levelOverrides?.[level];
|
|
6460
|
+
const value = current.levelOverrides?.[level];
|
|
6461
|
+
if (old?.startOverride === value?.startOverride) continue;
|
|
6462
|
+
if (value?.startOverride === void 0)
|
|
6463
|
+
throw new Error("Removing a list start override is unsupported.");
|
|
6464
|
+
assertListStartValue(level, value.startOverride);
|
|
6465
|
+
if (String(level) !== key || !prior || !resolveNumberingLevel(prior, id, level))
|
|
6466
|
+
throw new Error("List instance or level does not exist.");
|
|
6467
|
+
if (old?.lvl || value.lvl)
|
|
6468
|
+
throw new Error("Changing starts with a full level override is unsupported.");
|
|
6469
|
+
changes.push({ numId: id, level, start: value.startOverride });
|
|
6470
|
+
}
|
|
6471
|
+
}
|
|
6472
|
+
return changes;
|
|
6473
|
+
}
|
|
6474
|
+
function patchNumberingStarts(doc, changes) {
|
|
6475
|
+
const sameNumber = (source, expected) => source !== void 0 && /^[+-]?\d+$/.test(source) && Number(source) === Number(expected);
|
|
6476
|
+
const prepared = changes.map((change) => {
|
|
6477
|
+
const nums = children2(doc.documentElement, "num").filter(
|
|
6478
|
+
(num2) => sameNumber(getW(num2, "numId"), change.numId)
|
|
6479
|
+
);
|
|
6480
|
+
if (nums.length !== 1 || getW(nums[0], "numId") !== change.numId)
|
|
6481
|
+
throw new Error("Cannot patch an ambiguous or missing source list instance.");
|
|
6482
|
+
const num = nums[0];
|
|
6483
|
+
const overrides = children2(num, "lvlOverride").filter(
|
|
6484
|
+
(node) => sameNumber(getW(node, "ilvl"), String(change.level))
|
|
6485
|
+
);
|
|
6486
|
+
if (overrides.length > 1) throw new Error("Cannot patch duplicate source level overrides.");
|
|
6487
|
+
const override = overrides[0];
|
|
6488
|
+
if (override && getW(override, "ilvl") !== String(change.level))
|
|
6489
|
+
throw new Error("Cannot patch a noncanonical source level override.");
|
|
6490
|
+
if (override && (children2(override, "lvl").length || children2(override, "startOverride").length > 1))
|
|
6491
|
+
throw new Error("Cannot patch a full or ambiguous source level override.");
|
|
6492
|
+
return { change, num, override };
|
|
6493
|
+
});
|
|
6494
|
+
for (const { change, num, override: existing } of prepared) {
|
|
6495
|
+
const override = existing ?? makeW(doc, "lvlOverride");
|
|
6496
|
+
if (!existing) {
|
|
6497
|
+
override.setAttributeNS(WORD_NS, "w:ilvl", String(change.level));
|
|
6498
|
+
const after = children2(num, "lvlOverride").at(-1) ?? children2(num, "abstractNumId")[0];
|
|
6499
|
+
num.insertBefore(override, after?.nextSibling ?? null);
|
|
6500
|
+
}
|
|
6501
|
+
const start = children2(override, "startOverride")[0] ?? makeW(doc, "startOverride");
|
|
6502
|
+
start.setAttributeNS(WORD_NS, "w:val", String(change.start));
|
|
6503
|
+
if (!start.parentNode) override.insertBefore(start, override.firstChild);
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
|
|
6223
6507
|
// docx/numbering-package.ts
|
|
6224
6508
|
function setAttribute8(element, local, value) {
|
|
6225
6509
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -6324,17 +6608,14 @@ async function applyNumberingCatalog(zip, model, binding) {
|
|
|
6324
6608
|
throw new Error(
|
|
6325
6609
|
`Cannot edit numbering definition abstractNum "${id}"; the original numbering.xml is preserved unchanged.`
|
|
6326
6610
|
);
|
|
6327
|
-
|
|
6328
|
-
if (JSON.stringify(next.nums[id]) !== JSON.stringify(prior?.nums[id]))
|
|
6329
|
-
throw new Error(
|
|
6330
|
-
`Cannot edit numbering definition num "${id}"; the original numbering.xml is preserved unchanged.`
|
|
6331
|
-
);
|
|
6611
|
+
const startChanges = numberingStartChanges(prior, next);
|
|
6332
6612
|
const newAbstractIds = Object.keys(next.abstractNums).filter((id) => !prior?.abstractNums[id]);
|
|
6333
6613
|
const newNumIds = Object.keys(next.nums).filter((id) => !prior?.nums[id]);
|
|
6334
|
-
if (!newAbstractIds.length && !newNumIds.length) return;
|
|
6614
|
+
if (!newAbstractIds.length && !newNumIds.length && !startChanges.length) return;
|
|
6335
6615
|
const existingFile = zip.file("word/numbering.xml");
|
|
6336
6616
|
const doc = existingFile ? parseXml2(await existingFile.async("string")) : parseXml2(`<w:numbering xmlns:w="${WORD_NS}"/>`);
|
|
6337
6617
|
const root = doc.documentElement;
|
|
6618
|
+
patchNumberingStarts(doc, startChanges);
|
|
6338
6619
|
const cleanup = children2(root, "numIdMacAtCleanup")[0] ?? null;
|
|
6339
6620
|
const firstNum = children2(root, "num")[0] ?? cleanup;
|
|
6340
6621
|
for (const id of newAbstractIds) {
|
|
@@ -7200,23 +7481,31 @@ function createFieldTracker() {
|
|
|
7200
7481
|
const stack = [];
|
|
7201
7482
|
return (element, run) => {
|
|
7202
7483
|
let resultInstr;
|
|
7484
|
+
let resultLocked;
|
|
7203
7485
|
for (const child3 of Array.from(element.childNodes)) {
|
|
7204
7486
|
if (!isElement(child3)) continue;
|
|
7205
7487
|
if (named2(child3, "fldChar")) {
|
|
7206
7488
|
const type = getW(child3, "fldCharType");
|
|
7207
|
-
if (type === "begin")
|
|
7208
|
-
|
|
7489
|
+
if (type === "begin") {
|
|
7490
|
+
const locked = parseFieldFlags(child3)?.locked;
|
|
7491
|
+
stack.push({ instr: "", inResult: false, ...locked !== void 0 && { locked } });
|
|
7492
|
+
} else if (type === "separate") {
|
|
7209
7493
|
const top = stack.at(-1);
|
|
7210
7494
|
if (top) top.inResult = true;
|
|
7211
7495
|
} else if (type === "end") stack.pop();
|
|
7212
7496
|
} else {
|
|
7213
7497
|
const top = stack.at(-1);
|
|
7214
7498
|
if (named2(child3, "instrText") && top && !top.inResult) top.instr += textContent(child3);
|
|
7215
|
-
else if ((named2(child3, "t") || named2(child3, "delText")) && top?.inResult)
|
|
7499
|
+
else if ((named2(child3, "t") || named2(child3, "delText")) && top?.inResult) {
|
|
7216
7500
|
resultInstr = top.instr.trim();
|
|
7501
|
+
resultLocked = top.locked;
|
|
7502
|
+
}
|
|
7217
7503
|
}
|
|
7218
7504
|
}
|
|
7219
|
-
if (resultInstr)
|
|
7505
|
+
if (resultInstr) {
|
|
7506
|
+
run.field = { instr: resultInstr };
|
|
7507
|
+
if (resultLocked !== void 0) run.fieldFlags = { locked: resultLocked };
|
|
7508
|
+
}
|
|
7220
7509
|
return run;
|
|
7221
7510
|
};
|
|
7222
7511
|
}
|
|
@@ -7227,7 +7516,11 @@ function storyFieldResults(container) {
|
|
|
7227
7516
|
if (named2(element, "fldSimple") || named2(element, "txbxContent")) return;
|
|
7228
7517
|
if (named2(element, "r")) {
|
|
7229
7518
|
const run = trackField(element, { text: "" });
|
|
7230
|
-
if (run.field)
|
|
7519
|
+
if (run.field)
|
|
7520
|
+
metadata.set(element, {
|
|
7521
|
+
field: run.field,
|
|
7522
|
+
...run.fieldFlags && { fieldFlags: run.fieldFlags }
|
|
7523
|
+
});
|
|
7231
7524
|
return;
|
|
7232
7525
|
}
|
|
7233
7526
|
for (const child3 of Array.from(element.childNodes)) if (isElement(child3)) visit(child3);
|
|
@@ -7319,7 +7612,11 @@ function parseRun2(node, revision) {
|
|
|
7319
7612
|
if (breakKind) run.break = breakKind;
|
|
7320
7613
|
if (noteReference) run.noteReference = noteReference;
|
|
7321
7614
|
if (noteMark) run.noteMark = noteMark;
|
|
7322
|
-
if (fieldChar)
|
|
7615
|
+
if (fieldChar) {
|
|
7616
|
+
run.fieldChar = fieldChar;
|
|
7617
|
+
const flags = parseFieldFlags(only);
|
|
7618
|
+
if (flags) run.fieldFlags = flags;
|
|
7619
|
+
}
|
|
7323
7620
|
if (fieldCode !== void 0) run.fieldCode = fieldCode;
|
|
7324
7621
|
const runRevision = revision ?? runFormatRevision(props);
|
|
7325
7622
|
if (runRevision) run.revision = runRevision;
|
|
@@ -7338,8 +7635,11 @@ function parseParagraph2(node, id, fields) {
|
|
|
7338
7635
|
(element, revision) => {
|
|
7339
7636
|
const run = parseRun2(element, revision);
|
|
7340
7637
|
if (!fields) return trackField(element, run);
|
|
7341
|
-
const
|
|
7342
|
-
if (
|
|
7638
|
+
const metadata = fields.get(element);
|
|
7639
|
+
if (metadata) {
|
|
7640
|
+
run.field = { ...metadata.field };
|
|
7641
|
+
if (metadata.fieldFlags) run.fieldFlags = { ...metadata.fieldFlags };
|
|
7642
|
+
}
|
|
7343
7643
|
return run;
|
|
7344
7644
|
},
|
|
7345
7645
|
(item) => {
|
|
@@ -7361,20 +7661,23 @@ function parseParagraph2(node, id, fields) {
|
|
|
7361
7661
|
);
|
|
7362
7662
|
if (link) return results.map((run) => ({ ...run, link }));
|
|
7363
7663
|
const field = { instr: instr.trim(), simple: true };
|
|
7664
|
+
const flags = parseFieldFlags(item);
|
|
7665
|
+
const fieldState = flags ? { fieldFlags: flags } : {};
|
|
7364
7666
|
const fieldInstanceId = `${id}:simple-field-${simpleFieldIndex++}`;
|
|
7365
|
-
if (!results.length)
|
|
7667
|
+
if (!results.length)
|
|
7668
|
+
return [{ text: fieldPlaceholderText(instr), field, fieldInstanceId, ...fieldState }];
|
|
7366
7669
|
if (results.every(
|
|
7367
7670
|
(run) => !run.text && !run.equation && !run.image && !run.break && !run.noteReference && !run.noteMark && !run.fieldChar && run.fieldCode === void 0
|
|
7368
7671
|
)) {
|
|
7369
7672
|
return [
|
|
7370
|
-
{ text: "", fieldChar: "begin" },
|
|
7673
|
+
{ text: "", fieldChar: "begin", ...fieldState },
|
|
7371
7674
|
{ text: "", fieldCode: instr },
|
|
7372
7675
|
{ text: "", fieldChar: "separate" },
|
|
7373
7676
|
...results,
|
|
7374
7677
|
{ text: "", fieldChar: "end" }
|
|
7375
7678
|
];
|
|
7376
7679
|
}
|
|
7377
|
-
return results.map((run) => ({ ...run, field, fieldInstanceId }));
|
|
7680
|
+
return results.map((run) => ({ ...run, field, fieldInstanceId, ...fieldState }));
|
|
7378
7681
|
},
|
|
7379
7682
|
(hyperlink) => {
|
|
7380
7683
|
if (!activeContext) return void 0;
|
|
@@ -7676,115 +7979,6 @@ async function parseDocumentParts(zip, body, blocks, drawings) {
|
|
|
7676
7979
|
};
|
|
7677
7980
|
}
|
|
7678
7981
|
|
|
7679
|
-
// docx/numbering-parse.ts
|
|
7680
|
-
var integer2 = (value, fallback) => parseInteger(value) ?? fallback;
|
|
7681
|
-
var flag = (element) => onOffElement(element) === true;
|
|
7682
|
-
function byName(root, local) {
|
|
7683
|
-
return Array.from(root.getElementsByTagName("*")).filter(
|
|
7684
|
-
(node) => node.nodeType === 1 && named2(node, local)
|
|
7685
|
-
);
|
|
7686
|
-
}
|
|
7687
|
-
function parseMarkerFormat(rPr) {
|
|
7688
|
-
if (!rPr) return void 0;
|
|
7689
|
-
const format = {};
|
|
7690
|
-
const family = getW(first2(rPr, "rFonts"), "ascii");
|
|
7691
|
-
if (family) format.fontFamily = family;
|
|
7692
|
-
const size = parseInteger(getW(first2(rPr, "sz"), "val"));
|
|
7693
|
-
if (size !== void 0 && size > 0) format.fontSizeHalfPoints = size;
|
|
7694
|
-
if (onOffElement(first2(rPr, "b")) === true) format.bold = true;
|
|
7695
|
-
if (onOffElement(first2(rPr, "i")) === true) format.italic = true;
|
|
7696
|
-
const color = getW(first2(rPr, "color"), "val");
|
|
7697
|
-
if (color && /^[0-9a-f]{6}$/i.test(color)) format.color = `#${color.toLowerCase()}`;
|
|
7698
|
-
return Object.keys(format).length ? format : void 0;
|
|
7699
|
-
}
|
|
7700
|
-
function parseNumberingLevel(lvl) {
|
|
7701
|
-
const level = integer2(getW(lvl, "ilvl"), 0);
|
|
7702
|
-
const start = integer2(getW(first2(lvl, "start"), "val"), 1);
|
|
7703
|
-
const numFmt = enumValue(isStNumberFormat, getW(first2(lvl, "numFmt"), "val"), "w:numFmt") ?? "decimal";
|
|
7704
|
-
const lvlText = getW(first2(lvl, "lvlText"), "val") ?? "";
|
|
7705
|
-
const jc = getW(first2(lvl, "lvlJc"), "val");
|
|
7706
|
-
const ind = first2(first2(lvl, "pPr"), "ind");
|
|
7707
|
-
const suffRaw = getW(first2(lvl, "suff"), "val");
|
|
7708
|
-
const result = { level, start, numFmt, lvlText };
|
|
7709
|
-
if (!first2(lvl, "start")) result.startWasOmitted = true;
|
|
7710
|
-
const paragraphStyleId = getW(first2(lvl, "pStyle"), "val");
|
|
7711
|
-
if (paragraphStyleId) result.paragraphStyleId = paragraphStyleId;
|
|
7712
|
-
if (jc === "left" || jc === "center" || jc === "right") result.lvlJc = jc;
|
|
7713
|
-
const left = getW(ind, "left") ?? getW(ind, "start");
|
|
7714
|
-
if (left !== void 0) result.indentLeftTwips = parseSignedTwips(left) ?? signedTwips(0);
|
|
7715
|
-
const hanging = getW(ind, "hanging");
|
|
7716
|
-
if (hanging !== void 0) result.hangingTwips = parseTwips(hanging) ?? twips(0);
|
|
7717
|
-
const firstLine = getW(ind, "firstLine");
|
|
7718
|
-
if (firstLine !== void 0) result.firstLineTwips = parseTwips(firstLine) ?? twips(0);
|
|
7719
|
-
const tabs = first2(first2(lvl, "pPr"), "tabs");
|
|
7720
|
-
const tab = tabs ? children2(tabs, "tab").find((stop) => getW(stop, "val") !== "clear") : void 0;
|
|
7721
|
-
const tabPos = tab ? parseTwips(getW(tab, "pos")) : void 0;
|
|
7722
|
-
if (tabPos !== void 0) result.tabStopTwips = tabPos;
|
|
7723
|
-
if (flag(first2(lvl, "isLgl"))) result.isLgl = true;
|
|
7724
|
-
const restart = getW(first2(lvl, "lvlRestart"), "val");
|
|
7725
|
-
if (restart !== void 0) result.lvlRestart = integer2(restart, 0);
|
|
7726
|
-
const marker = parseMarkerFormat(first2(lvl, "rPr"));
|
|
7727
|
-
if (marker) result.markerFormat = marker;
|
|
7728
|
-
result.suffix = suffRaw === "space" ? "space" : suffRaw === "nothing" ? "none" : "tab";
|
|
7729
|
-
return result;
|
|
7730
|
-
}
|
|
7731
|
-
function parseAbstractNum(element) {
|
|
7732
|
-
const id = getW(element, "abstractNumId");
|
|
7733
|
-
if (!id) return void 0;
|
|
7734
|
-
const levels = {};
|
|
7735
|
-
for (const lvl of children2(element, "lvl")) {
|
|
7736
|
-
const parsed = parseNumberingLevel(lvl);
|
|
7737
|
-
levels[parsed.level] = parsed;
|
|
7738
|
-
}
|
|
7739
|
-
return { id, levels };
|
|
7740
|
-
}
|
|
7741
|
-
function parseNum(element) {
|
|
7742
|
-
const id = getW(element, "numId");
|
|
7743
|
-
if (!id) return void 0;
|
|
7744
|
-
const abstractNumId = getW(first2(element, "abstractNumId"), "val") ?? "";
|
|
7745
|
-
const levelOverrides = {};
|
|
7746
|
-
for (const override of children2(element, "lvlOverride")) {
|
|
7747
|
-
const level = integer2(getW(override, "ilvl"), 0);
|
|
7748
|
-
const entry = {};
|
|
7749
|
-
const startOverride = getW(first2(override, "startOverride"), "val");
|
|
7750
|
-
if (startOverride !== void 0) entry.startOverride = integer2(startOverride, 1);
|
|
7751
|
-
const lvl = first2(override, "lvl");
|
|
7752
|
-
if (lvl) entry.lvl = parseNumberingLevel(lvl);
|
|
7753
|
-
if (Object.keys(entry).length) levelOverrides[level] = entry;
|
|
7754
|
-
}
|
|
7755
|
-
return {
|
|
7756
|
-
id,
|
|
7757
|
-
abstractNumId,
|
|
7758
|
-
...Object.keys(levelOverrides).length ? { levelOverrides } : {}
|
|
7759
|
-
};
|
|
7760
|
-
}
|
|
7761
|
-
function parseNumberingCatalog(xml) {
|
|
7762
|
-
const document = parseXml2(xml);
|
|
7763
|
-
const root = document.documentElement;
|
|
7764
|
-
const abstractNums = {};
|
|
7765
|
-
const warnings = [];
|
|
7766
|
-
for (const element of byName(root, "abstractNum")) {
|
|
7767
|
-
const parsed = parseAbstractNum(element);
|
|
7768
|
-
if (!parsed) continue;
|
|
7769
|
-
abstractNums[parsed.id] = parsed;
|
|
7770
|
-
const link = getW(first2(element, "numStyleLink"), "val");
|
|
7771
|
-
if (link)
|
|
7772
|
-
warnings.push(
|
|
7773
|
-
`Numbering definition abstractNum ${parsed.id} links to style "${link}"; style-linked numbering levels are not resolved.`
|
|
7774
|
-
);
|
|
7775
|
-
if (byName(element, "lvlPicBulletId").length)
|
|
7776
|
-
warnings.push(
|
|
7777
|
-
`Numbering definition abstractNum ${parsed.id} uses a picture bullet; picture bullets are not rendered.`
|
|
7778
|
-
);
|
|
7779
|
-
}
|
|
7780
|
-
const nums = {};
|
|
7781
|
-
for (const element of byName(root, "num")) {
|
|
7782
|
-
const parsed = parseNum(element);
|
|
7783
|
-
if (parsed) nums[parsed.id] = parsed;
|
|
7784
|
-
}
|
|
7785
|
-
return { abstractNums, nums, warnings: [...new Set(warnings)] };
|
|
7786
|
-
}
|
|
7787
|
-
|
|
7788
7982
|
// docx/comments.ts
|
|
7789
7983
|
var W14_NS2 = "http://schemas.microsoft.com/office/word/2010/wordml";
|
|
7790
7984
|
var W15_NS2 = "http://schemas.microsoft.com/office/word/2012/wordml";
|
|
@@ -8019,7 +8213,7 @@ async function readPackage(input) {
|
|
|
8019
8213
|
const themeFile = zip.file("word/theme/theme1.xml");
|
|
8020
8214
|
const settingsFile = zip.file("word/settings.xml");
|
|
8021
8215
|
if (themeFile) {
|
|
8022
|
-
model.theme =
|
|
8216
|
+
model.theme = parseTheme2(await themeFile.async("string"));
|
|
8023
8217
|
if (settingsFile) {
|
|
8024
8218
|
const settingsXml = await settingsFile.async("string");
|
|
8025
8219
|
model.theme.colorMapping = withParseWarnings(
|