diff options
Diffstat (limited to 'node_modules/locutus/php/strings/strtr.js')
-rw-r--r-- | node_modules/locutus/php/strings/strtr.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/node_modules/locutus/php/strings/strtr.js b/node_modules/locutus/php/strings/strtr.js new file mode 100644 index 0000000..7c6f35f --- /dev/null +++ b/node_modules/locutus/php/strings/strtr.js @@ -0,0 +1,102 @@ +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +module.exports = function strtr(str, trFrom, trTo) { + // discuss at: http://locutus.io/php/strtr/ + // original by: Brett Zamir (http://brett-zamir.me) + // input by: uestla + // input by: Alan C + // input by: Taras Bogach + // input by: jpfle + // bugfixed by: Kevin van Zonneveld (http://kvz.io) + // bugfixed by: Kevin van Zonneveld (http://kvz.io) + // bugfixed by: Brett Zamir (http://brett-zamir.me) + // bugfixed by: Brett Zamir (http://brett-zamir.me) + // example 1: var $trans = {'hello' : 'hi', 'hi' : 'hello'} + // example 1: strtr('hi all, I said hello', $trans) + // returns 1: 'hello all, I said hi' + // example 2: strtr('äaabaåccasdeöoo', 'äåö','aao') + // returns 2: 'aaabaaccasdeooo' + // example 3: strtr('ääääääää', 'ä', 'a') + // returns 3: 'aaaaaaaa' + // example 4: strtr('http', 'pthxyz','xyzpth') + // returns 4: 'zyyx' + // example 5: strtr('zyyx', 'pthxyz','xyzpth') + // returns 5: 'http' + // example 6: strtr('aa', {'a':1,'aa':2}) + // returns 6: '2' + + var krsort = require('../array/krsort'); + var iniSet = require('../info/ini_set'); + + var fr = ''; + var i = 0; + var j = 0; + var lenStr = 0; + var lenFrom = 0; + var sortByReference = false; + var fromTypeStr = ''; + var toTypeStr = ''; + var istr = ''; + var tmpFrom = []; + var tmpTo = []; + var ret = ''; + var match = false; + + // Received replace_pairs? + // Convert to normal trFrom->trTo chars + if ((typeof trFrom === 'undefined' ? 'undefined' : _typeof(trFrom)) === 'object') { + // Not thread-safe; temporarily set to true + // @todo: Don't rely on ini here, use internal krsort instead + sortByReference = iniSet('locutus.sortByReference', false); + trFrom = krsort(trFrom); + iniSet('locutus.sortByReference', sortByReference); + + for (fr in trFrom) { + if (trFrom.hasOwnProperty(fr)) { + tmpFrom.push(fr); + tmpTo.push(trFrom[fr]); + } + } + + trFrom = tmpFrom; + trTo = tmpTo; + } + + // Walk through subject and replace chars when needed + lenStr = str.length; + lenFrom = trFrom.length; + fromTypeStr = typeof trFrom === 'string'; + toTypeStr = typeof trTo === 'string'; + + for (i = 0; i < lenStr; i++) { + match = false; + if (fromTypeStr) { + istr = str.charAt(i); + for (j = 0; j < lenFrom; j++) { + if (istr === trFrom.charAt(j)) { + match = true; + break; + } + } + } else { + for (j = 0; j < lenFrom; j++) { + if (str.substr(i, trFrom[j].length) === trFrom[j]) { + match = true; + // Fast forward + i = i + trFrom[j].length - 1; + break; + } + } + } + if (match) { + ret += toTypeStr ? trTo.charAt(j) : trTo[j]; + } else { + ret += str.charAt(i); + } + } + + return ret; +}; +//# sourceMappingURL=strtr.js.map
\ No newline at end of file |