summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/misc/pack.js.map
blob: b4b24573a2b56dc2deaf75d5d8ff35c6704a9793 (plain) (blame)
1
{"version":3,"sources":["../../../src/php/misc/pack.js"],"names":["module","exports","pack","format","formatPointer","argumentPointer","result","argument","i","r","instruction","quantifier","word","precisionBits","exponentBits","extraNullCount","bias","minExp","maxExp","minUnnormExp","status","exp","len","bin","signal","n","intPart","floatPart","lastBit","rounded","j","k","tmpResult","length","charAt","match","arguments","Error","String","fromCharCode","msg","parseInt","Math","pow","isNaN","parseFloat","Infinity","Array","abs","floor","key","slice","join","substring","msg2"],"mappings":"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","file":"pack.js","sourcesContent":["module.exports = function pack (format) {\n  //  discuss at: http://locutus.io/php/pack/\n  // original by: Tim de Koning (http://www.kingsquare.nl)\n  //    parts by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n  // bugfixed by: Tim de Koning (http://www.kingsquare.nl)\n  //      note 1: Float encoding by: Jonas Raoni Soares Silva\n  //      note 1: Home: http://www.kingsquare.nl/blog/12-12-2009/13507444\n  //      note 1: Feedback: phpjs-pack@kingsquare.nl\n  //      note 1: \"machine dependent byte order and size\" aren't\n  //      note 1: applicable for JavaScript; pack works as on a 32bit,\n  //      note 1: little endian machine.\n  //   example 1: pack('nvc*', 0x1234, 0x5678, 65, 66)\n  //   returns 1: '\\u00124xVAB'\n  //   example 2: pack('H4', '2345')\n  //   returns 2: '#E'\n  //   example 3: pack('H*', 'D5')\n  //   returns 3: 'Õ'\n  //   example 4: pack('d', -100.876)\n  //   returns 4: \"\\u0000\\u0000\\u0000\\u0000\\u00008YÀ\"\n  //        test: skip-1\n\n  var formatPointer = 0\n  var argumentPointer = 1\n  var result = ''\n  var argument = ''\n  var i = 0\n  var r = []\n  var instruction, quantifier, word, precisionBits, exponentBits, extraNullCount\n\n  // vars used by float encoding\n  var bias\n  var minExp\n  var maxExp\n  var minUnnormExp\n  var status\n  var exp\n  var len\n  var bin\n  var signal\n  var n\n  var intPart\n  var floatPart\n  var lastBit\n  var rounded\n  var j\n  var k\n  var tmpResult\n\n  while (formatPointer < format.length) {\n    instruction = format.charAt(formatPointer)\n    quantifier = ''\n    formatPointer++\n    while ((formatPointer < format.length) && (format.charAt(formatPointer)\n        .match(/[\\d*]/) !== null)) {\n      quantifier += format.charAt(formatPointer)\n      formatPointer++\n    }\n    if (quantifier === '') {\n      quantifier = '1'\n    }\n\n    // Now pack variables: 'quantifier' times 'instruction'\n    switch (instruction) {\n      case 'a':\n      case 'A':\n        // NUL-padded string\n        // SPACE-padded string\n        if (typeof arguments[argumentPointer] === 'undefined') {\n          throw new Error('Warning:  pack() Type ' + instruction + ': not enough arguments')\n        } else {\n          argument = String(arguments[argumentPointer])\n        }\n        if (quantifier === '*') {\n          quantifier = argument.length\n        }\n        for (i = 0; i < quantifier; i++) {\n          if (typeof argument[i] === 'undefined') {\n            if (instruction === 'a') {\n              result += String.fromCharCode(0)\n            } else {\n              result += ' '\n            }\n          } else {\n            result += argument[i]\n          }\n        }\n        argumentPointer++\n        break\n      case 'h':\n      case 'H':\n        // Hex string, low nibble first\n        // Hex string, high nibble first\n        if (typeof arguments[argumentPointer] === 'undefined') {\n          throw new Error('Warning: pack() Type ' + instruction + ': not enough arguments')\n        } else {\n          argument = arguments[argumentPointer]\n        }\n        if (quantifier === '*') {\n          quantifier = argument.length\n        }\n        if (quantifier > argument.length) {\n          var msg = 'Warning: pack() Type ' + instruction + ': not enough characters in string'\n          throw new Error(msg)\n        }\n\n        for (i = 0; i < quantifier; i += 2) {\n          // Always get per 2 bytes...\n          word = argument[i]\n          if (((i + 1) >= quantifier) || typeof argument[i + 1] === 'undefined') {\n            word += '0'\n          } else {\n            word += argument[i + 1]\n          }\n          // The fastest way to reverse?\n          if (instruction === 'h') {\n            word = word[1] + word[0]\n          }\n          result += String.fromCharCode(parseInt(word, 16))\n        }\n        argumentPointer++\n        break\n\n      case 'c':\n      case 'C':\n        // signed char\n        // unsigned char\n        // c and C is the same in pack\n        if (quantifier === '*') {\n          quantifier = arguments.length - argumentPointer\n        }\n        if (quantifier > (arguments.length - argumentPointer)) {\n          throw new Error('Warning:  pack() Type ' + instruction + ': too few arguments')\n        }\n\n        for (i = 0; i < quantifier; i++) {\n          result += String.fromCharCode(arguments[argumentPointer])\n          argumentPointer++\n        }\n        break\n\n      case 's':\n      case 'S':\n      case 'v':\n        // signed short (always 16 bit, machine byte order)\n        // unsigned short (always 16 bit, machine byte order)\n        // s and S is the same in pack\n        if (quantifier === '*') {\n          quantifier = arguments.length - argumentPointer\n        }\n        if (quantifier > (arguments.length - argumentPointer)) {\n          throw new Error('Warning:  pack() Type ' + instruction + ': too few arguments')\n        }\n\n        for (i = 0; i < quantifier; i++) {\n          result += String.fromCharCode(arguments[argumentPointer] & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] >> 8 & 0xFF)\n          argumentPointer++\n        }\n        break\n\n      case 'n':\n        // unsigned short (always 16 bit, big endian byte order)\n        if (quantifier === '*') {\n          quantifier = arguments.length - argumentPointer\n        }\n        if (quantifier > (arguments.length - argumentPointer)) {\n          throw new Error('Warning: pack() Type ' + instruction + ': too few arguments')\n        }\n\n        for (i = 0; i < quantifier; i++) {\n          result += String.fromCharCode(arguments[argumentPointer] >> 8 & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] & 0xFF)\n          argumentPointer++\n        }\n        break\n\n      case 'i':\n      case 'I':\n      case 'l':\n      case 'L':\n      case 'V':\n        // signed integer (machine dependent size and byte order)\n        // unsigned integer (machine dependent size and byte order)\n        // signed long (always 32 bit, machine byte order)\n        // unsigned long (always 32 bit, machine byte order)\n        // unsigned long (always 32 bit, little endian byte order)\n        if (quantifier === '*') {\n          quantifier = arguments.length - argumentPointer\n        }\n        if (quantifier > (arguments.length - argumentPointer)) {\n          throw new Error('Warning:  pack() Type ' + instruction + ': too few arguments')\n        }\n\n        for (i = 0; i < quantifier; i++) {\n          result += String.fromCharCode(arguments[argumentPointer] & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] >> 8 & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] >> 16 & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] >> 24 & 0xFF)\n          argumentPointer++\n        }\n\n        break\n      case 'N':\n        // unsigned long (always 32 bit, big endian byte order)\n        if (quantifier === '*') {\n          quantifier = arguments.length - argumentPointer\n        }\n        if (quantifier > (arguments.length - argumentPointer)) {\n          throw new Error('Warning:  pack() Type ' + instruction + ': too few arguments')\n        }\n\n        for (i = 0; i < quantifier; i++) {\n          result += String.fromCharCode(arguments[argumentPointer] >> 24 & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] >> 16 & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] >> 8 & 0xFF)\n          result += String.fromCharCode(arguments[argumentPointer] & 0xFF)\n          argumentPointer++\n        }\n        break\n\n      case 'f':\n      case 'd':\n        // float (machine dependent size and representation)\n        // double (machine dependent size and representation)\n        // version based on IEEE754\n        precisionBits = 23\n        exponentBits = 8\n        if (instruction === 'd') {\n          precisionBits = 52\n          exponentBits = 11\n        }\n\n        if (quantifier === '*') {\n          quantifier = arguments.length - argumentPointer\n        }\n        if (quantifier > (arguments.length - argumentPointer)) {\n          throw new Error('Warning:  pack() Type ' + instruction + ': too few arguments')\n        }\n        for (i = 0; i < quantifier; i++) {\n          argument = arguments[argumentPointer]\n          bias = Math.pow(2, exponentBits - 1) - 1\n          minExp = -bias + 1\n          maxExp = bias\n          minUnnormExp = minExp - precisionBits\n          status = isNaN(n = parseFloat(argument)) || n === -Infinity || n === +Infinity ? n : 0\n          exp = 0\n          len = 2 * bias + 1 + precisionBits + 3\n          bin = new Array(len)\n          signal = (n = status !== 0 ? 0 : n) < 0\n          n = Math.abs(n)\n          intPart = Math.floor(n)\n          floatPart = n - intPart\n\n          for (k = len; k;) {\n            bin[--k] = 0\n          }\n          for (k = bias + 2; intPart && k;) {\n            bin[--k] = intPart % 2\n            intPart = Math.floor(intPart / 2)\n          }\n          for (k = bias + 1; floatPart > 0 && k; --floatPart) {\n            (bin[++k] = ((floatPart *= 2) >= 1) - 0)\n          }\n          for (k = -1; ++k < len && !bin[k];) {}\n\n          // @todo: Make this more readable:\n          var key = (lastBit = precisionBits - 1 +\n            (k =\n              (exp = bias + 1 - k) >= minExp &&\n              exp <= maxExp ? k + 1 : bias + 1 - (exp = minExp - 1))) + 1\n\n          if (bin[key]) {\n            if (!(rounded = bin[lastBit])) {\n              for (j = lastBit + 2; !rounded && j < len; rounded = bin[j++]) {}\n            }\n            for (j = lastBit + 1; rounded && --j >= 0;\n            (bin[j] = !bin[j] - 0) && (rounded = 0)) {}\n          }\n\n          for (k = k - 2 < 0 ? -1 : k - 3; ++k < len && !bin[k];) {}\n\n          if ((exp = bias + 1 - k) >= minExp && exp <= maxExp) {\n            ++k\n          } else {\n            if (exp < minExp) {\n              if (exp !== bias + 1 - len && exp < minUnnormExp) {\n                // \"encodeFloat::float underflow\"\n              }\n              k = bias + 1 - (exp = minExp - 1)\n            }\n          }\n\n          if (intPart || status !== 0) {\n            exp = maxExp + 1\n            k = bias + 2\n            if (status === -Infinity) {\n              signal = 1\n            } else if (isNaN(status)) {\n              bin[k] = 1\n            }\n          }\n\n          n = Math.abs(exp + bias)\n          tmpResult = ''\n\n          for (j = exponentBits + 1; --j;) {\n            tmpResult = (n % 2) + tmpResult\n            n = n >>= 1\n          }\n\n          n = 0\n          j = 0\n          k = (tmpResult = (signal ? '1' : '0') + tmpResult + (bin\n            .slice(k, k + precisionBits)\n            .join(''))\n          ).length\n          r = []\n\n          for (; k;) {\n            n += (1 << j) * tmpResult.charAt(--k)\n            if (j === 7) {\n              r[r.length] = String.fromCharCode(n)\n              n = 0\n            }\n            j = (j + 1) % 8\n          }\n\n          r[r.length] = n ? String.fromCharCode(n) : ''\n          result += r.join('')\n          argumentPointer++\n        }\n        break\n\n      case 'x':\n        // NUL byte\n        if (quantifier === '*') {\n          throw new Error('Warning: pack(): Type x: \\'*\\' ignored')\n        }\n        for (i = 0; i < quantifier; i++) {\n          result += String.fromCharCode(0)\n        }\n        break\n\n      case 'X':\n        // Back up one byte\n        if (quantifier === '*') {\n          throw new Error('Warning: pack(): Type X: \\'*\\' ignored')\n        }\n        for (i = 0; i < quantifier; i++) {\n          if (result.length === 0) {\n            throw new Error('Warning: pack(): Type X:' + ' outside of string')\n          } else {\n            result = result.substring(0, result.length - 1)\n          }\n        }\n        break\n\n      case '@':\n        // NUL-fill to absolute position\n        if (quantifier === '*') {\n          throw new Error('Warning: pack(): Type X: \\'*\\' ignored')\n        }\n        if (quantifier > result.length) {\n          extraNullCount = quantifier - result.length\n          for (i = 0; i < extraNullCount; i++) {\n            result += String.fromCharCode(0)\n          }\n        }\n        if (quantifier < result.length) {\n          result = result.substring(0, quantifier)\n        }\n        break\n\n      default:\n        throw new Error('Warning: pack() Type ' + instruction + ': unknown format code')\n    }\n  }\n  if (argumentPointer < arguments.length) {\n    var msg2 = 'Warning: pack(): ' + (arguments.length - argumentPointer) + ' arguments unused'\n    throw new Error(msg2)\n  }\n\n  return result\n}\n"]}