implement reverse formatting with tests
implement reverse formatting with tests
This commit is contained in:
parent
683bc4ef60
commit
fb94ad4205
@ -23,7 +23,7 @@ const controlCodesRx = /[\u0000-\u001F]/g;
|
|||||||
|
|
||||||
// Converts a given text into an array of objects, each of them representing a
|
// Converts a given text into an array of objects, each of them representing a
|
||||||
// similarly styled section of the text. Each object carries the `text`, style
|
// similarly styled section of the text. Each object carries the `text`, style
|
||||||
// information (`bold`, `textColor`, `bgcolor`, `reverse`, `italic`,
|
// information (`bold`, `textColor`, `bgcolor`, `italic`,
|
||||||
// `underline`, `strikethrough`, `monospace`), and `start`/`end` cursors.
|
// `underline`, `strikethrough`, `monospace`), and `start`/`end` cursors.
|
||||||
function parseStyle(text) {
|
function parseStyle(text) {
|
||||||
const result = [];
|
const result = [];
|
||||||
@ -32,7 +32,7 @@ function parseStyle(text) {
|
|||||||
|
|
||||||
// At any given time, these carry style information since last time a styling
|
// At any given time, these carry style information since last time a styling
|
||||||
// control code was met.
|
// control code was met.
|
||||||
let colorCodes, bold, textColor, bgColor, hexColor, hexBgColor, reverse, italic, underline, strikethrough, monospace;
|
let colorCodes, bold, textColor, bgColor, hexColor, hexBgColor, italic, underline, strikethrough, monospace;
|
||||||
|
|
||||||
const resetStyle = () => {
|
const resetStyle = () => {
|
||||||
bold = false;
|
bold = false;
|
||||||
@ -40,7 +40,6 @@ function parseStyle(text) {
|
|||||||
bgColor = undefined;
|
bgColor = undefined;
|
||||||
hexColor = undefined;
|
hexColor = undefined;
|
||||||
hexBgColor = undefined;
|
hexBgColor = undefined;
|
||||||
reverse = false;
|
|
||||||
italic = false;
|
italic = false;
|
||||||
underline = false;
|
underline = false;
|
||||||
strikethrough = false;
|
strikethrough = false;
|
||||||
@ -69,7 +68,6 @@ function parseStyle(text) {
|
|||||||
bgColor,
|
bgColor,
|
||||||
hexColor,
|
hexColor,
|
||||||
hexBgColor,
|
hexBgColor,
|
||||||
reverse,
|
|
||||||
italic,
|
italic,
|
||||||
underline,
|
underline,
|
||||||
strikethrough,
|
strikethrough,
|
||||||
@ -148,11 +146,13 @@ function parseStyle(text) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REVERSE:
|
case REVERSE: {
|
||||||
emitFragment();
|
emitFragment();
|
||||||
reverse = !reverse;
|
const tmp = bgColor;
|
||||||
|
bgColor = textColor;
|
||||||
|
textColor = tmp;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ITALIC:
|
case ITALIC:
|
||||||
emitFragment();
|
emitFragment();
|
||||||
italic = !italic;
|
italic = !italic;
|
||||||
@ -184,7 +184,7 @@ function parseStyle(text) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const properties = ["bold", "textColor", "bgColor", "hexColor", "hexBgColor", "italic", "underline", "reverse", "strikethrough", "monospace"];
|
const properties = ["bold", "textColor", "bgColor", "hexColor", "hexBgColor", "italic", "underline", "strikethrough", "monospace"];
|
||||||
|
|
||||||
function prepare(text) {
|
function prepare(text) {
|
||||||
return parseStyle(text)
|
return parseStyle(text)
|
||||||
|
@ -12,7 +12,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -36,7 +35,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -60,7 +58,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -84,7 +81,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -108,7 +104,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -123,7 +118,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -138,7 +132,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -153,7 +146,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -177,7 +169,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: true,
|
underline: true,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -192,7 +183,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: true,
|
underline: true,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -207,7 +197,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -222,7 +211,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -246,7 +234,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: 9,
|
bgColor: 9,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -270,7 +257,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: true,
|
italic: true,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -285,7 +271,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: true,
|
italic: true,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -300,7 +285,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -315,7 +299,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -339,7 +322,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: 2,
|
bgColor: 2,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -354,7 +336,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: 2,
|
bgColor: 2,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -378,7 +359,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: 4,
|
bgColor: 4,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: true,
|
italic: true,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -402,7 +382,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -417,7 +396,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -432,7 +410,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -447,7 +424,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -471,7 +447,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -495,7 +470,6 @@ describe("parseStyle", () => {
|
|||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
bold: false,
|
bold: false,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -519,7 +493,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: true,
|
italic: true,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -543,7 +516,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -558,7 +530,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: "FFFFFF",
|
hexColor: "FFFFFF",
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -573,7 +544,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -588,7 +558,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: 4,
|
bgColor: 4,
|
||||||
hexColor: "FF00FF",
|
hexColor: "FF00FF",
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -603,7 +572,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: 4,
|
bgColor: 4,
|
||||||
hexColor: "EEEAFF",
|
hexColor: "EEEAFF",
|
||||||
hexBgColor: "001122",
|
hexBgColor: "001122",
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -618,7 +586,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -634,6 +601,219 @@ describe("parseStyle", () => {
|
|||||||
expect(actual).to.deep.equal(expected);
|
expect(actual).to.deep.equal(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should reverse and format color", () => {
|
||||||
|
const input = "\x032,9text with fg and bg \x16with text reversed";
|
||||||
|
const expected = [{
|
||||||
|
bold: false,
|
||||||
|
textColor: 2,
|
||||||
|
bgColor: 9,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "text with fg and bg ",
|
||||||
|
|
||||||
|
start: 0,
|
||||||
|
end: 20,
|
||||||
|
}, {
|
||||||
|
bold: false,
|
||||||
|
textColor: 9,
|
||||||
|
bgColor: 2,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "with text reversed",
|
||||||
|
|
||||||
|
start: 20,
|
||||||
|
end: 38,
|
||||||
|
}];
|
||||||
|
|
||||||
|
const actual = parseStyle(input);
|
||||||
|
|
||||||
|
expect(actual).to.deep.equal(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should toggle reverse correctly", () => {
|
||||||
|
const input = "\x0305,11text \x16reversed and \x16back again and \x16reversed";
|
||||||
|
const expected = [{
|
||||||
|
bold: false,
|
||||||
|
textColor: 5,
|
||||||
|
bgColor: 11,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "text ",
|
||||||
|
|
||||||
|
start: 0,
|
||||||
|
end: 5,
|
||||||
|
}, {
|
||||||
|
bold: false,
|
||||||
|
textColor: 11,
|
||||||
|
bgColor: 5,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "reversed and ",
|
||||||
|
|
||||||
|
start: 5,
|
||||||
|
end: 18,
|
||||||
|
}, {
|
||||||
|
bold: false,
|
||||||
|
textColor: 5,
|
||||||
|
bgColor: 11,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "back again and ",
|
||||||
|
|
||||||
|
start: 18,
|
||||||
|
end: 33,
|
||||||
|
}, {
|
||||||
|
bold: false,
|
||||||
|
textColor: 11,
|
||||||
|
bgColor: 5,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "reversed",
|
||||||
|
|
||||||
|
start: 33,
|
||||||
|
end: 41,
|
||||||
|
}];
|
||||||
|
|
||||||
|
const actual = parseStyle(input);
|
||||||
|
|
||||||
|
expect(actual).to.deep.equal(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should escape reverse when a new style is applied", () => {
|
||||||
|
const input = "\x0311,02text \x16 reversed \x0304,05 and new style";
|
||||||
|
const expected = [{
|
||||||
|
bold: false,
|
||||||
|
textColor: 11,
|
||||||
|
bgColor: 2,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "text ",
|
||||||
|
|
||||||
|
start: 0,
|
||||||
|
end: 5,
|
||||||
|
}, {
|
||||||
|
bold: false,
|
||||||
|
textColor: 2,
|
||||||
|
bgColor: 11,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: " reversed ",
|
||||||
|
|
||||||
|
start: 5,
|
||||||
|
end: 15,
|
||||||
|
}, {
|
||||||
|
bold: false,
|
||||||
|
textColor: 4,
|
||||||
|
bgColor: 5,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: " and new style",
|
||||||
|
|
||||||
|
start: 15,
|
||||||
|
end: 29,
|
||||||
|
}];
|
||||||
|
|
||||||
|
const actual = parseStyle(input);
|
||||||
|
|
||||||
|
expect(actual).to.deep.equal(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not reverse if color is specified after reverse tag", () => {
|
||||||
|
const input = "\x16\x032,9text with fg and bg";
|
||||||
|
const expected = [{
|
||||||
|
bold: false,
|
||||||
|
textColor: 2,
|
||||||
|
bgColor: 9,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "text with fg and bg",
|
||||||
|
|
||||||
|
start: 0,
|
||||||
|
end: 19,
|
||||||
|
}];
|
||||||
|
|
||||||
|
const actual = parseStyle(input);
|
||||||
|
|
||||||
|
expect(actual).to.deep.equal(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should reverse, bold, and italics", () => {
|
||||||
|
const input = "\x034,13\x16\x02some text with \x1ditalics";
|
||||||
|
const expected = [{
|
||||||
|
bold: true,
|
||||||
|
textColor: 13,
|
||||||
|
bgColor: 4,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: false,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "some text with ",
|
||||||
|
|
||||||
|
start: 0,
|
||||||
|
end: 15,
|
||||||
|
}, {
|
||||||
|
bold: true,
|
||||||
|
textColor: 13,
|
||||||
|
bgColor: 4,
|
||||||
|
hexColor: undefined,
|
||||||
|
hexBgColor: undefined,
|
||||||
|
italic: true,
|
||||||
|
underline: false,
|
||||||
|
strikethrough: false,
|
||||||
|
monospace: false,
|
||||||
|
text: "italics",
|
||||||
|
|
||||||
|
start: 15,
|
||||||
|
end: 22,
|
||||||
|
}];
|
||||||
|
|
||||||
|
const actual = parseStyle(input);
|
||||||
|
|
||||||
|
expect(actual).to.deep.equal(expected);
|
||||||
|
});
|
||||||
|
|
||||||
it("should carry state correctly forward", () => {
|
it("should carry state correctly forward", () => {
|
||||||
const input = "\x02bold\x038yellow\x02nonBold\x03default";
|
const input = "\x02bold\x038yellow\x02nonBold\x03default";
|
||||||
const expected = [{
|
const expected = [{
|
||||||
@ -642,7 +822,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -657,7 +836,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -672,7 +850,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -687,7 +864,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -711,7 +887,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -726,7 +901,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -741,7 +915,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -761,11 +934,10 @@ describe("parseStyle", () => {
|
|||||||
const input = "\x11\x1e\x02\x034\x16\x1d\x1ffull\x0fnone";
|
const input = "\x11\x1e\x02\x034\x16\x1d\x1ffull\x0fnone";
|
||||||
const expected = [{
|
const expected = [{
|
||||||
bold: true,
|
bold: true,
|
||||||
textColor: 4,
|
textColor: undefined,
|
||||||
bgColor: undefined,
|
bgColor: 4, // \x16: fg- and bg- are reversed
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: true,
|
|
||||||
italic: true,
|
italic: true,
|
||||||
underline: true,
|
underline: true,
|
||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
@ -780,7 +952,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -804,7 +975,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
@ -830,7 +1000,6 @@ describe("parseStyle", () => {
|
|||||||
bgColor: undefined,
|
bgColor: undefined,
|
||||||
hexColor: undefined,
|
hexColor: undefined,
|
||||||
hexBgColor: undefined,
|
hexBgColor: undefined,
|
||||||
reverse: false,
|
|
||||||
italic: false,
|
italic: false,
|
||||||
underline: false,
|
underline: false,
|
||||||
strikethrough: false,
|
strikethrough: false,
|
||||||
|
@ -243,6 +243,27 @@ describe("parse Handlebars helper", () => {
|
|||||||
name: "monospace",
|
name: "monospace",
|
||||||
input: "\x11monospace",
|
input: "\x11monospace",
|
||||||
expected: '<span class="irc-monospace">monospace</span>',
|
expected: '<span class="irc-monospace">monospace</span>',
|
||||||
|
}, {
|
||||||
|
name: "reverse with foreground and background colors",
|
||||||
|
input: "\x0313,1fg and bg \x16and reversed",
|
||||||
|
expected:
|
||||||
|
'<span class="irc-fg13 irc-bg1">fg and bg </span>' +
|
||||||
|
'<span class="irc-fg1 irc-bg13">and reversed</span>',
|
||||||
|
}, {
|
||||||
|
name: "toggle reverse with foreground and background colors",
|
||||||
|
input: "\x0305,11text \x16reversed and \x16back again and \x16reversed",
|
||||||
|
expected:
|
||||||
|
'<span class="irc-fg5 irc-bg11">text </span>' +
|
||||||
|
'<span class="irc-fg11 irc-bg5">reversed and </span>' +
|
||||||
|
'<span class="irc-fg5 irc-bg11">back again and </span>' +
|
||||||
|
'<span class="irc-fg11 irc-bg5">reversed</span>',
|
||||||
|
}, {
|
||||||
|
name: "escape reverse when new colors are applied",
|
||||||
|
input: "\x0311,02text \x16 reversed \x0304,05 and new style",
|
||||||
|
expected:
|
||||||
|
'<span class="irc-fg11 irc-bg2">text </span>' +
|
||||||
|
'<span class="irc-fg2 irc-bg11"> reversed </span>' +
|
||||||
|
'<span class="irc-fg4 irc-bg5"> and new style</span>',
|
||||||
}, {
|
}, {
|
||||||
name: "resets",
|
name: "resets",
|
||||||
input: "\x02bold\x038yellow\x02nonBold\x03default",
|
input: "\x02bold\x038yellow\x02nonBold\x03default",
|
||||||
|
Loading…
Reference in New Issue
Block a user