73 lines
3.1 KiB
TypeScript
73 lines
3.1 KiB
TypeScript
// http://officeopenxml.com/WPfieldInstructions.php
|
|
import { SpaceType } from "file/space-type";
|
|
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
|
import { ITableOfContentsOptions } from "./table-of-contents-properties";
|
|
|
|
class TextAttributes extends XmlAttributeComponent<{ readonly space: SpaceType }> {
|
|
protected readonly xmlKeys = { space: "xml:space" };
|
|
}
|
|
|
|
export class FieldInstruction extends XmlComponent {
|
|
private readonly properties: ITableOfContentsOptions;
|
|
|
|
constructor(properties: ITableOfContentsOptions = {}) {
|
|
super("w:instrText");
|
|
|
|
this.properties = properties;
|
|
|
|
this.root.push(new TextAttributes({ space: SpaceType.PRESERVE }));
|
|
let instruction = "TOC";
|
|
|
|
if (this.properties.captionLabel) {
|
|
instruction = `${instruction} \\a "${this.properties.captionLabel}"`;
|
|
}
|
|
if (this.properties.entriesFromBookmark) {
|
|
instruction = `${instruction} \\b "${this.properties.entriesFromBookmark}"`;
|
|
}
|
|
if (this.properties.captionLabelIncludingNumbers) {
|
|
instruction = `${instruction} \\c "${this.properties.captionLabelIncludingNumbers}"`;
|
|
}
|
|
if (this.properties.sequenceAndPageNumbersSeparator) {
|
|
instruction = `${instruction} \\d "${this.properties.sequenceAndPageNumbersSeparator}"`;
|
|
}
|
|
if (this.properties.tcFieldIdentifier) {
|
|
instruction = `${instruction} \\f "${this.properties.tcFieldIdentifier}"`;
|
|
}
|
|
if (this.properties.hyperlink) {
|
|
instruction = `${instruction} \\h`;
|
|
}
|
|
if (this.properties.tcFieldLevelRange) {
|
|
instruction = `${instruction} \\l "${this.properties.tcFieldLevelRange}"`;
|
|
}
|
|
if (this.properties.pageNumbersEntryLevelsRange) {
|
|
instruction = `${instruction} \\n "${this.properties.pageNumbersEntryLevelsRange}"`;
|
|
}
|
|
if (this.properties.headingStyleRange) {
|
|
instruction = `${instruction} \\o "${this.properties.headingStyleRange}"`;
|
|
}
|
|
if (this.properties.entryAndPageNumberSeparator) {
|
|
instruction = `${instruction} \\p "${this.properties.entryAndPageNumberSeparator}"`;
|
|
}
|
|
if (this.properties.seqFieldIdentifierForPrefix) {
|
|
instruction = `${instruction} \\s "${this.properties.seqFieldIdentifierForPrefix}"`;
|
|
}
|
|
if (this.properties.stylesWithLevels && this.properties.stylesWithLevels.length) {
|
|
const styles = this.properties.stylesWithLevels.map((sl) => `${sl.styleName},${sl.level}`).join(",");
|
|
instruction = `${instruction} \\t "${styles}"`;
|
|
}
|
|
if (this.properties.useAppliedParagraphOutlineLevel) {
|
|
instruction = `${instruction} \\u`;
|
|
}
|
|
if (this.properties.preserveTabInEntries) {
|
|
instruction = `${instruction} \\w`;
|
|
}
|
|
if (this.properties.preserveNewLineInEntries) {
|
|
instruction = `${instruction} \\x`;
|
|
}
|
|
if (this.properties.hideTabAndPageNumbersInWebView) {
|
|
instruction = `${instruction} \\z`;
|
|
}
|
|
this.root.push(instruction);
|
|
}
|
|
}
|