Skip to content
This repository was archived by the owner on Apr 14, 2021. It is now read-only.

Commit ff2fa2f

Browse files
committed
support {plusSign}, {minusSign}, {percentSign}
1 parent 47a1b92 commit ff2fa2f

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

src/core.js

+6
Original file line numberDiff line numberDiff line change
@@ -1493,6 +1493,12 @@ function FormatNumberToParts (numberFormat, x) {
14931493
arrPush.call(result, { type: 'fraction', value: fraction });
14941494
}
14951495

1496+
} else if (p === '{plusSign}') {
1497+
arrPush.call(result, { type: 'plusSign', value: ild.plusSign });
1498+
} else if (p === '{minusSign}') {
1499+
arrPush.call(result, { type: 'minusSign', value: ild.minusSign });
1500+
} else if (p === '{percent}' && internal['[[style]]'] === 'percent') {
1501+
arrPush.call(result, { type: 'percentSign', value: ild.percentSign });
14961502
} else if (p === '{currency}' && internal['[[style]]'] === 'currency') {
14971503
var cd,
14981504
// a. Let currency be the value of the [[currency]] internal property of

tasks/utils/reduce.js

+23-10
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
/* jshint node:true */
22

3+
function replaceSpecialChars (ptn) {
4+
// Matches CLDR number patterns, e.g. #,##0.00, #,##,##0.00, #,##0.##, etc.
5+
var numPtn = /#(?:[\.,]#+)*0(?:[,\.][0#]+)*/;
6+
7+
return ptn
8+
.replace(numPtn, '{number}')
9+
.replace('+', '{plusSign}')
10+
.replace('-', '{minusSign}')
11+
.replace('%', '{percentSign}')
12+
.replace('¤', '{currency}');
13+
}
14+
315
/**
416
* Parses a CLDR number formatting string into the object specified in ECMA-402
517
* Returns an object with positivePattern and negativePattern properties
618
*/
719
function createNumberFormats (ptn) {
820
var patterns = ptn.split(';'),
921

10-
// Matches CLDR number patterns, e.g. #,##0.00, #,##,##0.00, #,##0.##, etc.
11-
numPtn = /#(?:[\.,]#+)*0(?:[,\.][0#]+)*/,
1222
ret = {
13-
positivePattern: patterns[0].replace(numPtn, '{number}').replace('¤', '{currency}')
23+
positivePattern: replaceSpecialChars(patterns[0])
1424
};
1525

1626
// Negative patterns aren't always specified, in those cases use '-' + positivePattern
17-
ret.negativePattern = patterns[1] ? patterns[1].replace(numPtn, '{number}').replace('¤', '{currency}')
18-
: '-' + ret.positivePattern;
27+
ret.negativePattern = patterns[1] ?
28+
replaceSpecialChars(patterns[1]) :
29+
'{minusSign}' + ret.positivePattern;
1930

2031
return ret;
2132
}
@@ -108,11 +119,13 @@ module.exports = function (locale, data) {
108119

109120
// Currently, Intl 402 only uses these symbols for numbers
110121
ret.number.symbols[key.split('-').pop()] = {
111-
decimal: sym.decimal,
112-
group: sym.group,
113-
nan: sym.nan,
114-
percent: sym.percentSign,
115-
infinity:sym.infinity
122+
decimal: sym.decimal,
123+
group: sym.group,
124+
nan: sym.nan,
125+
plusSign: sym.plusSign,
126+
minusSign: sym.minusSign,
127+
percentSign: sym.percentSign,
128+
infinity: sym.infinity
116129
};
117130
});
118131

0 commit comments

Comments
 (0)