myrole-docx-editor 0.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/README.md +107 -0
- package/dist/chunks/sdk-BKkeAoJT.js +15065 -0
- package/dist/chunks/sdk-BKkeAoJT.js.map +1 -0
- package/dist/chunks/vars-blockly-C-cJRHx8.js +42 -0
- package/dist/chunks/vars-blockly-C-cJRHx8.js.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/react.js +36 -0
- package/dist/react.js.map +1 -0
- package/dist/types/packages/docx-editor/src/chrome.d.ts +28 -0
- package/dist/types/packages/docx-editor/src/commands.d.ts +16 -0
- package/dist/types/packages/docx-editor/src/comments.d.ts +24 -0
- package/dist/types/packages/docx-editor/src/editor.d.ts +293 -0
- package/dist/types/packages/docx-editor/src/embed.d.ts +7 -0
- package/dist/types/packages/docx-editor/src/font-manifest.d.ts +7 -0
- package/dist/types/packages/docx-editor/src/fonts.d.ts +5 -0
- package/dist/types/packages/docx-editor/src/html.d.ts +13 -0
- package/dist/types/packages/docx-editor/src/index.d.ts +20 -0
- package/dist/types/packages/docx-editor/src/inspector-ui.d.ts +6 -0
- package/dist/types/packages/docx-editor/src/inspector.d.ts +101 -0
- package/dist/types/packages/docx-editor/src/react.d.ts +24 -0
- package/dist/types/packages/docx-editor/src/ruler.d.ts +4 -0
- package/dist/types/packages/docx-editor/src/sdk.d.ts +85 -0
- package/dist/types/packages/docx-editor/src/ui/icons.d.ts +2 -0
- package/dist/types/packages/docx-editor/src/ui/shell.d.ts +57 -0
- package/dist/types/packages/docx-editor/src/variables.d.ts +68 -0
- package/dist/types/packages/docx-editor/src/vars-blockly.d.ts +9 -0
- package/dist/types/packages/docx-editor/src/vars-complete.d.ts +60 -0
- package/dist/types/packages/docx-editor/src/vars-library.d.ts +59 -0
- package/dist/types/packages/docx-editor/src/vars-panel.d.ts +38 -0
- package/dist/types/packages/docx-model/src/edit.d.ts +64 -0
- package/dist/types/packages/docx-model/src/editor.d.ts +254 -0
- package/dist/types/packages/docx-model/src/fonts.d.ts +60 -0
- package/dist/types/packages/docx-model/src/heal.d.ts +28 -0
- package/dist/types/packages/docx-model/src/index.d.ts +113 -0
- package/dist/types/packages/docx-model/src/insert.d.ts +30 -0
- package/dist/types/packages/docx-model/src/layout.d.ts +411 -0
- package/dist/types/packages/docx-model/src/numbering.d.ts +63 -0
- package/dist/types/packages/docx-model/src/paste.d.ts +51 -0
- package/dist/types/packages/docx-model/src/rels.d.ts +18 -0
- package/dist/types/packages/docx-model/src/spans.d.ts +69 -0
- package/dist/types/packages/docx-model/src/styles.d.ts +42 -0
- package/dist/types/packages/docx-model/src/tables.d.ts +196 -0
- package/dist/types/packages/docx-model/src/textbox.d.ts +61 -0
- package/dist/types/packages/docx-render/src/border.d.ts +39 -0
- package/dist/types/packages/docx-render/src/document.d.ts +55 -0
- package/dist/types/packages/docx-render/src/font-advances.d.ts +1 -0
- package/dist/types/packages/docx-render/src/hit.d.ts +94 -0
- package/dist/types/packages/docx-render/src/index.d.ts +12 -0
- package/dist/types/packages/docx-render/src/metrics.d.ts +6 -0
- package/dist/types/packages/docx-render/src/node-ctx.d.ts +36 -0
- package/dist/types/packages/docx-render/src/paragraph.d.ts +18 -0
- package/dist/types/packages/docx-render/src/parts.d.ts +40 -0
- package/dist/types/packages/docx-render/src/renderer.d.ts +251 -0
- package/dist/types/packages/docx-render/src/table.d.ts +15 -0
- package/dist/types/packages/docx-render/src/text.d.ts +396 -0
- package/dist/types/packages/docx-render/src/types.d.ts +514 -0
- package/dist/types/packages/docx-tags/src/add-comments.d.ts +2 -0
- package/dist/types/packages/docx-tags/src/comments.d.ts +19 -0
- package/dist/types/packages/docx-tags/src/grammar.d.ts +71 -0
- package/dist/types/packages/docx-tags/src/highlight.d.ts +22 -0
- package/dist/types/packages/docx-tags/src/index.d.ts +4 -0
- package/dist/types/packages/docx-tags/src/scan.d.ts +27 -0
- package/dist/types/packages/docx-vars/src/audit.d.ts +44 -0
- package/dist/types/packages/docx-vars/src/blockify.d.ts +61 -0
- package/dist/types/packages/docx-vars/src/blocks.d.ts +46 -0
- package/dist/types/packages/docx-vars/src/describe.d.ts +21 -0
- package/dist/types/packages/docx-vars/src/generate.d.ts +11 -0
- package/dist/types/packages/docx-vars/src/icons.d.ts +52 -0
- package/dist/types/packages/docx-vars/src/idioms.d.ts +36 -0
- package/dist/types/packages/docx-vars/src/index.d.ts +31 -0
- package/dist/types/packages/docx-vars/src/labels.d.ts +42 -0
- package/dist/types/packages/docx-vars/src/library.d.ts +47 -0
- package/dist/types/packages/docx-vars/src/phrase.d.ts +3 -0
- package/dist/types/packages/docx-vars/src/picker.d.ts +19 -0
- package/dist/types/packages/docx-vars/src/plugin.d.ts +126 -0
- package/dist/types/packages/docx-vars/src/plugins.d.ts +29 -0
- package/dist/types/packages/docx-vars/src/preview.d.ts +25 -0
- package/dist/types/packages/docx-vars/src/scenario.d.ts +20 -0
- package/dist/types/packages/docx-vars/src/substitute.d.ts +28 -0
- package/dist/types/packages/docx-vars/src/sync.d.ts +56 -0
- package/dist/types/packages/docx-vars/src/target-canvas.d.ts +66 -0
- package/dist/types/packages/docx-vars/src/tokens.d.ts +18 -0
- package/dist/types/packages/fonts/src/advances.d.ts +90 -0
- package/dist/types/packages/fonts/src/aliases.d.ts +27 -0
- package/dist/types/packages/fonts/src/families.d.ts +1 -0
- package/dist/types/packages/fonts/src/load.d.ts +25 -0
- package/dist/types/packages/fonts/src/metrics.d.ts +44 -0
- package/fonts/ttf/abadi-mt-condensed-extra-bold-400-normal.ttf +0 -0
- package/fonts/ttf/abadi-mt-condensed-light-400-normal.ttf +0 -0
- package/fonts/ttf/angsana-new-400-italic.ttf +0 -0
- package/fonts/ttf/angsana-new-400-normal.ttf +0 -0
- package/fonts/ttf/angsana-new-700-italic.ttf +0 -0
- package/fonts/ttf/angsana-new-700-normal.ttf +0 -0
- package/fonts/ttf/apple-color-emoji-400-normal.ttf +0 -0
- package/fonts/ttf/apple-symbols-400-normal.ttf +0 -0
- package/fonts/ttf/aptos-400-italic.ttf +0 -0
- package/fonts/ttf/aptos-400-normal.ttf +0 -0
- package/fonts/ttf/aptos-700-italic.ttf +0 -0
- package/fonts/ttf/aptos-700-normal.ttf +0 -0
- package/fonts/ttf/aptos-narrow-400-italic.ttf +0 -0
- package/fonts/ttf/aptos-narrow-400-normal.ttf +0 -0
- package/fonts/ttf/aptos-narrow-700-italic.ttf +0 -0
- package/fonts/ttf/aptos-narrow-700-normal.ttf +0 -0
- package/fonts/ttf/arial-400-italic.ttf +0 -0
- package/fonts/ttf/arial-400-normal.ttf +0 -0
- package/fonts/ttf/arial-700-italic.ttf +0 -0
- package/fonts/ttf/arial-700-normal.ttf +0 -0
- package/fonts/ttf/arial-black-700-normal.ttf +0 -0
- package/fonts/ttf/arial-hebrew-400-normal.ttf +0 -0
- package/fonts/ttf/arial-hebrew-700-normal.ttf +0 -0
- package/fonts/ttf/arial-narrow-400-italic.ttf +0 -0
- package/fonts/ttf/arial-narrow-400-normal.ttf +0 -0
- package/fonts/ttf/arial-narrow-700-italic.ttf +0 -0
- package/fonts/ttf/arial-narrow-700-normal.ttf +0 -0
- package/fonts/ttf/arial-rounded-mt-bold-400-normal.ttf +0 -0
- package/fonts/ttf/arial-unicode-ms-400-normal.ttf +0 -0
- package/fonts/ttf/avenir-400-italic.ttf +0 -0
- package/fonts/ttf/avenir-400-normal.ttf +0 -0
- package/fonts/ttf/avenir-700-normal.ttf +0 -0
- package/fonts/ttf/avenir-black-700-normal.ttf +0 -0
- package/fonts/ttf/avenir-book-400-normal.ttf +0 -0
- package/fonts/ttf/avenir-heavy-700-italic.ttf +0 -0
- package/fonts/ttf/avenir-heavy-700-normal.ttf +0 -0
- package/fonts/ttf/avenir-light-400-italic.ttf +0 -0
- package/fonts/ttf/avenir-light-400-normal.ttf +0 -0
- package/fonts/ttf/avenir-next-400-italic.ttf +0 -0
- package/fonts/ttf/avenir-next-400-normal.ttf +0 -0
- package/fonts/ttf/avenir-next-700-italic.ttf +0 -0
- package/fonts/ttf/avenir-next-700-normal.ttf +0 -0
- package/fonts/ttf/baskerville-old-face-400-normal.ttf +0 -0
- package/fonts/ttf/batang-400-normal.ttf +0 -0
- package/fonts/ttf/bauhaus-93-400-normal.ttf +0 -0
- package/fonts/ttf/big-caslon-400-normal.ttf +0 -0
- package/fonts/ttf/bookman-old-style-400-italic.ttf +0 -0
- package/fonts/ttf/bookman-old-style-400-normal.ttf +0 -0
- package/fonts/ttf/bookman-old-style-700-italic.ttf +0 -0
- package/fonts/ttf/bookman-old-style-700-normal.ttf +0 -0
- package/fonts/ttf/calibri-400-italic.ttf +0 -0
- package/fonts/ttf/calibri-400-normal.ttf +0 -0
- package/fonts/ttf/calibri-700-italic.ttf +0 -0
- package/fonts/ttf/calibri-700-normal.ttf +0 -0
- package/fonts/ttf/calibri-light-400-italic.ttf +0 -0
- package/fonts/ttf/calibri-light-400-normal.ttf +0 -0
- package/fonts/ttf/cambria-400-italic.ttf +0 -0
- package/fonts/ttf/cambria-400-normal.ttf +0 -0
- package/fonts/ttf/cambria-700-italic.ttf +0 -0
- package/fonts/ttf/cambria-700-normal.ttf +0 -0
- package/fonts/ttf/cambria-math-400-normal.ttf +0 -0
- package/fonts/ttf/candara-400-italic.ttf +0 -0
- package/fonts/ttf/candara-400-normal.ttf +0 -0
- package/fonts/ttf/candara-700-italic.ttf +0 -0
- package/fonts/ttf/candara-700-normal.ttf +0 -0
- package/fonts/ttf/century-400-normal.ttf +0 -0
- package/fonts/ttf/century-gothic-400-italic.ttf +0 -0
- package/fonts/ttf/century-gothic-400-normal.ttf +0 -0
- package/fonts/ttf/century-gothic-700-italic.ttf +0 -0
- package/fonts/ttf/century-gothic-700-normal.ttf +0 -0
- package/fonts/ttf/century-schoolbook-400-italic.ttf +0 -0
- package/fonts/ttf/century-schoolbook-400-normal.ttf +0 -0
- package/fonts/ttf/century-schoolbook-700-italic.ttf +0 -0
- package/fonts/ttf/century-schoolbook-700-normal.ttf +0 -0
- package/fonts/ttf/comic-sans-ms-400-normal.ttf +0 -0
- package/fonts/ttf/comic-sans-ms-700-normal.ttf +0 -0
- package/fonts/ttf/consolas-400-italic.ttf +0 -0
- package/fonts/ttf/consolas-400-normal.ttf +0 -0
- package/fonts/ttf/consolas-700-normal.ttf +0 -0
- package/fonts/ttf/corbel-400-italic.ttf +0 -0
- package/fonts/ttf/corbel-400-normal.ttf +0 -0
- package/fonts/ttf/corbel-700-italic.ttf +0 -0
- package/fonts/ttf/corbel-700-normal.ttf +0 -0
- package/fonts/ttf/cordia-new-400-italic.ttf +0 -0
- package/fonts/ttf/cordia-new-400-normal.ttf +0 -0
- package/fonts/ttf/cordia-new-700-italic.ttf +0 -0
- package/fonts/ttf/cordia-new-700-normal.ttf +0 -0
- package/fonts/ttf/courier-400-normal.ttf +0 -0
- package/fonts/ttf/courier-new-400-italic.ttf +0 -0
- package/fonts/ttf/courier-new-400-normal.ttf +0 -0
- package/fonts/ttf/courier-new-700-normal.ttf +0 -0
- package/fonts/ttf/dengxian-400-normal.ttf +0 -0
- package/fonts/ttf/dengxian-700-normal.ttf +0 -0
- package/fonts/ttf/dengxian-light-400-normal.ttf +0 -0
- package/fonts/ttf/didot-400-italic.ttf +0 -0
- package/fonts/ttf/didot-400-normal.ttf +0 -0
- package/fonts/ttf/didot-700-normal.ttf +0 -0
- package/fonts/ttf/edwardian-script-itc-400-normal.ttf +0 -0
- package/fonts/ttf/euphemia-ucas-400-italic.ttf +0 -0
- package/fonts/ttf/euphemia-ucas-400-normal.ttf +0 -0
- package/fonts/ttf/euphemia-ucas-700-normal.ttf +0 -0
- package/fonts/ttf/eurostile-400-normal.ttf +0 -0
- package/fonts/ttf/eurostile-700-normal.ttf +0 -0
- package/fonts/ttf/franklin-gothic-book-400-italic.ttf +0 -0
- package/fonts/ttf/franklin-gothic-book-400-normal.ttf +0 -0
- package/fonts/ttf/franklin-gothic-demi-400-italic.ttf +0 -0
- package/fonts/ttf/franklin-gothic-demi-400-normal.ttf +0 -0
- package/fonts/ttf/franklin-gothic-demi-cond-400-normal.ttf +0 -0
- package/fonts/ttf/franklin-gothic-medium-400-italic.ttf +0 -0
- package/fonts/ttf/franklin-gothic-medium-400-normal.ttf +0 -0
- package/fonts/ttf/franklin-gothic-medium-cond-400-normal.ttf +0 -0
- package/fonts/ttf/futura-400-italic.ttf +0 -0
- package/fonts/ttf/futura-400-normal.ttf +0 -0
- package/fonts/ttf/futura-700-normal.ttf +0 -0
- package/fonts/ttf/garamond-400-italic.ttf +0 -0
- package/fonts/ttf/garamond-400-normal.ttf +0 -0
- package/fonts/ttf/garamond-700-italic.ttf +0 -0
- package/fonts/ttf/garamond-700-normal.ttf +0 -0
- package/fonts/ttf/geneva-400-normal.ttf +0 -0
- package/fonts/ttf/georgia-400-italic.ttf +0 -0
- package/fonts/ttf/georgia-400-normal.ttf +0 -0
- package/fonts/ttf/georgia-700-normal.ttf +0 -0
- package/fonts/ttf/gill-sans-400-italic.ttf +0 -0
- package/fonts/ttf/gill-sans-400-normal.ttf +0 -0
- package/fonts/ttf/gill-sans-700-italic.ttf +0 -0
- package/fonts/ttf/gill-sans-700-normal.ttf +0 -0
- package/fonts/ttf/gill-sans-light-400-italic.ttf +0 -0
- package/fonts/ttf/gill-sans-light-400-normal.ttf +0 -0
- package/fonts/ttf/gill-sans-mt-400-italic.ttf +0 -0
- package/fonts/ttf/gill-sans-mt-400-normal.ttf +0 -0
- package/fonts/ttf/gill-sans-mt-700-italic.ttf +0 -0
- package/fonts/ttf/gill-sans-mt-700-normal.ttf +0 -0
- package/fonts/ttf/helvetica-400-italic.ttf +0 -0
- package/fonts/ttf/helvetica-400-normal.ttf +0 -0
- package/fonts/ttf/helvetica-700-italic.ttf +0 -0
- package/fonts/ttf/helvetica-700-normal.ttf +0 -0
- package/fonts/ttf/helvetica-neue-400-italic.ttf +0 -0
- package/fonts/ttf/helvetica-neue-400-normal.ttf +0 -0
- package/fonts/ttf/helvetica-neue-700-italic.ttf +0 -0
- package/fonts/ttf/helvetica-neue-700-normal.ttf +0 -0
- package/fonts/ttf/hoefler-text-400-italic.ttf +0 -0
- package/fonts/ttf/hoefler-text-400-normal.ttf +0 -0
- package/fonts/ttf/hoefler-text-700-italic.ttf +0 -0
- package/fonts/ttf/hoefler-text-700-normal.ttf +0 -0
- package/fonts/ttf/lucida-grande-400-normal.ttf +0 -0
- package/fonts/ttf/lucida-grande-700-normal.ttf +0 -0
- package/fonts/ttf/lucida-sans-400-italic.ttf +0 -0
- package/fonts/ttf/lucida-sans-400-normal.ttf +0 -0
- package/fonts/ttf/lucida-sans-700-italic.ttf +0 -0
- package/fonts/ttf/lucida-sans-700-normal.ttf +0 -0
- package/fonts/ttf/lucida-sans-unicode-400-normal.ttf +0 -0
- package/fonts/ttf/malgun-gothic-400-normal.ttf +0 -0
- package/fonts/ttf/malgun-gothic-700-normal.ttf +0 -0
- package/fonts/ttf/mangal-400-normal.ttf +0 -0
- package/fonts/ttf/mangal-700-normal.ttf +0 -0
- package/fonts/ttf/microsoft-sans-serif-400-normal.ttf +0 -0
- package/fonts/ttf/microsoft-yahei-400-normal.ttf +0 -0
- package/fonts/ttf/microsoft-yahei-700-normal.ttf +0 -0
- package/fonts/ttf/microsoft-yi-baiti-400-normal.ttf +0 -0
- package/fonts/ttf/monotype-sorts-400-normal.ttf +0 -0
- package/fonts/ttf/ms-gothic-400-normal.ttf +0 -0
- package/fonts/ttf/ms-mincho-400-normal.ttf +0 -0
- package/fonts/ttf/ms-ui-gothic-400-normal.ttf +0 -0
- package/fonts/ttf/new-york-400-italic.ttf +0 -0
- package/fonts/ttf/new-york-400-normal.ttf +0 -0
- package/fonts/ttf/news-gothic-mt-400-italic.ttf +0 -0
- package/fonts/ttf/news-gothic-mt-400-normal.ttf +0 -0
- package/fonts/ttf/news-gothic-mt-700-italic.ttf +0 -0
- package/fonts/ttf/news-gothic-mt-700-normal.ttf +0 -0
- package/fonts/ttf/nsimsun-400-normal.ttf +0 -0
- package/fonts/ttf/optima-400-italic.ttf +0 -0
- package/fonts/ttf/optima-400-normal.ttf +0 -0
- package/fonts/ttf/optima-700-italic.ttf +0 -0
- package/fonts/ttf/optima-700-normal.ttf +0 -0
- package/fonts/ttf/palatino-400-italic.ttf +0 -0
- package/fonts/ttf/palatino-400-normal.ttf +0 -0
- package/fonts/ttf/palatino-700-italic.ttf +0 -0
- package/fonts/ttf/palatino-700-normal.ttf +0 -0
- package/fonts/ttf/palatino-linotype-400-italic.ttf +0 -0
- package/fonts/ttf/palatino-linotype-400-normal.ttf +0 -0
- package/fonts/ttf/palatino-linotype-700-italic.ttf +0 -0
- package/fonts/ttf/palatino-linotype-700-normal.ttf +0 -0
- package/fonts/ttf/pmingliu-400-normal.ttf +0 -0
- package/fonts/ttf/pt-mono-400-normal.ttf +0 -0
- package/fonts/ttf/pt-mono-700-normal.ttf +0 -0
- package/fonts/ttf/segoe-ui-symbol-400-normal.ttf +0 -0
- package/fonts/ttf/simsun-400-normal.ttf +0 -0
- package/fonts/ttf/skia-400-normal.ttf +0 -0
- package/fonts/ttf/stencil-400-normal.ttf +0 -0
- package/fonts/ttf/symbol-400-normal.ttf +0 -0
- package/fonts/ttf/tahoma-400-normal.ttf +0 -0
- package/fonts/ttf/tahoma-700-normal.ttf +0 -0
- package/fonts/ttf/times-400-italic.ttf +0 -0
- package/fonts/ttf/times-400-normal.ttf +0 -0
- package/fonts/ttf/times-700-italic.ttf +0 -0
- package/fonts/ttf/times-700-normal.ttf +0 -0
- package/fonts/ttf/times-new-roman-400-italic.ttf +0 -0
- package/fonts/ttf/times-new-roman-400-normal.ttf +0 -0
- package/fonts/ttf/times-new-roman-700-italic.ttf +0 -0
- package/fonts/ttf/times-new-roman-700-normal.ttf +0 -0
- package/fonts/ttf/trebuchet-ms-400-italic.ttf +0 -0
- package/fonts/ttf/trebuchet-ms-400-normal.ttf +0 -0
- package/fonts/ttf/trebuchet-ms-700-italic.ttf +0 -0
- package/fonts/ttf/trebuchet-ms-700-normal.ttf +0 -0
- package/fonts/ttf/tw-cen-mt-400-normal.ttf +0 -0
- package/fonts/ttf/tw-cen-mt-700-normal.ttf +0 -0
- package/fonts/ttf/tw-cen-mt-condensed-400-normal.ttf +0 -0
- package/fonts/ttf/tw-cen-mt-condensed-700-normal.ttf +0 -0
- package/fonts/ttf/verdana-400-italic.ttf +0 -0
- package/fonts/ttf/verdana-400-normal.ttf +0 -0
- package/fonts/ttf/verdana-700-italic.ttf +0 -0
- package/fonts/ttf/verdana-700-normal.ttf +0 -0
- package/fonts/ttf/webdings-400-normal.ttf +0 -0
- package/fonts/ttf/wingdings-2-400-normal.ttf +0 -0
- package/fonts/ttf/wingdings-3-400-normal.ttf +0 -0
- package/fonts/ttf/wingdings-400-normal.ttf +0 -0
- package/fonts/ttf/yu-gothic-light-400-normal.ttf +0 -0
- package/fonts/ttf/yu-mincho-400-normal.ttf +0 -0
- package/fonts/ttf/yu-mincho-700-normal.ttf +0 -0
- package/package.json +63 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { bodyBlocks, type DocxDocument, type XmlNode } from './index';
|
|
2
|
+
import { styledParagraphs, type ParagraphStyle, type RunStyle, type StyledRun } from './layout';
|
|
3
|
+
import { resolveNumbering, type ListInfo } from './numbering';
|
|
4
|
+
import { tables } from './tables';
|
|
5
|
+
/**
|
|
6
|
+
* Les gestes d'édition, exprimés dans le modèle.
|
|
7
|
+
*
|
|
8
|
+
* Tout passe par l'arbre `DocxDocument` — jamais par les vues typées, qui ne
|
|
9
|
+
* portent qu'une part de ce que Word écrit et perdraient le reste au retour.
|
|
10
|
+
* L'adresse est celle de `spans.ts` : rang de paragraphe, rang de caractère.
|
|
11
|
+
* C'est exactement celle que le curseur rend à l'écran.
|
|
12
|
+
*
|
|
13
|
+
* Chaque commande renvoie la position où le curseur doit se retrouver, ou
|
|
14
|
+
* `null` si elle n'a rien pu faire. L'appelant recompose ensuite : ces gestes
|
|
15
|
+
* changent la pagination, il n'y a pas de mise à jour partielle à espérer.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Adresse d'un point du document.
|
|
19
|
+
*
|
|
20
|
+
* `part` dit dans quel fichier du zip vit le paragraphe : le corps par défaut,
|
|
21
|
+
* mais un en-tête ou un pied est fait des mêmes `w:p` dans un autre fichier.
|
|
22
|
+
* C'est tout ce qui les séparait de l'éditeur — leur adresse n'était pas
|
|
23
|
+
* exprimable, et un rang de paragraphe seul aurait désigné le corps.
|
|
24
|
+
*/
|
|
25
|
+
export interface DocPos {
|
|
26
|
+
para: number;
|
|
27
|
+
off: number;
|
|
28
|
+
part?: string;
|
|
29
|
+
}
|
|
30
|
+
/** La part d'une adresse, le corps par défaut. */
|
|
31
|
+
export declare const partOf: (p: {
|
|
32
|
+
part?: string;
|
|
33
|
+
}) => string;
|
|
34
|
+
/** Insère `text` au point, ou remplace la plage. Renvoie la position d'arrivée. */
|
|
35
|
+
export declare function insertText(doc: DocxDocument, a: DocPos, b: DocPos, text: string): DocPos | null;
|
|
36
|
+
/**
|
|
37
|
+
* Supprime la plage, en recollant les paragraphes qu'elle traverse.
|
|
38
|
+
*
|
|
39
|
+
* Le paragraphe d'arrivée est absorbé par celui de départ, qui garde sa propre
|
|
40
|
+
* mise en forme : c'est ce que fait Word — la marque de paragraphe survivante
|
|
41
|
+
* est celle du HAUT.
|
|
42
|
+
*/
|
|
43
|
+
export declare function deleteRange(doc: DocxDocument, a: DocPos, b: DocPos): DocPos | null;
|
|
44
|
+
/**
|
|
45
|
+
* Coupe le paragraphe au point — la touche Entrée.
|
|
46
|
+
*
|
|
47
|
+
* Le nouveau paragraphe hérite du `w:pPr` de l'ancien : c'est ce que fait Word,
|
|
48
|
+
* et sans lui une liste numérotée perdrait son `w:numPr` à chaque retour.
|
|
49
|
+
*/
|
|
50
|
+
export declare function splitParagraph(doc: DocxDocument, pos: DocPos): DocPos | null;
|
|
51
|
+
/**
|
|
52
|
+
* Recolle un paragraphe sur le précédent — Retour arrière en tête de ligne.
|
|
53
|
+
*
|
|
54
|
+
* Renvoie la position de la soudure, là où le curseur doit rester.
|
|
55
|
+
*/
|
|
56
|
+
export declare function joinParagraph(doc: DocxDocument, para: number): DocPos | null;
|
|
57
|
+
/** Insère un rang vide au-dessus ou au-dessous de celui du curseur. */
|
|
58
|
+
export declare function insertTableRow(doc: DocxDocument, para: number, where: 'above' | 'below'): boolean;
|
|
59
|
+
/** Retire le rang du curseur ; le dernier rang emporte le tableau. */
|
|
60
|
+
export declare function deleteTableRow(doc: DocxDocument, para: number): boolean;
|
|
61
|
+
/** Retire le tableau qui contient ce paragraphe. */
|
|
62
|
+
export declare function deleteTable(doc: DocxDocument, para: number): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Déplace le tableau devant le bloc de premier niveau qui porte `target`.
|
|
65
|
+
*
|
|
66
|
+
* C'est le geste de la poignée de déplacement : on ne dépose pas « à un
|
|
67
|
+
* caractère près » mais ENTRE deux blocs — un tableau ne s'insère pas au milieu
|
|
68
|
+
* d'un paragraphe.
|
|
69
|
+
*/
|
|
70
|
+
export declare function moveTable(doc: DocxDocument, para: number, target: number): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Insère une colonne vide à gauche ou à droite de celle du curseur.
|
|
73
|
+
*
|
|
74
|
+
* ponytail: la colonne est repérée par son RANG DE CELLULE, pas par sa colonne
|
|
75
|
+
* de grille. Sur un tableau à cellules fusionnées (`w:gridSpan`), les deux
|
|
76
|
+
* divergent et l'insertion tombe à côté. À reprendre quand un document réel le
|
|
77
|
+
* montre — le corpus n'en a pas encore fourni.
|
|
78
|
+
*/
|
|
79
|
+
export declare function insertTableColumn(doc: DocxDocument, para: number, where: 'left' | 'right'): boolean;
|
|
80
|
+
/** Retire la colonne du curseur ; la dernière emporte le tableau. */
|
|
81
|
+
export declare function deleteTableColumn(doc: DocxDocument, para: number): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Change la largeur d'une colonne de grille — la gouttière qu'on tire sur la règle.
|
|
84
|
+
*
|
|
85
|
+
* Word tient la largeur à DEUX endroits : `w:tblGrid/w:gridCol` pour la grille,
|
|
86
|
+
* `w:tcPr/w:tcW` pour chaque cellule. N'en changer qu'un donne un tableau dont
|
|
87
|
+
* la grille et les cellules se contredisent, et Word tranche alors comme il
|
|
88
|
+
* l'entend. On garde la largeur TOTALE : la colonne voisine cède ce que
|
|
89
|
+
* celle-ci prend, sinon le tableau déborde de sa page.
|
|
90
|
+
*/
|
|
91
|
+
export declare function setTableColumn(doc: DocxDocument, para: number, col: number, widthPt: number): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Retire la n-ième image d'un paragraphe.
|
|
94
|
+
*
|
|
95
|
+
* On supprime le RUN qui la porte, pas seulement le `w:drawing` : un run vidé
|
|
96
|
+
* de son dessin ne porterait plus rien et compterait pourtant encore comme run
|
|
97
|
+
* — assez pour dérégler l'adressage sans qu'on voie quoi que ce soit.
|
|
98
|
+
*/
|
|
99
|
+
export declare function deleteImage(doc: DocxDocument, para: number, index: number): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Redimensionne la n-ième image d'un paragraphe.
|
|
102
|
+
*
|
|
103
|
+
* Word écrit la taille à DEUX endroits — `wp:extent`, qui dit la place prise
|
|
104
|
+
* dans le fil, et `a:ext`, qui dit la taille du dessin. N'en changer qu'un
|
|
105
|
+
* donne une image étirée dans un cadre qui ne lui va pas.
|
|
106
|
+
*/
|
|
107
|
+
export declare function resizeImage(doc: DocxDocument, para: number, index: number, widthPt: number, heightPt: number): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Insère un saut au point — de page, de colonne ou de ligne.
|
|
110
|
+
*
|
|
111
|
+
* Un saut n'est pas du texte : c'est un `w:br` dans le run. On découpe donc le
|
|
112
|
+
* run comme pour une insertion ordinaire, mais le morceau du milieu porte la
|
|
113
|
+
* balise au lieu d'un `w:t`. Il compte pour UN caractère dans l'adressage,
|
|
114
|
+
* comme partout ailleurs (`runSpans`).
|
|
115
|
+
*/
|
|
116
|
+
export declare function insertBreak(doc: DocxDocument, at: DocPos, type?: 'page' | 'column' | 'line'): DocPos | null;
|
|
117
|
+
/**
|
|
118
|
+
* Propriétés de run qu'on sait poser. `null` efface la propriété, la laissant
|
|
119
|
+
* retomber sur la cascade de styles — ce n'est pas la même chose que `false`,
|
|
120
|
+
* qui la nie explicitement.
|
|
121
|
+
*/
|
|
122
|
+
export interface RunPatch {
|
|
123
|
+
bold?: boolean | null;
|
|
124
|
+
italic?: boolean | null;
|
|
125
|
+
underline?: boolean | null;
|
|
126
|
+
strike?: boolean | null;
|
|
127
|
+
sizePt?: number | null;
|
|
128
|
+
fontFamily?: string | null;
|
|
129
|
+
color?: string | null;
|
|
130
|
+
highlight?: string | null;
|
|
131
|
+
vertAlign?: 'superscript' | 'subscript' | null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Applique une mise en forme à la plage `[from, to)` d'un paragraphe.
|
|
135
|
+
*
|
|
136
|
+
* Les runs à cheval sur les bornes sont **découpés** : seul le texte
|
|
137
|
+
* sélectionné change, le reste garde sa mise en forme d'origine. C'est le même
|
|
138
|
+
* découpage que la réécriture de tag, et pour la même raison.
|
|
139
|
+
*/
|
|
140
|
+
export declare function formatRange(doc: DocxDocument, para: number, from: number, to: number, patch: RunPatch, part?: string): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Un run neuf portant exactement cette mise en forme.
|
|
143
|
+
*
|
|
144
|
+
* Sert au collage : le texte venu d'ailleurs n'a pas de run d'origine à
|
|
145
|
+
* découper, il faut en fabriquer un.
|
|
146
|
+
*/
|
|
147
|
+
export declare function runFromStyle(text: string, patch: RunPatch): XmlNode;
|
|
148
|
+
/** Propriétés de paragraphe qu'on sait poser. */
|
|
149
|
+
export interface ParaPatch {
|
|
150
|
+
align?: 'left' | 'center' | 'right' | 'justify' | null;
|
|
151
|
+
indentLeftPt?: number | null;
|
|
152
|
+
indentRightPt?: number | null;
|
|
153
|
+
/** retrait de PREMIÈRE ligne, positif ; exclusif avec `hangingPt` chez Word */
|
|
154
|
+
indentFirstPt?: number | null;
|
|
155
|
+
/** retrait NÉGATIF de première ligne — la ligne 1 dépasse à gauche */
|
|
156
|
+
hangingPt?: number | null;
|
|
157
|
+
spaceBeforePt?: number | null;
|
|
158
|
+
spaceAfterPt?: number | null;
|
|
159
|
+
styleId?: string | null;
|
|
160
|
+
}
|
|
161
|
+
/** Applique une mise en forme au paragraphe entier. */
|
|
162
|
+
export declare function formatParagraph(doc: DocxDocument, para: number, patch: ParaPatch, part?: string): boolean;
|
|
163
|
+
/** Marges d'une section, en points. Chaque champ omis reste inchangé. */
|
|
164
|
+
export interface MarginPatch {
|
|
165
|
+
leftPt?: number;
|
|
166
|
+
rightPt?: number;
|
|
167
|
+
topPt?: number;
|
|
168
|
+
bottomPt?: number;
|
|
169
|
+
/** gouttière de reliure — s'ajoute à la marge intérieure, elle ne la remplace pas */
|
|
170
|
+
gutterPt?: number;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Déplace les marges d'une section — ce que fait la règle quand on tire une
|
|
174
|
+
* gouttière.
|
|
175
|
+
*
|
|
176
|
+
* Word garde les quatre marges dans un seul `w:pgMar` avec aussi `w:header`,
|
|
177
|
+
* `w:footer` et `w:gutter` : on fusionne attribut par attribut pour ne pas
|
|
178
|
+
* emporter la distance de l'en-tête en réglant la marge gauche.
|
|
179
|
+
*/
|
|
180
|
+
export declare function setMargins(doc: DocxDocument, section: number, patch: MarginPatch): boolean;
|
|
181
|
+
/** Rang de la section qui contient ce paragraphe. */
|
|
182
|
+
export declare function sectionOf(views: DocViews, para: number): number;
|
|
183
|
+
/** Où le curseur se trouve, et ce qu'une barre d'outils doit y montrer. */
|
|
184
|
+
export interface EditContext {
|
|
185
|
+
pos: DocPos;
|
|
186
|
+
/** style effectif du run sous le curseur — cascade résolue */
|
|
187
|
+
run: RunStyle;
|
|
188
|
+
/** style effectif du paragraphe */
|
|
189
|
+
paragraph: ParagraphStyle;
|
|
190
|
+
/** texte du paragraphe, pour les gestes qui travaillent par mot ou par ligne */
|
|
191
|
+
text: string;
|
|
192
|
+
/** cellule courante, quand le curseur est dans un tableau */
|
|
193
|
+
table?: {
|
|
194
|
+
tableIndex: number;
|
|
195
|
+
row: number;
|
|
196
|
+
col: number;
|
|
197
|
+
rows: number;
|
|
198
|
+
cols: number;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Images du paragraphe courant, dans l'ordre.
|
|
202
|
+
*
|
|
203
|
+
* ponytail: du PARAGRAPHE, pas « sous le curseur ». Une image n'occupe aucun
|
|
204
|
+
* caractère — elle n'a donc pas d'adresse où poser un curseur, et il n'existe
|
|
205
|
+
* pas encore de sélection d'objet. Lister celles du paragraphe suffit pour
|
|
206
|
+
* les redimensionner ; la sélection d'objet viendra avec la poignée de
|
|
207
|
+
* redimensionnement.
|
|
208
|
+
*/
|
|
209
|
+
images: NonNullable<StyledRun['image']>[];
|
|
210
|
+
/** puce ou numéro du paragraphe, quand il en porte un */
|
|
211
|
+
list?: ListInfo;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Vues déjà calculées, passées plutôt que recalculées.
|
|
215
|
+
*
|
|
216
|
+
* `contextAt` est appelé à CHAQUE déplacement du curseur. Recalculer
|
|
217
|
+
* `styledParagraphs` à chaque flèche, c'est refaire la cascade de styles de
|
|
218
|
+
* tout le document — 194 ms sur un contrat de 42 pages. L'appelant les a déjà
|
|
219
|
+
* sous la main pour dessiner : il les prête.
|
|
220
|
+
*/
|
|
221
|
+
export interface DocViews {
|
|
222
|
+
styled: ReturnType<typeof styledParagraphs>;
|
|
223
|
+
blocks: ReturnType<typeof bodyBlocks>;
|
|
224
|
+
tables: ReturnType<typeof tables>;
|
|
225
|
+
numbering: ReturnType<typeof resolveNumbering>;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Ce qu'il faut savoir pour afficher les bons réglages.
|
|
229
|
+
*
|
|
230
|
+
* Une barre d'outils Word ne montre pas la même chose selon qu'on est dans du
|
|
231
|
+
* texte, dans une cellule ou sur une image. Plutôt que de faire deviner l'UI,
|
|
232
|
+
* on lui donne l'état complet en un appel.
|
|
233
|
+
*/
|
|
234
|
+
export declare function contextAt(doc: DocxDocument, pos: DocPos, views: DocViews): EditContext | null;
|
|
235
|
+
export declare function orderPos(a: DocPos, b: DocPos): [DocPos, DocPos];
|
|
236
|
+
/** Deux adresses désignent-elles la même part ? */
|
|
237
|
+
export declare const samePart: (a: DocPos, b: DocPos) => boolean;
|
|
238
|
+
/** Longueur du texte d'un paragraphe, dans l'espace d'adressage de l'éditeur. */
|
|
239
|
+
export declare function paraLength(doc: DocxDocument, para: number, part?: string): number;
|
|
240
|
+
/**
|
|
241
|
+
* Bornes de l'unité qui entoure `off` — le double-clic.
|
|
242
|
+
*
|
|
243
|
+
* Sur une frontière, le mot de GAUCHE l'emporte : collé à la fin de « un », on
|
|
244
|
+
* sélectionne « un », pas l'espace qui suit. C'est ce que fait Word.
|
|
245
|
+
*
|
|
246
|
+
* Une plage vide n'est jamais rendue quand il y a quelque chose à prendre :
|
|
247
|
+
* double-cliquer sur une espace prend la suite d'espaces, sur un « ( » prend la
|
|
248
|
+
* ponctuation. Auparavant le geste « ne marchait pas » une fois sur trois dans
|
|
249
|
+
* des contrats qui en sont pleins.
|
|
250
|
+
*/
|
|
251
|
+
export declare function wordAt(text: string, off: number, locale?: string): {
|
|
252
|
+
from: number;
|
|
253
|
+
to: number;
|
|
254
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type DocxDocument } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Polices embarquées.
|
|
4
|
+
*
|
|
5
|
+
* Word range les polices du document dans le zip sous forme `.odttf` :
|
|
6
|
+
* un TTF ou OTF dont les **32 premiers octets** sont brouillés par un XOR avec
|
|
7
|
+
* la clé `w:fontKey` déclarée à côté (ECMA-376 §15.2.13). Il ne s'agit pas de
|
|
8
|
+
* chiffrement — juste d'un garde-fou de licence — et le désobfuscage est
|
|
9
|
+
* réversible en une passe.
|
|
10
|
+
*
|
|
11
|
+
* Pourquoi ça compte ici : `0_comedien.docx` embarque 17 polices, 99 % de ses
|
|
12
|
+
* 6,2 Mo. Un renderer qui dessine avec les polices système à la place n'a pas
|
|
13
|
+
* les mêmes métriques, donc pas les mêmes retours à la ligne, donc pas la même
|
|
14
|
+
* pagination. Les polices voyagent avec le document — autant s'en servir.
|
|
15
|
+
*/
|
|
16
|
+
export type FontStyle = 'regular' | 'bold' | 'italic' | 'boldItalic';
|
|
17
|
+
export interface EmbeddedFont {
|
|
18
|
+
/** nom tel que le document le demande dans `w:rFonts` */
|
|
19
|
+
family: string;
|
|
20
|
+
style: FontStyle;
|
|
21
|
+
/** chemin de la part dans le zip */
|
|
22
|
+
part: string;
|
|
23
|
+
/** octets désobfusqués, prêts pour `new FontFace(...)` */
|
|
24
|
+
data: Uint8Array;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Défait le XOR des 32 premiers octets.
|
|
28
|
+
*
|
|
29
|
+
* La clé est le GUID lu **à l'envers** : son dernier octet en premier. C'est le
|
|
30
|
+
* détail qui fait échouer les implémentations naïves — un GUID lu à l'endroit
|
|
31
|
+
* produit un fichier qui ressemble à une police et n'en est pas une.
|
|
32
|
+
*/
|
|
33
|
+
export declare function deobfuscateFont(data: Uint8Array, fontKey: string): Uint8Array;
|
|
34
|
+
/** Le désobfuscage a-t-il produit une police plausible ? */
|
|
35
|
+
export declare function looksLikeFont(data: Uint8Array): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* `w:altName` — le remplaçant que WORD LUI-MÊME désigne, document par document.
|
|
38
|
+
*
|
|
39
|
+
* `word/fontTable.xml` déclare chaque police employée et, quand elle risque de
|
|
40
|
+
* manquer, la famille par laquelle la remplacer. C'est une table écrite par
|
|
41
|
+
* Word à l'enregistrement, pas une convention : **2 764 couples dans le
|
|
42
|
+
* corpus**, et elle explique pourquoi aucun alias GLOBAL ne pouvait gagner —
|
|
43
|
+
* « Times » y renvoie à « Times New Roman » dans 286 documents et à
|
|
44
|
+
* « Sylfaen » dans 101 autres.
|
|
45
|
+
*
|
|
46
|
+
* Les plus fréquents : MS Mincho → MS 明朝, New York → Times New Roman,
|
|
47
|
+
* New Century Schlbk → Century Schoolbook, Marianne → Cambria, Gadget → Arial.
|
|
48
|
+
*
|
|
49
|
+
* À consulter AVANT la table d'alias, et seulement quand la famille demandée
|
|
50
|
+
* n'est pas servie — Word ne s'en sert que dans ce cas.
|
|
51
|
+
*/
|
|
52
|
+
export declare function fontAltNames(doc: DocxDocument): Map<string, string>;
|
|
53
|
+
/** Toutes les polices embarquées, désobfusquées. */
|
|
54
|
+
export declare function embeddedFonts(doc: DocxDocument): EmbeddedFont[];
|
|
55
|
+
/** Déclaration CSS `@font-face` prête à injecter, via une URL d'objet. */
|
|
56
|
+
export declare const fontFaceDescriptor: (f: EmbeddedFont) => {
|
|
57
|
+
family: string;
|
|
58
|
+
weight: string;
|
|
59
|
+
style: string;
|
|
60
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type DocxDocument, type XmlNode } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Run healer — port du composant critique de LumiClone pour fast-xml-parser.
|
|
4
|
+
*
|
|
5
|
+
* Problème : Word fragmente les tags template ({{ }} et {% %}) en plusieurs
|
|
6
|
+
* <w:r> à cause du correcteur orthographique, de l'autocomplétion et des
|
|
7
|
+
* marques de révision. Après healing, chaque tag tient dans un seul <w:r>.
|
|
8
|
+
*
|
|
9
|
+
* Les runs enveloppés dans un `w:hyperlink`, un `w:sdt` ou un `w:ins` sont
|
|
10
|
+
* traversés comme les autres : `runSpans` descend dans les mêmes conteneurs
|
|
11
|
+
* que la vue typée.
|
|
12
|
+
*/
|
|
13
|
+
export declare const TAG_RE: RegExp;
|
|
14
|
+
/** Crée un run avec le rPr du template et un seul w:t. */
|
|
15
|
+
export declare function makeRun(template: XmlNode, text: string): XmlNode;
|
|
16
|
+
/**
|
|
17
|
+
* Portion `[from, to)` d'un run, en **conservant ses enfants non textuels**.
|
|
18
|
+
*
|
|
19
|
+
* Recopier le texte à plat perdrait les `w:tab` et `w:br` qui l'entourent — et
|
|
20
|
+
* dans les matrices, un tag est presque toujours précédé de tabulations
|
|
21
|
+
* (`\t\t{{ salarie.nom }}`). Les effacer déplace toute la ligne : mesuré à
|
|
22
|
+
* 828 633 pixels d'écart sur `0_technicien.docx` avant ce correctif.
|
|
23
|
+
*/
|
|
24
|
+
export declare function sliceRun(run: XmlNode, from: number, to: number): XmlNode | null;
|
|
25
|
+
/** Soigne les tags template fragmentés dans tout le document.
|
|
26
|
+
* Modifie `doc.xml` en place — chaque tag {{ }} ou {% %} se retrouve
|
|
27
|
+
* dans un seul `<w:r>`. Le round-trip `writeDocx` produit le XML nettoyé. */
|
|
28
|
+
export declare function healTags(doc: DocxDocument): number;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Représentation JSON d'un .docx.
|
|
3
|
+
*
|
|
4
|
+
* ponytail: modèle "passthrough-first". On ne type RIEN au départ : chaque part XML
|
|
5
|
+
* est un arbre ordonné fidèle, chaque binaire reste brut. Le round-trip est donc
|
|
6
|
+
* parfait dès J1, et on "promeut" progressivement des noeuds vers un modèle typé
|
|
7
|
+
* (paragraphe, run, table...) au fur et à mesure des besoins de l'éditeur.
|
|
8
|
+
* Upgrade path: ajouter des vues typées au-dessus de `parts`, jamais à la place.
|
|
9
|
+
*/
|
|
10
|
+
export type XmlNode = Record<string, any>;
|
|
11
|
+
export type XmlTree = XmlNode[];
|
|
12
|
+
export interface DocxDocument {
|
|
13
|
+
/** parts XML parsées, clé = chemin dans le zip (ex: "word/document.xml") */
|
|
14
|
+
xml: Record<string, XmlTree>;
|
|
15
|
+
/** parts binaires (images, fonts, thumbnails...) conservées telles quelles */
|
|
16
|
+
bin: Record<string, Uint8Array>;
|
|
17
|
+
/** ordre original des entrées du zip, pour rebuild déterministe */
|
|
18
|
+
order: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function readDocx(buf: Uint8Array): DocxDocument;
|
|
21
|
+
export declare function writeDocx(doc: DocxDocument): Uint8Array;
|
|
22
|
+
/** Nom de balise d'un noeud ordonné (les clés `:@` / `#text` sont des métadonnées). */
|
|
23
|
+
export declare function tagOf(node: XmlNode): string;
|
|
24
|
+
/** Parcours en profondeur de tous les noeuds d'un arbre. */
|
|
25
|
+
export declare function walk(tree: XmlTree): Generator<XmlNode>;
|
|
26
|
+
/**
|
|
27
|
+
* Comme `walk`, mais sans entrer dans les `mc:Fallback`.
|
|
28
|
+
*
|
|
29
|
+
* Une forme moderne s'écrit deux fois : une `mc:Choice` pour les lecteurs
|
|
30
|
+
* récents, une `mc:Fallback` avec le MÊME contenu pour les anciens. Un lecteur
|
|
31
|
+
* en affiche une seule. On les affichait toutes les deux — le pied de page de
|
|
32
|
+
* Colo 2 sortait « Paraphes Salarié.e » quatre fois.
|
|
33
|
+
*/
|
|
34
|
+
export declare function walkRendered(tree: XmlTree, opts?: {
|
|
35
|
+
skipTextBoxes?: boolean;
|
|
36
|
+
}): Generator<XmlNode>;
|
|
37
|
+
/**
|
|
38
|
+
* Premier nœud portant ce tag, sans matérialiser l'arbre.
|
|
39
|
+
*
|
|
40
|
+
* `[...walk(tree)].find(...)` construit un tableau de TOUS les nœuds avant d'en
|
|
41
|
+
* chercher un — sur un contrat de 42 pages, cinquante mille objets pour trouver
|
|
42
|
+
* `w:body`, qui est le deuxième. Le générateur s'arrête au premier trouvé.
|
|
43
|
+
*/
|
|
44
|
+
export declare function firstTag(tree: XmlTree, tag: string): XmlNode | undefined;
|
|
45
|
+
/** Attribut d'un noeud XML ordonné. */
|
|
46
|
+
export declare const attr: (n: XmlNode | undefined, name: string) => string | undefined;
|
|
47
|
+
/** Premier enfant direct portant le tag donné. */
|
|
48
|
+
export declare const childOf: (node: XmlNode, tag: string) => XmlNode | undefined;
|
|
49
|
+
/** Texte d'un paragraphe (`w:p`), en concaténant ses `w:t`. */
|
|
50
|
+
export declare function paragraphText(p: XmlNode): string;
|
|
51
|
+
/**
|
|
52
|
+
* Tous les paragraphes du FIL de word/document.xml, dans l'ordre.
|
|
53
|
+
*
|
|
54
|
+
* Les zones de texte en sont exclues : elles sont ancrées, Word les pose hors
|
|
55
|
+
* du fil, et `bodyBlocks` ne les énumère pas. Les compter ici décalait tous les
|
|
56
|
+
* index suivants — sur Colo 2, un tableau affichait le texte du paragraphe
|
|
57
|
+
* d'à côté dans ses cellules, neuf paragraphes plus loin.
|
|
58
|
+
*/
|
|
59
|
+
export declare const BODY = "word/document.xml";
|
|
60
|
+
/**
|
|
61
|
+
* Les paragraphes du fil d'une PART, dans l'ordre.
|
|
62
|
+
*
|
|
63
|
+
* Le corps par défaut, mais un en-tête ou un pied est fait des mêmes `w:p` —
|
|
64
|
+
* ils vivent simplement dans un autre fichier du zip. C'est tout ce qui les
|
|
65
|
+
* séparait de l'éditeur : leur adresse n'était pas exprimable.
|
|
66
|
+
*/
|
|
67
|
+
export declare function paragraphsIn(doc: DocxDocument, part?: string): XmlNode[];
|
|
68
|
+
/** Les paragraphes du corps — le cas courant. */
|
|
69
|
+
export declare function paragraphs(doc: DocxDocument): XmlNode[];
|
|
70
|
+
/** Options de parcours du fil : ni variantes de repli, ni zones ancrées. */
|
|
71
|
+
export declare const FLOW: {
|
|
72
|
+
readonly skipTextBoxes: true;
|
|
73
|
+
};
|
|
74
|
+
export type BodyBlock = {
|
|
75
|
+
type: 'paragraph';
|
|
76
|
+
paraIndex: number;
|
|
77
|
+
sectionIndex: number;
|
|
78
|
+
} | {
|
|
79
|
+
type: 'table';
|
|
80
|
+
tableIndex: number;
|
|
81
|
+
paraStart: number;
|
|
82
|
+
paraCount: number;
|
|
83
|
+
sectionIndex: number;
|
|
84
|
+
} | {
|
|
85
|
+
type: 'sectionBreak';
|
|
86
|
+
sectionIndex: number;
|
|
87
|
+
breakType: 'nextPage' | 'continuous' | 'evenPage' | 'oddPage';
|
|
88
|
+
};
|
|
89
|
+
/** Séquence ordonnée des éléments de premier niveau du body (paragraphes et tableaux).
|
|
90
|
+
* Inclut des `sectionBreak` quand le layout change (colonnes, marges, orientation).
|
|
91
|
+
* Le renderer itère là-dessus et pioche dans styledParagraphs[paraIndex] ou tables()[tableIndex]. */
|
|
92
|
+
export declare function bodyBlocks(doc: DocxDocument): BodyBlock[];
|
|
93
|
+
/**
|
|
94
|
+
* Nombre de pages que Word a rendues, lu dans `w:lastRenderedPageBreak`.
|
|
95
|
+
*
|
|
96
|
+
* Fiable pour les documents sans tableau bilingue multi-page. Retourne
|
|
97
|
+
* `undefined` si aucun marqueur n'est trouvé (le document n'a jamais été
|
|
98
|
+
* imprimé par Word).
|
|
99
|
+
*/
|
|
100
|
+
export declare function wordPageCount(doc: DocxDocument): number | undefined;
|
|
101
|
+
export * from './layout';
|
|
102
|
+
export * from './spans';
|
|
103
|
+
export * from './styles';
|
|
104
|
+
export * from './numbering';
|
|
105
|
+
export * from './tables';
|
|
106
|
+
export * from './rels';
|
|
107
|
+
export * from './heal';
|
|
108
|
+
export * from './edit';
|
|
109
|
+
export * from './editor';
|
|
110
|
+
export * from './insert';
|
|
111
|
+
export * from './paste';
|
|
112
|
+
export * from './fonts';
|
|
113
|
+
export * from './textbox';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type DocxDocument } from './index';
|
|
2
|
+
import { type DocPos, type RunPatch } from './editor';
|
|
3
|
+
export interface InsertedImage {
|
|
4
|
+
/** où le curseur se retrouve, après l'image */
|
|
5
|
+
pos: DocPos;
|
|
6
|
+
/** chemin de la part créée dans le zip */
|
|
7
|
+
path: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Insère une image EN LIGNE au point.
|
|
11
|
+
*
|
|
12
|
+
* Les quatre gestes du paquet OPC, dans l'ordre : l'octet, le type de contenu,
|
|
13
|
+
* la relation, puis seulement le nœud. `widthPt`/`heightPt` sont la taille
|
|
14
|
+
* d'affichage ; c'est à l'appelant de la déduire des pixels de l'image, lui
|
|
15
|
+
* seul sait la décoder.
|
|
16
|
+
*/
|
|
17
|
+
export declare function insertImage(doc: DocxDocument, at: DocPos, data: Uint8Array, ext: string, widthPt: number, heightPt: number): InsertedImage | null;
|
|
18
|
+
/** Un morceau de texte collé, avec la mise en forme qu'il portait. */
|
|
19
|
+
export interface PastedRun {
|
|
20
|
+
text: string;
|
|
21
|
+
style: RunPatch;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Insère une suite de runs mis en forme au point.
|
|
25
|
+
*
|
|
26
|
+
* Le texte venu d'ailleurs n'a pas de run d'origine à découper : on en
|
|
27
|
+
* fabrique. Le run qui portait le point est coupé en deux, et les nouveaux se
|
|
28
|
+
* glissent entre les morceaux.
|
|
29
|
+
*/
|
|
30
|
+
export declare function insertRuns(doc: DocxDocument, at: DocPos, runs: PastedRun[]): DocPos | null;
|