From c3e92c0709bc67a66ecf3637cc6f3755b6b915fe Mon Sep 17 00:00:00 2001 From: Tom Hunkapiller Date: Mon, 24 May 2021 21:04:38 +0300 Subject: [PATCH] update file/numbering with schema comments and values functions --- src/file/document/document.ts | 19 ++++++++ src/file/numbering/abstract-numbering.ts | 18 +++++++- src/file/numbering/level.ts | 55 ++++++++++++++++++------ src/file/numbering/multi-level-type.ts | 14 ++++++ src/file/numbering/num.ts | 16 ++++++- src/file/numbering/numbering.ts | 10 +++++ 6 files changed, 115 insertions(+), 17 deletions(-) diff --git a/src/file/document/document.ts b/src/file/document/document.ts index cc33709076..6fc78b8b1a 100644 --- a/src/file/document/document.ts +++ b/src/file/document/document.ts @@ -11,6 +11,25 @@ export interface IDocumentOptions { readonly background: IDocumentBackgroundOptions; } +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// export class Document extends XmlComponent { private readonly body: Body; diff --git a/src/file/numbering/abstract-numbering.ts b/src/file/numbering/abstract-numbering.ts index 363d233ac9..6c4af129c3 100644 --- a/src/file/numbering/abstract-numbering.ts +++ b/src/file/numbering/abstract-numbering.ts @@ -1,8 +1,24 @@ +import { decimalNumber } from "file/values"; import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; import { ILevelsOptions, Level } from "./level"; import { MultiLevelType } from "./multi-level-type"; +// +// +// +// +// +// +// +// +// +// +// +// + +// +// https://docs.microsoft.com/en-us/openspecs/office_standards/ms-docx/cbddeff8-01aa-4486-a48e-6a83dede4f13 class AbstractNumberingAttributes extends XmlAttributeComponent<{ readonly abstractNumId: number; readonly restartNumberingAfterBreak: number; @@ -20,7 +36,7 @@ export class AbstractNumbering extends XmlComponent { super("w:abstractNum"); this.root.push( new AbstractNumberingAttributes({ - abstractNumId: id, + abstractNumId: decimalNumber(id), restartNumberingAfterBreak: 0, }), ); diff --git a/src/file/numbering/level.ts b/src/file/numbering/level.ts index d189e24e01..93fcbe6f67 100644 --- a/src/file/numbering/level.ts +++ b/src/file/numbering/level.ts @@ -1,5 +1,6 @@ // http://officeopenxml.com/WPnumbering-numFmt.php -import { Attributes, XmlAttributeComponent, XmlComponent } from "file/xml-components"; +import { decimalNumber } from "file/values"; +import { Attributes, NumberValueElement, XmlAttributeComponent, XmlComponent } from "file/xml-components"; import { AlignmentType } from "../paragraph/formatting"; import { IParagraphStylePropertiesOptions, ParagraphProperties } from "../paragraph/properties"; import { IRunStylePropertiesOptions, RunProperties } from "../paragraph/run/properties"; @@ -31,17 +32,10 @@ class LevelAttributes extends XmlAttributeComponent<{ }; } -class Start extends XmlComponent { - constructor(value: number) { - super("w:start"); - this.root.push( - new Attributes({ - val: value, - }), - ); - } -} - +// +// +// +// class NumberFormat extends XmlComponent { constructor(value: string) { super("w:numFmt"); @@ -53,6 +47,10 @@ class NumberFormat extends XmlComponent { } } +// +// +// +// class LevelText extends XmlComponent { constructor(value: string) { super("w:lvlText"); @@ -94,6 +92,16 @@ export interface ILevelsOptions { }; } +// +// +// +// +// +// +// +// +// +// class Suffix extends XmlComponent { constructor(value: LevelSuffix) { super("w:suff"); @@ -105,6 +113,25 @@ class Suffix extends XmlComponent { } } +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// export class LevelBase extends XmlComponent { private readonly paragraphProperties: ParagraphProperties; private readonly runProperties: RunProperties; @@ -112,7 +139,7 @@ export class LevelBase extends XmlComponent { constructor({ level, format, text, alignment = AlignmentType.START, start = 1, style, suffix }: ILevelsOptions) { super("w:lvl"); - this.root.push(new Start(start)); + this.root.push(new NumberValueElement("w:start", decimalNumber(start))); if (format) { this.root.push(new NumberFormat(format)); @@ -136,7 +163,7 @@ export class LevelBase extends XmlComponent { this.root.push( new LevelAttributes({ - ilvl: level, + ilvl: decimalNumber(level), tentative: 1, }), ); diff --git a/src/file/numbering/multi-level-type.ts b/src/file/numbering/multi-level-type.ts index c73ebec3cf..c2d53bb8cf 100644 --- a/src/file/numbering/multi-level-type.ts +++ b/src/file/numbering/multi-level-type.ts @@ -1,5 +1,19 @@ import { Attributes, XmlComponent } from "file/xml-components"; +// +// ... +// + +// +// +// +// +// +// +// +// +// +// export class MultiLevelType extends XmlComponent { constructor(value: string) { super("w:multiLevelType"); diff --git a/src/file/numbering/num.ts b/src/file/numbering/num.ts index 526d0f1b9f..87cd399a96 100644 --- a/src/file/numbering/num.ts +++ b/src/file/numbering/num.ts @@ -1,3 +1,4 @@ +import { decimalNumber } from "file/values"; import { Attributes, XmlAttributeComponent, XmlComponent } from "file/xml-components"; class AbstractNumId extends XmlComponent { @@ -28,6 +29,17 @@ export interface IConcreteNumberingOptions { }; } +// +// ... +// + +// +// +// +// +// +// +// export class ConcreteNumbering extends XmlComponent { public readonly numId: number; public readonly reference: string; @@ -42,11 +54,11 @@ export class ConcreteNumbering extends XmlComponent { this.root.push( new NumAttributes({ - numId: options.numId, + numId: decimalNumber(options.numId), }), ); - this.root.push(new AbstractNumId(options.abstractNumId)); + this.root.push(new AbstractNumId(decimalNumber(options.abstractNumId))); if (options.overrideLevel) { this.root.push(new LevelOverride(options.overrideLevel.num, options.overrideLevel.start)); diff --git a/src/file/numbering/numbering.ts b/src/file/numbering/numbering.ts index 6b95f0d222..8f37b386c5 100644 --- a/src/file/numbering/numbering.ts +++ b/src/file/numbering/numbering.ts @@ -16,6 +16,16 @@ export interface INumberingOptions { }[]; } +// +// +// +// +// +// +// +// +// +// export class Numbering extends XmlComponent { private readonly abstractNumberingMap = new Map(); private readonly concreteNumberingMap = new Map();