X-Git-Url: https://git.yukkurigames.com/?p=string-lerp.git;a=blobdiff_plain;f=string-lerp.js;h=2096a07ab6892d47499b7ae705141a36040ff40d;hp=8d5a87974ef8049aabff8fe01b331dab1cc9ce81;hb=bdb8d784b8c1f08a2be6b67a148cb00619b512ec;hpb=27efc68c521bfd7d29467c9e528001aa5992d6d2 diff --git a/string-lerp.js b/string-lerp.js index 8d5a879..2096a07 100644 --- a/string-lerp.js +++ b/string-lerp.js @@ -31,7 +31,7 @@ function editPath(d, t) { /** Given a Levenshtein matrix and target, create an edit list */ - var path = [] + var path = []; var j = t.length; var n = j + 1; var i = d.length / n - 1; @@ -79,6 +79,10 @@ return s; } + function reverse (s) { + return s.split("").reverse().join(""); + } + function diffLerp(a, b, p) { /** Interpolate between two strings based on edit distance @@ -88,12 +92,14 @@ compute the edits. It is not recommended for strings longer than a few hundred characters. */ + a = reverse(a); + b = reverse(b); var edits = diff(a, b); var partial = edits.slice(0, Math.round(p * edits.length)); - return patch(partial, a); + return reverse(patch(partial, a)); } - var NUMBERS = /(-?\d+(?:\.\d+)?)/g + var NUMBERS = /(-?\d+(?:\.\d+)?)/g; function areNumericTwins(a, b) { /** Check if a and b differ only in numerals @@ -129,7 +135,7 @@ var aParts = a.split(NUMBERS); var bParts = b.split(NUMBERS); for (var i = 1; i < aParts.length; i += 2) { - var part = nlerp(+aParts[i], +bParts[i], p) + var part = nlerp(+aParts[i], +bParts[i], p); if (aParts[i].indexOf(".") === -1 && bParts[i].indexOf(".") === -1) part = Math.round(part); aParts[i] = part.toString(); @@ -168,7 +174,7 @@ if (p === 1) return b; if (areNumericTwins(a, b)) - return numericLerp(a, b, p) + return numericLerp(a, b, p); // Numeric lerps should over- and under-shoot when fed numbers // outside 0 to 1, but other types cannot. @@ -176,9 +182,7 @@ if (p > 1) return b; var n = a.length * b.length; - return (n && n < MAX_MATRIX_SIZE) - ? diffLerp(a, b, p) - : fastLerp(a, b, p); + return ((n && n < MAX_MATRIX_SIZE) ? diffLerp : fastLerp)(a, b, p); } exports.levenshteinMatrix = levenshteinMatrix;