Version 1
[yaffs-website] / node_modules / grunt-legacy-util / node_modules / lodash / _createCaseFirst.js
diff --git a/node_modules/grunt-legacy-util/node_modules/lodash/_createCaseFirst.js b/node_modules/grunt-legacy-util/node_modules/lodash/_createCaseFirst.js
new file mode 100644 (file)
index 0000000..5718f6f
--- /dev/null
@@ -0,0 +1,35 @@
+var stringToArray = require('./_stringToArray'),
+    toString = require('./toString');
+
+/** Used to compose unicode character classes. */
+var rsAstralRange = '\\ud800-\\udfff',
+    rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
+    rsComboSymbolsRange = '\\u20d0-\\u20f0',
+    rsVarRange = '\\ufe0e\\ufe0f';
+
+/** Used to compose unicode capture groups. */
+var rsZWJ = '\\u200d';
+
+/** 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/). */
+var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
+
+/**
+ * Creates a function like `_.lowerFirst`.
+ *
+ * @private
+ * @param {string} methodName The name of the `String` case method to use.
+ * @returns {Function} Returns the new function.
+ */
+function createCaseFirst(methodName) {
+  return function(string) {
+    string = toString(string);
+
+    var strSymbols = reHasComplexSymbol.test(string) ? stringToArray(string) : undefined,
+        chr = strSymbols ? strSymbols[0] : string.charAt(0),
+        trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1);
+
+    return chr[methodName]() + trailing;
+  };
+}
+
+module.exports = createCaseFirst;