#1744 - Add vanish and specVanish

This commit is contained in:
Dolan Miu
2022-10-28 22:20:16 +01:00
parent 29f421686f
commit 4cfb0ade88
6 changed files with 83 additions and 1 deletions

2
.nycrc
View File

@ -1,7 +1,7 @@
{ {
"check-coverage": true, "check-coverage": true,
"statements": 99.72, "statements": 99.72,
"branches": 97.97, "branches": 98.08,
"functions": 99.83, "functions": 99.83,
"lines": 99.72, "lines": 99.72,
"include": [ "include": [

View File

@ -195,6 +195,14 @@ const doc = new Document({
new TextRun({ new TextRun({
text: "and back to normal.", text: "and back to normal.",
}), }),
new TextRun({
text: "This text will be invisible!",
vanish: true,
}),
new TextRun({
text: "This text will be VERY invisible! Word processors cannot override this!",
specVanish: true,
}),
], ],
}), }),
new Paragraph({ new Paragraph({

View File

@ -151,6 +151,28 @@ const text = new TextRun({
}); });
``` ```
### Vanish and SpecVanish
You may want to hide your text in your document.
`Vanish` should affect the normal display of text, but an application may have settings to force hidden text to be displayed.
```ts
const text = new TextRun({
text: "This text will be hidden",
vanish: true,
});
```
`SpecVanish` was typically used to ensure that a paragraph style can be applied to a part of a paragraph, and still appear as in the Table of Contents (which in previous word processors would ignore the use of the style if it were being used as a character style).
```ts
const text = new TextRun({
text: "This text will be hidden forever.",
specVanish: true,
});
```
## Break ## Break
Sometimes you would want to put text underneath another line of text but inside the same paragraph. Sometimes you would want to put text underneath another line of text but inside the same paragraph.

View File

@ -45,6 +45,8 @@ export interface IRunStylePropertiesOptions {
readonly imprint?: boolean; readonly imprint?: boolean;
readonly revision?: IRunPropertiesChangeOptions; readonly revision?: IRunPropertiesChangeOptions;
readonly border?: IBorderOptions; readonly border?: IBorderOptions;
readonly vanish?: boolean;
readonly specVanish?: boolean;
} }
export interface IRunPropertiesOptions extends IRunStylePropertiesOptions { export interface IRunPropertiesOptions extends IRunStylePropertiesOptions {
@ -215,6 +217,17 @@ export class RunProperties extends IgnoreIfEmptyXmlComponent {
if (options.border) { if (options.border) {
this.push(new BorderElement("w:bdr", options.border)); this.push(new BorderElement("w:bdr", options.border));
} }
if (options.vanish) {
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_vanish_topic_ID0E6W3O.html
// http://www.datypic.com/sc/ooxml/e-w_vanish-1.html
this.push(new OnOffElement("w:vanish", options.vanish));
}
if (options.specVanish) {
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_specVanish_topic_ID0EIE1O.html
this.push(new OnOffElement("w:specVanish", options.vanish));
}
} }
public push(item: XmlComponent): void { public push(item: XmlComponent): void {

View File

@ -519,4 +519,42 @@ describe("Run", () => {
}); });
}); });
}); });
describe("#vanish and #specVanish", () => {
it("should correctly set vanish", () => {
const run = new Run({
vanish: true,
});
const tree = new Formatter().format(run);
expect(tree).to.deep.equal({
"w:r": [
{
"w:rPr": [
{
"w:vanish": {},
},
],
},
],
});
});
it("should correctly set specVanish", () => {
const run = new Run({
specVanish: true,
});
const tree = new Formatter().format(run);
expect(tree).to.deep.equal({
"w:r": [
{
"w:rPr": [
{
"w:specVanish": {},
},
],
},
],
});
});
});
}); });

View File

@ -1,3 +1,4 @@
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_tab_topic_ID0EM6AO.html
import { XmlComponent } from "@file/xml-components"; import { XmlComponent } from "@file/xml-components";
// <xsd:group name="EG_RunInnerContent"> // <xsd:group name="EG_RunInnerContent">