%
), which are copied unchanged\n * to the output string and conversion specifications, each of which results in fetching zero or more subsequent\n * arguments. %
, and ends with a conversion\n * specifier. In between there may be (in this order) zero or more flags, an optional minimum field width\n * and an optional precision.%
is followed by zero or more of the following flags:+ | \n * \n * A sign (+ or - ) should always be placed before a number produced by a\n * signed conversion. By default a sign is used only for negative numbers.\n * | \n *
0 | \n * The value should be zero padded. | \n *
␣ | \n * (a space) The value should be space padded. | \n *
' | \n * Indicates alternate padding character, specified by prefixing it with a single quote ' . | \n *
- | \n * The converted value is to be left adjusted on the field boundary (the default is right justification). | \n *
`s` | \n *The string argument is treated as and presented as a string. | \n *
`d` `i` | \n *The integer argument is converted to signed decimal notation. | \n *
`b` | \n *The unsigned integer argument is converted to unsigned binary. | \n *
`c` | \n *The unsigned integer argument is converted to an ASCII character with that number. | \n *
`o` | \n *The unsigned integer argument is converted to unsigned octal. | \n *
`u` | \n *The unsigned integer argument is converted to unsigned decimal. | \n *
`x` `X` | \n *The unsigned integer argument is converted to unsigned hexadecimal. The letters `abcdef` are used for `x`\n * conversions; the letters `ABCDEF` are used for `X` conversions. | \n *
`f` | \n *\n * The float argument is rounded and converted to decimal notation in the style `[-]ddd.ddd`, where the number of\n * digits after the decimal-point character is equal to the precision specification. If the precision is missing,\n * it is taken as 6; if the precision is explicitly zero, no decimal-point character appears.\n * If a decimal point appears, at least one digit appears before it.\n * | \n *
`e` `E` | \n *\n * The float argument is rounded and converted in the style `[-]d.ddde±dd`, where there is one digit\n * before the decimal-point character and the number of digits after it is equal to the precision. If\n * the precision is missing, it is taken as `6`; if the precision is zero, no decimal-point character\n * appears. An `E` conversion uses the letter `E` (rather than `e`) to introduce the exponent.\n * | \n *
`g` `G` | \n *\n * The float argument is converted in style `f` or `e` (or `F` or `E` for `G` conversions). The precision specifies\n * the number of significant digits. If the precision is missing, `6` digits are given; if the\n * precision is zero, it is treated as `1`. Style `e` is used if the exponent from its conversion is less\n * than `-6` or greater than or equal to the precision. Trailing zeros are removed from the fractional\n * part of the result; a decimal point appears only if it is followed by at least one digit.\n * | \n *
`%` | \n *A literal `%` is written. No argument is converted. The complete conversion specification is `%%`. | \n *
sprintf()
,\n * with the only difference that accepts the formatting arguments in an array `values`.< > & ' \" `
in subject
.\n *\n * @function escapeHtml\n * @static\n * @since 1.0.0 \n * @memberOf Escape\n * @param {string} [subject=''] The string to escape.\n * @return {string} Returns the escaped string.\n * @example\n * v.escapeHtml('wonderful world
');\n * // => '<p>wonderful world</p>'\n */\nexport default function escapeHtml(subject) {\n return coerceToString(subject).replace(REGEXP_HTML_SPECIAL_CHARACTERS, replaceSpecialCharacter);\n}","import coerceToString from 'helper/string/coerce_to_string';\nimport { REGEXP_SPECIAL_CHARACTERS } from 'helper/reg_exp/const';\n\n/**\n * Escapes the regular expression special characters `- [ ] / { } ( ) * + ? . \\ ^ $ |` in `subject`.\n *\n * @function escapeRegExp\n * @static\n * @since 1.0.0\n * @memberOf Escape\n * @param {string} [subject=''] The string to escape.\n * @return {string} Returns the escaped string.\n * @example\n * v.escapeRegExp('(hours)[minutes]{seconds}');\n * // => '\\(hours\\)\\[minutes\\]\\{seconds\\}'\n */\nexport default function escapeRegExp(subject) {\n return coerceToString(subject).replace(REGEXP_SPECIAL_CHARACTERS, '\\\\$&');\n}","import coerceToString from 'helper/string/coerce_to_string';\n\nconst unescapeCharactersMap = {\n '<': /(<)|(*3c;)|(*60;)/gi,\n '>': /(>)|(*3e;)|(*62;)/gi,\n '&': /(&)|(*26;)|(*38;)/gi,\n '\"': /(")|(*22;)|(*34;)/gi,\n \"'\": /(*27;)|(*39;)/gi,\n '`': /(*60;)|(*96;)/gi\n};\nconst characters = Object.keys(unescapeCharactersMap);\n\n/**\n * Replaces the HTML entities with corresponding characters.\n *\n * @ignore\n * @param {string} string The accumulator string.\n * @param {string} key The character.\n * @return {string} The string with replaced HTML entity\n */\nfunction reduceUnescapedString(string, key) {\n return string.replace(unescapeCharactersMap[key], key);\n}\n\n/**\n * Unescapes HTML special characters from< > & " ' `
\n * to corresponding < > & ' \" `
in subject
.\n *\n * @function unescapeHtml\n * @static\n * @since 1.0.0\n * @memberOf Escape\n * @param {string} [subject=''] The string to unescape.\n * @return {string} Returns the unescaped string.\n * @example\n * v.unescapeHtml('<p>wonderful world</p>');\n * // => 'wonderful world
'\n */\nexport default function unescapeHtml(subject) {\n const subjectString = coerceToString(subject);\n return characters.reduce(reduceUnescapedString, subjectString);\n}","import coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Returns the first occurrence index of `search` in `subject`.\n *\n * @function indexOf\n * @static\n * @since 1.0.0\n * @memberOf Index\n * @param {string} [subject=''] The string where to search.\n * @param {string} search The string to search.\n * @param {number} [fromIndex=0] The index to start searching.\n * @return {number} Returns the first occurrence index or `-1` if not found.\n * @example\n * v.indexOf('morning', 'n');\n * // => 3\n *\n * v.indexOf('evening', 'o');\n * // => -1\n */\nexport default function indexOf(subject, search, fromIndex) {\n const subjectString = coerceToString(subject);\n return subjectString.indexOf(search, fromIndex);\n}","import coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Returns the last occurrence index of `search` in `subject`.\n *\n * @function lastIndexOf\n * @static\n * @since 1.0.0\n * @memberOf Index\n * @param {string} [subject=''] The string where to search.\n * @param {string} search The string to search.\n * @param {number} [fromIndex=subject.length - 1] The index to start searching backward in the string.\n * @return {number} Returns the last occurrence index or `-1` if not found.\n * @example\n * v.lastIndexOf('morning', 'n');\n * // => 5\n *\n * v.lastIndexOf('evening', 'o');\n * // => -1\n */\nexport default function lastIndexOf(subject, search, fromIndex) {\n const subjectString = coerceToString(subject);\n return subjectString.lastIndexOf(search, fromIndex);\n}","import clipNumber from 'helper/number/clip_number';\nimport coerceToString from 'helper/string/coerce_to_string';\nimport isNil from 'helper/object/is_nil';\nimport toInteger from 'helper/number/to_integer';\n\n/**\n * Returns the first index of a `pattern` match in `subject`.\n *\n * @function search\n * @static\n * @since 1.0.0\n * @memberOf Index\n * @param {string} [subject=''] The string where to search.\n * @param {string|RegExp} pattern The pattern to match. If `pattern` is not RegExp, it is transformed to `new RegExp(pattern)`.\n * @param {number} [fromIndex=0] The index to start searching.\n * @return {number} Returns the first match index or `-1` if not found.\n * @example\n * v.search('morning', /rn/);\n * // => 2\n *\n * v.search('evening', '/\\d/');\n * // => -1\n */\nexport default function search(subject, pattern, fromIndex) {\n const subjectString = coerceToString(subject);\n const fromIndexNumber = isNil(fromIndex) ? 0 : clipNumber(toInteger(fromIndex), 0, subjectString.length);\n let matchIndex = subjectString.substr(fromIndexNumber).search(pattern);\n if (matchIndex !== -1 && !isNaN(fromIndexNumber)) {\n matchIndex += fromIndexNumber;\n }\n return matchIndex;\n}","import coerceToNumber from 'helper/number/coerce_to_number';\nimport coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Inserts into `subject` a string `toInsert` at specified `position`.\n *\n * @function insert\n * @static\n * @since 1.0.0\n * @memberOf Manipulate\n * @param {string} [subject=''] The string where to insert.\n * @param {string} [toInsert=''] The string to be inserted.\n * @param {number} [position=0] The position to insert.\n * @return {string} Returns the string after insertion.\n * @example\n * v.insert('ct', 'a', 1);\n * // => 'cat'\n *\n * v.insert('sunny', ' day', 5);\n * // => 'sunny day'\n */\nexport default function insert(subject, toInsert, position) {\n const subjectString = coerceToString(subject);\n const toInsertString = coerceToString(toInsert);\n const positionNumber = coerceToNumber(position);\n if (positionNumber < 0 || positionNumber > subjectString.length || toInsertString === '') {\n return subjectString;\n }\n return subjectString.slice(0, positionNumber) + toInsertString + subjectString.slice(positionNumber);\n}","/**\n * Generated diacritics map. See bellow the base code.\n * @ignore\n * @see http://stackoverflow.com/a/18391901/1894471\n * @type Object\n */\n\nconst diacritics = {\n \"3\": \"\\u039e\\u03be\",\n \"8\": \"\\u0398\\u03b8\",\n \"A\": \"\\x41\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\u0100\\u0102\\u0104\\u01cd\\u01de\\u01e0\\u01fa\\u0200\\u0202\\u0226\\u023a\\u1e00\\u1ea0\\u1ea2\\u1ea4\\u1ea6\\u1ea8\\u1eaa\\u1eac\\u1eae\\u1eb0\\u1eb2\\u1eb4\\u1eb6\\u24b6\\u2c6f\\uff21\\u0386\\u0391\\u0410\",\n \"B\": \"\\x42\\u0181\\u0182\\u0243\\u1e02\\u1e04\\u1e06\\u24b7\\uff22\\u0392\\u0411\",\n \"C\": \"\\x43\\xc7\\u0106\\u0108\\u010a\\u010c\\u0187\\u023b\\u1e08\\u24b8\\ua73e\\uff23\\u0426\",\n \"D\": \"\\x44\\u010e\\u0110\\u0189\\u018a\\u018b\\u1e0a\\u1e0c\\u1e0e\\u1e10\\u1e12\\u24b9\\ua779\\uff24\\xd0\\u0394\\u0414\",\n \"E\": \"\\x45\\xc8\\xc9\\xca\\xcb\\u0112\\u0114\\u0116\\u0118\\u011a\\u018e\\u0190\\u0204\\u0206\\u0228\\u1e14\\u1e16\\u1e18\\u1e1a\\u1e1c\\u1eb8\\u1eba\\u1ebc\\u1ebe\\u1ec0\\u1ec2\\u1ec4\\u1ec6\\u24ba\\uff25\\u0388\\u0395\\u0415\\u042d\",\n \"F\": \"\\x46\\u0191\\u1e1e\\u24bb\\ua77b\\uff26\\u03a6\\u0424\",\n \"G\": \"\\x47\\u011c\\u011e\\u0120\\u0122\\u0193\\u01e4\\u01e6\\u01f4\\u1e20\\u24bc\\ua77d\\ua77e\\ua7a0\\uff27\\u0393\\u0413\\u0490\",\n \"H\": \"\\x48\\u0124\\u0126\\u021e\\u1e22\\u1e24\\u1e26\\u1e28\\u1e2a\\u24bd\\u2c67\\u2c75\\ua78d\\uff28\\u0389\\u0397\\u0425\",\n \"I\": \"\\x49\\xcc\\xcd\\xce\\xcf\\u0128\\u012a\\u012c\\u012e\\u0130\\u0197\\u01cf\\u0208\\u020a\\u1e2c\\u1e2e\\u1ec8\\u1eca\\u24be\\uff29\\u038a\\u0399\\u03aa\\u0406\\u0418\",\n \"J\": \"\\x4a\\u0134\\u0248\\u24bf\\uff2a\\u0419\",\n \"K\": \"\\x4b\\u0136\\u0198\\u01e8\\u1e30\\u1e32\\u1e34\\u24c0\\u2c69\\ua740\\ua742\\ua744\\ua7a2\\uff2b\\u039a\\u041a\",\n \"L\": \"\\x4c\\u0139\\u013b\\u013d\\u013f\\u0141\\u023d\\u1e36\\u1e38\\u1e3a\\u1e3c\\u24c1\\u2c60\\u2c62\\ua746\\ua748\\ua780\\uff2c\\u039b\\u041b\",\n \"M\": \"\\x4d\\u019c\\u1e3e\\u1e40\\u1e42\\u24c2\\u2c6e\\uff2d\\u039c\\u041c\",\n \"N\": \"\\x4e\\xd1\\u0143\\u0145\\u0147\\u019d\\u01f8\\u0220\\u1e44\\u1e46\\u1e48\\u1e4a\\u24c3\\ua790\\ua7a4\\uff2e\\u039d\\u041d\",\n \"O\": \"\\x4f\\xd2\\xd3\\xd4\\xd5\\xd6\\xd8\\u014c\\u014e\\u0150\\u0186\\u019f\\u01a0\\u01d1\\u01ea\\u01ec\\u01fe\\u020c\\u020e\\u022a\\u022c\\u022e\\u0230\\u1e4c\\u1e4e\\u1e50\\u1e52\\u1ecc\\u1ece\\u1ed0\\u1ed2\\u1ed4\\u1ed6\\u1ed8\\u1eda\\u1edc\\u1ede\\u1ee0\\u1ee2\\u24c4\\ua74a\\ua74c\\uff2f\\u038c\\u039f\\u041e\",\n \"P\": \"\\x50\\u01a4\\u1e54\\u1e56\\u24c5\\u2c63\\ua750\\ua752\\ua754\\uff30\\u03a0\\u041f\",\n \"Q\": \"\\x51\\u024a\\u24c6\\ua756\\ua758\\uff31\",\n \"R\": \"\\x52\\u0154\\u0156\\u0158\\u0210\\u0212\\u024c\\u1e58\\u1e5a\\u1e5c\\u1e5e\\u24c7\\u2c64\\ua75a\\ua782\\ua7a6\\uff32\\u03a1\\u0420\",\n \"S\": \"\\x53\\u015a\\u015c\\u015e\\u0160\\u0218\\u1e60\\u1e62\\u1e64\\u1e66\\u1e68\\u1e9e\\u24c8\\u2c7e\\ua784\\ua7a8\\uff33\\u03a3\\u0421\",\n \"T\": \"\\x54\\u0162\\u0164\\u0166\\u01ac\\u01ae\\u021a\\u023e\\u1e6a\\u1e6c\\u1e6e\\u1e70\\u24c9\\ua786\\uff34\\u03a4\\u0422\",\n \"U\": \"\\x55\\xd9\\xda\\xdb\\xdc\\u0168\\u016a\\u016c\\u016e\\u0170\\u0172\\u01af\\u01d3\\u01d5\\u01d7\\u01d9\\u01db\\u0214\\u0216\\u0244\\u1e72\\u1e74\\u1e76\\u1e78\\u1e7a\\u1ee4\\u1ee6\\u1ee8\\u1eea\\u1eec\\u1eee\\u1ef0\\u24ca\\uff35\\u0423\\u042a\",\n \"V\": \"\\x56\\u01b2\\u0245\\u1e7c\\u1e7e\\u24cb\\ua75e\\uff36\\u0412\",\n \"W\": \"\\x57\\u0174\\u1e80\\u1e82\\u1e84\\u1e86\\u1e88\\u24cc\\u2c72\\uff37\\u038f\\u03a9\",\n \"X\": \"\\x58\\u1e8a\\u1e8c\\u24cd\\uff38\\u03a7\",\n \"Y\": \"\\x59\\xdd\\u0176\\u0178\\u01b3\\u0232\\u024e\\u1e8e\\u1ef2\\u1ef4\\u1ef6\\u1ef8\\u1efe\\u24ce\\uff39\\u038e\\u03a5\\u03ab\\u042b\",\n \"Z\": \"\\x5a\\u0179\\u017b\\u017d\\u01b5\\u0224\\u1e90\\u1e92\\u1e94\\u24cf\\u2c6b\\u2c7f\\ua762\\uff3a\\u0396\\u0417\",\n \"a\": \"\\x61\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\u0101\\u0103\\u0105\\u01ce\\u01df\\u01e1\\u01fb\\u0201\\u0203\\u0227\\u0250\\u1e01\\u1e9a\\u1ea1\\u1ea3\\u1ea5\\u1ea7\\u1ea9\\u1eab\\u1ead\\u1eaf\\u1eb1\\u1eb3\\u1eb5\\u1eb7\\u24d0\\u2c65\\uff41\\u03ac\\u03b1\\u0430\",\n \"b\": \"\\x62\\u0180\\u0183\\u0253\\u1e03\\u1e05\\u1e07\\u24d1\\uff42\\u03b2\\u0431\",\n \"c\": \"\\x63\\xe7\\u0107\\u0109\\u010b\\u010d\\u0188\\u023c\\u1e09\\u2184\\u24d2\\ua73f\\uff43\\u0446\",\n \"d\": \"\\x64\\u010f\\u0111\\u018c\\u0256\\u0257\\u1e0b\\u1e0d\\u1e0f\\u1e11\\u1e13\\u24d3\\ua77a\\uff44\\xf0\\u03b4\\u0434\",\n \"e\": \"\\x65\\xe8\\xe9\\xea\\xeb\\u0113\\u0115\\u0117\\u0119\\u011b\\u01dd\\u0205\\u0207\\u0229\\u0247\\u025b\\u1e15\\u1e17\\u1e19\\u1e1b\\u1e1d\\u1eb9\\u1ebb\\u1ebd\\u1ebf\\u1ec1\\u1ec3\\u1ec5\\u1ec7\\u24d4\\uff45\\u03ad\\u03b5\\u0435\\u044d\",\n \"f\": \"\\x66\\u0192\\u1e1f\\u24d5\\ua77c\\uff46\\u03c6\\u0444\",\n \"g\": \"\\x67\\u011d\\u011f\\u0121\\u0123\\u01e5\\u01e7\\u01f5\\u0260\\u1d79\\u1e21\\u24d6\\ua77f\\ua7a1\\uff47\\u03b3\\u0433\\u0491\",\n \"h\": \"\\x68\\u0125\\u0127\\u021f\\u0265\\u1e23\\u1e25\\u1e27\\u1e29\\u1e2b\\u1e96\\u24d7\\u2c68\\u2c76\\uff48\\u03ae\\u03b7\\u0445\",\n \"i\": \"\\x69\\xec\\xed\\xee\\xef\\u0129\\u012b\\u012d\\u012f\\u0131\\u01d0\\u0209\\u020b\\u0268\\u1e2d\\u1e2f\\u1ec9\\u1ecb\\u24d8\\uff49\\u0390\\u03af\\u03b9\\u03ca\\u0438\\u0456\",\n \"j\": \"\\x6a\\u0135\\u01f0\\u0249\\u24d9\\uff4a\\u0439\",\n \"k\": \"\\x6b\\u0137\\u0199\\u01e9\\u1e31\\u1e33\\u1e35\\u24da\\u2c6a\\ua741\\ua743\\ua745\\ua7a3\\uff4b\\u03ba\\u043a\",\n \"l\": \"\\x6c\\u013a\\u013c\\u013e\\u0140\\u0142\\u017f\\u019a\\u026b\\u1e37\\u1e39\\u1e3b\\u1e3d\\u24db\\u2c61\\ua747\\ua749\\ua781\\uff4c\\u03bb\\u043b\",\n \"m\": \"\\x6d\\u026f\\u0271\\u1e3f\\u1e41\\u1e43\\u24dc\\uff4d\\u03bc\\u043c\",\n \"n\": \"\\x6e\\xf1\\u0144\\u0146\\u0148\\u0149\\u019e\\u01f9\\u0272\\u1e45\\u1e47\\u1e49\\u1e4b\\u24dd\\ua791\\ua7a5\\uff4e\\u03bd\\u043d\",\n \"o\": \"\\x6f\\xf2\\xf3\\xf4\\xf5\\xf6\\xf8\\u014d\\u014f\\u0151\\u01a1\\u01d2\\u01eb\\u01ed\\u01ff\\u020d\\u020f\\u022b\\u022d\\u022f\\u0231\\u0254\\u0275\\u1e4d\\u1e4f\\u1e51\\u1e53\\u1ecd\\u1ecf\\u1ed1\\u1ed3\\u1ed5\\u1ed7\\u1ed9\\u1edb\\u1edd\\u1edf\\u1ee1\\u1ee3\\u24de\\ua74b\\ua74d\\uff4f\\u03bf\\u03cc\\u043e\",\n \"p\": \"\\x70\\u01a5\\u1d7d\\u1e55\\u1e57\\u24df\\ua751\\ua753\\ua755\\uff50\\u03c0\\u043f\",\n \"q\": \"\\x71\\u024b\\u24e0\\ua757\\ua759\\uff51\",\n \"r\": \"\\x72\\u0155\\u0157\\u0159\\u0211\\u0213\\u024d\\u027d\\u1e59\\u1e5b\\u1e5d\\u1e5f\\u24e1\\ua75b\\ua783\\ua7a7\\uff52\\u03c1\\u0440\",\n \"s\": \"\\x73\\xdf\\u015b\\u015d\\u015f\\u0161\\u0219\\u023f\\u1e61\\u1e63\\u1e65\\u1e67\\u1e69\\u1e9b\\u24e2\\ua785\\ua7a9\\uff53\\u03c2\\u03c3\\u0441\",\n \"t\": \"\\x74\\u0163\\u0165\\u0167\\u01ad\\u021b\\u0288\\u1e6b\\u1e6d\\u1e6f\\u1e71\\u1e97\\u24e3\\u2c66\\ua787\\uff54\\u03c4\\u0442\",\n \"u\": \"\\x75\\xf9\\xfa\\xfb\\xfc\\u0169\\u016b\\u016d\\u016f\\u0171\\u0173\\u01b0\\u01d4\\u01d6\\u01d8\\u01da\\u01dc\\u0215\\u0217\\u0289\\u1e73\\u1e75\\u1e77\\u1e79\\u1e7b\\u1ee5\\u1ee7\\u1ee9\\u1eeb\\u1eed\\u1eef\\u1ef1\\u24e4\\uff55\\u0443\\u044a\",\n \"v\": \"\\x76\\u028b\\u028c\\u1e7d\\u1e7f\\u24e5\\ua75f\\uff56\\u0432\",\n \"w\": \"\\x77\\u0175\\u1e81\\u1e83\\u1e85\\u1e87\\u1e89\\u1e98\\u24e6\\u2c73\\uff57\\u03c9\\u03ce\",\n \"x\": \"\\x78\\u1e8b\\u1e8d\\u24e7\\uff58\\u03c7\",\n \"y\": \"\\x79\\xfd\\xff\\u0177\\u01b4\\u0233\\u024f\\u1e8f\\u1e99\\u1ef3\\u1ef5\\u1ef7\\u1ef9\\u1eff\\u24e8\\uff59\\u03b0\\u03c5\\u03cb\\u03cd\\u044b\",\n \"z\": \"\\x7a\\u017a\\u017c\\u017e\\u01b6\\u0225\\u0240\\u1e91\\u1e93\\u1e95\\u24e9\\u2c6c\\ua763\\uff5a\\u03b6\\u0437\",\n \"OE\": \"\\x8c\\u0152\",\n \"oe\": \"\\x9c\\u0153\",\n \"AE\": \"\\xc6\\u01e2\\u01fc\",\n \"ae\": \"\\xe6\\u01e3\\u01fd\",\n \"hv\": \"\\u0195\",\n \"OI\": \"\\u01a2\",\n \"oi\": \"\\u01a3\",\n \"DZ\": \"\\u01c4\\u01f1\",\n \"Dz\": \"\\u01c5\\u01f2\",\n \"dz\": \"\\u01c6\\u01f3\",\n \"LJ\": \"\\u01c7\",\n \"Lj\": \"\\u01c8\",\n \"lj\": \"\\u01c9\",\n \"NJ\": \"\\u01ca\",\n \"Nj\": \"\\u01cb\",\n \"nj\": \"\\u01cc\",\n \"OU\": \"\\u0222\",\n \"ou\": \"\\u0223\",\n \"TZ\": \"\\ua728\",\n \"tz\": \"\\ua729\",\n \"AA\": \"\\ua732\",\n \"aa\": \"\\ua733\",\n \"AO\": \"\\ua734\",\n \"ao\": \"\\ua735\",\n \"AU\": \"\\ua736\",\n \"au\": \"\\ua737\",\n \"AV\": \"\\ua738\\ua73a\",\n \"av\": \"\\ua739\\ua73b\",\n \"AY\": \"\\ua73c\",\n \"ay\": \"\\ua73d\",\n \"OO\": \"\\ua74e\",\n \"oo\": \"\\ua74f\",\n \"VY\": \"\\ua760\",\n \"vy\": \"\\ua761\",\n \"TH\": \"\\xde\",\n \"th\": \"\\xfe\",\n \"PS\": \"\\u03a8\",\n \"ps\": \"\\u03c8\",\n \"Yo\": \"\\u0401\",\n \"Ye\": \"\\u0404\",\n \"Yi\": \"\\u0407\",\n \"Zh\": \"\\u0416\",\n \"Ch\": \"\\u0427\",\n \"Sh\": \"\\u0428\\u0429\",\n \"\": \"\\u042c\\u044c\",\n \"Yu\": \"\\u042e\",\n \"Ya\": \"\\u042f\",\n \"zh\": \"\\u0436\",\n \"ch\": \"\\u0447\",\n \"sh\": \"\\u0448\\u0449\",\n \"yu\": \"\\u044e\",\n \"ya\": \"\\u044f\",\n \"yo\": \"\\u0451\",\n \"ye\": \"\\u0454\",\n \"yi\": \"\\u0457\"\n};\n\nlet diacriticsMap = null;\n\n/**\n * Creates a map of the diacritics.\n *\n * @ignore\n * @returns {Object} Returns the diacritics map.\n */\nfunction getDiacriticsMap() {\n if (diacriticsMap !== null) {\n return diacriticsMap;\n }\n diacriticsMap = {};\n Object.keys(diacritics).forEach(function(key) {\n const characters = diacritics[key];\n for (let index = 0; index < characters.length; index++) {\n const character = characters[index];\n diacriticsMap[character] = key;\n }\n });\n return diacriticsMap;\n}\n\n/**\n * Get the latin character from character with diacritics.\n *\n * @ignore\n * @param {string} character The character with diacritics.\n * @returns {string} Returns the character without diacritics.\n */\nexport function getLatinCharacter(character) {\n const characterWithoutDiacritic = getDiacriticsMap()[character];\n return characterWithoutDiacritic ? characterWithoutDiacritic : character;\n}","import { REGEXP_COMBINING_MARKS, REGEXP_NON_LATIN } from 'helper/reg_exp/const';\nimport coerceToString from 'helper/string/coerce_to_string';\nimport { getLatinCharacter } from 'helper/string/diacritics_map';\n\n/**\n * Returns the `cleanCharacter` from combining marks regular expression match.\n *\n * @ignore\n * @param {string} character The character with combining marks\n * @param {string} cleanCharacter The character without combining marks.\n * @return {string} The character without combining marks.\n */\nfunction removeCombiningMarks(character, cleanCharacter) {\n return cleanCharacter;\n}\n\n/**\n * Latinises the `subject` by removing diacritic characters.\n *\n * @function latinise\n * @static\n * @since 1.0.0\n * @memberOf Manipulate\n * @param {string} [subject=''] The string to latinise.\n * @return {string} Returns the latinised string.\n * @example\n * v.latinise('cafe\\u0301'); // or 'café'\n * // => 'cafe'\n *\n * v.latinise('août décembre');\n * // => 'aout decembre'\n *\n * v.latinise('как прекрасен этот мир');\n * // => 'kak prekrasen etot mir'\n */\nexport default function latinise(subject) {\n const subjectString = coerceToString(subject);\n if (subjectString === '') {\n return subjectString;\n }\n return subjectString\n .replace(REGEXP_NON_LATIN, getLatinCharacter)\n .replace(REGEXP_COMBINING_MARKS, removeCombiningMarks);\n}","import buildPadding from 'helper/string/build_padding';\nimport clipNumber from 'helper/number/clip_number';\nimport coerceToString from 'helper/string/coerce_to_string';\nimport isNil from 'helper/object/is_nil';\nimport { MAX_SAFE_INTEGER } from 'helper/number/const';\nimport toInteger from 'helper/number/to_integer';\n\n/**\n * Pads `subject` to a new `length`.\n *\n * @function pad\n * @static\n * @since 1.0.0\n * @memberOf Manipulate\n * @param {string} [subject=''] The string to pad.\n * @param {int} [length=0] The length to pad the string. No changes are made if `length` is less than `subject.length`.\n * @param {string} [pad=' '] The string to be used for padding.\n * @return {string} Returns the padded string.\n * @example\n * v.pad('dog', 5);\n * // => ' dog '\n *\n * v.pad('bird', 6, '-');\n * // => '-bird-'\n *\n * v.pad('cat', 6, '-=');\n * // => '-cat-='\n */\nexport default function pad(subject, length, pad) {\n const subjectString = coerceToString(subject);\n const lengthInt = isNil(length) ? 0 : clipNumber(toInteger(length), 0, MAX_SAFE_INTEGER);\n const padString = coerceToString(pad, ' ');\n if (lengthInt <= subjectString.length) {\n return subjectString;\n }\n const paddingLength = lengthInt - subjectString.length;\n const paddingSideLength = toInteger(paddingLength / 2);\n const paddingSideRemainingLength = paddingLength % 2;\n return buildPadding(padString, paddingSideLength) + subjectString +\n buildPadding(padString, paddingSideLength + paddingSideRemainingLength);\n}","import coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Returns a new string where the matches of `pattern` are replaced with `replacement`.%
), which are copied unchanged\n * to the output string and conversion specifications, each of which results in fetching zero or more subsequent\n * arguments. %
, and ends with a conversion\n * specifier. In between there may be (in this order) zero or more flags, an optional minimum field width\n * and an optional precision.%
is followed by zero or more of the following flags:+ | \n * \n * A sign (+ or - ) should always be placed before a number produced by a\n * signed conversion. By default a sign is used only for negative numbers.\n * | \n *
0 | \n * The value should be zero padded. | \n *
␣ | \n * (a space) The value should be space padded. | \n *
' | \n * Indicates alternate padding character, specified by prefixing it with a single quote ' . | \n *
- | \n * The converted value is to be left adjusted on the field boundary (the default is right justification). | \n *
`s` | \n *The string argument is treated as and presented as a string. | \n *
`d` `i` | \n *The integer argument is converted to signed decimal notation. | \n *
`b` | \n *The unsigned integer argument is converted to unsigned binary. | \n *
`c` | \n *The unsigned integer argument is converted to an ASCII character with that number. | \n *
`o` | \n *The unsigned integer argument is converted to unsigned octal. | \n *
`u` | \n *The unsigned integer argument is converted to unsigned decimal. | \n *
`x` `X` | \n *The unsigned integer argument is converted to unsigned hexadecimal. The letters `abcdef` are used for `x`\n * conversions; the letters `ABCDEF` are used for `X` conversions. | \n *
`f` | \n *\n * The float argument is rounded and converted to decimal notation in the style `[-]ddd.ddd`, where the number of\n * digits after the decimal-point character is equal to the precision specification. If the precision is missing,\n * it is taken as 6; if the precision is explicitly zero, no decimal-point character appears.\n * If a decimal point appears, at least one digit appears before it.\n * | \n *
`e` `E` | \n *\n * The float argument is rounded and converted in the style `[-]d.ddde±dd`, where there is one digit\n * before the decimal-point character and the number of digits after it is equal to the precision. If\n * the precision is missing, it is taken as `6`; if the precision is zero, no decimal-point character\n * appears. An `E` conversion uses the letter `E` (rather than `e`) to introduce the exponent.\n * | \n *
`g` `G` | \n *\n * The float argument is converted in style `f` or `e` (or `F` or `E` for `G` conversions). The precision specifies\n * the number of significant digits. If the precision is missing, `6` digits are given; if the\n * precision is zero, it is treated as `1`. Style `e` is used if the exponent from its conversion is less\n * than `-6` or greater than or equal to the precision. Trailing zeros are removed from the fractional\n * part of the result; a decimal point appears only if it is followed by at least one digit.\n * | \n *
`%` | \n *A literal `%` is written. No argument is converted. The complete conversion specification is `%%`. | \n *
sprintf()
,\n * with the only difference that accepts the formatting arguments in an array `values`.< > & ' \" `
in subject
.\n *\n * @function escapeHtml\n * @static\n * @since 1.0.0 \n * @memberOf Escape\n * @param {string} [subject=''] The string to escape.\n * @return {string} Returns the escaped string.\n * @example\n * v.escapeHtml('wonderful world
');\n * // => '<p>wonderful world</p>'\n */\nexport default function escapeHtml(subject) {\n return coerceToString(subject).replace(REGEXP_HTML_SPECIAL_CHARACTERS, replaceSpecialCharacter);\n}","import coerceToString from 'helper/string/coerce_to_string';\nimport { REGEXP_SPECIAL_CHARACTERS } from 'helper/reg_exp/const';\n\n/**\n * Escapes the regular expression special characters `- [ ] / { } ( ) * + ? . \\ ^ $ |` in `subject`.\n *\n * @function escapeRegExp\n * @static\n * @since 1.0.0\n * @memberOf Escape\n * @param {string} [subject=''] The string to escape.\n * @return {string} Returns the escaped string.\n * @example\n * v.escapeRegExp('(hours)[minutes]{seconds}');\n * // => '\\(hours\\)\\[minutes\\]\\{seconds\\}'\n */\nexport default function escapeRegExp(subject) {\n return coerceToString(subject).replace(REGEXP_SPECIAL_CHARACTERS, '\\\\$&');\n}","import coerceToString from 'helper/string/coerce_to_string';\n\nconst unescapeCharactersMap = {\n '<': /(<)|(*3c;)|(*60;)/gi,\n '>': /(>)|(*3e;)|(*62;)/gi,\n '&': /(&)|(*26;)|(*38;)/gi,\n '\"': /(")|(*22;)|(*34;)/gi,\n \"'\": /(*27;)|(*39;)/gi,\n '`': /(*60;)|(*96;)/gi\n};\nconst characters = Object.keys(unescapeCharactersMap);\n\n/**\n * Replaces the HTML entities with corresponding characters.\n *\n * @ignore\n * @param {string} string The accumulator string.\n * @param {string} key The character.\n * @return {string} The string with replaced HTML entity\n */\nfunction reduceUnescapedString(string, key) {\n return string.replace(unescapeCharactersMap[key], key);\n}\n\n/**\n * Unescapes HTML special characters from< > & " ' `
\n * to corresponding < > & ' \" `
in subject
.\n *\n * @function unescapeHtml\n * @static\n * @since 1.0.0\n * @memberOf Escape\n * @param {string} [subject=''] The string to unescape.\n * @return {string} Returns the unescaped string.\n * @example\n * v.unescapeHtml('<p>wonderful world</p>');\n * // => 'wonderful world
'\n */\nexport default function unescapeHtml(subject) {\n const subjectString = coerceToString(subject);\n return characters.reduce(reduceUnescapedString, subjectString);\n}","import coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Returns the first occurrence index of `search` in `subject`.\n *\n * @function indexOf\n * @static\n * @since 1.0.0\n * @memberOf Index\n * @param {string} [subject=''] The string where to search.\n * @param {string} search The string to search.\n * @param {number} [fromIndex=0] The index to start searching.\n * @return {number} Returns the first occurrence index or `-1` if not found.\n * @example\n * v.indexOf('morning', 'n');\n * // => 3\n *\n * v.indexOf('evening', 'o');\n * // => -1\n */\nexport default function indexOf(subject, search, fromIndex) {\n const subjectString = coerceToString(subject);\n return subjectString.indexOf(search, fromIndex);\n}","import coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Returns the last occurrence index of `search` in `subject`.\n *\n * @function lastIndexOf\n * @static\n * @since 1.0.0\n * @memberOf Index\n * @param {string} [subject=''] The string where to search.\n * @param {string} search The string to search.\n * @param {number} [fromIndex=subject.length - 1] The index to start searching backward in the string.\n * @return {number} Returns the last occurrence index or `-1` if not found.\n * @example\n * v.lastIndexOf('morning', 'n');\n * // => 5\n *\n * v.lastIndexOf('evening', 'o');\n * // => -1\n */\nexport default function lastIndexOf(subject, search, fromIndex) {\n const subjectString = coerceToString(subject);\n return subjectString.lastIndexOf(search, fromIndex);\n}","import clipNumber from 'helper/number/clip_number';\nimport coerceToString from 'helper/string/coerce_to_string';\nimport isNil from 'helper/object/is_nil';\nimport toInteger from 'helper/number/to_integer';\n\n/**\n * Returns the first index of a `pattern` match in `subject`.\n *\n * @function search\n * @static\n * @since 1.0.0\n * @memberOf Index\n * @param {string} [subject=''] The string where to search.\n * @param {string|RegExp} pattern The pattern to match. If `pattern` is not RegExp, it is transformed to `new RegExp(pattern)`.\n * @param {number} [fromIndex=0] The index to start searching.\n * @return {number} Returns the first match index or `-1` if not found.\n * @example\n * v.search('morning', /rn/);\n * // => 2\n *\n * v.search('evening', '/\\d/');\n * // => -1\n */\nexport default function search(subject, pattern, fromIndex) {\n const subjectString = coerceToString(subject);\n const fromIndexNumber = isNil(fromIndex) ? 0 : clipNumber(toInteger(fromIndex), 0, subjectString.length);\n let matchIndex = subjectString.substr(fromIndexNumber).search(pattern);\n if (matchIndex !== -1 && !isNaN(fromIndexNumber)) {\n matchIndex += fromIndexNumber;\n }\n return matchIndex;\n}","import coerceToNumber from 'helper/number/coerce_to_number';\nimport coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Inserts into `subject` a string `toInsert` at specified `position`.\n *\n * @function insert\n * @static\n * @since 1.0.0\n * @memberOf Manipulate\n * @param {string} [subject=''] The string where to insert.\n * @param {string} [toInsert=''] The string to be inserted.\n * @param {number} [position=0] The position to insert.\n * @return {string} Returns the string after insertion.\n * @example\n * v.insert('ct', 'a', 1);\n * // => 'cat'\n *\n * v.insert('sunny', ' day', 5);\n * // => 'sunny day'\n */\nexport default function insert(subject, toInsert, position) {\n const subjectString = coerceToString(subject);\n const toInsertString = coerceToString(toInsert);\n const positionNumber = coerceToNumber(position);\n if (positionNumber < 0 || positionNumber > subjectString.length || toInsertString === '') {\n return subjectString;\n }\n return subjectString.slice(0, positionNumber) + toInsertString + subjectString.slice(positionNumber);\n}","/**\n * Generated diacritics map. See bellow the base code.\n * @ignore\n * @see http://stackoverflow.com/a/18391901/1894471\n * @type Object\n */\n\nconst diacritics = {\n \"3\": \"\\u039e\\u03be\",\n \"8\": \"\\u0398\\u03b8\",\n \"A\": \"\\x41\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\u0100\\u0102\\u0104\\u01cd\\u01de\\u01e0\\u01fa\\u0200\\u0202\\u0226\\u023a\\u1e00\\u1ea0\\u1ea2\\u1ea4\\u1ea6\\u1ea8\\u1eaa\\u1eac\\u1eae\\u1eb0\\u1eb2\\u1eb4\\u1eb6\\u24b6\\u2c6f\\uff21\\u0386\\u0391\\u0410\",\n \"B\": \"\\x42\\u0181\\u0182\\u0243\\u1e02\\u1e04\\u1e06\\u24b7\\uff22\\u0392\\u0411\",\n \"C\": \"\\x43\\xc7\\u0106\\u0108\\u010a\\u010c\\u0187\\u023b\\u1e08\\u24b8\\ua73e\\uff23\\u0426\",\n \"D\": \"\\x44\\u010e\\u0110\\u0189\\u018a\\u018b\\u1e0a\\u1e0c\\u1e0e\\u1e10\\u1e12\\u24b9\\ua779\\uff24\\xd0\\u0394\\u0414\",\n \"E\": \"\\x45\\xc8\\xc9\\xca\\xcb\\u0112\\u0114\\u0116\\u0118\\u011a\\u018e\\u0190\\u0204\\u0206\\u0228\\u1e14\\u1e16\\u1e18\\u1e1a\\u1e1c\\u1eb8\\u1eba\\u1ebc\\u1ebe\\u1ec0\\u1ec2\\u1ec4\\u1ec6\\u24ba\\uff25\\u0388\\u0395\\u0415\\u042d\",\n \"F\": \"\\x46\\u0191\\u1e1e\\u24bb\\ua77b\\uff26\\u03a6\\u0424\",\n \"G\": \"\\x47\\u011c\\u011e\\u0120\\u0122\\u0193\\u01e4\\u01e6\\u01f4\\u1e20\\u24bc\\ua77d\\ua77e\\ua7a0\\uff27\\u0393\\u0413\\u0490\",\n \"H\": \"\\x48\\u0124\\u0126\\u021e\\u1e22\\u1e24\\u1e26\\u1e28\\u1e2a\\u24bd\\u2c67\\u2c75\\ua78d\\uff28\\u0389\\u0397\\u0425\",\n \"I\": \"\\x49\\xcc\\xcd\\xce\\xcf\\u0128\\u012a\\u012c\\u012e\\u0130\\u0197\\u01cf\\u0208\\u020a\\u1e2c\\u1e2e\\u1ec8\\u1eca\\u24be\\uff29\\u038a\\u0399\\u03aa\\u0406\\u0418\",\n \"J\": \"\\x4a\\u0134\\u0248\\u24bf\\uff2a\\u0419\",\n \"K\": \"\\x4b\\u0136\\u0198\\u01e8\\u1e30\\u1e32\\u1e34\\u24c0\\u2c69\\ua740\\ua742\\ua744\\ua7a2\\uff2b\\u039a\\u041a\",\n \"L\": \"\\x4c\\u0139\\u013b\\u013d\\u013f\\u0141\\u023d\\u1e36\\u1e38\\u1e3a\\u1e3c\\u24c1\\u2c60\\u2c62\\ua746\\ua748\\ua780\\uff2c\\u039b\\u041b\",\n \"M\": \"\\x4d\\u019c\\u1e3e\\u1e40\\u1e42\\u24c2\\u2c6e\\uff2d\\u039c\\u041c\",\n \"N\": \"\\x4e\\xd1\\u0143\\u0145\\u0147\\u019d\\u01f8\\u0220\\u1e44\\u1e46\\u1e48\\u1e4a\\u24c3\\ua790\\ua7a4\\uff2e\\u039d\\u041d\",\n \"O\": \"\\x4f\\xd2\\xd3\\xd4\\xd5\\xd6\\xd8\\u014c\\u014e\\u0150\\u0186\\u019f\\u01a0\\u01d1\\u01ea\\u01ec\\u01fe\\u020c\\u020e\\u022a\\u022c\\u022e\\u0230\\u1e4c\\u1e4e\\u1e50\\u1e52\\u1ecc\\u1ece\\u1ed0\\u1ed2\\u1ed4\\u1ed6\\u1ed8\\u1eda\\u1edc\\u1ede\\u1ee0\\u1ee2\\u24c4\\ua74a\\ua74c\\uff2f\\u038c\\u039f\\u041e\",\n \"P\": \"\\x50\\u01a4\\u1e54\\u1e56\\u24c5\\u2c63\\ua750\\ua752\\ua754\\uff30\\u03a0\\u041f\",\n \"Q\": \"\\x51\\u024a\\u24c6\\ua756\\ua758\\uff31\",\n \"R\": \"\\x52\\u0154\\u0156\\u0158\\u0210\\u0212\\u024c\\u1e58\\u1e5a\\u1e5c\\u1e5e\\u24c7\\u2c64\\ua75a\\ua782\\ua7a6\\uff32\\u03a1\\u0420\",\n \"S\": \"\\x53\\u015a\\u015c\\u015e\\u0160\\u0218\\u1e60\\u1e62\\u1e64\\u1e66\\u1e68\\u1e9e\\u24c8\\u2c7e\\ua784\\ua7a8\\uff33\\u03a3\\u0421\",\n \"T\": \"\\x54\\u0162\\u0164\\u0166\\u01ac\\u01ae\\u021a\\u023e\\u1e6a\\u1e6c\\u1e6e\\u1e70\\u24c9\\ua786\\uff34\\u03a4\\u0422\",\n \"U\": \"\\x55\\xd9\\xda\\xdb\\xdc\\u0168\\u016a\\u016c\\u016e\\u0170\\u0172\\u01af\\u01d3\\u01d5\\u01d7\\u01d9\\u01db\\u0214\\u0216\\u0244\\u1e72\\u1e74\\u1e76\\u1e78\\u1e7a\\u1ee4\\u1ee6\\u1ee8\\u1eea\\u1eec\\u1eee\\u1ef0\\u24ca\\uff35\\u0423\\u042a\",\n \"V\": \"\\x56\\u01b2\\u0245\\u1e7c\\u1e7e\\u24cb\\ua75e\\uff36\\u0412\",\n \"W\": \"\\x57\\u0174\\u1e80\\u1e82\\u1e84\\u1e86\\u1e88\\u24cc\\u2c72\\uff37\\u038f\\u03a9\",\n \"X\": \"\\x58\\u1e8a\\u1e8c\\u24cd\\uff38\\u03a7\",\n \"Y\": \"\\x59\\xdd\\u0176\\u0178\\u01b3\\u0232\\u024e\\u1e8e\\u1ef2\\u1ef4\\u1ef6\\u1ef8\\u1efe\\u24ce\\uff39\\u038e\\u03a5\\u03ab\\u042b\",\n \"Z\": \"\\x5a\\u0179\\u017b\\u017d\\u01b5\\u0224\\u1e90\\u1e92\\u1e94\\u24cf\\u2c6b\\u2c7f\\ua762\\uff3a\\u0396\\u0417\",\n \"a\": \"\\x61\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\u0101\\u0103\\u0105\\u01ce\\u01df\\u01e1\\u01fb\\u0201\\u0203\\u0227\\u0250\\u1e01\\u1e9a\\u1ea1\\u1ea3\\u1ea5\\u1ea7\\u1ea9\\u1eab\\u1ead\\u1eaf\\u1eb1\\u1eb3\\u1eb5\\u1eb7\\u24d0\\u2c65\\uff41\\u03ac\\u03b1\\u0430\",\n \"b\": \"\\x62\\u0180\\u0183\\u0253\\u1e03\\u1e05\\u1e07\\u24d1\\uff42\\u03b2\\u0431\",\n \"c\": \"\\x63\\xe7\\u0107\\u0109\\u010b\\u010d\\u0188\\u023c\\u1e09\\u2184\\u24d2\\ua73f\\uff43\\u0446\",\n \"d\": \"\\x64\\u010f\\u0111\\u018c\\u0256\\u0257\\u1e0b\\u1e0d\\u1e0f\\u1e11\\u1e13\\u24d3\\ua77a\\uff44\\xf0\\u03b4\\u0434\",\n \"e\": \"\\x65\\xe8\\xe9\\xea\\xeb\\u0113\\u0115\\u0117\\u0119\\u011b\\u01dd\\u0205\\u0207\\u0229\\u0247\\u025b\\u1e15\\u1e17\\u1e19\\u1e1b\\u1e1d\\u1eb9\\u1ebb\\u1ebd\\u1ebf\\u1ec1\\u1ec3\\u1ec5\\u1ec7\\u24d4\\uff45\\u03ad\\u03b5\\u0435\\u044d\",\n \"f\": \"\\x66\\u0192\\u1e1f\\u24d5\\ua77c\\uff46\\u03c6\\u0444\",\n \"g\": \"\\x67\\u011d\\u011f\\u0121\\u0123\\u01e5\\u01e7\\u01f5\\u0260\\u1d79\\u1e21\\u24d6\\ua77f\\ua7a1\\uff47\\u03b3\\u0433\\u0491\",\n \"h\": \"\\x68\\u0125\\u0127\\u021f\\u0265\\u1e23\\u1e25\\u1e27\\u1e29\\u1e2b\\u1e96\\u24d7\\u2c68\\u2c76\\uff48\\u03ae\\u03b7\\u0445\",\n \"i\": \"\\x69\\xec\\xed\\xee\\xef\\u0129\\u012b\\u012d\\u012f\\u0131\\u01d0\\u0209\\u020b\\u0268\\u1e2d\\u1e2f\\u1ec9\\u1ecb\\u24d8\\uff49\\u0390\\u03af\\u03b9\\u03ca\\u0438\\u0456\",\n \"j\": \"\\x6a\\u0135\\u01f0\\u0249\\u24d9\\uff4a\\u0439\",\n \"k\": \"\\x6b\\u0137\\u0199\\u01e9\\u1e31\\u1e33\\u1e35\\u24da\\u2c6a\\ua741\\ua743\\ua745\\ua7a3\\uff4b\\u03ba\\u043a\",\n \"l\": \"\\x6c\\u013a\\u013c\\u013e\\u0140\\u0142\\u017f\\u019a\\u026b\\u1e37\\u1e39\\u1e3b\\u1e3d\\u24db\\u2c61\\ua747\\ua749\\ua781\\uff4c\\u03bb\\u043b\",\n \"m\": \"\\x6d\\u026f\\u0271\\u1e3f\\u1e41\\u1e43\\u24dc\\uff4d\\u03bc\\u043c\",\n \"n\": \"\\x6e\\xf1\\u0144\\u0146\\u0148\\u0149\\u019e\\u01f9\\u0272\\u1e45\\u1e47\\u1e49\\u1e4b\\u24dd\\ua791\\ua7a5\\uff4e\\u03bd\\u043d\",\n \"o\": \"\\x6f\\xf2\\xf3\\xf4\\xf5\\xf6\\xf8\\u014d\\u014f\\u0151\\u01a1\\u01d2\\u01eb\\u01ed\\u01ff\\u020d\\u020f\\u022b\\u022d\\u022f\\u0231\\u0254\\u0275\\u1e4d\\u1e4f\\u1e51\\u1e53\\u1ecd\\u1ecf\\u1ed1\\u1ed3\\u1ed5\\u1ed7\\u1ed9\\u1edb\\u1edd\\u1edf\\u1ee1\\u1ee3\\u24de\\ua74b\\ua74d\\uff4f\\u03bf\\u03cc\\u043e\",\n \"p\": \"\\x70\\u01a5\\u1d7d\\u1e55\\u1e57\\u24df\\ua751\\ua753\\ua755\\uff50\\u03c0\\u043f\",\n \"q\": \"\\x71\\u024b\\u24e0\\ua757\\ua759\\uff51\",\n \"r\": \"\\x72\\u0155\\u0157\\u0159\\u0211\\u0213\\u024d\\u027d\\u1e59\\u1e5b\\u1e5d\\u1e5f\\u24e1\\ua75b\\ua783\\ua7a7\\uff52\\u03c1\\u0440\",\n \"s\": \"\\x73\\xdf\\u015b\\u015d\\u015f\\u0161\\u0219\\u023f\\u1e61\\u1e63\\u1e65\\u1e67\\u1e69\\u1e9b\\u24e2\\ua785\\ua7a9\\uff53\\u03c2\\u03c3\\u0441\",\n \"t\": \"\\x74\\u0163\\u0165\\u0167\\u01ad\\u021b\\u0288\\u1e6b\\u1e6d\\u1e6f\\u1e71\\u1e97\\u24e3\\u2c66\\ua787\\uff54\\u03c4\\u0442\",\n \"u\": \"\\x75\\xf9\\xfa\\xfb\\xfc\\u0169\\u016b\\u016d\\u016f\\u0171\\u0173\\u01b0\\u01d4\\u01d6\\u01d8\\u01da\\u01dc\\u0215\\u0217\\u0289\\u1e73\\u1e75\\u1e77\\u1e79\\u1e7b\\u1ee5\\u1ee7\\u1ee9\\u1eeb\\u1eed\\u1eef\\u1ef1\\u24e4\\uff55\\u0443\\u044a\",\n \"v\": \"\\x76\\u028b\\u028c\\u1e7d\\u1e7f\\u24e5\\ua75f\\uff56\\u0432\",\n \"w\": \"\\x77\\u0175\\u1e81\\u1e83\\u1e85\\u1e87\\u1e89\\u1e98\\u24e6\\u2c73\\uff57\\u03c9\\u03ce\",\n \"x\": \"\\x78\\u1e8b\\u1e8d\\u24e7\\uff58\\u03c7\",\n \"y\": \"\\x79\\xfd\\xff\\u0177\\u01b4\\u0233\\u024f\\u1e8f\\u1e99\\u1ef3\\u1ef5\\u1ef7\\u1ef9\\u1eff\\u24e8\\uff59\\u03b0\\u03c5\\u03cb\\u03cd\\u044b\",\n \"z\": \"\\x7a\\u017a\\u017c\\u017e\\u01b6\\u0225\\u0240\\u1e91\\u1e93\\u1e95\\u24e9\\u2c6c\\ua763\\uff5a\\u03b6\\u0437\",\n \"OE\": \"\\x8c\\u0152\",\n \"oe\": \"\\x9c\\u0153\",\n \"AE\": \"\\xc6\\u01e2\\u01fc\",\n \"ae\": \"\\xe6\\u01e3\\u01fd\",\n \"hv\": \"\\u0195\",\n \"OI\": \"\\u01a2\",\n \"oi\": \"\\u01a3\",\n \"DZ\": \"\\u01c4\\u01f1\",\n \"Dz\": \"\\u01c5\\u01f2\",\n \"dz\": \"\\u01c6\\u01f3\",\n \"LJ\": \"\\u01c7\",\n \"Lj\": \"\\u01c8\",\n \"lj\": \"\\u01c9\",\n \"NJ\": \"\\u01ca\",\n \"Nj\": \"\\u01cb\",\n \"nj\": \"\\u01cc\",\n \"OU\": \"\\u0222\",\n \"ou\": \"\\u0223\",\n \"TZ\": \"\\ua728\",\n \"tz\": \"\\ua729\",\n \"AA\": \"\\ua732\",\n \"aa\": \"\\ua733\",\n \"AO\": \"\\ua734\",\n \"ao\": \"\\ua735\",\n \"AU\": \"\\ua736\",\n \"au\": \"\\ua737\",\n \"AV\": \"\\ua738\\ua73a\",\n \"av\": \"\\ua739\\ua73b\",\n \"AY\": \"\\ua73c\",\n \"ay\": \"\\ua73d\",\n \"OO\": \"\\ua74e\",\n \"oo\": \"\\ua74f\",\n \"VY\": \"\\ua760\",\n \"vy\": \"\\ua761\",\n \"TH\": \"\\xde\",\n \"th\": \"\\xfe\",\n \"PS\": \"\\u03a8\",\n \"ps\": \"\\u03c8\",\n \"Yo\": \"\\u0401\",\n \"Ye\": \"\\u0404\",\n \"Yi\": \"\\u0407\",\n \"Zh\": \"\\u0416\",\n \"Ch\": \"\\u0427\",\n \"Sh\": \"\\u0428\\u0429\",\n \"\": \"\\u042c\\u044c\",\n \"Yu\": \"\\u042e\",\n \"Ya\": \"\\u042f\",\n \"zh\": \"\\u0436\",\n \"ch\": \"\\u0447\",\n \"sh\": \"\\u0448\\u0449\",\n \"yu\": \"\\u044e\",\n \"ya\": \"\\u044f\",\n \"yo\": \"\\u0451\",\n \"ye\": \"\\u0454\",\n \"yi\": \"\\u0457\"\n};\n\nlet diacriticsMap = null;\n\n/**\n * Creates a map of the diacritics.\n *\n * @ignore\n * @returns {Object} Returns the diacritics map.\n */\nfunction getDiacriticsMap() {\n if (diacriticsMap !== null) {\n return diacriticsMap;\n }\n diacriticsMap = {};\n Object.keys(diacritics).forEach(function(key) {\n const characters = diacritics[key];\n for (let index = 0; index < characters.length; index++) {\n const character = characters[index];\n diacriticsMap[character] = key;\n }\n });\n return diacriticsMap;\n}\n\n/**\n * Get the latin character from character with diacritics.\n *\n * @ignore\n * @param {string} character The character with diacritics.\n * @returns {string} Returns the character without diacritics.\n */\nexport function getLatinCharacter(character) {\n const characterWithoutDiacritic = getDiacriticsMap()[character];\n return characterWithoutDiacritic ? characterWithoutDiacritic : character;\n}","import { REGEXP_COMBINING_MARKS, REGEXP_NON_LATIN } from 'helper/reg_exp/const';\nimport coerceToString from 'helper/string/coerce_to_string';\nimport { getLatinCharacter } from 'helper/string/diacritics_map';\n\n/**\n * Returns the `cleanCharacter` from combining marks regular expression match.\n *\n * @ignore\n * @param {string} character The character with combining marks\n * @param {string} cleanCharacter The character without combining marks.\n * @return {string} The character without combining marks.\n */\nfunction removeCombiningMarks(character, cleanCharacter) {\n return cleanCharacter;\n}\n\n/**\n * Latinises the `subject` by removing diacritic characters.\n *\n * @function latinise\n * @static\n * @since 1.0.0\n * @memberOf Manipulate\n * @param {string} [subject=''] The string to latinise.\n * @return {string} Returns the latinised string.\n * @example\n * v.latinise('cafe\\u0301'); // or 'café'\n * // => 'cafe'\n *\n * v.latinise('août décembre');\n * // => 'aout decembre'\n *\n * v.latinise('как прекрасен этот мир');\n * // => 'kak prekrasen etot mir'\n */\nexport default function latinise(subject) {\n const subjectString = coerceToString(subject);\n if (subjectString === '') {\n return '';\n }\n return subjectString\n .replace(REGEXP_NON_LATIN, getLatinCharacter)\n .replace(REGEXP_COMBINING_MARKS, removeCombiningMarks);\n}","import buildPadding from 'helper/string/build_padding';\nimport clipNumber from 'helper/number/clip_number';\nimport coerceToString from 'helper/string/coerce_to_string';\nimport isNil from 'helper/object/is_nil';\nimport { MAX_SAFE_INTEGER } from 'helper/number/const';\nimport toInteger from 'helper/number/to_integer';\n\n/**\n * Pads `subject` to a new `length`.\n *\n * @function pad\n * @static\n * @since 1.0.0\n * @memberOf Manipulate\n * @param {string} [subject=''] The string to pad.\n * @param {int} [length=0] The length to pad the string. No changes are made if `length` is less than `subject.length`.\n * @param {string} [pad=' '] The string to be used for padding.\n * @return {string} Returns the padded string.\n * @example\n * v.pad('dog', 5);\n * // => ' dog '\n *\n * v.pad('bird', 6, '-');\n * // => '-bird-'\n *\n * v.pad('cat', 6, '-=');\n * // => '-cat-='\n */\nexport default function pad(subject, length, pad) {\n const subjectString = coerceToString(subject);\n const lengthInt = isNil(length) ? 0 : clipNumber(toInteger(length), 0, MAX_SAFE_INTEGER);\n const padString = coerceToString(pad, ' ');\n if (lengthInt <= subjectString.length) {\n return subjectString;\n }\n const paddingLength = lengthInt - subjectString.length;\n const paddingSideLength = toInteger(paddingLength / 2);\n const paddingSideRemainingLength = paddingLength % 2;\n return buildPadding(padString, paddingSideLength) + subjectString +\n buildPadding(padString, paddingSideLength + paddingSideRemainingLength);\n}","import coerceToString from 'helper/string/coerce_to_string';\n\n/**\n * Returns a new string where the matches of `pattern` are replaced with `replacement`.