diff --git a/src/core/config/Categories.json b/src/core/config/Categories.json index 6f02abb84b..f664974684 100755 --- a/src/core/config/Categories.json +++ b/src/core/config/Categories.json @@ -167,6 +167,7 @@ "ops": [ "Encode text", "Decode text", + "Remove Letter Accents", "Unescape Unicode Characters" ] }, diff --git a/src/core/operations/RemoveLetterAccents.mjs b/src/core/operations/RemoveLetterAccents.mjs new file mode 100644 index 0000000000..a8fdb6e4d2 --- /dev/null +++ b/src/core/operations/RemoveLetterAccents.mjs @@ -0,0 +1,42 @@ +/** + * @author Klaxon [klaxon@veyr.com] + * @copyright Crown Copyright 2018 + * @license Apache-2.0 + */ + +import Operation from "../Operation"; + +/** + * Remove Letter Accents operation + */ +class RemoveLetterAccents extends Operation { + + /** + * RemoveLetterAccents constructor + */ + constructor() { + super(); + + this.name = "Remove Letter Accents"; + this.module = "Default"; + this.description = "Replaces accented characters with their latin character equivalent."; + this.infoURL = ""; + this.inputType = "string"; + this.outputType = "string"; + this.args = [ + ]; + } + + /** + * @param {string} input + * @param {Object[]} args + * @returns {string} + */ + run(input, args) { + //reference: https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/37511463 + return input.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); + } + +} + +export default RemoveLetterAccents; diff --git a/test/index.mjs b/test/index.mjs index 9bb93a601f..9517816f77 100644 --- a/test/index.mjs +++ b/test/index.mjs @@ -61,6 +61,7 @@ import "./tests/operations/ParseIPRange"; import "./tests/operations/PowerSet"; import "./tests/operations/Regex"; import "./tests/operations/Register"; +import "./tests/operations/RemoveLetterAccents"; import "./tests/operations/Rotate"; import "./tests/operations/SeqUtils"; import "./tests/operations/SetDifference"; diff --git a/test/tests/operations/RemoveLetterAccents.mjs b/test/tests/operations/RemoveLetterAccents.mjs new file mode 100644 index 0000000000..638cbea12f --- /dev/null +++ b/test/tests/operations/RemoveLetterAccents.mjs @@ -0,0 +1,23 @@ + +/** + * Remove Letter Accents tests. + * + * @author Klaxon [klaxon@veyr.com] + * @copyright Crown Copyright 2017 + * @license Apache-2.0 + */ +import TestRegister from "../../TestRegister"; + +TestRegister.addTests([ + { + name: "Remove Letter Accents", + 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 Letter Accents", + "args": [] + }, + ], + }, +]);