mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-31 23:37:49 +00:00
Add support for unicode modifiers.
This commit is contained in:
11
lodash.js
11
lodash.js
@@ -148,28 +148,31 @@
|
||||
rsDigits = '\\d+',
|
||||
rsDingbat = '[\\u2700-\\u27bf]',
|
||||
rsLowers = '[a-z\\xdf-\\xf6\\xf8-\\xff]+',
|
||||
rsModifier = '(?:\\ud83c[\\udffb-\\udfff])',
|
||||
rsNonAstral = '[^' + rsAstralRange + ']',
|
||||
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
|
||||
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
|
||||
rsSymbol = '(?:' + [rsNonAstral, rsRegional, rsSurrPair, rsAstral].join('|') + ')',
|
||||
rsUpper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
|
||||
rsVS = '\\ufe0e\\ufe0f',
|
||||
rsZWJ = '\\u200d',
|
||||
reOptMod = rsModifier + '?',
|
||||
rsOptVS = '[' + rsVS + ']?',
|
||||
rsJoiner = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVS + ')*',
|
||||
rsSymbol = '(?:' + [rsNonAstral, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
|
||||
rsJoiner = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVS + reOptMod + ')*',
|
||||
rsSeq = rsOptVS + reOptMod + rsJoiner;
|
||||
|
||||
/** Used to match [zero-width joiners and code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
|
||||
var reAdvSymbol = RegExp('[' + rsZWJ + rsVS + rsAstralRange + ']');
|
||||
|
||||
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
|
||||
var reStrSymbol = RegExp(rsSymbol + rsOptVS + rsJoiner, 'g');
|
||||
var reStrSymbol = RegExp(rsSymbol + rsSeq, 'g');
|
||||
|
||||
/** Used to match words to create compound words. */
|
||||
var reWord = RegExp([
|
||||
rsUpper + '+(?=' + rsUpper + rsLowers + ')',
|
||||
rsUpper + '?' + rsLowers,
|
||||
rsUpper + '+',
|
||||
'(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsOptVS + rsJoiner,
|
||||
'(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
|
||||
rsDigits
|
||||
].join('|'), 'g');
|
||||
|
||||
|
||||
52
test/test.js
52
test/test.js
@@ -18888,12 +18888,16 @@
|
||||
QUnit.module('astral symbols');
|
||||
|
||||
(function() {
|
||||
var flag = '\ud83c\uddfa\ud83c\uddf8',
|
||||
var emojiVar = '\ufe0f',
|
||||
flag = '\ud83c\uddfa\ud83c\uddf8',
|
||||
heart = '\u2764' + emojiVar,
|
||||
hearts = '\ud83d\udc95',
|
||||
leafs = '\ud83c\udf42',
|
||||
raisedHand = '\u270B' + emojiVar,
|
||||
rocket = '\ud83d\ude80',
|
||||
varHeart = '\u2764\ufe0f',
|
||||
comboGlyph = '\ud83d\udc68\u200d' + varHeart + '\u200d\ud83d\udc8B\u200d\ud83d\udc68';
|
||||
thumbsUp = '\ud83d\udc4d',
|
||||
comboGlyph = '\ud83d\udc68\u200d' + heart + '\u200d\ud83d\udc8B\u200d\ud83d\udc68',
|
||||
modifiers = ['\ud83c\udffb', '\ud83c\udffc', '\ud83c\udffd', '\ud83c\udffe', '\ud83c\udfff'];
|
||||
|
||||
QUnit.test('should account for astral symbols', function(assert) {
|
||||
assert.expect(25);
|
||||
@@ -18972,9 +18976,45 @@
|
||||
QUnit.test('should account for variation selectors', function(assert) {
|
||||
assert.expect(3);
|
||||
|
||||
assert.strictEqual(_.size(varHeart), 1);
|
||||
assert.deepEqual(_.toArray(varHeart), [varHeart]);
|
||||
assert.deepEqual(_.words(varHeart), [varHeart]);
|
||||
assert.strictEqual(_.size(heart), 1);
|
||||
assert.deepEqual(_.toArray(heart), [heart]);
|
||||
assert.deepEqual(_.words(heart), [heart]);
|
||||
});
|
||||
|
||||
QUnit.test('should account for modifiers', function(assert) {
|
||||
assert.expect(1);
|
||||
|
||||
var values = _.map(modifiers, function(modifier) {
|
||||
return thumbsUp + modifier;
|
||||
});
|
||||
|
||||
var expected = _.map(values, function(value) {
|
||||
return [1, [value], [value]];
|
||||
});
|
||||
|
||||
var actual = _.map(values, function(value) {
|
||||
return [_.size(value), _.toArray(value), _.words(value)];
|
||||
});
|
||||
|
||||
assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
QUnit.test('should account for variation selectors with modifiers', function(assert) {
|
||||
assert.expect(1);
|
||||
|
||||
var values = _.map(modifiers, function(modifier) {
|
||||
return raisedHand + modifier;
|
||||
});
|
||||
|
||||
var expected = _.map(values, function(value) {
|
||||
return [1, [value], [value]];
|
||||
});
|
||||
|
||||
var actual = _.map(values, function(value) {
|
||||
return [_.size(value), _.toArray(value), _.words(value)];
|
||||
});
|
||||
|
||||
assert.deepEqual(actual, expected);
|
||||
});
|
||||
}());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user