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.mjs
CHANGED
|
@@ -867,9 +867,101 @@ function isValidLanguageTag(value) {
|
|
|
867
867
|
return /^(?:[A-Za-z]{2,8})(?:-[A-Za-z0-9]{1,8})*$/.test(value);
|
|
868
868
|
}
|
|
869
869
|
|
|
870
|
-
//
|
|
871
|
-
|
|
872
|
-
|
|
870
|
+
// color/color-primitives.ts
|
|
871
|
+
function toHex(value) {
|
|
872
|
+
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
// drawingml/dom.ts
|
|
876
|
+
function attributeReader(element) {
|
|
877
|
+
return (name) => {
|
|
878
|
+
if (!element) return void 0;
|
|
879
|
+
const direct = element.getAttribute(name);
|
|
880
|
+
if (direct !== null) return direct;
|
|
881
|
+
const attributes = element.attributes;
|
|
882
|
+
for (let index = 0; index < attributes.length; index++) {
|
|
883
|
+
const candidate = attributes.item(index);
|
|
884
|
+
if (candidate && candidate.localName === name) return candidate.value;
|
|
885
|
+
}
|
|
886
|
+
return void 0;
|
|
887
|
+
};
|
|
888
|
+
}
|
|
889
|
+
function stringAttribute(element, name) {
|
|
890
|
+
const value = attributeReader(element)(name)?.trim();
|
|
891
|
+
return value ? value : void 0;
|
|
892
|
+
}
|
|
893
|
+
function integerAttribute(element, name) {
|
|
894
|
+
const parsed = Number.parseInt(attributeReader(element)(name) ?? "", 10);
|
|
895
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
896
|
+
}
|
|
897
|
+
function booleanAttribute(element, name) {
|
|
898
|
+
const value = attributeReader(element)(name)?.trim().toLowerCase();
|
|
899
|
+
if (value === "1" || value === "true") return true;
|
|
900
|
+
if (value === "0" || value === "false") return false;
|
|
901
|
+
return void 0;
|
|
902
|
+
}
|
|
903
|
+
function descendants(root, local) {
|
|
904
|
+
const result = [];
|
|
905
|
+
const visit = (node) => {
|
|
906
|
+
for (const child3 of Array.from(node.childNodes)) {
|
|
907
|
+
if (!isElement(child3)) continue;
|
|
908
|
+
if (child3.localName === local) result.push(child3);
|
|
909
|
+
visit(child3);
|
|
910
|
+
}
|
|
911
|
+
};
|
|
912
|
+
visit(root);
|
|
913
|
+
return result;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
// drawingml/drawing-color.ts
|
|
917
|
+
var COLOR_ELEMENTS = {
|
|
918
|
+
srgbClr: "srgb",
|
|
919
|
+
schemeClr: "scheme",
|
|
920
|
+
sysClr: "system",
|
|
921
|
+
prstClr: "preset",
|
|
922
|
+
scrgbClr: "scrgb",
|
|
923
|
+
hslClr: "hsl"
|
|
924
|
+
};
|
|
925
|
+
function colorValue(kind, element) {
|
|
926
|
+
const attribute = (name) => element.getAttribute(name) ?? "";
|
|
927
|
+
if (kind === "scrgb") return `${attribute("r")},${attribute("g")},${attribute("b")}`;
|
|
928
|
+
if (kind === "hsl") return `${attribute("hue")},${attribute("sat")},${attribute("lum")}`;
|
|
929
|
+
return attribute("val");
|
|
930
|
+
}
|
|
931
|
+
function parseDrawingColorIn(container) {
|
|
932
|
+
if (!container) return void 0;
|
|
933
|
+
for (const element of elements(container)) {
|
|
934
|
+
const kind = COLOR_ELEMENTS[element.localName];
|
|
935
|
+
if (!kind || element.namespaceURI && element.namespaceURI !== NS.a) continue;
|
|
936
|
+
return parseDrawingColor(element);
|
|
937
|
+
}
|
|
938
|
+
return void 0;
|
|
939
|
+
}
|
|
940
|
+
function parseDrawingColor(element) {
|
|
941
|
+
const kind = COLOR_ELEMENTS[element.localName];
|
|
942
|
+
if (!kind) return void 0;
|
|
943
|
+
const color = {
|
|
944
|
+
kind,
|
|
945
|
+
value: colorValue(kind, element),
|
|
946
|
+
transforms: elements(element).map((child3) => ({
|
|
947
|
+
name: child3.localName,
|
|
948
|
+
value: child3.getAttribute("val") ?? ""
|
|
949
|
+
}))
|
|
950
|
+
};
|
|
951
|
+
const fallback = kind === "system" ? element.getAttribute("lastClr") : null;
|
|
952
|
+
if (fallback) color.fallback = fallback;
|
|
953
|
+
return color;
|
|
954
|
+
}
|
|
955
|
+
function parseDrawingColorList(container) {
|
|
956
|
+
if (!container) return [];
|
|
957
|
+
return elements(container).flatMap((element) => {
|
|
958
|
+
const color = parseDrawingColor(element);
|
|
959
|
+
return color ? [color] : [];
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
// drawingml/theme-model.ts
|
|
964
|
+
var THEME_COLOR_SLOTS = [
|
|
873
965
|
"dk1",
|
|
874
966
|
"lt1",
|
|
875
967
|
"dk2",
|
|
@@ -883,46 +975,89 @@ var SCHEME_ORDER = [
|
|
|
883
975
|
"hlink",
|
|
884
976
|
"folHlink"
|
|
885
977
|
];
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
978
|
+
|
|
979
|
+
// drawingml/theme.ts
|
|
980
|
+
new Set(THEME_COLOR_SLOTS);
|
|
981
|
+
function nonEmpty(value) {
|
|
982
|
+
return value ? value : void 0;
|
|
983
|
+
}
|
|
984
|
+
function parseThemeColorScheme(scheme) {
|
|
985
|
+
const result = { colors: {} };
|
|
986
|
+
if (!scheme) return result;
|
|
987
|
+
const name = nonEmpty(scheme.getAttribute("name"));
|
|
988
|
+
if (name) result.name = name;
|
|
989
|
+
for (const slot2 of THEME_COLOR_SLOTS) {
|
|
990
|
+
const color = parseDrawingColorIn(first(scheme, slot2, NS.a));
|
|
991
|
+
if (color) result.colors[slot2] = color;
|
|
892
992
|
}
|
|
893
|
-
return
|
|
993
|
+
return result;
|
|
894
994
|
}
|
|
895
|
-
function
|
|
896
|
-
const
|
|
897
|
-
if (
|
|
898
|
-
const
|
|
899
|
-
|
|
900
|
-
|
|
995
|
+
function parseFontCollection(collection) {
|
|
996
|
+
const result = { scripts: {} };
|
|
997
|
+
if (!collection) return result;
|
|
998
|
+
const typeface = (local) => nonEmpty(first(collection, local, NS.a)?.getAttribute("typeface"));
|
|
999
|
+
const latin = typeface("latin");
|
|
1000
|
+
const eastAsia = typeface("ea");
|
|
1001
|
+
const complexScript = typeface("cs");
|
|
1002
|
+
if (latin) result.latin = latin;
|
|
1003
|
+
if (eastAsia) result.eastAsia = eastAsia;
|
|
1004
|
+
if (complexScript) result.complexScript = complexScript;
|
|
1005
|
+
for (const font of elements(collection)) {
|
|
1006
|
+
if (font.localName !== "font") continue;
|
|
1007
|
+
const script = nonEmpty(font.getAttribute("script"));
|
|
1008
|
+
const face = nonEmpty(font.getAttribute("typeface"));
|
|
1009
|
+
if (script && face && !Object.hasOwn(result.scripts, script)) result.scripts[script] = face;
|
|
1010
|
+
}
|
|
1011
|
+
return result;
|
|
901
1012
|
}
|
|
902
|
-
function
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
1013
|
+
function parseThemeFontScheme(scheme) {
|
|
1014
|
+
const result = {
|
|
1015
|
+
major: parseFontCollection(first(scheme, "majorFont", NS.a)),
|
|
1016
|
+
minor: parseFontCollection(first(scheme, "minorFont", NS.a))
|
|
1017
|
+
};
|
|
1018
|
+
const name = nonEmpty(scheme?.getAttribute("name"));
|
|
1019
|
+
if (name) result.name = name;
|
|
1020
|
+
return result;
|
|
1021
|
+
}
|
|
1022
|
+
function rootOf(source) {
|
|
1023
|
+
return "documentElement" in source ? source.documentElement : source;
|
|
1024
|
+
}
|
|
1025
|
+
function parseTheme(source) {
|
|
1026
|
+
const root = rootOf(source);
|
|
1027
|
+
const holder = first(root, "themeElements", NS.a) ?? root;
|
|
1028
|
+
const theme = {
|
|
1029
|
+
colorScheme: parseThemeColorScheme(first(holder, "clrScheme", NS.a)),
|
|
1030
|
+
fontScheme: parseThemeFontScheme(first(holder, "fontScheme", NS.a))
|
|
1031
|
+
};
|
|
1032
|
+
const name = nonEmpty(root.getAttribute("name"));
|
|
1033
|
+
if (name) theme.name = name;
|
|
1034
|
+
return theme;
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
// drawingml/theme-color.ts
|
|
1038
|
+
function themeSlotHex(color) {
|
|
1039
|
+
if (!color) return void 0;
|
|
1040
|
+
const value = color.kind === "srgb" ? color.value : color.kind === "system" ? color.fallback : void 0;
|
|
1041
|
+
return value ? value.toUpperCase() : void 0;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
// docx/theme.ts
|
|
1045
|
+
function fontSetOf(collection) {
|
|
1046
|
+
const { latin, eastAsia, complexScript } = collection;
|
|
907
1047
|
return {
|
|
908
1048
|
...latin ? { latin } : {},
|
|
909
|
-
...
|
|
910
|
-
...
|
|
1049
|
+
...eastAsia ? { eastAsia } : {},
|
|
1050
|
+
...complexScript ? { complexScript } : {}
|
|
911
1051
|
};
|
|
912
1052
|
}
|
|
913
|
-
function
|
|
914
|
-
const
|
|
915
|
-
const root = document.documentElement;
|
|
916
|
-
const clrScheme = Array.from(root.getElementsByTagNameNS(DRAWING_NS, "clrScheme"))[0];
|
|
1053
|
+
function parseTheme2(xml) {
|
|
1054
|
+
const theme = parseTheme(parseXml2(xml));
|
|
917
1055
|
const colors = {};
|
|
918
|
-
for (const
|
|
919
|
-
const
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
}
|
|
923
|
-
const fontScheme = Array.from(root.getElementsByTagNameNS(DRAWING_NS, "fontScheme"))[0];
|
|
924
|
-
const major = drawingChild(fontScheme, "majorFont");
|
|
925
|
-
const minor = drawingChild(fontScheme, "minorFont");
|
|
1056
|
+
for (const slot2 of THEME_COLOR_SLOTS) {
|
|
1057
|
+
const value = themeSlotHex(theme.colorScheme.colors[slot2]);
|
|
1058
|
+
if (value) colors[slot2] = value;
|
|
1059
|
+
}
|
|
1060
|
+
const { major, minor } = theme.fontScheme;
|
|
926
1061
|
return { colors, colorMapping: {}, fonts: { major: fontSetOf(major), minor: fontSetOf(minor) } };
|
|
927
1062
|
}
|
|
928
1063
|
var MAPPING_KEYS = ["bg1", "tx1", "bg2", "tx2"];
|
|
@@ -960,9 +1095,6 @@ function parseColorSchemeMapping(xml) {
|
|
|
960
1095
|
function isThemeColorToken(value) {
|
|
961
1096
|
return isStThemeColor(value);
|
|
962
1097
|
}
|
|
963
|
-
function toHex(value) {
|
|
964
|
-
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
965
|
-
}
|
|
966
1098
|
function fractionToThemeByte(fraction) {
|
|
967
1099
|
return toHex(Math.round(Math.min(1, Math.max(0, fraction)) * 255));
|
|
968
1100
|
}
|
|
@@ -2998,7 +3130,7 @@ var NAMED = {
|
|
|
2998
3130
|
var POINT_TO_PX = 96 / 72;
|
|
2999
3131
|
var WATERMARK_PREFIX = "PowerPlusWaterMarkObject";
|
|
3000
3132
|
var DEFAULT_WATERMARK_COLOR = "#c0c0c0";
|
|
3001
|
-
function
|
|
3133
|
+
function colorOf(value) {
|
|
3002
3134
|
const text = (value ?? "").trim().toLowerCase().split(/\s/)[0] ?? "";
|
|
3003
3135
|
if (NAMED[text]) return NAMED[text];
|
|
3004
3136
|
const hex = /^#?([0-9a-f]{6})$/.exec(text);
|
|
@@ -3019,7 +3151,7 @@ function parseWatermarkShape(shape) {
|
|
|
3019
3151
|
const rotation = /rotation:\s*(-?[\d.]+)/i.exec(style);
|
|
3020
3152
|
const spec = {
|
|
3021
3153
|
text: path.getAttribute("string") ?? "",
|
|
3022
|
-
color:
|
|
3154
|
+
color: colorOf(shape.getAttribute("fillcolor")),
|
|
3023
3155
|
semitransparent: opacity !== null && opacity !== "" && opacity !== "1",
|
|
3024
3156
|
layout: rotation && Math.abs(Number(rotation[1]) % 360) > 1 ? "diagonal" : "horizontal",
|
|
3025
3157
|
...family ? { fontFamily: family.trim() } : {}
|
|
@@ -3131,7 +3263,7 @@ var add = (parent, ...items) => {
|
|
|
3131
3263
|
return parent;
|
|
3132
3264
|
};
|
|
3133
3265
|
var emu = (px2) => String(Math.max(1, Math.round(px2 * EMU_PER_PIXEL)));
|
|
3134
|
-
var
|
|
3266
|
+
var descendants2 = (root, ns, local) => Array.from(root.getElementsByTagNameNS(ns, local));
|
|
3135
3267
|
function paragraphsFor(doc, lines) {
|
|
3136
3268
|
return (lines.length ? lines : [""]).map((line) => {
|
|
3137
3269
|
const paragraph = makeW(doc, "p");
|
|
@@ -3223,23 +3355,23 @@ function buildTextBoxDrawing(doc, image, docPrId) {
|
|
|
3223
3355
|
}
|
|
3224
3356
|
function isSimpleTextBox(graphicData, anchored) {
|
|
3225
3357
|
if (!graphicData || anchored) return false;
|
|
3226
|
-
const content =
|
|
3358
|
+
const content = descendants2(graphicData, W_NS, "txbxContent")[0];
|
|
3227
3359
|
if (!content) return false;
|
|
3228
3360
|
const plain = (node, allowed) => Array.from(node.childNodes).filter(isElement).every((child3) => child3.namespaceURI === W_NS && allowed.includes(child3.localName));
|
|
3229
|
-
return plain(content, ["p"]) &&
|
|
3230
|
-
(paragraph) => plain(paragraph, ["r"]) &&
|
|
3361
|
+
return plain(content, ["p"]) && descendants2(content, W_NS, "p").every(
|
|
3362
|
+
(paragraph) => plain(paragraph, ["r"]) && descendants2(paragraph, W_NS, "r").every((run) => plain(run, ["t"]))
|
|
3231
3363
|
);
|
|
3232
3364
|
}
|
|
3233
3365
|
function textBoxHasBorder(graphicData) {
|
|
3234
|
-
const spPr = graphicData &&
|
|
3366
|
+
const spPr = graphicData && descendants2(graphicData, WPS_NS, "spPr")[0];
|
|
3235
3367
|
const ln = spPr && Array.from(spPr.getElementsByTagNameNS(A_NS, "ln"))[0];
|
|
3236
3368
|
return Boolean(ln && !ln.getElementsByTagNameNS(A_NS, "noFill").length);
|
|
3237
3369
|
}
|
|
3238
3370
|
function patchTextBox(doc, drawing, image, base) {
|
|
3239
3371
|
if (image.widthPx !== base.widthPx || image.heightPx !== base.heightPx)
|
|
3240
3372
|
for (const node of [
|
|
3241
|
-
...
|
|
3242
|
-
...
|
|
3373
|
+
...descendants2(drawing, WP_NS, "extent"),
|
|
3374
|
+
...descendants2(drawing, A_NS, "ext").filter(
|
|
3243
3375
|
(ext) => ext.parentNode?.localName === "xfrm"
|
|
3244
3376
|
)
|
|
3245
3377
|
]) {
|
|
@@ -3247,14 +3379,14 @@ function patchTextBox(doc, drawing, image, base) {
|
|
|
3247
3379
|
node.setAttribute("cy", emu(image.heightPx));
|
|
3248
3380
|
}
|
|
3249
3381
|
if (JSON.stringify(image.textBoxText) !== JSON.stringify(base.textBoxText)) {
|
|
3250
|
-
const content =
|
|
3382
|
+
const content = descendants2(drawing, W_NS, "txbxContent")[0];
|
|
3251
3383
|
if (content) {
|
|
3252
3384
|
for (const child3 of Array.from(content.childNodes)) content.removeChild(child3);
|
|
3253
3385
|
add(content, ...paragraphsFor(doc, image.textBoxText ?? []));
|
|
3254
3386
|
}
|
|
3255
3387
|
}
|
|
3256
3388
|
if (image.textBoxBorder !== false !== (base.textBoxBorder !== false)) {
|
|
3257
|
-
const spPr =
|
|
3389
|
+
const spPr = descendants2(drawing, WPS_NS, "spPr")[0];
|
|
3258
3390
|
if (spPr) {
|
|
3259
3391
|
for (const old of Array.from(spPr.childNodes).filter(
|
|
3260
3392
|
(node) => isElement(node) && node.localName === "ln"
|
|
@@ -3417,47 +3549,6 @@ var DIAGRAM_RELATIONSHIP_TYPES = {
|
|
|
3417
3549
|
drawing: RELATIONSHIP_TYPES.diagramDrawing
|
|
3418
3550
|
};
|
|
3419
3551
|
|
|
3420
|
-
// diagram/dom.ts
|
|
3421
|
-
function attributeReader(element) {
|
|
3422
|
-
return (name) => {
|
|
3423
|
-
if (!element) return void 0;
|
|
3424
|
-
const direct = element.getAttribute(name);
|
|
3425
|
-
if (direct !== null) return direct;
|
|
3426
|
-
const attributes = element.attributes;
|
|
3427
|
-
for (let index = 0; index < attributes.length; index++) {
|
|
3428
|
-
const candidate = attributes.item(index);
|
|
3429
|
-
if (candidate && candidate.localName === name) return candidate.value;
|
|
3430
|
-
}
|
|
3431
|
-
return void 0;
|
|
3432
|
-
};
|
|
3433
|
-
}
|
|
3434
|
-
function stringAttribute(element, name) {
|
|
3435
|
-
const value = attributeReader(element)(name)?.trim();
|
|
3436
|
-
return value ? value : void 0;
|
|
3437
|
-
}
|
|
3438
|
-
function integerAttribute(element, name) {
|
|
3439
|
-
const parsed = Number.parseInt(attributeReader(element)(name) ?? "", 10);
|
|
3440
|
-
return Number.isFinite(parsed) ? parsed : void 0;
|
|
3441
|
-
}
|
|
3442
|
-
function booleanAttribute(element, name) {
|
|
3443
|
-
const value = attributeReader(element)(name)?.trim().toLowerCase();
|
|
3444
|
-
if (value === "1" || value === "true") return true;
|
|
3445
|
-
if (value === "0" || value === "false") return false;
|
|
3446
|
-
return void 0;
|
|
3447
|
-
}
|
|
3448
|
-
function descendants2(root, local) {
|
|
3449
|
-
const result = [];
|
|
3450
|
-
const visit = (node) => {
|
|
3451
|
-
for (const child3 of Array.from(node.childNodes)) {
|
|
3452
|
-
if (!isElement(child3)) continue;
|
|
3453
|
-
if (child3.localName === local) result.push(child3);
|
|
3454
|
-
visit(child3);
|
|
3455
|
-
}
|
|
3456
|
-
};
|
|
3457
|
-
visit(root);
|
|
3458
|
-
return result;
|
|
3459
|
-
}
|
|
3460
|
-
|
|
3461
3552
|
// diagram/data-model.ts
|
|
3462
3553
|
var TRANSITION_TYPES = /* @__PURE__ */ new Set(["parTrans", "sibTrans"]);
|
|
3463
3554
|
var STRUCTURAL_TYPES = /* @__PURE__ */ new Set(["doc", "pres", "parTrans", "sibTrans"]);
|
|
@@ -3481,7 +3572,7 @@ function connectionLabel(connection, transitionText) {
|
|
|
3481
3572
|
function textBodyParagraphs(body) {
|
|
3482
3573
|
if (!body) return [];
|
|
3483
3574
|
return children(body, "p", NS.a).map(
|
|
3484
|
-
(paragraph) =>
|
|
3575
|
+
(paragraph) => descendants(paragraph, "t").map((run) => run.textContent ?? "").join("")
|
|
3485
3576
|
);
|
|
3486
3577
|
}
|
|
3487
3578
|
function parsePoint(element) {
|
|
@@ -3561,7 +3652,7 @@ function parseDiagramDataModel(source, part) {
|
|
|
3561
3652
|
if ((!connection.type || connection.type === "parOf") && !parentById.has(connection.destId))
|
|
3562
3653
|
parentById.set(connection.destId, connection.sourceId);
|
|
3563
3654
|
}
|
|
3564
|
-
const ext =
|
|
3655
|
+
const ext = descendants(root, "dataModelExt")[0];
|
|
3565
3656
|
const drawingRelId = stringAttribute(ext, "relId");
|
|
3566
3657
|
return {
|
|
3567
3658
|
points,
|
|
@@ -3573,55 +3664,8 @@ function parseDiagramDataModel(source, part) {
|
|
|
3573
3664
|
};
|
|
3574
3665
|
}
|
|
3575
3666
|
|
|
3576
|
-
// diagram/drawing-color.ts
|
|
3577
|
-
var COLOR_ELEMENTS = {
|
|
3578
|
-
srgbClr: "srgb",
|
|
3579
|
-
schemeClr: "scheme",
|
|
3580
|
-
sysClr: "system",
|
|
3581
|
-
prstClr: "preset",
|
|
3582
|
-
scrgbClr: "scrgb",
|
|
3583
|
-
hslClr: "hsl"
|
|
3584
|
-
};
|
|
3585
|
-
function colorValue(kind, element) {
|
|
3586
|
-
const attribute = (name) => element.getAttribute(name) ?? "";
|
|
3587
|
-
if (kind === "scrgb") return `${attribute("r")},${attribute("g")},${attribute("b")}`;
|
|
3588
|
-
if (kind === "hsl") return `${attribute("hue")},${attribute("sat")},${attribute("lum")}`;
|
|
3589
|
-
return attribute("val");
|
|
3590
|
-
}
|
|
3591
|
-
function parseDrawingColorIn(container) {
|
|
3592
|
-
if (!container) return void 0;
|
|
3593
|
-
for (const element of elements(container)) {
|
|
3594
|
-
const kind = COLOR_ELEMENTS[element.localName];
|
|
3595
|
-
if (!kind || element.namespaceURI && element.namespaceURI !== NS.a) continue;
|
|
3596
|
-
return parseDrawingColor(element);
|
|
3597
|
-
}
|
|
3598
|
-
return void 0;
|
|
3599
|
-
}
|
|
3600
|
-
function parseDrawingColor(element) {
|
|
3601
|
-
const kind = COLOR_ELEMENTS[element.localName];
|
|
3602
|
-
if (!kind) return void 0;
|
|
3603
|
-
const color = {
|
|
3604
|
-
kind,
|
|
3605
|
-
value: colorValue(kind, element),
|
|
3606
|
-
transforms: elements(element).map((child3) => ({
|
|
3607
|
-
name: child3.localName,
|
|
3608
|
-
value: child3.getAttribute("val") ?? ""
|
|
3609
|
-
}))
|
|
3610
|
-
};
|
|
3611
|
-
const fallback = kind === "system" ? element.getAttribute("lastClr") : null;
|
|
3612
|
-
if (fallback) color.fallback = fallback;
|
|
3613
|
-
return color;
|
|
3614
|
-
}
|
|
3615
|
-
function parseDrawingColorList(container) {
|
|
3616
|
-
if (!container) return [];
|
|
3617
|
-
return elements(container).flatMap((element) => {
|
|
3618
|
-
const color = parseDrawingColor(element);
|
|
3619
|
-
return color ? [color] : [];
|
|
3620
|
-
});
|
|
3621
|
-
}
|
|
3622
|
-
|
|
3623
3667
|
// diagram/definitions.ts
|
|
3624
|
-
var
|
|
3668
|
+
var rootOf2 = (source) => (typeof source === "string" ? parseXml(source, { label: "DiagramML" }) : source).documentElement;
|
|
3625
3669
|
function parseDefinitionHeader(root) {
|
|
3626
3670
|
const header = {
|
|
3627
3671
|
uniqueId: stringAttribute(root, "uniqueId") ?? "",
|
|
@@ -3642,7 +3686,7 @@ function colorList(container) {
|
|
|
3642
3686
|
return { ...method ? { method } : {}, colors: parseDrawingColorList(container) };
|
|
3643
3687
|
}
|
|
3644
3688
|
function parseDiagramColors(source) {
|
|
3645
|
-
const root =
|
|
3689
|
+
const root = rootOf2(source);
|
|
3646
3690
|
const labels = children(root, "styleLbl", NS.dgm).map((label) => ({
|
|
3647
3691
|
name: stringAttribute(label, "name") ?? "",
|
|
3648
3692
|
fill: colorList(first(label, "fillClrLst", NS.dgm)),
|
|
@@ -3682,7 +3726,7 @@ function parseStyleReferences(style) {
|
|
|
3682
3726
|
}
|
|
3683
3727
|
var hasContent = (element) => Boolean(element && (element.attributes.length > 0 || elements(element).length > 0));
|
|
3684
3728
|
function parseDiagramQuickStyle(source) {
|
|
3685
|
-
const root =
|
|
3729
|
+
const root = rootOf2(source);
|
|
3686
3730
|
const labels = children(root, "styleLbl", NS.dgm).map((label) => ({
|
|
3687
3731
|
name: stringAttribute(label, "name") ?? "",
|
|
3688
3732
|
...parseStyleReferences(first(label, "style", NS.dgm)),
|
|
@@ -3696,7 +3740,7 @@ function parseDiagramQuickStyle(source) {
|
|
|
3696
3740
|
};
|
|
3697
3741
|
}
|
|
3698
3742
|
function parseDiagramLayoutSummary(source) {
|
|
3699
|
-
const root =
|
|
3743
|
+
const root = rootOf2(source);
|
|
3700
3744
|
const header = parseDefinitionHeader(root);
|
|
3701
3745
|
const family = resolveDiagramLayoutCategory(
|
|
3702
3746
|
header.uniqueId,
|
|
@@ -3708,11 +3752,11 @@ function parseDiagramLayoutSummary(source) {
|
|
|
3708
3752
|
...header,
|
|
3709
3753
|
...family ? { family } : {},
|
|
3710
3754
|
...rootAlgorithm ? { rootAlgorithm } : {},
|
|
3711
|
-
layoutNodeCount:
|
|
3755
|
+
layoutNodeCount: descendants(root, "layoutNode").length
|
|
3712
3756
|
};
|
|
3713
3757
|
}
|
|
3714
3758
|
|
|
3715
|
-
//
|
|
3759
|
+
// drawingml/drawing-fill.ts
|
|
3716
3760
|
var FILL_ELEMENTS = /* @__PURE__ */ new Set([
|
|
3717
3761
|
"noFill",
|
|
3718
3762
|
"solidFill",
|
|
@@ -3804,7 +3848,7 @@ function parseDrawingLine(ln) {
|
|
|
3804
3848
|
return line;
|
|
3805
3849
|
}
|
|
3806
3850
|
|
|
3807
|
-
//
|
|
3851
|
+
// drawingml/drawing-text.ts
|
|
3808
3852
|
function parseSpacing(parent) {
|
|
3809
3853
|
for (const [name, unit, divisor] of [
|
|
3810
3854
|
["spcPts", "points", 100],
|
|
@@ -3883,7 +3927,7 @@ function parseDrawingTextBody(body) {
|
|
|
3883
3927
|
return result;
|
|
3884
3928
|
}
|
|
3885
3929
|
|
|
3886
|
-
//
|
|
3930
|
+
// drawingml/drawing-geometry.ts
|
|
3887
3931
|
var int = (element, name) => Number.parseInt(element?.getAttribute(name) ?? "", 10);
|
|
3888
3932
|
function parseFrame(container) {
|
|
3889
3933
|
const off = first(container, "off", NS.a);
|
|
@@ -4685,6 +4729,23 @@ function parseRunPropertiesSnapshot(xml) {
|
|
|
4685
4729
|
return parsePropertiesSnapshot(xml, "rPr");
|
|
4686
4730
|
}
|
|
4687
4731
|
|
|
4732
|
+
// docx/field-flags.ts
|
|
4733
|
+
function parseFieldFlags(element) {
|
|
4734
|
+
const locked = onOffAttribute(element, "fldLock");
|
|
4735
|
+
const dirty = onOffAttribute(element, "dirty");
|
|
4736
|
+
if (locked === void 0 && dirty === void 0) return void 0;
|
|
4737
|
+
return { ...locked !== void 0 && { locked }, ...dirty !== void 0 && { dirty } };
|
|
4738
|
+
}
|
|
4739
|
+
function writeFieldFlags(element, flags) {
|
|
4740
|
+
for (const [name, value] of [
|
|
4741
|
+
["fldLock", flags?.locked],
|
|
4742
|
+
["dirty", flags?.dirty]
|
|
4743
|
+
]) {
|
|
4744
|
+
if (value === void 0) element.removeAttributeNS(WORD_NS, name);
|
|
4745
|
+
else element.setAttributeNS(WORD_NS, `w:${name}`, value ? "true" : "false");
|
|
4746
|
+
}
|
|
4747
|
+
}
|
|
4748
|
+
|
|
4688
4749
|
// docx/write-run.ts
|
|
4689
4750
|
function setAttribute6(element, local, value) {
|
|
4690
4751
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -4870,6 +4931,7 @@ function createRun(doc, run, base, old, allocator) {
|
|
|
4870
4931
|
if (run.fieldChar) {
|
|
4871
4932
|
const marker = makeW(doc, "fldChar");
|
|
4872
4933
|
setAttribute6(marker, "fldCharType", run.fieldChar);
|
|
4934
|
+
writeFieldFlags(marker, run.fieldFlags);
|
|
4873
4935
|
node.appendChild(marker);
|
|
4874
4936
|
return node;
|
|
4875
4937
|
}
|
|
@@ -4950,6 +5012,11 @@ function takeSimpleFieldCommentEdges(doc, runs, start, end, opens, closes) {
|
|
|
4950
5012
|
after: take(closes, end - 1).reverse().flatMap((edge) => rangeEndNodes(doc, edge))
|
|
4951
5013
|
};
|
|
4952
5014
|
}
|
|
5015
|
+
|
|
5016
|
+
// docx/field-lock.ts
|
|
5017
|
+
function sameFieldFlags(a, b) {
|
|
5018
|
+
return a?.locked === b?.locked && a?.dirty === b?.dirty;
|
|
5019
|
+
}
|
|
4953
5020
|
var MATH_NAMESPACES = /* @__PURE__ */ new Set([
|
|
4954
5021
|
"http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
4955
5022
|
"http://purl.oclc.org/ooxml/officeDocument/math"
|
|
@@ -5274,6 +5341,7 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
5274
5341
|
container = makeW(doc, "fldSimple");
|
|
5275
5342
|
setW6(container, "instr", ` ${group.instr} `);
|
|
5276
5343
|
}
|
|
5344
|
+
if (group.kind === "simpleField") writeFieldFlags(container, runAt(start).fieldFlags);
|
|
5277
5345
|
const edges = group.kind === "simpleField" ? takeSimpleFieldCommentEdges(doc, runs, start, index, opens, closes) : { before: [], after: [] };
|
|
5278
5346
|
for (let item = start; item < index; item++)
|
|
5279
5347
|
for (const node of nodesFor(item)) container.appendChild(node);
|
|
@@ -5284,13 +5352,18 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
5284
5352
|
function containerGroup(run) {
|
|
5285
5353
|
if (run.link) return { kind: "link", link: run.link };
|
|
5286
5354
|
if (run.field?.simple)
|
|
5287
|
-
return {
|
|
5355
|
+
return {
|
|
5356
|
+
kind: "simpleField",
|
|
5357
|
+
instr: run.field.instr,
|
|
5358
|
+
instanceId: run.fieldInstanceId,
|
|
5359
|
+
fieldFlags: run.fieldFlags
|
|
5360
|
+
};
|
|
5288
5361
|
return void 0;
|
|
5289
5362
|
}
|
|
5290
5363
|
function sameGroup(a, b) {
|
|
5291
5364
|
if (!a || !b) return a === b;
|
|
5292
5365
|
if (a.kind === "link" && b.kind === "link") return sameLink(a.link, b.link);
|
|
5293
|
-
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId;
|
|
5366
|
+
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId && sameFieldFlags(a.fieldFlags, b.fieldFlags);
|
|
5294
5367
|
}
|
|
5295
5368
|
|
|
5296
5369
|
// docx/paragraph-properties.ts
|
|
@@ -6214,6 +6287,217 @@ async function registerNumberingPart(zip) {
|
|
|
6214
6287
|
zip.file(relsPath, buildXml(relsDoc));
|
|
6215
6288
|
}
|
|
6216
6289
|
|
|
6290
|
+
// docx/numbering-parse.ts
|
|
6291
|
+
var integer2 = (value, fallback) => parseInteger(value) ?? fallback;
|
|
6292
|
+
var flag = (element) => onOffElement(element) === true;
|
|
6293
|
+
function byName(root, local) {
|
|
6294
|
+
return Array.from(root.getElementsByTagName("*")).filter(
|
|
6295
|
+
(node) => node.nodeType === 1 && named2(node, local)
|
|
6296
|
+
);
|
|
6297
|
+
}
|
|
6298
|
+
function parseMarkerFormat(rPr) {
|
|
6299
|
+
if (!rPr) return void 0;
|
|
6300
|
+
const format = {};
|
|
6301
|
+
const family = getW(first2(rPr, "rFonts"), "ascii");
|
|
6302
|
+
if (family) format.fontFamily = family;
|
|
6303
|
+
const size = parseInteger(getW(first2(rPr, "sz"), "val"));
|
|
6304
|
+
if (size !== void 0 && size > 0) format.fontSizeHalfPoints = size;
|
|
6305
|
+
if (onOffElement(first2(rPr, "b")) === true) format.bold = true;
|
|
6306
|
+
if (onOffElement(first2(rPr, "i")) === true) format.italic = true;
|
|
6307
|
+
const color = getW(first2(rPr, "color"), "val");
|
|
6308
|
+
if (color && /^[0-9a-f]{6}$/i.test(color)) format.color = `#${color.toLowerCase()}`;
|
|
6309
|
+
return Object.keys(format).length ? format : void 0;
|
|
6310
|
+
}
|
|
6311
|
+
function parseNumberingLevel(lvl) {
|
|
6312
|
+
const level = integer2(getW(lvl, "ilvl"), 0);
|
|
6313
|
+
const start = integer2(getW(first2(lvl, "start"), "val"), 1);
|
|
6314
|
+
const numFmt = enumValue(isStNumberFormat, getW(first2(lvl, "numFmt"), "val"), "w:numFmt") ?? "decimal";
|
|
6315
|
+
const lvlText = getW(first2(lvl, "lvlText"), "val") ?? "";
|
|
6316
|
+
const jc = getW(first2(lvl, "lvlJc"), "val");
|
|
6317
|
+
const ind = first2(first2(lvl, "pPr"), "ind");
|
|
6318
|
+
const suffRaw = getW(first2(lvl, "suff"), "val");
|
|
6319
|
+
const result = { level, start, numFmt, lvlText };
|
|
6320
|
+
if (!first2(lvl, "start")) result.startWasOmitted = true;
|
|
6321
|
+
const paragraphStyleId = getW(first2(lvl, "pStyle"), "val");
|
|
6322
|
+
if (paragraphStyleId) result.paragraphStyleId = paragraphStyleId;
|
|
6323
|
+
if (jc === "left" || jc === "center" || jc === "right") result.lvlJc = jc;
|
|
6324
|
+
const left = getW(ind, "left") ?? getW(ind, "start");
|
|
6325
|
+
if (left !== void 0) result.indentLeftTwips = parseSignedTwips(left) ?? signedTwips(0);
|
|
6326
|
+
const hanging = getW(ind, "hanging");
|
|
6327
|
+
if (hanging !== void 0) result.hangingTwips = parseTwips(hanging) ?? twips(0);
|
|
6328
|
+
const firstLine = getW(ind, "firstLine");
|
|
6329
|
+
if (firstLine !== void 0) result.firstLineTwips = parseTwips(firstLine) ?? twips(0);
|
|
6330
|
+
const tabs = first2(first2(lvl, "pPr"), "tabs");
|
|
6331
|
+
const tab = tabs ? children2(tabs, "tab").find((stop) => getW(stop, "val") !== "clear") : void 0;
|
|
6332
|
+
const tabPos = tab ? parseTwips(getW(tab, "pos")) : void 0;
|
|
6333
|
+
if (tabPos !== void 0) result.tabStopTwips = tabPos;
|
|
6334
|
+
if (flag(first2(lvl, "isLgl"))) result.isLgl = true;
|
|
6335
|
+
const restart = getW(first2(lvl, "lvlRestart"), "val");
|
|
6336
|
+
if (restart !== void 0) result.lvlRestart = integer2(restart, 0);
|
|
6337
|
+
const marker = parseMarkerFormat(first2(lvl, "rPr"));
|
|
6338
|
+
if (marker) result.markerFormat = marker;
|
|
6339
|
+
result.suffix = suffRaw === "space" ? "space" : suffRaw === "nothing" ? "none" : "tab";
|
|
6340
|
+
return result;
|
|
6341
|
+
}
|
|
6342
|
+
function parseAbstractNum(element) {
|
|
6343
|
+
const id = getW(element, "abstractNumId");
|
|
6344
|
+
if (!id) return void 0;
|
|
6345
|
+
const levels = {};
|
|
6346
|
+
for (const lvl of children2(element, "lvl")) {
|
|
6347
|
+
const parsed = parseNumberingLevel(lvl);
|
|
6348
|
+
levels[parsed.level] = parsed;
|
|
6349
|
+
}
|
|
6350
|
+
return { id, levels };
|
|
6351
|
+
}
|
|
6352
|
+
function parseNum(element) {
|
|
6353
|
+
const id = getW(element, "numId");
|
|
6354
|
+
if (!id) return void 0;
|
|
6355
|
+
const abstractNumId = getW(first2(element, "abstractNumId"), "val") ?? "";
|
|
6356
|
+
const levelOverrides = {};
|
|
6357
|
+
for (const override of children2(element, "lvlOverride")) {
|
|
6358
|
+
const level = integer2(getW(override, "ilvl"), 0);
|
|
6359
|
+
const entry = {};
|
|
6360
|
+
const startOverride = getW(first2(override, "startOverride"), "val");
|
|
6361
|
+
if (startOverride !== void 0) entry.startOverride = integer2(startOverride, 1);
|
|
6362
|
+
const lvl = first2(override, "lvl");
|
|
6363
|
+
if (lvl) entry.lvl = parseNumberingLevel(lvl);
|
|
6364
|
+
if (Object.keys(entry).length) levelOverrides[level] = entry;
|
|
6365
|
+
}
|
|
6366
|
+
return {
|
|
6367
|
+
id,
|
|
6368
|
+
abstractNumId,
|
|
6369
|
+
...Object.keys(levelOverrides).length ? { levelOverrides } : {}
|
|
6370
|
+
};
|
|
6371
|
+
}
|
|
6372
|
+
function parseNumberingCatalog(xml) {
|
|
6373
|
+
const document = parseXml2(xml);
|
|
6374
|
+
const root = document.documentElement;
|
|
6375
|
+
const abstractNums = {};
|
|
6376
|
+
const warnings = [];
|
|
6377
|
+
for (const element of byName(root, "abstractNum")) {
|
|
6378
|
+
const parsed = parseAbstractNum(element);
|
|
6379
|
+
if (!parsed) continue;
|
|
6380
|
+
abstractNums[parsed.id] = parsed;
|
|
6381
|
+
const link = getW(first2(element, "numStyleLink"), "val");
|
|
6382
|
+
if (link)
|
|
6383
|
+
warnings.push(
|
|
6384
|
+
`Numbering definition abstractNum ${parsed.id} links to style "${link}"; style-linked numbering levels are not resolved.`
|
|
6385
|
+
);
|
|
6386
|
+
if (byName(element, "lvlPicBulletId").length)
|
|
6387
|
+
warnings.push(
|
|
6388
|
+
`Numbering definition abstractNum ${parsed.id} uses a picture bullet; picture bullets are not rendered.`
|
|
6389
|
+
);
|
|
6390
|
+
}
|
|
6391
|
+
const nums = {};
|
|
6392
|
+
for (const element of byName(root, "num")) {
|
|
6393
|
+
const parsed = parseNum(element);
|
|
6394
|
+
if (parsed) nums[parsed.id] = parsed;
|
|
6395
|
+
}
|
|
6396
|
+
return { abstractNums, nums, warnings: [...new Set(warnings)] };
|
|
6397
|
+
}
|
|
6398
|
+
function resolveNumberingLevel(catalog, numId, level) {
|
|
6399
|
+
const num = catalog.nums[numId];
|
|
6400
|
+
if (!num) return void 0;
|
|
6401
|
+
const override = num.levelOverrides?.[level];
|
|
6402
|
+
const sourceAbstract = catalog.abstractNums[num.abstractNumId]?.levels[level];
|
|
6403
|
+
const abstract = sourceAbstract?.startWasOmitted && sourceAbstract.start === 1 ? { ...sourceAbstract, start: 0 } : sourceAbstract;
|
|
6404
|
+
let base = override?.lvl ?? abstract;
|
|
6405
|
+
if (!base) return void 0;
|
|
6406
|
+
if (override?.lvl) {
|
|
6407
|
+
const { lvlRestart: _ignored, ...properties } = base;
|
|
6408
|
+
base = {
|
|
6409
|
+
...properties,
|
|
6410
|
+
...abstract?.lvlRestart !== void 0 ? { lvlRestart: abstract.lvlRestart } : {}
|
|
6411
|
+
};
|
|
6412
|
+
}
|
|
6413
|
+
let start = override?.startOverride ?? base.start;
|
|
6414
|
+
if (override?.lvl) {
|
|
6415
|
+
if (abstract?.lvlRestart === 0 && override.startOverride === void 0) start = abstract.start;
|
|
6416
|
+
else if (!override.lvl.startWasOmitted || override.lvl.start !== 1) start = override.lvl.start;
|
|
6417
|
+
else start = override.startOverride ?? 0;
|
|
6418
|
+
}
|
|
6419
|
+
return start !== base.start ? { ...base, start } : base;
|
|
6420
|
+
}
|
|
6421
|
+
|
|
6422
|
+
// docx/numbering-start-edit.ts
|
|
6423
|
+
function assertListStartValue(level, start) {
|
|
6424
|
+
if (!Number.isInteger(level) || level < 0 || level > 8)
|
|
6425
|
+
throw new Error("List level must be an integer from 0 through 8.");
|
|
6426
|
+
if (!Number.isInteger(start) || start < 0 || start > 2147483647)
|
|
6427
|
+
throw new Error("List start must be an integer from 0 through 2147483647.");
|
|
6428
|
+
}
|
|
6429
|
+
|
|
6430
|
+
// docx/numbering-start-patch.ts
|
|
6431
|
+
function withoutStarts(num) {
|
|
6432
|
+
const { levelOverrides, ...properties } = num;
|
|
6433
|
+
const kept = {};
|
|
6434
|
+
for (const [level, override] of Object.entries(levelOverrides ?? {})) {
|
|
6435
|
+
const { startOverride: _start, ...rest } = override;
|
|
6436
|
+
if (Object.keys(rest).length) kept[level] = rest;
|
|
6437
|
+
}
|
|
6438
|
+
return { ...properties, ...Object.keys(kept).length ? { levelOverrides: kept } : {} };
|
|
6439
|
+
}
|
|
6440
|
+
function numberingStartChanges(prior, next) {
|
|
6441
|
+
const changes = [];
|
|
6442
|
+
for (const [id, previous] of Object.entries(prior?.nums ?? {})) {
|
|
6443
|
+
const current = next.nums[id];
|
|
6444
|
+
if (!current || JSON.stringify(withoutStarts(current)) !== JSON.stringify(withoutStarts(previous)))
|
|
6445
|
+
throw new Error(
|
|
6446
|
+
`Cannot edit numbering definition num "${id}" except its supported start overrides.`
|
|
6447
|
+
);
|
|
6448
|
+
for (const key of /* @__PURE__ */ new Set([
|
|
6449
|
+
...Object.keys(previous.levelOverrides ?? {}),
|
|
6450
|
+
...Object.keys(current.levelOverrides ?? {})
|
|
6451
|
+
])) {
|
|
6452
|
+
const level = Number(key);
|
|
6453
|
+
const old = previous.levelOverrides?.[level];
|
|
6454
|
+
const value = current.levelOverrides?.[level];
|
|
6455
|
+
if (old?.startOverride === value?.startOverride) continue;
|
|
6456
|
+
if (value?.startOverride === void 0)
|
|
6457
|
+
throw new Error("Removing a list start override is unsupported.");
|
|
6458
|
+
assertListStartValue(level, value.startOverride);
|
|
6459
|
+
if (String(level) !== key || !prior || !resolveNumberingLevel(prior, id, level))
|
|
6460
|
+
throw new Error("List instance or level does not exist.");
|
|
6461
|
+
if (old?.lvl || value.lvl)
|
|
6462
|
+
throw new Error("Changing starts with a full level override is unsupported.");
|
|
6463
|
+
changes.push({ numId: id, level, start: value.startOverride });
|
|
6464
|
+
}
|
|
6465
|
+
}
|
|
6466
|
+
return changes;
|
|
6467
|
+
}
|
|
6468
|
+
function patchNumberingStarts(doc, changes) {
|
|
6469
|
+
const sameNumber = (source, expected) => source !== void 0 && /^[+-]?\d+$/.test(source) && Number(source) === Number(expected);
|
|
6470
|
+
const prepared = changes.map((change) => {
|
|
6471
|
+
const nums = children2(doc.documentElement, "num").filter(
|
|
6472
|
+
(num2) => sameNumber(getW(num2, "numId"), change.numId)
|
|
6473
|
+
);
|
|
6474
|
+
if (nums.length !== 1 || getW(nums[0], "numId") !== change.numId)
|
|
6475
|
+
throw new Error("Cannot patch an ambiguous or missing source list instance.");
|
|
6476
|
+
const num = nums[0];
|
|
6477
|
+
const overrides = children2(num, "lvlOverride").filter(
|
|
6478
|
+
(node) => sameNumber(getW(node, "ilvl"), String(change.level))
|
|
6479
|
+
);
|
|
6480
|
+
if (overrides.length > 1) throw new Error("Cannot patch duplicate source level overrides.");
|
|
6481
|
+
const override = overrides[0];
|
|
6482
|
+
if (override && getW(override, "ilvl") !== String(change.level))
|
|
6483
|
+
throw new Error("Cannot patch a noncanonical source level override.");
|
|
6484
|
+
if (override && (children2(override, "lvl").length || children2(override, "startOverride").length > 1))
|
|
6485
|
+
throw new Error("Cannot patch a full or ambiguous source level override.");
|
|
6486
|
+
return { change, num, override };
|
|
6487
|
+
});
|
|
6488
|
+
for (const { change, num, override: existing } of prepared) {
|
|
6489
|
+
const override = existing ?? makeW(doc, "lvlOverride");
|
|
6490
|
+
if (!existing) {
|
|
6491
|
+
override.setAttributeNS(WORD_NS, "w:ilvl", String(change.level));
|
|
6492
|
+
const after = children2(num, "lvlOverride").at(-1) ?? children2(num, "abstractNumId")[0];
|
|
6493
|
+
num.insertBefore(override, after?.nextSibling ?? null);
|
|
6494
|
+
}
|
|
6495
|
+
const start = children2(override, "startOverride")[0] ?? makeW(doc, "startOverride");
|
|
6496
|
+
start.setAttributeNS(WORD_NS, "w:val", String(change.start));
|
|
6497
|
+
if (!start.parentNode) override.insertBefore(start, override.firstChild);
|
|
6498
|
+
}
|
|
6499
|
+
}
|
|
6500
|
+
|
|
6217
6501
|
// docx/numbering-package.ts
|
|
6218
6502
|
function setAttribute8(element, local, value) {
|
|
6219
6503
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -6318,17 +6602,14 @@ async function applyNumberingCatalog(zip, model, binding) {
|
|
|
6318
6602
|
throw new Error(
|
|
6319
6603
|
`Cannot edit numbering definition abstractNum "${id}"; the original numbering.xml is preserved unchanged.`
|
|
6320
6604
|
);
|
|
6321
|
-
|
|
6322
|
-
if (JSON.stringify(next.nums[id]) !== JSON.stringify(prior?.nums[id]))
|
|
6323
|
-
throw new Error(
|
|
6324
|
-
`Cannot edit numbering definition num "${id}"; the original numbering.xml is preserved unchanged.`
|
|
6325
|
-
);
|
|
6605
|
+
const startChanges = numberingStartChanges(prior, next);
|
|
6326
6606
|
const newAbstractIds = Object.keys(next.abstractNums).filter((id) => !prior?.abstractNums[id]);
|
|
6327
6607
|
const newNumIds = Object.keys(next.nums).filter((id) => !prior?.nums[id]);
|
|
6328
|
-
if (!newAbstractIds.length && !newNumIds.length) return;
|
|
6608
|
+
if (!newAbstractIds.length && !newNumIds.length && !startChanges.length) return;
|
|
6329
6609
|
const existingFile = zip.file("word/numbering.xml");
|
|
6330
6610
|
const doc = existingFile ? parseXml2(await existingFile.async("string")) : parseXml2(`<w:numbering xmlns:w="${WORD_NS}"/>`);
|
|
6331
6611
|
const root = doc.documentElement;
|
|
6612
|
+
patchNumberingStarts(doc, startChanges);
|
|
6332
6613
|
const cleanup = children2(root, "numIdMacAtCleanup")[0] ?? null;
|
|
6333
6614
|
const firstNum = children2(root, "num")[0] ?? cleanup;
|
|
6334
6615
|
for (const id of newAbstractIds) {
|
|
@@ -7194,23 +7475,31 @@ function createFieldTracker() {
|
|
|
7194
7475
|
const stack = [];
|
|
7195
7476
|
return (element, run) => {
|
|
7196
7477
|
let resultInstr;
|
|
7478
|
+
let resultLocked;
|
|
7197
7479
|
for (const child3 of Array.from(element.childNodes)) {
|
|
7198
7480
|
if (!isElement(child3)) continue;
|
|
7199
7481
|
if (named2(child3, "fldChar")) {
|
|
7200
7482
|
const type = getW(child3, "fldCharType");
|
|
7201
|
-
if (type === "begin")
|
|
7202
|
-
|
|
7483
|
+
if (type === "begin") {
|
|
7484
|
+
const locked = parseFieldFlags(child3)?.locked;
|
|
7485
|
+
stack.push({ instr: "", inResult: false, ...locked !== void 0 && { locked } });
|
|
7486
|
+
} else if (type === "separate") {
|
|
7203
7487
|
const top = stack.at(-1);
|
|
7204
7488
|
if (top) top.inResult = true;
|
|
7205
7489
|
} else if (type === "end") stack.pop();
|
|
7206
7490
|
} else {
|
|
7207
7491
|
const top = stack.at(-1);
|
|
7208
7492
|
if (named2(child3, "instrText") && top && !top.inResult) top.instr += textContent(child3);
|
|
7209
|
-
else if ((named2(child3, "t") || named2(child3, "delText")) && top?.inResult)
|
|
7493
|
+
else if ((named2(child3, "t") || named2(child3, "delText")) && top?.inResult) {
|
|
7210
7494
|
resultInstr = top.instr.trim();
|
|
7495
|
+
resultLocked = top.locked;
|
|
7496
|
+
}
|
|
7211
7497
|
}
|
|
7212
7498
|
}
|
|
7213
|
-
if (resultInstr)
|
|
7499
|
+
if (resultInstr) {
|
|
7500
|
+
run.field = { instr: resultInstr };
|
|
7501
|
+
if (resultLocked !== void 0) run.fieldFlags = { locked: resultLocked };
|
|
7502
|
+
}
|
|
7214
7503
|
return run;
|
|
7215
7504
|
};
|
|
7216
7505
|
}
|
|
@@ -7221,7 +7510,11 @@ function storyFieldResults(container) {
|
|
|
7221
7510
|
if (named2(element, "fldSimple") || named2(element, "txbxContent")) return;
|
|
7222
7511
|
if (named2(element, "r")) {
|
|
7223
7512
|
const run = trackField(element, { text: "" });
|
|
7224
|
-
if (run.field)
|
|
7513
|
+
if (run.field)
|
|
7514
|
+
metadata.set(element, {
|
|
7515
|
+
field: run.field,
|
|
7516
|
+
...run.fieldFlags && { fieldFlags: run.fieldFlags }
|
|
7517
|
+
});
|
|
7225
7518
|
return;
|
|
7226
7519
|
}
|
|
7227
7520
|
for (const child3 of Array.from(element.childNodes)) if (isElement(child3)) visit(child3);
|
|
@@ -7313,7 +7606,11 @@ function parseRun2(node, revision) {
|
|
|
7313
7606
|
if (breakKind) run.break = breakKind;
|
|
7314
7607
|
if (noteReference) run.noteReference = noteReference;
|
|
7315
7608
|
if (noteMark) run.noteMark = noteMark;
|
|
7316
|
-
if (fieldChar)
|
|
7609
|
+
if (fieldChar) {
|
|
7610
|
+
run.fieldChar = fieldChar;
|
|
7611
|
+
const flags = parseFieldFlags(only);
|
|
7612
|
+
if (flags) run.fieldFlags = flags;
|
|
7613
|
+
}
|
|
7317
7614
|
if (fieldCode !== void 0) run.fieldCode = fieldCode;
|
|
7318
7615
|
const runRevision = revision ?? runFormatRevision(props);
|
|
7319
7616
|
if (runRevision) run.revision = runRevision;
|
|
@@ -7332,8 +7629,11 @@ function parseParagraph2(node, id, fields) {
|
|
|
7332
7629
|
(element, revision) => {
|
|
7333
7630
|
const run = parseRun2(element, revision);
|
|
7334
7631
|
if (!fields) return trackField(element, run);
|
|
7335
|
-
const
|
|
7336
|
-
if (
|
|
7632
|
+
const metadata = fields.get(element);
|
|
7633
|
+
if (metadata) {
|
|
7634
|
+
run.field = { ...metadata.field };
|
|
7635
|
+
if (metadata.fieldFlags) run.fieldFlags = { ...metadata.fieldFlags };
|
|
7636
|
+
}
|
|
7337
7637
|
return run;
|
|
7338
7638
|
},
|
|
7339
7639
|
(item) => {
|
|
@@ -7355,20 +7655,23 @@ function parseParagraph2(node, id, fields) {
|
|
|
7355
7655
|
);
|
|
7356
7656
|
if (link) return results.map((run) => ({ ...run, link }));
|
|
7357
7657
|
const field = { instr: instr.trim(), simple: true };
|
|
7658
|
+
const flags = parseFieldFlags(item);
|
|
7659
|
+
const fieldState = flags ? { fieldFlags: flags } : {};
|
|
7358
7660
|
const fieldInstanceId = `${id}:simple-field-${simpleFieldIndex++}`;
|
|
7359
|
-
if (!results.length)
|
|
7661
|
+
if (!results.length)
|
|
7662
|
+
return [{ text: fieldPlaceholderText(instr), field, fieldInstanceId, ...fieldState }];
|
|
7360
7663
|
if (results.every(
|
|
7361
7664
|
(run) => !run.text && !run.equation && !run.image && !run.break && !run.noteReference && !run.noteMark && !run.fieldChar && run.fieldCode === void 0
|
|
7362
7665
|
)) {
|
|
7363
7666
|
return [
|
|
7364
|
-
{ text: "", fieldChar: "begin" },
|
|
7667
|
+
{ text: "", fieldChar: "begin", ...fieldState },
|
|
7365
7668
|
{ text: "", fieldCode: instr },
|
|
7366
7669
|
{ text: "", fieldChar: "separate" },
|
|
7367
7670
|
...results,
|
|
7368
7671
|
{ text: "", fieldChar: "end" }
|
|
7369
7672
|
];
|
|
7370
7673
|
}
|
|
7371
|
-
return results.map((run) => ({ ...run, field, fieldInstanceId }));
|
|
7674
|
+
return results.map((run) => ({ ...run, field, fieldInstanceId, ...fieldState }));
|
|
7372
7675
|
},
|
|
7373
7676
|
(hyperlink) => {
|
|
7374
7677
|
if (!activeContext) return void 0;
|
|
@@ -7670,115 +7973,6 @@ async function parseDocumentParts(zip, body, blocks, drawings) {
|
|
|
7670
7973
|
};
|
|
7671
7974
|
}
|
|
7672
7975
|
|
|
7673
|
-
// docx/numbering-parse.ts
|
|
7674
|
-
var integer2 = (value, fallback) => parseInteger(value) ?? fallback;
|
|
7675
|
-
var flag = (element) => onOffElement(element) === true;
|
|
7676
|
-
function byName(root, local) {
|
|
7677
|
-
return Array.from(root.getElementsByTagName("*")).filter(
|
|
7678
|
-
(node) => node.nodeType === 1 && named2(node, local)
|
|
7679
|
-
);
|
|
7680
|
-
}
|
|
7681
|
-
function parseMarkerFormat(rPr) {
|
|
7682
|
-
if (!rPr) return void 0;
|
|
7683
|
-
const format = {};
|
|
7684
|
-
const family = getW(first2(rPr, "rFonts"), "ascii");
|
|
7685
|
-
if (family) format.fontFamily = family;
|
|
7686
|
-
const size = parseInteger(getW(first2(rPr, "sz"), "val"));
|
|
7687
|
-
if (size !== void 0 && size > 0) format.fontSizeHalfPoints = size;
|
|
7688
|
-
if (onOffElement(first2(rPr, "b")) === true) format.bold = true;
|
|
7689
|
-
if (onOffElement(first2(rPr, "i")) === true) format.italic = true;
|
|
7690
|
-
const color = getW(first2(rPr, "color"), "val");
|
|
7691
|
-
if (color && /^[0-9a-f]{6}$/i.test(color)) format.color = `#${color.toLowerCase()}`;
|
|
7692
|
-
return Object.keys(format).length ? format : void 0;
|
|
7693
|
-
}
|
|
7694
|
-
function parseNumberingLevel(lvl) {
|
|
7695
|
-
const level = integer2(getW(lvl, "ilvl"), 0);
|
|
7696
|
-
const start = integer2(getW(first2(lvl, "start"), "val"), 1);
|
|
7697
|
-
const numFmt = enumValue(isStNumberFormat, getW(first2(lvl, "numFmt"), "val"), "w:numFmt") ?? "decimal";
|
|
7698
|
-
const lvlText = getW(first2(lvl, "lvlText"), "val") ?? "";
|
|
7699
|
-
const jc = getW(first2(lvl, "lvlJc"), "val");
|
|
7700
|
-
const ind = first2(first2(lvl, "pPr"), "ind");
|
|
7701
|
-
const suffRaw = getW(first2(lvl, "suff"), "val");
|
|
7702
|
-
const result = { level, start, numFmt, lvlText };
|
|
7703
|
-
if (!first2(lvl, "start")) result.startWasOmitted = true;
|
|
7704
|
-
const paragraphStyleId = getW(first2(lvl, "pStyle"), "val");
|
|
7705
|
-
if (paragraphStyleId) result.paragraphStyleId = paragraphStyleId;
|
|
7706
|
-
if (jc === "left" || jc === "center" || jc === "right") result.lvlJc = jc;
|
|
7707
|
-
const left = getW(ind, "left") ?? getW(ind, "start");
|
|
7708
|
-
if (left !== void 0) result.indentLeftTwips = parseSignedTwips(left) ?? signedTwips(0);
|
|
7709
|
-
const hanging = getW(ind, "hanging");
|
|
7710
|
-
if (hanging !== void 0) result.hangingTwips = parseTwips(hanging) ?? twips(0);
|
|
7711
|
-
const firstLine = getW(ind, "firstLine");
|
|
7712
|
-
if (firstLine !== void 0) result.firstLineTwips = parseTwips(firstLine) ?? twips(0);
|
|
7713
|
-
const tabs = first2(first2(lvl, "pPr"), "tabs");
|
|
7714
|
-
const tab = tabs ? children2(tabs, "tab").find((stop) => getW(stop, "val") !== "clear") : void 0;
|
|
7715
|
-
const tabPos = tab ? parseTwips(getW(tab, "pos")) : void 0;
|
|
7716
|
-
if (tabPos !== void 0) result.tabStopTwips = tabPos;
|
|
7717
|
-
if (flag(first2(lvl, "isLgl"))) result.isLgl = true;
|
|
7718
|
-
const restart = getW(first2(lvl, "lvlRestart"), "val");
|
|
7719
|
-
if (restart !== void 0) result.lvlRestart = integer2(restart, 0);
|
|
7720
|
-
const marker = parseMarkerFormat(first2(lvl, "rPr"));
|
|
7721
|
-
if (marker) result.markerFormat = marker;
|
|
7722
|
-
result.suffix = suffRaw === "space" ? "space" : suffRaw === "nothing" ? "none" : "tab";
|
|
7723
|
-
return result;
|
|
7724
|
-
}
|
|
7725
|
-
function parseAbstractNum(element) {
|
|
7726
|
-
const id = getW(element, "abstractNumId");
|
|
7727
|
-
if (!id) return void 0;
|
|
7728
|
-
const levels = {};
|
|
7729
|
-
for (const lvl of children2(element, "lvl")) {
|
|
7730
|
-
const parsed = parseNumberingLevel(lvl);
|
|
7731
|
-
levels[parsed.level] = parsed;
|
|
7732
|
-
}
|
|
7733
|
-
return { id, levels };
|
|
7734
|
-
}
|
|
7735
|
-
function parseNum(element) {
|
|
7736
|
-
const id = getW(element, "numId");
|
|
7737
|
-
if (!id) return void 0;
|
|
7738
|
-
const abstractNumId = getW(first2(element, "abstractNumId"), "val") ?? "";
|
|
7739
|
-
const levelOverrides = {};
|
|
7740
|
-
for (const override of children2(element, "lvlOverride")) {
|
|
7741
|
-
const level = integer2(getW(override, "ilvl"), 0);
|
|
7742
|
-
const entry = {};
|
|
7743
|
-
const startOverride = getW(first2(override, "startOverride"), "val");
|
|
7744
|
-
if (startOverride !== void 0) entry.startOverride = integer2(startOverride, 1);
|
|
7745
|
-
const lvl = first2(override, "lvl");
|
|
7746
|
-
if (lvl) entry.lvl = parseNumberingLevel(lvl);
|
|
7747
|
-
if (Object.keys(entry).length) levelOverrides[level] = entry;
|
|
7748
|
-
}
|
|
7749
|
-
return {
|
|
7750
|
-
id,
|
|
7751
|
-
abstractNumId,
|
|
7752
|
-
...Object.keys(levelOverrides).length ? { levelOverrides } : {}
|
|
7753
|
-
};
|
|
7754
|
-
}
|
|
7755
|
-
function parseNumberingCatalog(xml) {
|
|
7756
|
-
const document = parseXml2(xml);
|
|
7757
|
-
const root = document.documentElement;
|
|
7758
|
-
const abstractNums = {};
|
|
7759
|
-
const warnings = [];
|
|
7760
|
-
for (const element of byName(root, "abstractNum")) {
|
|
7761
|
-
const parsed = parseAbstractNum(element);
|
|
7762
|
-
if (!parsed) continue;
|
|
7763
|
-
abstractNums[parsed.id] = parsed;
|
|
7764
|
-
const link = getW(first2(element, "numStyleLink"), "val");
|
|
7765
|
-
if (link)
|
|
7766
|
-
warnings.push(
|
|
7767
|
-
`Numbering definition abstractNum ${parsed.id} links to style "${link}"; style-linked numbering levels are not resolved.`
|
|
7768
|
-
);
|
|
7769
|
-
if (byName(element, "lvlPicBulletId").length)
|
|
7770
|
-
warnings.push(
|
|
7771
|
-
`Numbering definition abstractNum ${parsed.id} uses a picture bullet; picture bullets are not rendered.`
|
|
7772
|
-
);
|
|
7773
|
-
}
|
|
7774
|
-
const nums = {};
|
|
7775
|
-
for (const element of byName(root, "num")) {
|
|
7776
|
-
const parsed = parseNum(element);
|
|
7777
|
-
if (parsed) nums[parsed.id] = parsed;
|
|
7778
|
-
}
|
|
7779
|
-
return { abstractNums, nums, warnings: [...new Set(warnings)] };
|
|
7780
|
-
}
|
|
7781
|
-
|
|
7782
7976
|
// docx/comments.ts
|
|
7783
7977
|
var W14_NS2 = "http://schemas.microsoft.com/office/word/2010/wordml";
|
|
7784
7978
|
var W15_NS2 = "http://schemas.microsoft.com/office/word/2012/wordml";
|
|
@@ -8013,7 +8207,7 @@ async function readPackage(input) {
|
|
|
8013
8207
|
const themeFile = zip.file("word/theme/theme1.xml");
|
|
8014
8208
|
const settingsFile = zip.file("word/settings.xml");
|
|
8015
8209
|
if (themeFile) {
|
|
8016
|
-
model.theme =
|
|
8210
|
+
model.theme = parseTheme2(await themeFile.async("string"));
|
|
8017
8211
|
if (settingsFile) {
|
|
8018
8212
|
const settingsXml = await settingsFile.async("string");
|
|
8019
8213
|
model.theme.colorMapping = withParseWarnings(
|