:feat: support emphasis mark
This commit is contained in:
29
src/file/paragraph/run/emphasis-mark.spec.ts
Normal file
29
src/file/paragraph/run/emphasis-mark.spec.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import { expect } from "chai";
|
||||
|
||||
import { Formatter } from "export/formatter";
|
||||
|
||||
import * as em from "./emphasis-mark";
|
||||
|
||||
describe("EmphasisMark", () => {
|
||||
describe("#constructor()", () => {
|
||||
it("should create a new EmphasisMark object with w:em as the rootKey", () => {
|
||||
const emphasisMark = new em.EmphasisMark();
|
||||
const tree = new Formatter().format(emphasisMark);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:em": { _attr: { "w:val": "dot" } },
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("DotEmphasisMark", () => {
|
||||
describe("#constructor()", () => {
|
||||
it("should put value in attribute", () => {
|
||||
const emphasisMark = new em.DotEmphasisMark();
|
||||
const tree = new Formatter().format(emphasisMark);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:em": { _attr: { "w:val": "dot" } },
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
28
src/file/paragraph/run/emphasis-mark.ts
Normal file
28
src/file/paragraph/run/emphasis-mark.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { Attributes, XmlComponent } from "file/xml-components";
|
||||
|
||||
export enum EmphasisMarkType {
|
||||
DOT = "dot",
|
||||
}
|
||||
|
||||
export abstract class BaseEmphasisMark extends XmlComponent {
|
||||
protected constructor(emphasisMarkType: EmphasisMarkType) {
|
||||
super("w:em");
|
||||
this.root.push(
|
||||
new Attributes({
|
||||
val: emphasisMarkType,
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export class EmphasisMark extends BaseEmphasisMark {
|
||||
constructor(emphasisMarkType: EmphasisMarkType = EmphasisMarkType.DOT) {
|
||||
super(emphasisMarkType);
|
||||
}
|
||||
}
|
||||
|
||||
export class DotEmphasisMark extends BaseEmphasisMark {
|
||||
constructor() {
|
||||
super(EmphasisMarkType.DOT);
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
import { Attributes, XmlComponent } from "file/xml-components";
|
||||
|
||||
export { Underline } from "./underline";
|
||||
export { EmphasisMark } from "./emphasis-mark";
|
||||
export { SubScript, SuperScript } from "./script";
|
||||
export { RunFonts } from "./run-fonts";
|
||||
|
||||
|
@ -5,4 +5,5 @@ export * from "./picture-run";
|
||||
export * from "./run-fonts";
|
||||
export * from "./sequential-identifier";
|
||||
export * from "./underline";
|
||||
export * from "./emphasis-mark";
|
||||
export * from "./tab";
|
||||
|
@ -5,6 +5,7 @@ import { Formatter } from "export/formatter";
|
||||
import { ShadingType } from "file/table";
|
||||
|
||||
import { Run } from "./";
|
||||
import { EmphasisMarkType } from "./emphasis-mark";
|
||||
import { PageNumber } from "./run";
|
||||
import { UnderlineType } from "./underline";
|
||||
|
||||
@ -84,6 +85,30 @@ describe("Run", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("#emphasisMark()", () => {
|
||||
it("should default to 'dot'", () => {
|
||||
const run = new Run({
|
||||
emphasisMark: {},
|
||||
});
|
||||
const tree = new Formatter().format(run);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:r": [{ "w:rPr": [{ "w:em": { _attr: { "w:val": "dot" } } }] }],
|
||||
});
|
||||
});
|
||||
|
||||
it("should set the style type if given", () => {
|
||||
const run = new Run({
|
||||
emphasisMark: {
|
||||
type: EmphasisMarkType.DOT,
|
||||
},
|
||||
});
|
||||
const tree = new Formatter().format(run);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:r": [{ "w:rPr": [{ "w:em": { _attr: { "w:val": "dot" } } }] }],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("#smallCaps()", () => {
|
||||
it("it should add smallCaps to the properties", () => {
|
||||
const run = new Run({
|
||||
@ -235,7 +260,16 @@ describe("Run", () => {
|
||||
"w:r": [
|
||||
{
|
||||
"w:rPr": [
|
||||
{ "w:rFonts": { _attr: { "w:ascii": "Times", "w:cs": "Times", "w:eastAsia": "Times", "w:hAnsi": "Times" } } },
|
||||
{
|
||||
"w:rFonts": {
|
||||
_attr: {
|
||||
"w:ascii": "Times",
|
||||
"w:cs": "Times",
|
||||
"w:eastAsia": "Times",
|
||||
"w:hAnsi": "Times",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@ -6,6 +6,7 @@ import { FootnoteReferenceRun } from "file/footnotes/footnote/run/reference-run"
|
||||
import { FieldInstruction } from "file/table-of-contents/field-instruction";
|
||||
import { Break } from "./break";
|
||||
import { Caps, SmallCaps } from "./caps";
|
||||
import { EmphasisMark, EmphasisMarkType } from "./emphasis-mark";
|
||||
import { Begin, End, Separate } from "./field";
|
||||
import {
|
||||
Bold,
|
||||
@ -38,6 +39,9 @@ export interface IRunOptions {
|
||||
readonly color?: string;
|
||||
readonly type?: UnderlineType;
|
||||
};
|
||||
readonly emphasisMark?: {
|
||||
readonly type?: EmphasisMarkType;
|
||||
};
|
||||
readonly color?: string;
|
||||
readonly size?: number;
|
||||
readonly rightToLeft?: boolean;
|
||||
@ -90,6 +94,10 @@ export class Run extends XmlComponent {
|
||||
this.properties.push(new Underline(options.underline.type, options.underline.color));
|
||||
}
|
||||
|
||||
if (options.emphasisMark) {
|
||||
this.properties.push(new EmphasisMark(options.emphasisMark.type));
|
||||
}
|
||||
|
||||
if (options.color) {
|
||||
this.properties.push(new Color(options.color));
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
import { expect } from "chai";
|
||||
|
||||
import { EmphasisMarkType } from "./emphasis-mark";
|
||||
|
||||
import { Formatter } from "export/formatter";
|
||||
|
||||
import { UnderlineType } from "./underline";
|
||||
@ -44,6 +46,9 @@ describe("SymbolRun", () => {
|
||||
color: "red",
|
||||
type: UnderlineType.DOUBLE,
|
||||
},
|
||||
emphasisMark: {
|
||||
type: EmphasisMarkType.DOT,
|
||||
},
|
||||
color: "green",
|
||||
size: 40,
|
||||
highlight: "yellow",
|
||||
@ -59,6 +64,7 @@ describe("SymbolRun", () => {
|
||||
{ "w:i": { _attr: { "w:val": true } } },
|
||||
{ "w:iCs": { _attr: { "w:val": true } } },
|
||||
{ "w:u": { _attr: { "w:val": "double", "w:color": "red" } } },
|
||||
{ "w:em": { _attr: { "w:val": "dot" } } },
|
||||
{ "w:color": { _attr: { "w:val": "green" } } },
|
||||
{ "w:sz": { _attr: { "w:val": 40 } } },
|
||||
{ "w:szCs": { _attr: { "w:val": 40 } } },
|
||||
|
Reference in New Issue
Block a user