Limit the list of supported highlight colors (#2522)

* Limit the list of supported highlight colors

* Fix tests: use fixed highlight color values

---------

Co-authored-by: ilyasogonov <sogonov.ilya@customscard.ru>
This commit is contained in:
octoultra
2024-01-12 02:16:15 +02:00
committed by GitHub
parent 6b8e22368b
commit e20bd66663
5 changed files with 59 additions and 29 deletions

View File

@ -4,6 +4,7 @@ import { Formatter } from "@export/formatter";
import { AlignmentType, EmphasisMarkType, TabStopPosition } from "../paragraph"; import { AlignmentType, EmphasisMarkType, TabStopPosition } from "../paragraph";
import { UnderlineType } from "../paragraph/run/underline"; import { UnderlineType } from "../paragraph/run/underline";
import { HighlightColor } from "../paragraph/run/properties";
import { ShadingType } from "../shading"; import { ShadingType } from "../shading";
import { AbstractNumbering } from "./abstract-numbering"; import { AbstractNumbering } from "./abstract-numbering";
import { LevelFormat, LevelSuffix } from "./level"; import { LevelFormat, LevelSuffix } from "./level";
@ -2048,23 +2049,23 @@ describe("AbstractNumbering", () => {
const highlightTests = [ const highlightTests = [
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: true, highlightComplexScript: true,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: false, highlightComplexScript: false,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: "550099", highlightComplexScript: "550099",
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "550099" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "550099" } } }],
}, },
]; ];
highlightTests.forEach(({ highlight, highlightComplexScript, expected }) => { highlightTests.forEach(({ highlight, highlightComplexScript, expected }) => {

View File

@ -36,6 +36,33 @@ export const TextEffect = {
NONE: "none", NONE: "none",
} as const; } as const;
/*
* http://officeopenxml.com/WPtextShading.php
*
* Limit the list of supported highlight colors
*
* */
export const HighlightColor = {
BLACK: "black",
BLUE: "blue",
CYAN: "cyan",
DARK_BLUE: "darkBlue",
DARK_CYAN: "darkCyan",
DARK_GRAY: "darkGray",
DARK_GREEN: "darkGreen",
DARK_MAGENTA: "darkMagenta",
DARK_RED: "darkRed",
DARK_YELLOW: "darkYellow",
GREEN: "green",
LIGHT_GRAY: "lightGray",
MAGENTA: "magenta",
NONE: "none",
RED: "red",
WHITE: "white",
YELLOW: "yellow",
} as const;
/* eslint-enable */ /* eslint-enable */
export interface IRunStylePropertiesOptions { export interface IRunStylePropertiesOptions {
@ -65,7 +92,7 @@ export interface IRunStylePropertiesOptions {
readonly subScript?: boolean; readonly subScript?: boolean;
readonly superScript?: boolean; readonly superScript?: boolean;
readonly font?: string | IFontOptions | IFontAttributesProperties; readonly font?: string | IFontOptions | IFontAttributesProperties;
readonly highlight?: string; readonly highlight?: (typeof HighlightColor)[keyof typeof HighlightColor];
readonly highlightComplexScript?: boolean | string; readonly highlightComplexScript?: boolean | string;
readonly characterSpacing?: number; readonly characterSpacing?: number;
readonly shading?: IShadingAttributesProperties; readonly shading?: IShadingAttributesProperties;

View File

@ -7,7 +7,7 @@ import { ShadingType } from "@file/shading";
import { EmphasisMarkType } from "./emphasis-mark"; import { EmphasisMarkType } from "./emphasis-mark";
import { PageNumber, Run } from "./run"; import { PageNumber, Run } from "./run";
import { UnderlineType } from "./underline"; import { UnderlineType } from "./underline";
import { TextEffect } from "./properties"; import { HighlightColor, TextEffect } from "./properties";
describe("Run", () => { describe("Run", () => {
describe("#noProof()", () => { describe("#noProof()", () => {
it("turns off spelling and grammar checkers for a run", () => { it("turns off spelling and grammar checkers for a run", () => {
@ -215,18 +215,18 @@ describe("Run", () => {
describe("#highlight()", () => { describe("#highlight()", () => {
it("it should add highlight to the properties", () => { it("it should add highlight to the properties", () => {
const run = new Run({ const run = new Run({
highlight: "005599", highlight: HighlightColor.YELLOW,
}); });
const tree = new Formatter().format(run); const tree = new Formatter().format(run);
expect(tree).to.deep.equal({ expect(tree).to.deep.equal({
"w:r": [ "w:r": [
{ {
"w:rPr": [ "w:rPr": [
{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlight": { _attr: { "w:val": "yellow" } } },
{ {
"w:highlightCs": { "w:highlightCs": {
_attr: { _attr: {
"w:val": "005599", "w:val": "yellow",
}, },
}, },
}, },

View File

@ -3,6 +3,7 @@ import { describe, expect, it } from "vitest";
import { Formatter } from "@export/formatter"; import { Formatter } from "@export/formatter";
import { EmphasisMarkType } from "@file/paragraph/run/emphasis-mark"; import { EmphasisMarkType } from "@file/paragraph/run/emphasis-mark";
import { UnderlineType } from "@file/paragraph/run/underline"; import { UnderlineType } from "@file/paragraph/run/underline";
import { HighlightColor } from "@file/paragraph/run/properties";
import { ShadingType } from "@file/shading"; import { ShadingType } from "@file/shading";
import { EMPTY_OBJECT } from "@file/xml-components"; import { EMPTY_OBJECT } from "@file/xml-components";
@ -728,23 +729,23 @@ describe("CharacterStyle", () => {
const highlightTests = [ const highlightTests = [
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: true, highlightComplexScript: true,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: false, highlightComplexScript: false,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: "550099", highlightComplexScript: "550099",
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "550099" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "550099" } } }],
}, },
]; ];
highlightTests.forEach(({ highlight, highlightComplexScript, expected }) => { highlightTests.forEach(({ highlight, highlightComplexScript, expected }) => {

View File

@ -3,6 +3,7 @@ import { describe, expect, it } from "vitest";
import { Formatter } from "@export/formatter"; import { Formatter } from "@export/formatter";
import { AlignmentType, EmphasisMarkType, TabStopPosition } from "@file/paragraph"; import { AlignmentType, EmphasisMarkType, TabStopPosition } from "@file/paragraph";
import { UnderlineType } from "@file/paragraph/run/underline"; import { UnderlineType } from "@file/paragraph/run/underline";
import { HighlightColor } from "@file/paragraph/run";
import { ShadingType } from "@file/shading"; import { ShadingType } from "@file/shading";
import { EMPTY_OBJECT } from "@file/xml-components"; import { EMPTY_OBJECT } from "@file/xml-components";
@ -615,23 +616,23 @@ describe("ParagraphStyle", () => {
const highlightTests = [ const highlightTests = [
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: true, highlightComplexScript: true,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: false, highlightComplexScript: false,
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }],
}, },
{ {
highlight: "005599", highlight: HighlightColor.YELLOW,
highlightComplexScript: "550099", highlightComplexScript: "550099",
expected: [{ "w:highlight": { _attr: { "w:val": "005599" } } }, { "w:highlightCs": { _attr: { "w:val": "550099" } } }], expected: [{ "w:highlight": { _attr: { "w:val": "yellow" } } }, { "w:highlightCs": { _attr: { "w:val": "550099" } } }],
}, },
]; ];
highlightTests.forEach(({ highlight, highlightComplexScript, expected }) => { highlightTests.forEach(({ highlight, highlightComplexScript, expected }) => {