0e5a025262db2f9cdd897b1eb27c8bac2dd26886
[yaffs-website] / node_modules / uncss / node_modules / lodash / internal / createPadding.js
1 var repeat = require('../repeat'),
2     stringSize = require('./stringSize'),
3     stringToArray = require('./stringToArray'),
4     toInteger = require('../toInteger');
5
6 /** Used to compose unicode character classes. */
7 var rsAstralRange = '\\ud800-\\udfff',
8     rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
9     rsComboSymbolsRange = '\\u20d0-\\u20f0',
10     rsVarRange = '\\ufe0e\\ufe0f';
11
12 /** Used to compose unicode capture groups. */
13 var rsZWJ = '\\u200d';
14
15 /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
16 var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
17
18 /* Built-in method references for those with the same name as other `lodash` methods. */
19 var nativeCeil = Math.ceil;
20
21 /**
22  * Creates the padding for `string` based on `length`. The `chars` string
23  * is truncated if the number of characters exceeds `length`.
24  *
25  * @private
26  * @param {string} string The string to create padding for.
27  * @param {number} [length=0] The padding length.
28  * @param {string} [chars=' '] The string used as padding.
29  * @returns {string} Returns the padding for `string`.
30  */
31 function createPadding(string, length, chars) {
32   length = toInteger(length);
33
34   var strLength = stringSize(string);
35   if (!length || strLength >= length) {
36     return '';
37   }
38   var padLength = length - strLength;
39   chars = chars === undefined ? ' ' : (chars + '');
40
41   var result = repeat(chars, nativeCeil(padLength / stringSize(chars)));
42   return reHasComplexSymbol.test(chars)
43     ? stringToArray(result).slice(0, padLength).join('')
44     : result.slice(0, padLength);
45 }
46
47 module.exports = createPadding;