2020-08-13 12:36:02 +01:00
|
|
|
/**
|
|
|
|
* @author Matt C [me@mitt.dev]
|
|
|
|
* @copyright Crown Copyright 2020
|
|
|
|
* @license Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
import Operation from "../Operation.mjs";
|
|
|
|
import Utils from "../Utils.mjs";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Unicode Text Format operation
|
|
|
|
*/
|
|
|
|
class UnicodeTextFormat extends Operation {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* UnicodeTextFormat constructor
|
|
|
|
*/
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
|
|
|
|
this.name = "Unicode Text Format";
|
|
|
|
this.module = "Default";
|
|
|
|
this.description = "Adds Unicode combining characters to change formatting of plaintext.";
|
|
|
|
this.infoURL = "https://en.wikipedia.org/wiki/Combining_character";
|
|
|
|
this.inputType = "byteArray";
|
|
|
|
this.outputType = "byteArray";
|
|
|
|
this.args = [
|
|
|
|
{
|
|
|
|
name: "Underline",
|
|
|
|
type: "boolean",
|
|
|
|
value: "false"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Strikethrough",
|
|
|
|
type: "boolean",
|
|
|
|
value: "false"
|
|
|
|
}
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {byteArray} input
|
|
|
|
* @param {Object[]} args
|
|
|
|
* @returns {byteArray}
|
|
|
|
*/
|
|
|
|
run(input, args) {
|
|
|
|
const [underline, strikethrough] = args;
|
|
|
|
let output = input.map(char => [char]);
|
|
|
|
if (strikethrough) {
|
|
|
|
output = output.map(charFormat => {
|
|
|
|
charFormat.push(...Utils.strToUtf8ByteArray("\u0336"));
|
|
|
|
return charFormat;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (underline) {
|
|
|
|
output = output.map(charFormat => {
|
|
|
|
charFormat.push(...Utils.strToUtf8ByteArray("\u0332"));
|
|
|
|
return charFormat;
|
|
|
|
});
|
|
|
|
}
|
2020-08-19 10:55:29 +01:00
|
|
|
// return output.flat(); - Not supported in Node 10, polyfilled
|
|
|
|
return [].concat(...output);
|
2020-08-13 12:36:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
export default UnicodeTextFormat;
|