docs: function levenshtein(source, compare) {
      var tmp;
      if (source.length === 0) {
          return compare.length;
      }
      if (compare.length === 0) {
          return source.length;
      }
      if (source.length > compare.length) {
          tmp = source;
          source = compare;
          compare = tmp;
      }
      var i, j, res, alen = source.length, blen = compare.length, row = Array(alen);
      for (i = 0; i <= alen; i++) {
          row[i] = i;
      }
      for (i = 1; i <= blen; i++) {
          res = i;
          for (j = 1; j <= alen; j++) {
              tmp = row[j - 1];
              row[j - 1] = res;
              res = compare[i - 1] === source[j - 1] ? tmp : Math.min(tmp + 1, Math.min(res + 1, row[j] + 1));
          }
      }
      return res;
  }