summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/strings/money_format.js.map
blob: 0a9962841701f583574bcff0d61bcdeac5248952 (plain) (blame)
1
{"version":3,"sources":["../../../src/php/strings/money_format.js"],"names":["module","exports","money_format","format","number","setlocale","require","regex","$global","window","global","$locutus","php","monetary","locales","localeCategories","LC_MONETARY","doReplace","n0","flags","n2","width","n4","left","n6","right","conversion","value","repl","fill","test","match","showCurrSymbol","indexOf","parseInt","neg","slice","decpos","integer","fraction","_strSplice","integerStr","idx","thouSep","integerArr","split","splice","join","intLen","length","filler","fillnum","Array","mon_thousands_sep","monGrouping","mon_grouping","i","decPt","mon_decimal_point","undefined","int_frac_digits","frac_digits","Math","round","parseFloat","substr","symbol","int_curr_symbol","currency_symbol","signPosn","n_sign_posn","p_sign_posn","sepBySpace","n_sep_by_space","p_sep_by_space","csPrecedes","n_cs_precedes","p_cs_precedes","posSign","positive_sign","negSign","negative_sign","sign","otherSign","signPadding","valueAndCS","padding","replace"],"mappings":";;AAAAA,OAAOC,OAAP,GAAiB,SAASC,YAAT,CAAuBC,MAAvB,EAA+BC,MAA/B,EAAuC;AAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAIC,YAAYC,QAAQ,sBAAR,CAAhB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,MAAI,OAAOF,MAAP,KAAkB,QAAtB,EAAgC;AAC9B,WAAO,IAAP;AACD;AACD;AACA,MAAIG,QAAQ,oDAAZ;;AAEA;AACAF,YAAU,QAAV,EAAoB,CAApB;;AAEA,MAAIG,UAAW,OAAOC,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyCC,MAAxD;AACAF,UAAQG,QAAR,GAAmBH,QAAQG,QAAR,IAAoB,EAAvC;AACA,MAAIA,WAAWH,QAAQG,QAAvB;AACAA,WAASC,GAAT,GAAeD,SAASC,GAAT,IAAgB,EAA/B;;AAEA,MAAIC,WAAWF,SAASC,GAAT,CAAaE,OAAb,CAAqBH,SAASC,GAAT,CAAaG,gBAAb,CAA8BC,WAAnD,EAAgEA,WAA/E;;AAEA,MAAIC,YAAY,SAAZA,SAAY,CAAUC,EAAV,EAAcC,KAAd,EAAqBC,EAArB,EAAyBC,KAAzB,EAAgCC,EAAhC,EAAoCC,IAApC,EAA0CC,EAA1C,EAA8CC,KAA9C,EAAqDC,UAArD,EAAiE;AAC/E,QAAIC,QAAQ,EAAZ;AACA,QAAIC,OAAO,EAAX;AACA,QAAIF,eAAe,GAAnB,EAAwB;AACtB;AACA,aAAO,GAAP;AACD;AACD,QAAIG,OAAOV,SAAU,IAAD,CAAOW,IAAP,CAAYX,KAAZ,CAAT,GAA8BA,MAAMY,KAAN,CAAY,MAAZ,EAAoB,CAApB,CAA9B,GAAuD,GAAlE,CAP+E,CAOT;AACtE;AACA,QAAIC,iBAAiB,CAACb,KAAD,IAAUA,MAAMc,OAAN,CAAc,GAAd,MAAuB,CAAC,CAAvD;AACA;AACAZ,YAAQa,SAASb,KAAT,EAAgB,EAAhB,KAAuB,CAA/B;;AAEA,QAAIc,MAAM/B,SAAS,CAAnB;AACA;AACAA,aAASA,SAAS,EAAlB;AACA;AACAA,aAAS+B,MAAM/B,OAAOgC,KAAP,CAAa,CAAb,CAAN,GAAwBhC,MAAjC;;AAEA,QAAIiC,SAASjC,OAAO6B,OAAP,CAAe,GAAf,CAAb;AACA;AACA,QAAIK,UAAUD,WAAW,CAAC,CAAZ,GAAgBjC,OAAOgC,KAAP,CAAa,CAAb,EAAgBC,MAAhB,CAAhB,GAA0CjC,MAAxD;AACA;AACA,QAAImC,WAAWF,WAAW,CAAC,CAAZ,GAAgBjC,OAAOgC,KAAP,CAAaC,SAAS,CAAtB,CAAhB,GAA2C,EAA1D;;AAEA,QAAIG,aAAa,SAAbA,UAAa,CAAUC,UAAV,EAAsBC,GAAtB,EAA2BC,OAA3B,EAAoC;AACnD,UAAIC,aAAaH,WAAWI,KAAX,CAAiB,EAAjB,CAAjB;AACAD,iBAAWE,MAAX,CAAkBJ,GAAlB,EAAuB,CAAvB,EAA0BC,OAA1B;AACA,aAAOC,WAAWG,IAAX,CAAgB,EAAhB,CAAP;AACD,KAJD;;AAMA,QAAIC,SAASV,QAAQW,MAArB;AACA1B,WAAOW,SAASX,IAAT,EAAe,EAAf,CAAP;AACA,QAAI2B,SAASF,SAASzB,IAAtB;AACA,QAAI2B,MAAJ,EAAY;AACV,UAAIC,UAAU5B,OAAOyB,MAArB;AACAV,gBAAU,IAAIc,KAAJ,CAAUD,UAAU,CAApB,EAAuBJ,IAAvB,CAA4BlB,IAA5B,IAAoCS,OAA9C;AACD;AACD,QAAInB,MAAMc,OAAN,CAAc,GAAd,MAAuB,CAAC,CAA5B,EAA+B;AAC7B;AACA;AACA;AACA,UAAIU,UAAU9B,SAASwC,iBAAvB;AACA;AACA,UAAIC,cAAczC,SAAS0C,YAA3B;;AAEA,UAAID,YAAY,CAAZ,IAAiBhB,QAAQW,MAA7B,EAAqC;AACnC,aAAK,IAAIO,IAAI,CAAR,EAAWd,MAAMJ,QAAQW,MAA9B,EAAsCO,IAAIF,YAAYL,MAAtD,EAA8DO,GAA9D,EAAmE;AACjE;AACAd,iBAAOY,YAAYE,CAAZ,CAAP;AACA,cAAId,OAAO,CAAX,EAAc;AACZ;AACD;AACD,cAAIQ,UAAUR,MAAMS,OAApB,EAA6B;AAC3BR,sBAAUd,IAAV;AACD;AACDS,oBAAUE,WAAWF,OAAX,EAAoBI,GAApB,EAAyBC,OAAzB,CAAV;AACD;AACF;AACD,UAAIW,YAAYE,IAAI,CAAhB,IAAqB,CAAzB,EAA4B;AAC1B;AACA,eAAOd,MAAMY,YAAYE,IAAI,CAAhB,CAAb,EAAiC;AAC/Bd,iBAAOY,YAAYE,IAAI,CAAhB,CAAP;AACA,cAAIN,UAAUR,MAAMS,OAApB,EAA6B;AAC3BR,sBAAUd,IAAV;AACD;AACDS,oBAAUE,WAAWF,OAAX,EAAoBI,GAApB,EAAyBC,OAAzB,CAAV;AACD;AACF;AACF;;AAED;AACA,QAAIlB,UAAU,GAAd,EAAmB;AACjB;AACAE,cAAQW,OAAR;AACD,KAHD,MAGO;AACL;AACA,UAAImB,QAAQ5C,SAAS6C,iBAArB;AACA,UAAIjC,UAAU,EAAV,IAAgBA,UAAUkC,SAA9B,EAAyC;AACvClC,gBAAQC,eAAe,GAAf,GAAqBb,SAAS+C,eAA9B,GAAgD/C,SAASgD,WAAjE;AACD;AACDpC,cAAQS,SAAST,KAAT,EAAgB,EAAhB,CAAR;;AAEA,UAAIA,UAAU,CAAd,EAAiB;AACf;AACAc,mBAAW,EAAX;AACAkB,gBAAQ,EAAR;AACD,OAJD,MAIO,IAAIhC,QAAQc,SAASU,MAArB,EAA6B;AAClCV,mBAAWuB,KAAKC,KAAL,CAAWC,WACpBzB,SAASH,KAAT,CAAe,CAAf,EAAkBX,KAAlB,IAA2B,GAA3B,GAAiCc,SAAS0B,MAAT,CAAgBxC,KAAhB,EAAuB,CAAvB,CADb,CAAX,CAAX;AAGA,YAAIA,QAAQc,SAASU,MAArB,EAA6B;AAC3BV,qBAAW,IAAIa,KAAJ,CAAU3B,QAAQc,SAASU,MAAjB,GAA0B,CAApC,EAAuCF,IAAvC,CAA4C,GAA5C,IAAmDR,QAA9D,CAD2B,CAC4C;AACxE;AACF,OAPM,MAOA,IAAId,QAAQc,SAASU,MAArB,EAA6B;AAClCV,oBAAY,IAAIa,KAAJ,CAAU3B,QAAQc,SAASU,MAAjB,GAA0B,CAApC,EAAuCF,IAAvC,CAA4C,GAA5C,CAAZ,CADkC,CAC2B;AAC9D;AACDpB,cAAQW,UAAUmB,KAAV,GAAkBlB,QAA1B;AACD;;AAED,QAAI2B,SAAS,EAAb;AACA,QAAIlC,cAAJ,EAAoB;AAClB;AACAkC,eAASxC,eAAe,GAAf,GAAqBb,SAASsD,eAA9B,GAAgDtD,SAASuD,eAAlE;AACD;AACD,QAAIC,WAAWlC,MAAMtB,SAASyD,WAAf,GAA6BzD,SAAS0D,WAArD;;AAEA;AACA;AACA;AACA,QAAIC,aAAarC,MAAMtB,SAAS4D,cAAf,GAAgC5D,SAAS6D,cAA1D;;AAEA;AACA;AACA,QAAIC,aAAaxC,MAAMtB,SAAS+D,aAAf,GAA+B/D,SAASgE,aAAzD;;AAEA;AACA,QAAI1D,MAAMc,OAAN,CAAc,GAAd,MAAuB,CAAC,CAA5B,EAA+B;AAC7B;AACA;AACA;AACA;AACAL,aAAO,CAAC+C,aAAaT,UAAUM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAnC,CAAb,GAAsD,EAAvD,IAA6D7C,KAA7D,IAAsE,CAACgD,UAAD,GAAc,CACzFH,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EADgE,IAC1DN,MAD4C,GACnC,EADnC,CAAP;AAEA,UAAI/B,GAAJ,EAAS;AACPP,eAAO,MAAMA,IAAN,GAAa,GAApB;AACD,OAFD,MAEO;AACLA,eAAO,MAAMA,IAAN,GAAa,GAApB;AACD;AACF,KAZD,MAYO;AACL;AACA;AACA,UAAIkD,UAAUjE,SAASkE,aAAvB;AACA;AACA,UAAIC,UAAUnE,SAASoE,aAAvB;AACA,UAAIC,OAAO/C,MAAO6C,OAAP,GAAmBF,OAA9B;AACA,UAAIK,YAAYhD,MAAO2C,OAAP,GAAmBE,OAAnC;AACA,UAAII,cAAc,EAAlB;AACA,UAAIf,QAAJ,EAAc;AACZ;AACAe,sBAAc,IAAIhC,KAAJ,CAAU+B,UAAUlC,MAAV,GAAmBiC,KAAKjC,MAAxB,GAAiC,CAA3C,EAA8CF,IAA9C,CAAmD,GAAnD,CAAd;AACD;;AAED,UAAIsC,aAAa,EAAjB;AACA,cAAQhB,QAAR;AACE;AACA;AACA;AACA;AACA;AACA,aAAK,CAAL;AACEgB,uBAAaV,aACTT,UAAUM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAnC,IAAyC7C,KADhC,GAETA,SAAS6C,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAlC,IAAwCN,MAF5C;AAGAtC,iBAAO,MAAMyD,UAAN,GAAmB,GAA1B;AACA;AACF,aAAK,CAAL;AACEA,uBAAaV,aACTT,UAAUM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAnC,IAAyC7C,KADhC,GAETA,SAAS6C,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAlC,IAAwCN,MAF5C;AAGAtC,iBAAOwD,cAAcF,IAAd,IAAsBV,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAA/C,IAAqDa,UAA5D;AACA;AACF,aAAK,CAAL;AACEA,uBAAaV,aACTT,UAAUM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAnC,IAAyC7C,KADhC,GAETA,SAAS6C,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAlC,IAAwCN,MAF5C;AAGAtC,iBAAOyD,cAAcb,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAvC,IAA6CU,IAA7C,GAAoDE,WAA3D;AACA;AACF,aAAK,CAAL;AACExD,iBAAO+C,aACHS,cAAcF,IAAd,IAAsBV,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAA/C,IAAqDN,MAArD,IACCM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAD1B,IACgC7C,KAF7B,GAGHA,SAAS6C,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAlC,IAAwCU,IAAxC,GAA+CE,WAA/C,IACCZ,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAD1B,IACgCN,MAJpC;AAKA;AACF,aAAK,CAAL;AACEtC,iBAAO+C,aACHT,UAAUM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAnC,IAAyCY,WAAzC,GAAuDF,IAAvD,IACCV,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAD1B,IACgC7C,KAF7B,GAGHA,SAAS6C,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAAlC,IAAwCN,MAAxC,IACCM,eAAe,CAAf,GAAmB,GAAnB,GAAyB,EAD1B,IACgCU,IADhC,GACuCE,WAJ3C;AAKA;AArCJ;AAuCD;;AAED,QAAIE,UAAUjE,QAAQO,KAAKqB,MAA3B;AACA,QAAIqC,UAAU,CAAd,EAAiB;AACfA,gBAAU,IAAIlC,KAAJ,CAAUkC,UAAU,CAApB,EAAuBvC,IAAvB,CAA4B,GAA5B,CAAV;AACA;AACA;AACA,UAAI5B,MAAMc,OAAN,CAAc,GAAd,MAAuB,CAAC,CAA5B,EAA+B;AAC7B;AACAL,gBAAQ0D,OAAR;AACD,OAHD,MAGO;AACL;AACA1D,eAAO0D,UAAU1D,IAAjB;AACD;AACF;AACD,WAAOA,IAAP;AACD,GAvMD;;AAyMA,SAAOzB,OAAOoF,OAAP,CAAehF,KAAf,EAAsBU,SAAtB,CAAP;AACD,CAxQD","file":"money_format.js","sourcesContent":["module.exports = function money_format (format, number) { // eslint-disable-line camelcase\n  //  discuss at: http://locutus.io/php/money_format/\n  // original by: Brett Zamir (http://brett-zamir.me)\n  //    input by: daniel airton wermann (http://wermann.com.br)\n  // bugfixed by: Brett Zamir (http://brett-zamir.me)\n  //      note 1: This depends on setlocale having the appropriate\n  //      note 1: locale (these examples use 'en_US')\n  //   example 1: money_format('%i', 1234.56)\n  //   returns 1: ' USD 1,234.56'\n  //   example 2: money_format('%14#8.2n', 1234.5678)\n  //   returns 2: ' $     1,234.57'\n  //   example 3: money_format('%14#8.2n', -1234.5678)\n  //   returns 3: '-$     1,234.57'\n  //   example 4: money_format('%(14#8.2n', 1234.5678)\n  //   returns 4: ' $     1,234.57 '\n  //   example 5: money_format('%(14#8.2n', -1234.5678)\n  //   returns 5: '($     1,234.57)'\n  //   example 6: money_format('%=014#8.2n', 1234.5678)\n  //   returns 6: ' $000001,234.57'\n  //   example 7: money_format('%=014#8.2n', -1234.5678)\n  //   returns 7: '-$000001,234.57'\n  //   example 8: money_format('%=*14#8.2n', 1234.5678)\n  //   returns 8: ' $*****1,234.57'\n  //   example 9: money_format('%=*14#8.2n', -1234.5678)\n  //   returns 9: '-$*****1,234.57'\n  //  example 10: money_format('%=*^14#8.2n', 1234.5678)\n  //  returns 10: '  $****1234.57'\n  //  example 11: money_format('%=*^14#8.2n', -1234.5678)\n  //  returns 11: ' -$****1234.57'\n  //  example 12: money_format('%=*!14#8.2n', 1234.5678)\n  //  returns 12: ' *****1,234.57'\n  //  example 13: money_format('%=*!14#8.2n', -1234.5678)\n  //  returns 13: '-*****1,234.57'\n  //  example 14: money_format('%i', 3590)\n  //  returns 14: ' USD 3,590.00'\n\n  var setlocale = require('../strings/setlocale')\n\n  // Per PHP behavior, there seems to be no extra padding\n  // for sign when there is a positive number, though my\n  // understanding of the description is that there should be padding;\n  // need to revisit examples\n\n  // Helpful info at http://ftp.gnu.org/pub/pub/old-gnu/Manuals/glibc-2.2.3/html_chapter/libc_7.html\n  // and http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.bpxbd00/strfmp.htm\n\n  if (typeof number !== 'number') {\n    return null\n  }\n  // 1: flags, 3: width, 5: left, 7: right, 8: conversion\n  var regex = /%((=.|[+^(!-])*?)(\\d*?)(#(\\d+))?(\\.(\\d+))?([in%])/g\n\n  // Ensure the locale data we need is set up\n  setlocale('LC_ALL', 0)\n\n  var $global = (typeof window !== 'undefined' ? window : global)\n  $global.$locutus = $global.$locutus || {}\n  var $locutus = $global.$locutus\n  $locutus.php = $locutus.php || {}\n\n  var monetary = $locutus.php.locales[$locutus.php.localeCategories.LC_MONETARY].LC_MONETARY\n\n  var doReplace = function (n0, flags, n2, width, n4, left, n6, right, conversion) {\n    var value = ''\n    var repl = ''\n    if (conversion === '%') {\n      // Percent does not seem to be allowed with intervening content\n      return '%'\n    }\n    var fill = flags && (/=./).test(flags) ? flags.match(/=(.)/)[1] : ' ' // flag: =f (numeric fill)\n    // flag: ! (suppress currency symbol)\n    var showCurrSymbol = !flags || flags.indexOf('!') === -1\n    // field width: w (minimum field width)\n    width = parseInt(width, 10) || 0\n\n    var neg = number < 0\n    // Convert to string\n    number = number + ''\n    // We don't want negative symbol represented here yet\n    number = neg ? number.slice(1) : number\n\n    var decpos = number.indexOf('.')\n    // Get integer portion\n    var integer = decpos !== -1 ? number.slice(0, decpos) : number\n    // Get decimal portion\n    var fraction = decpos !== -1 ? number.slice(decpos + 1) : ''\n\n    var _strSplice = function (integerStr, idx, thouSep) {\n      var integerArr = integerStr.split('')\n      integerArr.splice(idx, 0, thouSep)\n      return integerArr.join('')\n    }\n\n    var intLen = integer.length\n    left = parseInt(left, 10)\n    var filler = intLen < left\n    if (filler) {\n      var fillnum = left - intLen\n      integer = new Array(fillnum + 1).join(fill) + integer\n    }\n    if (flags.indexOf('^') === -1) {\n      // flag: ^ (disable grouping characters (of locale))\n      // use grouping characters\n      // ','\n      var thouSep = monetary.mon_thousands_sep\n      // [3] (every 3 digits in U.S.A. locale)\n      var monGrouping = monetary.mon_grouping\n\n      if (monGrouping[0] < integer.length) {\n        for (var i = 0, idx = integer.length; i < monGrouping.length; i++) {\n          // e.g., 3\n          idx -= monGrouping[i]\n          if (idx <= 0) {\n            break\n          }\n          if (filler && idx < fillnum) {\n            thouSep = fill\n          }\n          integer = _strSplice(integer, idx, thouSep)\n        }\n      }\n      if (monGrouping[i - 1] > 0) {\n        // Repeating last grouping (may only be one) until highest portion of integer reached\n        while (idx > monGrouping[i - 1]) {\n          idx -= monGrouping[i - 1]\n          if (filler && idx < fillnum) {\n            thouSep = fill\n          }\n          integer = _strSplice(integer, idx, thouSep)\n        }\n      }\n    }\n\n    // left, right\n    if (right === '0') {\n      // No decimal or fractional digits\n      value = integer\n    } else {\n      // '.'\n      var decPt = monetary.mon_decimal_point\n      if (right === '' || right === undefined) {\n        right = conversion === 'i' ? monetary.int_frac_digits : monetary.frac_digits\n      }\n      right = parseInt(right, 10)\n\n      if (right === 0) {\n        // Only remove fractional portion if explicitly set to zero digits\n        fraction = ''\n        decPt = ''\n      } else if (right < fraction.length) {\n        fraction = Math.round(parseFloat(\n          fraction.slice(0, right) + '.' + fraction.substr(right, 1)\n        ))\n        if (right > fraction.length) {\n          fraction = new Array(right - fraction.length + 1).join('0') + fraction // prepend with 0's\n        }\n      } else if (right > fraction.length) {\n        fraction += new Array(right - fraction.length + 1).join('0') // pad with 0's\n      }\n      value = integer + decPt + fraction\n    }\n\n    var symbol = ''\n    if (showCurrSymbol) {\n      // 'i' vs. 'n' ('USD' vs. '$')\n      symbol = conversion === 'i' ? monetary.int_curr_symbol : monetary.currency_symbol\n    }\n    var signPosn = neg ? monetary.n_sign_posn : monetary.p_sign_posn\n\n    // 0: no space between curr. symbol and value\n    // 1: space sep. them unless symb. and sign are adjacent then space sep. them from value\n    // 2: space sep. sign and value unless symb. and sign are adjacent then space separates\n    var sepBySpace = neg ? monetary.n_sep_by_space : monetary.p_sep_by_space\n\n    // p_cs_precedes, n_cs_precedes\n    // positive currency symbol follows value = 0; precedes value = 1\n    var csPrecedes = neg ? monetary.n_cs_precedes : monetary.p_cs_precedes\n\n    // Assemble symbol/value/sign and possible space as appropriate\n    if (flags.indexOf('(') !== -1) {\n      // flag: parenth. for negative\n      // @todo: unclear on whether and how sepBySpace, signPosn, or csPrecedes have\n      // an impact here (as they do below), but assuming for now behaves as signPosn 0 as\n      // far as localized sepBySpace and signPosn behavior\n      repl = (csPrecedes ? symbol + (sepBySpace === 1 ? ' ' : '') : '') + value + (!csPrecedes ? (\n        sepBySpace === 1 ? ' ' : '') + symbol : '')\n      if (neg) {\n        repl = '(' + repl + ')'\n      } else {\n        repl = ' ' + repl + ' '\n      }\n    } else {\n      // '+' is default\n      // ''\n      var posSign = monetary.positive_sign\n      // '-'\n      var negSign = monetary.negative_sign\n      var sign = neg ? (negSign) : (posSign)\n      var otherSign = neg ? (posSign) : (negSign)\n      var signPadding = ''\n      if (signPosn) {\n        // has a sign\n        signPadding = new Array(otherSign.length - sign.length + 1).join(' ')\n      }\n\n      var valueAndCS = ''\n      switch (signPosn) {\n        // 0: parentheses surround value and curr. symbol;\n        // 1: sign precedes them;\n        // 2: sign follows them;\n        // 3: sign immed. precedes curr. symbol; (but may be space between)\n        // 4: sign immed. succeeds curr. symbol; (but may be space between)\n        case 0:\n          valueAndCS = csPrecedes\n            ? symbol + (sepBySpace === 1 ? ' ' : '') + value\n            : value + (sepBySpace === 1 ? ' ' : '') + symbol\n          repl = '(' + valueAndCS + ')'\n          break\n        case 1:\n          valueAndCS = csPrecedes\n            ? symbol + (sepBySpace === 1 ? ' ' : '') + value\n            : value + (sepBySpace === 1 ? ' ' : '') + symbol\n          repl = signPadding + sign + (sepBySpace === 2 ? ' ' : '') + valueAndCS\n          break\n        case 2:\n          valueAndCS = csPrecedes\n            ? symbol + (sepBySpace === 1 ? ' ' : '') + value\n            : value + (sepBySpace === 1 ? ' ' : '') + symbol\n          repl = valueAndCS + (sepBySpace === 2 ? ' ' : '') + sign + signPadding\n          break\n        case 3:\n          repl = csPrecedes\n            ? signPadding + sign + (sepBySpace === 2 ? ' ' : '') + symbol +\n              (sepBySpace === 1 ? ' ' : '') + value\n            : value + (sepBySpace === 1 ? ' ' : '') + sign + signPadding +\n              (sepBySpace === 2 ? ' ' : '') + symbol\n          break\n        case 4:\n          repl = csPrecedes\n            ? symbol + (sepBySpace === 2 ? ' ' : '') + signPadding + sign +\n              (sepBySpace === 1 ? ' ' : '') + value\n            : value + (sepBySpace === 1 ? ' ' : '') + symbol +\n              (sepBySpace === 2 ? ' ' : '') + sign + signPadding\n          break\n      }\n    }\n\n    var padding = width - repl.length\n    if (padding > 0) {\n      padding = new Array(padding + 1).join(' ')\n      // @todo: How does p_sep_by_space affect the count if there is a space?\n      // Included in count presumably?\n      if (flags.indexOf('-') !== -1) {\n        // left-justified (pad to right)\n        repl += padding\n      } else {\n        // right-justified (pad to left)\n        repl = padding + repl\n      }\n    }\n    return repl\n  }\n\n  return format.replace(regex, doReplace)\n}\n"]}