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,411 @@
|
|
|
1
|
+
import { type DocxDocument } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Vue typée au-dessus du modèle passthrough : ce qu'il faut pour dessiner
|
|
4
|
+
* une page qui ressemble à Word.
|
|
5
|
+
*
|
|
6
|
+
* ponytail: on ne modélise que ce qu'on affiche. Chaque champ ajouté ici
|
|
7
|
+
* passe par la cascade de styles (styles.ts) avant lecture.
|
|
8
|
+
*/
|
|
9
|
+
export interface ParagraphStyle {
|
|
10
|
+
/** identifiant de style Word, ex. `Titre1` */
|
|
11
|
+
styleId?: string;
|
|
12
|
+
/** niveau de titre déduit du style, 1..6 */
|
|
13
|
+
heading?: number;
|
|
14
|
+
align?: 'left' | 'center' | 'right' | 'justify';
|
|
15
|
+
bold?: boolean;
|
|
16
|
+
italic?: boolean;
|
|
17
|
+
underline?: boolean;
|
|
18
|
+
/** taille en points */
|
|
19
|
+
sizePt?: number;
|
|
20
|
+
/** police de caractère */
|
|
21
|
+
fontFamily?: string;
|
|
22
|
+
/** couleur du texte (hex sans #, ex. `2F5496`) */
|
|
23
|
+
color?: string;
|
|
24
|
+
/** retraits et espacements, en points */
|
|
25
|
+
indentLeftPt?: number;
|
|
26
|
+
/**
|
|
27
|
+
* `w:ind w:left` DÉCLARÉ PAR LE PARAGRAPHE, hors héritage de style.
|
|
28
|
+
*
|
|
29
|
+
* ECMA-376 place le `w:pPr` du NIVEAU de numérotation entre le style et le
|
|
30
|
+
* formatage direct : le retrait du niveau l'emporte sur celui du style de
|
|
31
|
+
* liste, et cède au retrait écrit sur le paragraphe. Sans distinguer les
|
|
32
|
+
* deux, `Paragraphedeliste` (`w:left="720"`) écrasait le `w:left="1080"` du
|
|
33
|
+
* niveau, et le « J. » de « CREW CINE SKYLARK » partait 18 pt trop à gauche
|
|
34
|
+
* — 94,3 pt au lieu des 112,6 de Word — avec tout son paragraphe.
|
|
35
|
+
*/
|
|
36
|
+
indentLeftDirectPt?: number;
|
|
37
|
+
indentRightPt?: number;
|
|
38
|
+
indentFirstPt?: number;
|
|
39
|
+
spaceBeforePt?: number;
|
|
40
|
+
spaceAfterPt?: number;
|
|
41
|
+
/** interligne en multiple de la ligne simple (w:lineRule="auto") */
|
|
42
|
+
lineHeight?: number;
|
|
43
|
+
/** hauteur de ligne imposée, en points (w:lineRule="exact") */
|
|
44
|
+
lineExactPt?: number;
|
|
45
|
+
/** hauteur de ligne minimale, en points (w:lineRule="atLeast") */
|
|
46
|
+
lineMinPt?: number;
|
|
47
|
+
/** fond de paragraphe (w:shd fill), hex sans # */
|
|
48
|
+
shdFill?: string;
|
|
49
|
+
/** encadrement du paragraphe (w:pBdr) — Word dessine le trait ET réserve son `w:space` */
|
|
50
|
+
borders?: ParaBorders;
|
|
51
|
+
/** taquets de tabulation explicites (w:tabs), en points depuis la marge, triés */
|
|
52
|
+
tabStops?: TabStop[];
|
|
53
|
+
/**
|
|
54
|
+
* `w:widowControl` — Word l'active par DÉFAUT et refuse alors de laisser une
|
|
55
|
+
* ligne seule en bas ou en haut d'une page : il descend le paragraphe entier.
|
|
56
|
+
* Ces matrices le désactivent souvent explicitement (`w:val="0"`).
|
|
57
|
+
*/
|
|
58
|
+
widowControl?: boolean;
|
|
59
|
+
/** `w:keepNext` — reste sur la même page que le paragraphe suivant. */
|
|
60
|
+
keepNext?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* `w:pageBreakBefore` — Word ouvre une page AVANT ce paragraphe.
|
|
63
|
+
*
|
|
64
|
+
* 30 documents du corpus, 270 paragraphes. Le manquer ne coûte pas une ligne
|
|
65
|
+
* mais une PAGE : une fois la frontière ratée, toutes les suivantes le sont.
|
|
66
|
+
*/
|
|
67
|
+
pageBreakBefore?: boolean;
|
|
68
|
+
/** `w:keepLines` — le paragraphe ne se coupe pas entre deux pages. */
|
|
69
|
+
keepLines?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* `w:contextualSpacing` — supprime l'espacement entre deux paragraphes de
|
|
72
|
+
* MÊME style. 71 % de ces matrices le déclarent : venues du HTML, elles
|
|
73
|
+
* enchaînent des paragraphes identiques dont Word ne sépare pas les lignes.
|
|
74
|
+
* Mesuré au banc : 11,52 pt de pas au lieu de 17,52 avec 6 pt déclarés.
|
|
75
|
+
*/
|
|
76
|
+
contextualSpacing?: boolean;
|
|
77
|
+
/** `w:textAlignment` — alignement vertical des glyphes dans la ligne. */
|
|
78
|
+
textAlignment?: 'center' | 'top' | 'bottom';
|
|
79
|
+
/** `w:framePr` — le paragraphe est un CADRE posé, hors du fil. Voir `FrameInfo`. */
|
|
80
|
+
frame?: FrameInfo;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Un paragraphe encadré (`w:framePr`).
|
|
84
|
+
*
|
|
85
|
+
* Word le sort du fil et le pose à une position : c'est l'ancêtre de la zone de
|
|
86
|
+
* texte, et 19 % de ces matrices s'en servent — presque toujours pour le numéro
|
|
87
|
+
* de page, `w:xAlign="right"` dans un pied. Le laisser dans le fil lui donne la
|
|
88
|
+
* position du fil (à gauche) ET lui fait réserver sa hauteur : sur FIEF le pied
|
|
89
|
+
* mesurait 20 pt de haut au lieu de zéro, et le numéro sortait à gauche.
|
|
90
|
+
*
|
|
91
|
+
* Les distances sont en points ; `w:x`/`w:y` ne valent que si l'alignement
|
|
92
|
+
* correspondant est absent.
|
|
93
|
+
*/
|
|
94
|
+
export interface FrameInfo {
|
|
95
|
+
widthPt?: number;
|
|
96
|
+
heightPt?: number;
|
|
97
|
+
xPt?: number;
|
|
98
|
+
yPt?: number;
|
|
99
|
+
hAnchor: 'text' | 'margin' | 'page';
|
|
100
|
+
vAnchor: 'text' | 'margin' | 'page';
|
|
101
|
+
xAlign?: 'left' | 'center' | 'right' | 'inside' | 'outside';
|
|
102
|
+
yAlign?: 'top' | 'center' | 'bottom' | 'inside' | 'outside';
|
|
103
|
+
/** `none` = le texte ne l'habille pas — le cas du numéro de page. */
|
|
104
|
+
wrap?: string;
|
|
105
|
+
}
|
|
106
|
+
export interface TabStop {
|
|
107
|
+
posPt: number;
|
|
108
|
+
align: 'left' | 'center' | 'right' | 'decimal' | 'bar';
|
|
109
|
+
/**
|
|
110
|
+
* `w:leader` — le caractère qui REMPLIT le blanc jusqu'au taquet.
|
|
111
|
+
*
|
|
112
|
+
* 44 documents du corpus posent 689 conduites en points, 4 en soulignés, 2 en
|
|
113
|
+
* tirets. Sans elles, une ligne « Lieu de tournage : XXX ............ » se
|
|
114
|
+
* composait à 68 pt là où Word en fait 524 : le blanc restait blanc.
|
|
115
|
+
*/
|
|
116
|
+
leader?: string;
|
|
117
|
+
}
|
|
118
|
+
/** Un côté d'encadrement de paragraphe. `spacePt` est déjà en points (w:space
|
|
119
|
+
* vaut des points pour w:pBdr, contrairement aux twips habituels). */
|
|
120
|
+
export interface ParaBorder {
|
|
121
|
+
style: string;
|
|
122
|
+
sizePt: number;
|
|
123
|
+
color?: string;
|
|
124
|
+
spacePt: number;
|
|
125
|
+
}
|
|
126
|
+
export interface ParaBorders {
|
|
127
|
+
top?: ParaBorder;
|
|
128
|
+
bottom?: ParaBorder;
|
|
129
|
+
left?: ParaBorder;
|
|
130
|
+
right?: ParaBorder;
|
|
131
|
+
/**
|
|
132
|
+
* `w:between` — le trait que Word pose ENTRE deux paragraphes qui portent le
|
|
133
|
+
* même encadrement, à la place du bas de l'un et du haut de l'autre.
|
|
134
|
+
*
|
|
135
|
+
* Le moteur fusionnait déjà ces deux paragraphes en un seul cadre et sautait
|
|
136
|
+
* le trait ; c'est juste quand `w:between` est absent, et faux quand il est
|
|
137
|
+
* là — 126 documents du corpus le posent, 1849 fois dans leur corps.
|
|
138
|
+
*/
|
|
139
|
+
between?: ParaBorder;
|
|
140
|
+
}
|
|
141
|
+
export interface PageSetup {
|
|
142
|
+
widthPt: number;
|
|
143
|
+
heightPt: number;
|
|
144
|
+
marginTopPt: number;
|
|
145
|
+
marginRightPt: number;
|
|
146
|
+
marginBottomPt: number;
|
|
147
|
+
marginLeftPt: number;
|
|
148
|
+
orient?: 'landscape';
|
|
149
|
+
/** nombre de colonnes (1 par défaut) */
|
|
150
|
+
columns?: number;
|
|
151
|
+
/** gouttière entre colonnes, en points */
|
|
152
|
+
columnGapPt?: number;
|
|
153
|
+
/** largeurs explicites (w:equalWidth="0") : [largeur, gouttière après] par colonne, en points.
|
|
154
|
+
* Word autorise des colonnes inégales — les répartir également décale tout le texte. */
|
|
155
|
+
columnWidthsPt?: Array<{
|
|
156
|
+
widthPt: number;
|
|
157
|
+
spacePt: number;
|
|
158
|
+
}>;
|
|
159
|
+
/**
|
|
160
|
+
* Gouttière de reliure (`w:pgMar/@w:gutter`), en points.
|
|
161
|
+
*
|
|
162
|
+
* Word l'AJOUTE à la marge intérieure — la gauche par défaut, le haut si
|
|
163
|
+
* `w:gutterAtTop`. C'est la marge de reliure d'un document destiné à être
|
|
164
|
+
* relié ou agrafé ; l'ignorer décale toute la zone de texte de sa valeur, et
|
|
165
|
+
* ces contrats en portent.
|
|
166
|
+
*/
|
|
167
|
+
gutterPt?: number;
|
|
168
|
+
/** la gouttière se prend en HAUT et non à gauche (`w:gutterAtTop`) */
|
|
169
|
+
gutterAtTop?: boolean;
|
|
170
|
+
/** distance du bord haut au haut de l'en-tête (w:pgMar/@w:header), en points */
|
|
171
|
+
headerDistPt?: number;
|
|
172
|
+
/** distance du bord bas au bas du pied (w:pgMar/@w:footer), en points */
|
|
173
|
+
footerDistPt?: number;
|
|
174
|
+
/** références d'en-tête/pied de CETTE section — une section qui n'en déclare
|
|
175
|
+
* pas hérite de la précédente, comme chez Word. */
|
|
176
|
+
headerRefs?: PartRef[];
|
|
177
|
+
footerRefs?: PartRef[];
|
|
178
|
+
/**
|
|
179
|
+
* `w:titlePg` — la première page de la section a ses PROPRES en-tête et pied.
|
|
180
|
+
*
|
|
181
|
+
* Sans lui, une référence `w:type="first"` ne doit PAS être utilisée : Word
|
|
182
|
+
* l'ignore et pose l'en-tête ordinaire. 81 documents du corpus déclarent une
|
|
183
|
+
* référence « first » sans déclarer `w:titlePg` ; la prendre leur donnait un
|
|
184
|
+
* en-tête d'une autre hauteur sur la page 1, donc un corps qui démarre au
|
|
185
|
+
* mauvais y et une page entière décalée.
|
|
186
|
+
*/
|
|
187
|
+
titlePg?: boolean;
|
|
188
|
+
/** `w:pgNumType w:start` — numéro auquel la numérotation REPART dans cette section */
|
|
189
|
+
pageNumStart?: number;
|
|
190
|
+
/** `w:pgNumType w:fmt` — `decimal` par défaut, `numberInDash` écrit « - 3 - » */
|
|
191
|
+
pageNumFmt?: string;
|
|
192
|
+
/** police par défaut du document */
|
|
193
|
+
fontFamily?: string;
|
|
194
|
+
fontSizePt?: number;
|
|
195
|
+
}
|
|
196
|
+
/** Référence à un en-tête ou pied : son type Word et l'id de relation. */
|
|
197
|
+
export interface PartRef {
|
|
198
|
+
type: 'default' | 'first' | 'even';
|
|
199
|
+
rId: string;
|
|
200
|
+
}
|
|
201
|
+
export interface RunStyle {
|
|
202
|
+
bold?: boolean;
|
|
203
|
+
italic?: boolean;
|
|
204
|
+
underline?: boolean;
|
|
205
|
+
strike?: boolean;
|
|
206
|
+
dstrike?: boolean;
|
|
207
|
+
/** taille en points */
|
|
208
|
+
sizePt?: number;
|
|
209
|
+
fontFamily?: string;
|
|
210
|
+
/** couleur hex sans #, ex. `2F5496` */
|
|
211
|
+
color?: string;
|
|
212
|
+
/** surbrillance Word (nom de couleur, ex. `yellow`) */
|
|
213
|
+
highlight?: string;
|
|
214
|
+
/** `w:bdr` — cadre autour du RUN, distinct du `w:pBdr` du paragraphe */
|
|
215
|
+
border?: ParaBorder;
|
|
216
|
+
vertAlign?: 'superscript' | 'subscript';
|
|
217
|
+
/**
|
|
218
|
+
* `w:position` — texte ÉLEVÉ ou abaissé, en points (positif = vers le haut).
|
|
219
|
+
*
|
|
220
|
+
* Indépendant de `w:vertAlign` : l'exposant réduit aussi le corps, `w:position`
|
|
221
|
+
* ne fait que déplacer la ligne de base. Word le compte en demi-points.
|
|
222
|
+
*/
|
|
223
|
+
positionPt?: number;
|
|
224
|
+
smallCaps?: boolean;
|
|
225
|
+
allCaps?: boolean;
|
|
226
|
+
/** texte masqué */
|
|
227
|
+
vanish?: boolean;
|
|
228
|
+
/**
|
|
229
|
+
* Échelle HORIZONTALE des glyphes (`w:rPr/w:w`), en pourcentage.
|
|
230
|
+
*
|
|
231
|
+
* Word étire ou resserre chaque glyphe sans toucher à sa hauteur : à 90 %,
|
|
232
|
+
* tout le texte est un dixième plus étroit, ce qui change les coupures de
|
|
233
|
+
* ligne et la position de chaque mot. 285 des 1336 documents du corpus la
|
|
234
|
+
* déclarent, 45 294 runs à 90 % et 22 028 à 105 %.
|
|
235
|
+
*
|
|
236
|
+
* `undefined` vaut 100 %.
|
|
237
|
+
*/
|
|
238
|
+
scaleW?: number;
|
|
239
|
+
/**
|
|
240
|
+
* Interlettrage (`w:rPr/w:spacing/@w:val`), en points.
|
|
241
|
+
*
|
|
242
|
+
* Word l'ajoute APRÈS chaque caractère. Sur « Vanished », soixante-neuf runs
|
|
243
|
+
* portent `w:val="2"` — un dixième de point par caractère, soit douze points
|
|
244
|
+
* sur une ligne de cent vingt : un mot entier. Nous l'ignorions, nos lignes
|
|
245
|
+
* sortaient d'autant plus courtes, et chacune gardait un mot que Word renvoie.
|
|
246
|
+
*/
|
|
247
|
+
letterSpacingPt?: number;
|
|
248
|
+
}
|
|
249
|
+
export interface ImageInfo {
|
|
250
|
+
/** r:id de l'image dans les relations de la part parente */
|
|
251
|
+
rId: string;
|
|
252
|
+
widthPt: number;
|
|
253
|
+
heightPt: number;
|
|
254
|
+
/**
|
|
255
|
+
* `a:srcRect` — la partie de l'image effectivement montrée, en fractions du
|
|
256
|
+
* fichier source (gauche, haut, droite, bas rognés).
|
|
257
|
+
*
|
|
258
|
+
* Word rogne l'image et ÉTIRE la partie restante dans la boîte. L'ignorer
|
|
259
|
+
* dessine tout le fichier dans la boîte : sur le logo de « Cascadeur FLEUR »,
|
|
260
|
+
* dont le `a:srcRect` garde 42 % de la largeur et 16 % de la hauteur, le
|
|
261
|
+
* VIXENS sortait cinq fois trop petit et perdu au milieu d'un cadre vide.
|
|
262
|
+
*/
|
|
263
|
+
crop?: {
|
|
264
|
+
l: number;
|
|
265
|
+
t: number;
|
|
266
|
+
r: number;
|
|
267
|
+
b: number;
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Ancrage (`wp:anchor`) : l'image est posée à ces coordonnées et ne prend
|
|
271
|
+
* aucune place dans le fil. Absent pour une image en ligne (`wp:inline`).
|
|
272
|
+
*
|
|
273
|
+
* `relH`/`relV` disent par rapport à quoi : `page`, `margin`, `column`
|
|
274
|
+
* (= marge gauche du texte) ou `paragraph` (= position courante du fil).
|
|
275
|
+
* Ignorer les images ancrées faisait disparaître tous les logos d'en-tête.
|
|
276
|
+
*/
|
|
277
|
+
anchor?: {
|
|
278
|
+
xPt: number;
|
|
279
|
+
yPt: number;
|
|
280
|
+
relH: string;
|
|
281
|
+
relV: string;
|
|
282
|
+
/**
|
|
283
|
+
* Habillage. `none` (`wp:wrapNone`) = l'image flotte et ne prend aucune
|
|
284
|
+
* place ; tous les autres font que Word RÉSERVE sa hauteur dans le fil.
|
|
285
|
+
*/
|
|
286
|
+
wrap?: 'none' | 'square' | 'topAndBottom' | 'tight' | 'through';
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
export interface StyledRun {
|
|
290
|
+
text: string;
|
|
291
|
+
style: RunStyle;
|
|
292
|
+
/** présent pour les runs image (text est vide) */
|
|
293
|
+
image?: ImageInfo;
|
|
294
|
+
/**
|
|
295
|
+
* Marqueur libre posé par l'appelant, ignoré du rendu.
|
|
296
|
+
*
|
|
297
|
+
* Sert à retrouver *où* un run a été dessiné : après healing chaque tag de
|
|
298
|
+
* matrice occupe son propre run, donc marquer le run suffit à situer le tag
|
|
299
|
+
* dans la mise en page — sans que le renderer ait à connaître les tags.
|
|
300
|
+
*/
|
|
301
|
+
mark?: string;
|
|
302
|
+
/**
|
|
303
|
+
* Boîte réservée dans le flux, à la place du texte.
|
|
304
|
+
*
|
|
305
|
+
* Le renderer l'intègre à sa césure et publie son rectangle, mais n'y peint
|
|
306
|
+
* rien : c'est ce qui permet à une extension d'insérer son propre affichage
|
|
307
|
+
* DANS la mise en page plutôt que par-dessus.
|
|
308
|
+
*/
|
|
309
|
+
box?: {
|
|
310
|
+
widthPx: number;
|
|
311
|
+
heightPx: number;
|
|
312
|
+
};
|
|
313
|
+
/**
|
|
314
|
+
* Champ Word dont ce run porte le résultat mis en cache.
|
|
315
|
+
*
|
|
316
|
+
* Le .docx garde la dernière valeur calculée par Word — « Page 2 sur 4 » dans
|
|
317
|
+
* un document qui en fait 9. C'est au rendu de recalculer.
|
|
318
|
+
*/
|
|
319
|
+
field?: 'page' | 'numPages';
|
|
320
|
+
/**
|
|
321
|
+
* Numéro de l'appel de note que ce run porte (1 pour la première du fil).
|
|
322
|
+
*
|
|
323
|
+
* Le texte du run porte déjà le chiffre en exposant ; ce champ dit au moteur
|
|
324
|
+
* QUELLE note de `word/footnotes.xml` va au bas de la page où ce run tombe.
|
|
325
|
+
* Sans lui, le renvoi s'affichait et la note restait invisible.
|
|
326
|
+
*/
|
|
327
|
+
footnote?: number;
|
|
328
|
+
}
|
|
329
|
+
export interface StyledParagraph {
|
|
330
|
+
style: ParagraphStyle;
|
|
331
|
+
runs: StyledRun[];
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Polices de THÈME (`w:asciiTheme="minorHAnsi"`).
|
|
335
|
+
*
|
|
336
|
+
* 1043 des 1335 matrices — 78 % — ne nomment jamais leur police : elles
|
|
337
|
+
* renvoient au thème, qui la déclare dans `word/theme/theme1.xml`. Sans cette
|
|
338
|
+
* résolution, `w:rFonts` n'a pas de `w:ascii` et la police tombe sur un repli
|
|
339
|
+
* arbitraire : sur le formulaire « 3 bis », « Segoe UI Symbol » au lieu de
|
|
340
|
+
* Calibri, donc un interligne de 1,15 au lieu de 1,2207 et 6 % de hauteur
|
|
341
|
+
* perdue à chaque ligne.
|
|
342
|
+
*
|
|
343
|
+
* `major` habille les titres, `minor` le texte courant. `majorCs`/`minorCs`
|
|
344
|
+
* sont l'emplacement ÉCRITURE COMPLEXE du même thème (`a:cs`) : c'est là que
|
|
345
|
+
* pointe un `w:asciiTheme="minorBidi"`, et pas sur le latin.
|
|
346
|
+
*/
|
|
347
|
+
export interface ThemeFonts {
|
|
348
|
+
major?: string;
|
|
349
|
+
minor?: string;
|
|
350
|
+
majorCs?: string;
|
|
351
|
+
minorCs?: string;
|
|
352
|
+
}
|
|
353
|
+
export declare function themeFonts(doc: DocxDocument): ThemeFonts;
|
|
354
|
+
/** Mise en forme de chaque paragraphe de `word/document.xml`, dans l'ordre.
|
|
355
|
+
* Résout la cascade : docDefaults → chaîne basedOn → formatage direct. */
|
|
356
|
+
export declare function paragraphStyles(doc: DocxDocument): ParagraphStyle[];
|
|
357
|
+
export declare function styledParagraphs(doc: DocxDocument): StyledParagraph[];
|
|
358
|
+
/** Format de page et police par défaut — A4 portrait si le document ne dit rien.
|
|
359
|
+
* Pour les documents multi-sections, utiliser `sections()` à la place. */
|
|
360
|
+
export declare function pageSetup(doc: DocxDocument): PageSetup;
|
|
361
|
+
/**
|
|
362
|
+
* Toutes les sections du document, dans l'ordre.
|
|
363
|
+
*
|
|
364
|
+
* Chaque section a son format de page, ses marges, et ses en-têtes/pieds. Une
|
|
365
|
+
* section qui ne déclare pas de `headerReference` hérite de la précédente —
|
|
366
|
+
* c'est la règle de Word, et l'ignorer coûtait 30 pt en haut de chaque page à
|
|
367
|
+
* partir de la deuxième sur les documents dont seule la première section
|
|
368
|
+
* déclare son en-tête.
|
|
369
|
+
*/
|
|
370
|
+
export declare function sections(doc: DocxDocument): PageSetup[];
|
|
371
|
+
/**
|
|
372
|
+
* `w:defaultTabStop` de settings.xml, en points (36 pt si absent).
|
|
373
|
+
*
|
|
374
|
+
* C'est l'intervalle des taquets implicites : sans lui, un document réglé à
|
|
375
|
+
* 1,25 cm voit toutes ses tabulations tomber au mauvais endroit.
|
|
376
|
+
*/
|
|
377
|
+
/**
|
|
378
|
+
* `w:doNotExpandShiftReturn` — une ligne JUSTIFIÉE qui se termine par un
|
|
379
|
+
* `w:br` n'est pas étirée à la colonne.
|
|
380
|
+
*
|
|
381
|
+
* C'est le comportement de Word depuis 2007, et 115 des 400 documents mesurés
|
|
382
|
+
* le déclarent. Sans lui, chaque adresse et chaque énumération composée avec
|
|
383
|
+
* des retours à la ligne dans un paragraphe justifié sortait étirée sur toute
|
|
384
|
+
* la largeur, un mot par intervalle.
|
|
385
|
+
*/
|
|
386
|
+
/**
|
|
387
|
+
* `w:ulTrailSpace` — le soulignement couvre l'espace de FIN de ligne.
|
|
388
|
+
*
|
|
389
|
+
* Word ne souligne pas les blancs terminaux, sauf si le document le demande.
|
|
390
|
+
* Nous les soulignions toujours : le trait dépassait le dernier mot de la
|
|
391
|
+
* largeur d'une espace sur les 165 documents des 400 qui ne posent pas le
|
|
392
|
+
* drapeau. Les 235 autres le posent, et pour ceux-là notre trait était juste.
|
|
393
|
+
*/
|
|
394
|
+
export declare function underlineTrailingSpace(doc: DocxDocument): boolean;
|
|
395
|
+
/**
|
|
396
|
+
* `w:evenAndOddHeaders` — les pages PAIRES ont leur propre en-tête et pied.
|
|
397
|
+
*
|
|
398
|
+
* 335 documents du corpus déclarent une référence « even », mais **36
|
|
399
|
+
* seulement** posent le drapeau qui l'active : servir la part « even » sans lui
|
|
400
|
+
* donnerait à 299 documents un en-tête que Word n'y met pas. Même piège que
|
|
401
|
+
* `w:titlePg`.
|
|
402
|
+
*/
|
|
403
|
+
export declare function evenAndOddHeaders(doc: DocxDocument): boolean;
|
|
404
|
+
export declare function noExpandShiftReturn(doc: DocxDocument): boolean;
|
|
405
|
+
/**
|
|
406
|
+
* `w:compatSetting w:name="compatibilityMode"` of settings.xml — the Word
|
|
407
|
+
* version whose layout rules the document asks for (11 = Word 2003 … 15 =
|
|
408
|
+
* Word 2013+). Absent means 12, as [MS-OI29500] specifies.
|
|
409
|
+
*/
|
|
410
|
+
export declare function compatibilityMode(doc: DocxDocument): number;
|
|
411
|
+
export declare function defaultTabStopPt(doc: DocxDocument): number;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type DocxDocument } from './index';
|
|
2
|
+
export interface ListInfo {
|
|
3
|
+
numId: number;
|
|
4
|
+
level: number;
|
|
5
|
+
/** habillage de la puce, lu dans `w:lvl/w:rPr` — voir `NumLevel` */
|
|
6
|
+
markerBold?: boolean;
|
|
7
|
+
markerItalic?: boolean;
|
|
8
|
+
markerUnderline?: boolean;
|
|
9
|
+
markerColor?: string;
|
|
10
|
+
/** Texte du marqueur résolu (ex. `●`, `1.`, `a)`) */
|
|
11
|
+
marker: string;
|
|
12
|
+
/** `w:lvlJc` — 7600 niveaux du corpus alignent leur marqueur à DROITE. */
|
|
13
|
+
markerAlign?: 'left' | 'right' | 'center';
|
|
14
|
+
indentLeftPt?: number;
|
|
15
|
+
indentHangingPt?: number;
|
|
16
|
+
/** `w:legacy` — boîte du marqueur et espace après, en points */
|
|
17
|
+
legacyIndentPt?: number;
|
|
18
|
+
legacySpacePt?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Police et corps de la PUCE, déclarés par le niveau de numérotation.
|
|
21
|
+
*
|
|
22
|
+
* Word les prend là en priorité, pas sur la marque de paragraphe. Sur
|
|
23
|
+
* « LES 3 BRESTOISES », le niveau déclare `w:sz w:val="16"` — 8 pt — alors
|
|
24
|
+
* que la marque en dit 11 : nos lignes de liste sortaient 3,3 pt trop hautes,
|
|
25
|
+
* et l'écart s'accumulait sur toute la page.
|
|
26
|
+
*/
|
|
27
|
+
markerFont?: string;
|
|
28
|
+
markerSizePt?: number;
|
|
29
|
+
/**
|
|
30
|
+
* `w:lvlPicBulletId` — la puce est une IMAGE, pas un glyphe.
|
|
31
|
+
*
|
|
32
|
+
* `w:numPicBullet` la déclare en tête de `numbering.xml`, sous la forme d'un
|
|
33
|
+
* `w:pict/v:shape` VML dont l'attribut `style` donne la taille. Word dessine
|
|
34
|
+
* l'image ; le `w:lvlText` que le niveau garde à côté (`\uF0B7`, la puce
|
|
35
|
+
* Symbol) n'est qu'un repli de compatibilité, et Word ne l'écrit pas —
|
|
36
|
+
* vérifié dans son PDF, où la ligne commence directement par son texte.
|
|
37
|
+
*
|
|
38
|
+
* Deux documents du corpus, et l'avance du marqueur ne change pas : c'est le
|
|
39
|
+
* GLYPHE dessiné qui change.
|
|
40
|
+
*/
|
|
41
|
+
markerImage?: {
|
|
42
|
+
rId: string;
|
|
43
|
+
widthPt: number;
|
|
44
|
+
heightPt: number;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Séparateur entre le marqueur et le texte (`w:suff`, `tab` par défaut).
|
|
48
|
+
*
|
|
49
|
+
* Word ne colle jamais le texte contre le numéro : il saute au taquet. Quand
|
|
50
|
+
* le renfoncement le fixe, c'est le retrait gauche ; sinon c'est un taquet
|
|
51
|
+
* ordinaire — sur « Vanished », « a) » à 55,1 pt est suivi de « L'Acteur » à
|
|
52
|
+
* 83,4, soit l'origine de la cellule plus un `w:defaultTabStop`.
|
|
53
|
+
*/
|
|
54
|
+
suffix?: 'tab' | 'space' | 'nothing';
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* `w:numFmt` → le compteur écrit. Sert aussi aux NUMÉROS DE PAGE
|
|
58
|
+
* (`w:pgNumType/@w:fmt`), qui emploient exactement la même énumération.
|
|
59
|
+
*/
|
|
60
|
+
export declare function formatCounter(value: number, fmt: string): string;
|
|
61
|
+
/** Résout les listes pour chaque paragraphe du document (tableau parallèle à `paragraphs(doc)`).
|
|
62
|
+
* `undefined` = pas un élément de liste. Maintient les compteurs en séquence. */
|
|
63
|
+
export declare function resolveNumbering(doc: DocxDocument): (ListInfo | undefined)[];
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type DocxDocument } from './index';
|
|
2
|
+
import { type DocPos } from './editor';
|
|
3
|
+
import { type PastedRun } from './insert';
|
|
4
|
+
/**
|
|
5
|
+
* Ce qu'un collage apporte de plus que du texte : des listes, des tableaux,
|
|
6
|
+
* des images.
|
|
7
|
+
*
|
|
8
|
+
* Le presse-papiers ne rend pas une suite de runs mais une STRUCTURE — un `li`
|
|
9
|
+
* n'est pas un paragraphe indenté, c'est un paragraphe qui pointe une
|
|
10
|
+
* numérotation ; un `td` n'est pas un texte séparé par des tabulations. Les
|
|
11
|
+
* traduire demande d'écrire dans `numbering.xml` et de fabriquer un `w:tbl`,
|
|
12
|
+
* chacun avec ses règles.
|
|
13
|
+
*/
|
|
14
|
+
export type PastedBlock = {
|
|
15
|
+
kind: 'para';
|
|
16
|
+
runs: PastedRun[];
|
|
17
|
+
list?: {
|
|
18
|
+
level: number;
|
|
19
|
+
ordered: boolean;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** Rangs → cellules → runs. Une cellule vide est un tableau de runs vide. */
|
|
23
|
+
| {
|
|
24
|
+
kind: 'table';
|
|
25
|
+
rows: PastedRun[][][];
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'image';
|
|
28
|
+
data: Uint8Array;
|
|
29
|
+
ext: string;
|
|
30
|
+
widthPt: number;
|
|
31
|
+
heightPt: number;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Un `w:numId` bon pour une liste collée — trouvé, ou créé.
|
|
35
|
+
*
|
|
36
|
+
* On RÉUTILISE la première liste du document dont le niveau 0 a le bon format :
|
|
37
|
+
* en fabriquer une par collage remplirait `numbering.xml` de définitions
|
|
38
|
+
* jumelles, et Word les montrerait toutes dans sa galerie. Le fichier peut
|
|
39
|
+
* manquer entièrement — c'est le cas d'un document qui n'a jamais eu de liste,
|
|
40
|
+
* et il faut alors l'ajouter au paquet : la part, son type, sa relation.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ensureListNum(doc: DocxDocument, ordered: boolean): number | null;
|
|
43
|
+
/**
|
|
44
|
+
* Colle une suite de blocs au point, et rend où le curseur se retrouve.
|
|
45
|
+
*
|
|
46
|
+
* Un tableau et une image ne s'insèrent pas DANS un paragraphe : on coupe au
|
|
47
|
+
* point, et le bloc se glisse entre les deux moitiés. Le rang du paragraphe
|
|
48
|
+
* d'après avance alors de tout ce que le bloc apporte — une cellule est un
|
|
49
|
+
* paragraphe comme un autre dans l'adressage du modèle.
|
|
50
|
+
*/
|
|
51
|
+
export declare function pasteBlocks(doc: DocxDocument, at: DocPos, blocks: PastedBlock[]): DocPos | null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type DocxDocument } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Résolution des relations OPC (`.rels`).
|
|
4
|
+
*
|
|
5
|
+
* ponytail: lookup table pure, pas de traversée récursive des parts liées.
|
|
6
|
+
* Le consommateur résout rId → target, puis accède à doc.xml[target] ou doc.bin[target].
|
|
7
|
+
*/
|
|
8
|
+
export interface Relationship {
|
|
9
|
+
/** type court (ex. `image`, `header`, `hyperlink`, `styles`) */
|
|
10
|
+
type: string;
|
|
11
|
+
/** chemin résolu dans le zip, ou URL externe */
|
|
12
|
+
target: string;
|
|
13
|
+
/** true pour les liens externes (hyperlinks, etc.) */
|
|
14
|
+
external: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Résout les relations OPC pour une part donnée.
|
|
17
|
+
* Par défaut : `word/document.xml` → ses headers, images, hyperlinks, etc. */
|
|
18
|
+
export declare function relationships(doc: DocxDocument, partPath?: string): Map<string, Relationship>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type XmlNode } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Adressage d'un paragraphe : où commence et finit chaque run, en caractères.
|
|
4
|
+
*
|
|
5
|
+
* C'est la **couture** entre la lecture et l'écriture. La lecture
|
|
6
|
+
* (`styledParagraphs` → renderer → curseur) rend une position à l'écran sous
|
|
7
|
+
* la forme d'un rang de caractère dans un paragraphe ; l'écriture
|
|
8
|
+
* (`healTags`, `replaceRange`) doit retrouver le run qui porte ce caractère.
|
|
9
|
+
* Si les deux ne comptent pas les mêmes caractères, une position lue à l'écran
|
|
10
|
+
* ne désigne pas celui qu'on réécrit — et l'éditeur écrit à côté, sans rien
|
|
11
|
+
* signaler.
|
|
12
|
+
*
|
|
13
|
+
* Le piège qui a motivé ce fichier : `styledParagraphs` descend dans les
|
|
14
|
+
* conteneurs inline (`w:hyperlink`, `w:sdt`, `w:ins`…), l'écriture ne regardait
|
|
15
|
+
* que les `w:r` enfants DIRECTS du `w:p`. Dans un paragraphe qui porte un lien,
|
|
16
|
+
* les deux comptes divergent. Une seule fonction les tient désormais d'accord.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Marque d'un `w:br` ou `w:tab` dans le texte d'adressage.
|
|
20
|
+
*
|
|
21
|
+
* Un non-caractère : `TAG_RE` l'exclut, donc aucun tag ne peut se recoudre
|
|
22
|
+
* par-dessus un saut ou une tabulation. Il occupe UN caractère, exactement
|
|
23
|
+
* comme le `\t` / `\n` / `\f` que produit `styledParagraphs` au même endroit —
|
|
24
|
+
* c'est ce qui aligne les deux comptes.
|
|
25
|
+
*/
|
|
26
|
+
export declare const SENTINEL = "\uFFFE";
|
|
27
|
+
/**
|
|
28
|
+
* Conteneurs traversés pour atteindre les runs.
|
|
29
|
+
*
|
|
30
|
+
* Word enveloppe des runs dans un lien, un contrôle de contenu ou une marque
|
|
31
|
+
* de révision sans que ça change le texte affiché. La vue typée les traverse ;
|
|
32
|
+
* l'adressage doit traverser les mêmes, sinon les offsets divergent.
|
|
33
|
+
*/
|
|
34
|
+
export declare const RUN_CONTAINERS: Set<string>;
|
|
35
|
+
/** Texte d'un run, SENTINEL pour chaque `w:br` / `w:tab`. */
|
|
36
|
+
export declare function runText(run: XmlNode): string;
|
|
37
|
+
/**
|
|
38
|
+
* Un run et la plage de caractères qu'il occupe dans son paragraphe.
|
|
39
|
+
*
|
|
40
|
+
* `parent` et non le `w:p` : un run peut vivre dans un conteneur inline, et
|
|
41
|
+
* c'est dans CE tableau qu'il faut découper pour le remplacer.
|
|
42
|
+
*/
|
|
43
|
+
export interface RunSpan {
|
|
44
|
+
/** tableau qui contient le run — enfants du `w:p`, ou d'un conteneur inline */
|
|
45
|
+
parent: XmlNode[];
|
|
46
|
+
/** rang du run dans `parent` */
|
|
47
|
+
idx: number;
|
|
48
|
+
/** bornes dans le texte du paragraphe, `[start, end)` */
|
|
49
|
+
start: number;
|
|
50
|
+
end: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Découpe un paragraphe en runs adressables, dans l'ordre de lecture.
|
|
54
|
+
*
|
|
55
|
+
* Les runs sans texte (une image seule, un code de champ) n'occupent aucun
|
|
56
|
+
* caractère et ne produisent donc pas de span — la vue typée n'en produit pas
|
|
57
|
+
* de `StyledRun` non plus.
|
|
58
|
+
*/
|
|
59
|
+
export declare function runSpans(p: XmlNode): {
|
|
60
|
+
spans: RunSpan[];
|
|
61
|
+
text: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Runs qui portent au moins un caractère de la plage `[from, to)`.
|
|
65
|
+
*
|
|
66
|
+
* Une plage vide — un curseur, pas une sélection — désigne le run qui la
|
|
67
|
+
* contient, pour que l'insertion hérite de sa mise en forme.
|
|
68
|
+
*/
|
|
69
|
+
export declare function spansIn(spans: RunSpan[], from: number, to: number): RunSpan[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type DocxDocument, type XmlNode } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Résolution de la cascade de styles OOXML.
|
|
4
|
+
*
|
|
5
|
+
* ponytail: on fusionne les nœuds XML bruts, on ne type rien ici.
|
|
6
|
+
* Les vues typées (layout.ts) lisent le résultat fusionné.
|
|
7
|
+
* Pas de résolution numbering/table-style — ajout quand le renderer les exige.
|
|
8
|
+
*/
|
|
9
|
+
export interface StyleDef {
|
|
10
|
+
type: string;
|
|
11
|
+
basedOn?: string;
|
|
12
|
+
pPr?: XmlNode;
|
|
13
|
+
rPr?: XmlNode;
|
|
14
|
+
/** `w:tblPr` d'un style de TABLEAU — c'est de là que viennent ses bordures */
|
|
15
|
+
tblPr?: XmlNode;
|
|
16
|
+
/**
|
|
17
|
+
* `w:tblStylePr` — mise en forme CONDITIONNELLE du style de tableau, un
|
|
18
|
+
* nœud par `w:type` : `firstRow`, `lastRow`, `firstCol`, `lastCol`,
|
|
19
|
+
* `band1Horz`/`band2Horz`, `band1Vert`/`band2Vert`, et les quatre coins.
|
|
20
|
+
* 14 documents du corpus en portent, 733 nœuds.
|
|
21
|
+
*/
|
|
22
|
+
tblStylePr?: XmlNode[];
|
|
23
|
+
/** `w:default="1"` — le style que Word applique quand `w:pStyle` est absent */
|
|
24
|
+
isDefault?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DocDefaults {
|
|
27
|
+
pPr?: XmlNode;
|
|
28
|
+
rPr?: XmlNode;
|
|
29
|
+
}
|
|
30
|
+
/** Fusionne deux nœuds de propriétés (w:pPr ou w:rPr).
|
|
31
|
+
* Chaque enfant du second remplace l'enfant de même tag dans le premier. */
|
|
32
|
+
export declare function mergePr(base: XmlNode | undefined, over: XmlNode | undefined): XmlNode | undefined;
|
|
33
|
+
/** Valeurs par défaut du document (w:docDefaults dans styles.xml). */
|
|
34
|
+
export declare function docDefaults(doc: DocxDocument): DocDefaults;
|
|
35
|
+
/** Carte { styleId → définition } extraite de styles.xml. */
|
|
36
|
+
export declare function styleMap(doc: DocxDocument): Map<string, StyleDef>;
|
|
37
|
+
/** Résout un style via sa chaîne basedOn, fusionné avec les défauts du document.
|
|
38
|
+
* Retourne les nœuds pPr et rPr fusionnés, prêts pour extraction de propriétés. */
|
|
39
|
+
export declare function resolveStyle(map: Map<string, StyleDef>, defaults: DocDefaults, styleId: string | undefined): {
|
|
40
|
+
pPr?: XmlNode;
|
|
41
|
+
rPr?: XmlNode;
|
|
42
|
+
};
|