From b9f1cf968fb60b4f71c782ada3022622cd9c26e7 Mon Sep 17 00:00:00 2001 From: toby Date: Fri, 3 Feb 2017 18:34:46 -0500 Subject: [PATCH] Make translateTo faster and aware of line breaks Speed improvement is due to using a function regex instead of multiple find/replace calls. --- src/js/operations/MorseCode.js | 44 +++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/js/operations/MorseCode.js b/src/js/operations/MorseCode.js index 8001a152..a9cab2d6 100644 --- a/src/js/operations/MorseCode.js +++ b/src/js/operations/MorseCode.js @@ -96,27 +96,39 @@ var MorseCode = { var letter_delim = MorseCode.OPTION_TABLE[args[1]]; var word_delim = MorseCode.OPTION_TABLE[args[2]]; - var words = input.split(/ +/); - words = Array.prototype.map.call(words, function(word) { - var letters = Array.prototype.map.call(word, function(character) { - var letter = character.toUpperCase(); - if(typeof MorseCode.MORSE_TABLE[letter] == "undefined") { - return ""; - } + input = input.split(/\r?\n/); + input = Array.prototype.map.call(input, function(line) { + var words = line.split(/ +/); + words = Array.prototype.map.call(words, function(word) { + var letters = Array.prototype.map.call(word, function(character) { + var letter = character.toUpperCase(); + if(typeof MorseCode.MORSE_TABLE[letter] == "undefined") { + return ""; + } - return MorseCode.MORSE_TABLE[letter]; + return MorseCode.MORSE_TABLE[letter]; + }); + + return letters.join(""); }); - - return letters.join(""); + line = words.join(""); + return line; }); + input = input.join("\n"); - var morse = words.join(""); - morse = morse.replace(//g, dash); - morse = morse.replace(//g, dot); - morse = morse.replace(//g, letter_delim); - morse = morse.replace(//g, word_delim); + input = input.replace( + /|||/g, + function(match) { + switch(match) { + case "": return dash; + case "": return dot; + case "": return letter_delim; + case "": return word_delim; + } + } + ); - return morse; + return input; },