diff --git a/src/core/operations/RemoveDiacritics.mjs b/src/core/operations/RemoveDiacritics.mjs index dd814375..859d86d7 100644 --- a/src/core/operations/RemoveDiacritics.mjs +++ b/src/core/operations/RemoveDiacritics.mjs @@ -19,7 +19,7 @@ class RemoveDiacritics extends Operation { this.name = "Remove Diacritics"; this.module = "Default"; - this.description = "Replaces accented characters with their latin character equivalent."; + this.description = "Replaces accented characters with their latin character equivalent. Accented characters are made up of Unicode combining characters, so unicode text formatting such as strikethroughs and underlines will also be removed."; this.infoURL = "https://wikipedia.org/wiki/Diacritic"; this.inputType = "string"; this.outputType = "string"; diff --git a/src/core/operations/UnicodeTextFormat.mjs b/src/core/operations/UnicodeTextFormat.mjs index 44d17afe..b1fc474b 100644 --- a/src/core/operations/UnicodeTextFormat.mjs +++ b/src/core/operations/UnicodeTextFormat.mjs @@ -46,7 +46,6 @@ class UnicodeTextFormat extends Operation { run(input, args) { const [underline, strikethrough] = args; let output = input.map(char => [char]); - console.dir(output); if (strikethrough) { output = output.map(charFormat => { charFormat.push(...Utils.strToUtf8ByteArray("\u0336")); @@ -59,8 +58,8 @@ class UnicodeTextFormat extends Operation { return charFormat; }); } - console.dir(output); - return output.flat(); + // return output.flat(); - Not supported in Node 10, polyfilled + return [].concat(...output); } } diff --git a/tests/operations/index.mjs b/tests/operations/index.mjs index 8d3cd623..07991256 100644 --- a/tests/operations/index.mjs +++ b/tests/operations/index.mjs @@ -69,7 +69,6 @@ import "./tests/ParseQRCode.mjs"; import "./tests/PowerSet.mjs"; import "./tests/Regex.mjs"; import "./tests/Register.mjs"; -import "./tests/RemoveDiacritics.mjs"; import "./tests/Rotate.mjs"; import "./tests/SeqUtils.mjs"; import "./tests/SetDifference.mjs"; @@ -101,6 +100,7 @@ import "./tests/LuhnChecksum.mjs"; import "./tests/CipherSaber2.mjs"; import "./tests/Colossus.mjs"; import "./tests/ParseObjectIDTimestamp.mjs"; +import "./tests/Unicode.mjs"; // Cannot test operations that use the File type yet diff --git a/tests/operations/tests/RemoveDiacritics.mjs b/tests/operations/tests/RemoveDiacritics.mjs deleted file mode 100644 index c58a2ba6..00000000 --- a/tests/operations/tests/RemoveDiacritics.mjs +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Remove Diacritics tests. - * - * @author Klaxon [klaxon@veyr.com] - * @copyright Crown Copyright 2017 - * @license Apache-2.0 - */ -import TestRegister from "../../lib/TestRegister.mjs"; - -TestRegister.addTests([ - { - name: "Remove Diacritics", - input: "\xe0, \xe8, \xec, \xf2, \xf9 \xc0, \xc8, \xcc, \xd2, \xd9\n\xe1, \xe9, \xed, \xf3, \xfa, \xfd \xc1, \xc9, \xcd, \xd3, \xda, \xdd\n\xe2, \xea, \xee, \xf4, \xfb \xc2, \xca, \xce, \xd4, \xdb\n\xe3, \xf1, \xf5 \xc3, \xd1, \xd5\n\xe4, \xeb, \xef, \xf6, \xfc, \xff \xc4, \xcb, \xcf, \xd6, \xdc, \u0178\n\xe5, \xc5", - expectedOutput: "a, e, i, o, u A, E, I, O, U\na, e, i, o, u, y A, E, I, O, U, Y\na, e, i, o, u A, E, I, O, U\na, n, o A, N, O\na, e, i, o, u, y A, E, I, O, U, Y\na, A", - recipeConfig: [ - { - "op": "Remove Diacritics", - "args": [] - }, - ], - }, -]); diff --git a/tests/operations/tests/Unicode.mjs b/tests/operations/tests/Unicode.mjs new file mode 100644 index 00000000..2603768f --- /dev/null +++ b/tests/operations/tests/Unicode.mjs @@ -0,0 +1,83 @@ +/** + * Unicode operation tests. + * + * @author Matt C [me@mitt.dev] + * @author Klaxon [klaxon@veyr.com] + * + * @copyright Crown Copyright 2020 + * @license Apache-2.0 + */ +import TestRegister from "../../lib/TestRegister.mjs"; + +TestRegister.addTests([ + { + name: "Unicode Text Format: underline", + input: "a", + expectedOutput: "a\u0332", + recipeConfig: [ + { + "op": "Unicode Text Format", + "args": [true, false], + } + ], + }, + { + name: "Unicode Text Format: strikethrough", + input: "a", + expectedOutput: "a\u0336", + recipeConfig: [ + { + "op": "Unicode Text Format", + "args": [false, true], + } + ], + }, + { + name: "Unicode Text Format: both", + input: "a", + expectedOutput: "a\u0336\u0332", + recipeConfig: [ + { + "op": "Unicode Text Format", + "args": [true, true], + } + ], + }, + { + name: "Remove Diacritics: text formatting", + input: "a", + expectedOutput: "a", + recipeConfig: [ + { + "op": "Unicode Text Format", + "args": [true, true], + }, + { + "op": "Remove Diacritics", + "args": [] + } + ], + }, + { + name: "Remove Diacritics: all diacritical marks one char", + input: "à̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́̕̚͠͡ͅ", // sorry about this line lol + expectedOutput: "a", + recipeConfig: [ + { + "op": "Remove Diacritics", + "args": [] + } + ], + }, + { + name: "Remove Diacritics: default", + input: "\xe0, \xe8, \xec, \xf2, \xf9 \xc0, \xc8, \xcc, \xd2, \xd9\n\xe1, \xe9, \xed, \xf3, \xfa, \xfd \xc1, \xc9, \xcd, \xd3, \xda, \xdd\n\xe2, \xea, \xee, \xf4, \xfb \xc2, \xca, \xce, \xd4, \xdb\n\xe3, \xf1, \xf5 \xc3, \xd1, \xd5\n\xe4, \xeb, \xef, \xf6, \xfc, \xff \xc4, \xcb, \xcf, \xd6, \xdc, \u0178\n\xe5, \xc5", + expectedOutput: "a, e, i, o, u A, E, I, O, U\na, e, i, o, u, y A, E, I, O, U, Y\na, e, i, o, u A, E, I, O, U\na, n, o A, N, O\na, e, i, o, u, y A, E, I, O, U, Y\na, A", + recipeConfig: [ + { + "op": "Remove Diacritics", + "args": [] + }, + ], + }, +]);