diff --git a/src/file/border/border.ts b/src/file/border/border.ts new file mode 100644 index 0000000000..0fe0b24e95 --- /dev/null +++ b/src/file/border/border.ts @@ -0,0 +1,44 @@ +// Note that the border type is identical in all places, +// regardless of where it's used like paragraph/table/etc. +// +// http://officeopenxml.com/WPborders.php +// http://officeopenxml.com/WPtableBorders.php +// http://officeopenxml.com/WPtableCellProperties-Borders.php +// +// This describes the CT_Border type. +// +// +// +// +// +// +// +// +// +// +// +import { BorderStyle } from "file/styles"; +import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; + +export interface IBorderOptions { + readonly style: BorderStyle; + readonly color?: string; + readonly size?: number; + readonly space?: number; +} + +export class BorderElement extends XmlComponent { + constructor(elementName: string, options: IBorderOptions) { + super(elementName); + this.root.push(new TableBordersAttributes(options)); + } +} + +class TableBordersAttributes extends XmlAttributeComponent { + protected readonly xmlKeys = { + style: "w:val", + color: "w:color", + size: "w:sz", + space: "w:space", + }; +} diff --git a/src/file/border/index.ts b/src/file/border/index.ts new file mode 100644 index 0000000000..cfae779c98 --- /dev/null +++ b/src/file/border/index.ts @@ -0,0 +1 @@ +export * from "./border"; diff --git a/src/file/document/body/section-properties/page-border/page-borders.spec.ts b/src/file/document/body/section-properties/page-border/page-borders.spec.ts index 3b6152013a..5e79480192 100644 --- a/src/file/document/body/section-properties/page-border/page-borders.spec.ts +++ b/src/file/document/body/section-properties/page-border/page-borders.spec.ts @@ -70,22 +70,22 @@ describe("PageBorders", () => { expect(tree["w:pgBorders"][0]).to.deep.equal({ _attr: { "w:display": "firstPage", "w:zOrder": "back" } }); expect(tree["w:pgBorders"][1]).to.deep.equal({ "w:top": { - _attr: { "w:color": "001122", "w:size": 10, "w:val": "doubleWave" }, + _attr: { "w:color": "001122", "w:sz": 10, "w:val": "doubleWave" }, }, }); expect(tree["w:pgBorders"][2]).to.deep.equal({ "w:right": { - _attr: { "w:color": "223344", "w:size": 20, "w:val": "double" }, + _attr: { "w:color": "223344", "w:sz": 20, "w:val": "double" }, }, }); expect(tree["w:pgBorders"][3]).to.deep.equal({ "w:bottom": { - _attr: { "w:color": "556677", "w:size": 30, "w:val": "single" }, + _attr: { "w:color": "556677", "w:sz": 30, "w:val": "single" }, }, }); expect(tree["w:pgBorders"][4]).to.deep.equal({ "w:left": { - _attr: { "w:color": "889900", "w:size": 40, "w:val": "dotted" }, + _attr: { "w:color": "889900", "w:sz": 40, "w:val": "dotted" }, }, }); }); diff --git a/src/file/document/body/section-properties/page-border/page-borders.ts b/src/file/document/body/section-properties/page-border/page-borders.ts index 4a042ccf8a..feff190880 100644 --- a/src/file/document/body/section-properties/page-border/page-borders.ts +++ b/src/file/document/body/section-properties/page-border/page-borders.ts @@ -1,6 +1,6 @@ // http://officeopenxml.com/WPsectionBorders.php -import { BorderStyle } from "file/styles"; -import { IgnoreIfEmptyXmlComponent, XmlAttributeComponent, XmlComponent } from "file/xml-components"; +import { BorderElement, IBorderOptions } from "file/border"; +import { IgnoreIfEmptyXmlComponent, XmlAttributeComponent } from "file/xml-components"; export enum PageBorderDisplay { ALL_PAGES = "allPages", @@ -24,36 +24,12 @@ export interface IPageBorderAttributes { readonly zOrder?: PageBorderZOrder; } -export interface IPageBorderConfiguration { - readonly style?: BorderStyle; - readonly size?: number; - readonly color?: string; - readonly space?: number; -} - export interface IPageBordersOptions { readonly pageBorders?: IPageBorderAttributes; - readonly pageBorderTop?: IPageBorderConfiguration; - readonly pageBorderRight?: IPageBorderConfiguration; - readonly pageBorderBottom?: IPageBorderConfiguration; - readonly pageBorderLeft?: IPageBorderConfiguration; -} - -class PageBordeAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - style: "w:val", - size: "w:size", - color: "w:color", - space: "w:space", - }; -} - -class PageBorder extends XmlComponent { - constructor(key: string, options: IPageBorderConfiguration) { - super(key); - - this.root.push(new PageBordeAttributes(options)); - } + readonly pageBorderTop?: IBorderOptions; + readonly pageBorderRight?: IBorderOptions; + readonly pageBorderBottom?: IBorderOptions; + readonly pageBorderLeft?: IBorderOptions; } class PageBordersAttributes extends XmlAttributeComponent { @@ -85,16 +61,16 @@ export class PageBorders extends IgnoreIfEmptyXmlComponent { } if (options.pageBorderTop) { - this.root.push(new PageBorder("w:top", options.pageBorderTop)); + this.root.push(new BorderElement("w:top", options.pageBorderTop)); } if (options.pageBorderRight) { - this.root.push(new PageBorder("w:right", options.pageBorderRight)); + this.root.push(new BorderElement("w:right", options.pageBorderRight)); } if (options.pageBorderBottom) { - this.root.push(new PageBorder("w:bottom", options.pageBorderBottom)); + this.root.push(new BorderElement("w:bottom", options.pageBorderBottom)); } if (options.pageBorderLeft) { - this.root.push(new PageBorder("w:left", options.pageBorderLeft)); + this.root.push(new BorderElement("w:left", options.pageBorderLeft)); } } } diff --git a/src/file/table/table-cell/table-cell-components.ts b/src/file/table/table-cell/table-cell-components.ts index 278c4037e0..615aae78e9 100644 --- a/src/file/table/table-cell/table-cell-components.ts +++ b/src/file/table/table-cell/table-cell-components.ts @@ -1,34 +1,13 @@ -import { BorderStyle } from "file/styles"; +import { BorderElement, IBorderOptions } from "file/border"; import { IgnoreIfEmptyXmlComponent, XmlAttributeComponent, XmlComponent } from "file/xml-components"; -interface ITableCellBorderPropertyOptions { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; -} - -class CellBorderAttributes extends XmlAttributeComponent<{ - readonly style: BorderStyle; - readonly size: number; - readonly color: string; -}> { - protected readonly xmlKeys = { style: "w:val", size: "w:sz", color: "w:color" }; -} - -class BaseTableCellBorder extends XmlComponent { - constructor(key: string, options: ITableCellBorderPropertyOptions) { - super(key); - this.root.push(new CellBorderAttributes(options)); - } -} - export interface ITableCellBorders { - readonly top?: ITableCellBorderPropertyOptions; - readonly start?: ITableCellBorderPropertyOptions; - readonly left?: ITableCellBorderPropertyOptions; - readonly bottom?: ITableCellBorderPropertyOptions; - readonly end?: ITableCellBorderPropertyOptions; - readonly right?: ITableCellBorderPropertyOptions; + readonly top?: IBorderOptions; + readonly start?: IBorderOptions; + readonly left?: IBorderOptions; + readonly bottom?: IBorderOptions; + readonly end?: IBorderOptions; + readonly right?: IBorderOptions; } export class TableCellBorders extends IgnoreIfEmptyXmlComponent { @@ -36,22 +15,22 @@ export class TableCellBorders extends IgnoreIfEmptyXmlComponent { super("w:tcBorders"); if (options.top) { - this.root.push(new BaseTableCellBorder("w:top", options.top)); + this.root.push(new BorderElement("w:top", options.top)); } if (options.start) { - this.root.push(new BaseTableCellBorder("w:start", options.start)); + this.root.push(new BorderElement("w:start", options.start)); } if (options.left) { - this.root.push(new BaseTableCellBorder("w:left", options.left)); + this.root.push(new BorderElement("w:left", options.left)); } if (options.bottom) { - this.root.push(new BaseTableCellBorder("w:bottom", options.bottom)); + this.root.push(new BorderElement("w:bottom", options.bottom)); } if (options.end) { - this.root.push(new BaseTableCellBorder("w:end", options.end)); + this.root.push(new BorderElement("w:end", options.end)); } if (options.right) { - this.root.push(new BaseTableCellBorder("w:right", options.right)); + this.root.push(new BorderElement("w:right", options.right)); } } } diff --git a/src/file/table/table-properties/table-borders.spec.ts b/src/file/table/table-properties/table-borders.spec.ts index 4a3212feb1..e1e2f6b898 100644 --- a/src/file/table/table-properties/table-borders.spec.ts +++ b/src/file/table/table-properties/table-borders.spec.ts @@ -18,7 +18,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -28,7 +27,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -38,7 +36,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -48,7 +45,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -58,7 +54,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -68,7 +63,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -96,7 +90,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "red", - "w:space": 0, "w:sz": 1, "w:val": "double", }, @@ -106,7 +99,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -116,7 +108,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -126,7 +117,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -136,7 +126,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -146,7 +135,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -174,7 +162,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -184,7 +171,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "red", - "w:space": 0, "w:sz": 1, "w:val": "double", }, @@ -194,7 +180,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -204,7 +189,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -214,7 +198,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -224,7 +207,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -252,7 +234,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -262,7 +243,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -272,7 +252,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "red", - "w:space": 0, "w:sz": 1, "w:val": "double", }, @@ -282,7 +261,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -292,7 +270,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -302,7 +279,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -330,7 +306,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -340,7 +315,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -350,7 +324,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -360,7 +333,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "red", - "w:space": 0, "w:sz": 1, "w:val": "double", }, @@ -370,7 +342,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -380,7 +351,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -408,7 +378,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -418,7 +387,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -428,7 +396,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -438,7 +405,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -448,7 +414,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "red", - "w:space": 0, "w:sz": 1, "w:val": "double", }, @@ -458,7 +423,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -486,7 +450,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -496,7 +459,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -506,7 +468,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -516,7 +477,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -526,7 +486,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 4, "w:val": "single", }, @@ -536,7 +495,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "red", - "w:space": 0, "w:sz": 1, "w:val": "double", }, @@ -558,7 +516,6 @@ describe("TableBorders", () => { "w:top": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 0, "w:val": "none", }, @@ -568,7 +525,6 @@ describe("TableBorders", () => { "w:left": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 0, "w:val": "none", }, @@ -578,7 +534,6 @@ describe("TableBorders", () => { "w:bottom": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 0, "w:val": "none", }, @@ -588,7 +543,6 @@ describe("TableBorders", () => { "w:right": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 0, "w:val": "none", }, @@ -598,7 +552,6 @@ describe("TableBorders", () => { "w:insideH": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 0, "w:val": "none", }, @@ -608,7 +561,6 @@ describe("TableBorders", () => { "w:insideV": { _attr: { "w:color": "auto", - "w:space": 0, "w:sz": 0, "w:val": "none", }, diff --git a/src/file/table/table-properties/table-borders.ts b/src/file/table/table-properties/table-borders.ts index 8de354fc36..58778281ef 100644 --- a/src/file/table/table-properties/table-borders.ts +++ b/src/file/table/table-properties/table-borders.ts @@ -1,155 +1,76 @@ // http://officeopenxml.com/WPtableBorders.php +import { BorderElement, IBorderOptions } from "file/border"; import { BorderStyle } from "file/styles"; -import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; +import { XmlComponent } from "file/xml-components"; export interface ITableBordersOptions { - readonly top?: { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; - }; - readonly bottom?: { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; - }; - readonly left?: { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; - }; - readonly right?: { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; - }; - readonly insideHorizontal?: { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; - }; - readonly insideVertical?: { - readonly style: BorderStyle; - readonly size: number; - readonly color: string; - }; + readonly top?: IBorderOptions; + readonly bottom?: IBorderOptions; + readonly left?: IBorderOptions; + readonly right?: IBorderOptions; + readonly insideHorizontal?: IBorderOptions; + readonly insideVertical?: IBorderOptions; } +const NONE_BORDER = { + style: BorderStyle.NONE, + size: 0, + color: "auto", +}; + +const DEFAULT_BORDER = { + style: BorderStyle.SINGLE, + size: 4, + color: "auto", +}; + export class TableBorders extends XmlComponent { public static readonly NONE = { - top: { - style: BorderStyle.NONE, - size: 0, - color: "auto", - }, - bottom: { - style: BorderStyle.NONE, - size: 0, - color: "auto", - }, - left: { - style: BorderStyle.NONE, - size: 0, - color: "auto", - }, - right: { - style: BorderStyle.NONE, - size: 0, - color: "auto", - }, - insideHorizontal: { - style: BorderStyle.NONE, - size: 0, - color: "auto", - }, - insideVertical: { - style: BorderStyle.NONE, - size: 0, - color: "auto", - }, + top: NONE_BORDER, + bottom: NONE_BORDER, + left: NONE_BORDER, + right: NONE_BORDER, + insideHorizontal: NONE_BORDER, + insideVertical: NONE_BORDER, }; constructor(options: ITableBordersOptions) { super("w:tblBorders"); if (options.top) { - this.root.push(new TableBordersElement("w:top", options.top.style, options.top.size, 0, options.top.color)); + this.root.push(new BorderElement("w:top", options.top)); } else { - this.root.push(new TableBordersElement("w:top", BorderStyle.SINGLE, 4, 0, "auto")); + this.root.push(new BorderElement("w:top", DEFAULT_BORDER)); } if (options.left) { - this.root.push(new TableBordersElement("w:left", options.left.style, options.left.size, 0, options.left.color)); + this.root.push(new BorderElement("w:left", options.left)); } else { - this.root.push(new TableBordersElement("w:left", BorderStyle.SINGLE, 4, 0, "auto")); + this.root.push(new BorderElement("w:left", DEFAULT_BORDER)); } if (options.bottom) { - this.root.push(new TableBordersElement("w:bottom", options.bottom.style, options.bottom.size, 0, options.bottom.color)); + this.root.push(new BorderElement("w:bottom", options.bottom)); } else { - this.root.push(new TableBordersElement("w:bottom", BorderStyle.SINGLE, 4, 0, "auto")); + this.root.push(new BorderElement("w:bottom", DEFAULT_BORDER)); } if (options.right) { - this.root.push(new TableBordersElement("w:right", options.right.style, options.right.size, 0, options.right.color)); + this.root.push(new BorderElement("w:right", options.right)); } else { - this.root.push(new TableBordersElement("w:right", BorderStyle.SINGLE, 4, 0, "auto")); + this.root.push(new BorderElement("w:right", DEFAULT_BORDER)); } if (options.insideHorizontal) { - this.root.push( - new TableBordersElement( - "w:insideH", - options.insideHorizontal.style, - options.insideHorizontal.size, - 0, - options.insideHorizontal.color, - ), - ); + this.root.push(new BorderElement("w:insideH", options.insideHorizontal)); } else { - this.root.push(new TableBordersElement("w:insideH", BorderStyle.SINGLE, 4, 0, "auto")); + this.root.push(new BorderElement("w:insideH", DEFAULT_BORDER)); } if (options.insideVertical) { - this.root.push( - new TableBordersElement( - "w:insideV", - options.insideVertical.style, - options.insideVertical.size, - 0, - options.insideVertical.color, - ), - ); + this.root.push(new BorderElement("w:insideV", options.insideVertical)); } else { - this.root.push(new TableBordersElement("w:insideV", BorderStyle.SINGLE, 4, 0, "auto")); + this.root.push(new BorderElement("w:insideV", DEFAULT_BORDER)); } } } - -class TableBordersElement extends XmlComponent { - constructor(elementName: string, value: string, size: number, space: number, color: string) { - super(elementName); - this.root.push( - new TableBordersAttributes({ - value, - size, - space, - color, - }), - ); - } -} - -class TableBordersAttributes extends XmlAttributeComponent<{ - readonly value: string; - readonly size: number; - readonly space: number; - readonly color: string; -}> { - protected readonly xmlKeys = { - value: "w:val", - size: "w:sz", - space: "w:space", - color: "w:color", - }; -} diff --git a/src/file/table/table.spec.ts b/src/file/table/table.spec.ts index 623540985f..f01703b0e7 100644 --- a/src/file/table/table.spec.ts +++ b/src/file/table/table.spec.ts @@ -51,12 +51,12 @@ const DEFAULT_TABLE_PROPERTIES = { const BORDERS = { "w:tblBorders": [ - { "w:top": { _attr: { "w:val": "single", "w:sz": 4, "w:space": 0, "w:color": "auto" } } }, - { "w:left": { _attr: { "w:val": "single", "w:sz": 4, "w:space": 0, "w:color": "auto" } } }, - { "w:bottom": { _attr: { "w:val": "single", "w:sz": 4, "w:space": 0, "w:color": "auto" } } }, - { "w:right": { _attr: { "w:val": "single", "w:sz": 4, "w:space": 0, "w:color": "auto" } } }, - { "w:insideH": { _attr: { "w:val": "single", "w:sz": 4, "w:space": 0, "w:color": "auto" } } }, - { "w:insideV": { _attr: { "w:val": "single", "w:sz": 4, "w:space": 0, "w:color": "auto" } } }, + { "w:top": { _attr: { "w:val": "single", "w:sz": 4, "w:color": "auto" } } }, + { "w:left": { _attr: { "w:val": "single", "w:sz": 4, "w:color": "auto" } } }, + { "w:bottom": { _attr: { "w:val": "single", "w:sz": 4, "w:color": "auto" } } }, + { "w:right": { _attr: { "w:val": "single", "w:sz": 4, "w:color": "auto" } } }, + { "w:insideH": { _attr: { "w:val": "single", "w:sz": 4, "w:color": "auto" } } }, + { "w:insideV": { _attr: { "w:val": "single", "w:sz": 4, "w:color": "auto" } } }, ], };