cldrpluralruleparser
Advanced tools
Comparing version 1.1.3 to 1.2.0
@@ -5,3 +5,3 @@ { | ||
"description": "Node module to find out the plural form for a given number in a language by parsing CLDR plural form rules.", | ||
"version": "1.1.3", | ||
"version": "1.2.0", | ||
"repository": { | ||
@@ -13,10 +13,8 @@ "url": "https://github.com/santhoshtr/CLDRPluralRuleParser" | ||
}, | ||
"main": "./src/./src/cli.js", | ||
"licenses": [ | ||
{ | ||
"type": "MIT", | ||
"url": "http://opensource.org/licenses/MIT" | ||
} | ||
], | ||
"main": "./src/cli.js", | ||
"license": "MIT", | ||
"dependencies": {}, | ||
"peerDependencies": { | ||
"cldr-data": ">=31" | ||
}, | ||
"devDependencies": {}, | ||
@@ -23,0 +21,0 @@ "optionalDependencies": {}, |
@@ -9,3 +9,2 @@ /** | ||
* | ||
* @version 0.1.0 | ||
* @source https://github.com/santhoshtr/CLDRPluralRuleParser | ||
@@ -328,3 +327,3 @@ * @author Santhosh Thottingal <santhosh.thottingal@gmail.com> | ||
return parseInt(result[0], 10) % parseInt(result[4], 10); | ||
return parseFloat(result[0]) % parseInt(result[4], 10); | ||
} | ||
@@ -469,3 +468,3 @@ | ||
for (i = 0; i < range_list.length; i++) { | ||
if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) { | ||
if (parseInt(range_list[i], 10) === parseFloat(result[0])) { | ||
return (result[1][0] !== 'not'); | ||
@@ -472,0 +471,0 @@ } |
@@ -14,3 +14,4 @@ /* global pluralRuleParser, QUnit, jQuery */ | ||
'n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000': { | ||
pass: [2, 2.0, 2.00, 2.000, 2.0000] | ||
pass: [2, 2.0, 2.00, 2.000, 2.0000], | ||
fail: [2.1] | ||
}, | ||
@@ -40,3 +41,3 @@ 'n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …': { | ||
pass: [1], | ||
fail: [1.3] | ||
fail: [1.3, '1.0'] | ||
}, | ||
@@ -69,5 +70,9 @@ 'v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …': { | ||
fail: [.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1] | ||
}, | ||
'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …': { | ||
pass: [0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0], | ||
fail: [0.1, 0.2, 1.0, 1.1, 1.2, 1.9, 10.2, 100.2, 1000.2] | ||
} | ||
}, function(rule, expected) { | ||
QUnit.test(rule, function(assert) { | ||
}, function (rule, expected) { | ||
QUnit.test(rule, function (assert) { | ||
// Turn into arrays | ||
@@ -79,3 +84,3 @@ var pass = expected.pass ? | ||
jQuery.each(pass, function(i, number) { | ||
jQuery.each(pass, function (i, number) { | ||
assert.strictEqual( | ||
@@ -87,6 +92,6 @@ pluralRuleParser(rule, number), | ||
}); | ||
jQuery.each(fail, function(i, number) { | ||
jQuery.each(fail, function (i, number) { | ||
assert.strictEqual( | ||
// pluralRuleParser returns null or false. Cast to boolean with !!. | ||
!! pluralRuleParser(rule, number), | ||
!!pluralRuleParser(rule, number), | ||
false, | ||
@@ -99,19 +104,23 @@ ' n=' + number + ' should fail' | ||
function eachRule(plurals, callback) { | ||
var locale, rules, count; | ||
for (locale in plurals) { | ||
rules = plurals[locale]; | ||
for (count in rules) { | ||
callback(rules[count]); | ||
} | ||
} | ||
} | ||
// Make sure we can parse all plural rules with out errors | ||
$.ajax({ | ||
type: 'GET', | ||
url: '../data/plurals.xml', | ||
dataType: 'xml' | ||
}).done(function(xml) { | ||
QUnit.test('Parsing test', function(assert) { | ||
var pluralRules, localeStr, locales, plurals, number, | ||
j, rule, integerSamples, decimalSamples; | ||
plurals = xml.getElementsByTagName('pluralRule'); | ||
for (var i = 0; i < plurals.length; i++) { | ||
jQuery.getJSON('../data/plurals.json').done(function (cldr) { | ||
QUnit.test('Parsing test', function (assert) { | ||
var plurals, number, j, integerSamples, decimalSamples; | ||
plurals = cldr.supplemental['plurals-type-cardinal']; | ||
eachRule(plurals, function(rule) { | ||
integerSamples = decimalSamples = []; | ||
rule = plurals[i].textContent; | ||
// Try whether we can parse the rule | ||
assert.notEqual(pluralRuleParser(rule, i), null, rule); | ||
assert.notEqual(pluralRuleParser(rule, 1), null, rule); | ||
// Get sample numbers from the rule. | ||
if (rule.split('@')[1].indexOf('integer') == 0) { | ||
if (rule.split('@')[1].indexOf('integer') === 0) { | ||
integerSamples = rule.split('@')[1].replace('integer', '').split(','); | ||
@@ -123,19 +132,27 @@ } | ||
// Test all integers | ||
for (var k = 0; k < integerSamples.length; k++) { | ||
number = integerSamples[k].trim(); | ||
if (!number) continue; | ||
for (j = 0; j < integerSamples.length; j++) { | ||
number = integerSamples[j].trim(); | ||
if (!number) { | ||
continue; | ||
} | ||
number = parseInt(number.split('~')[0]); | ||
if (!number || number === NaN) continue; | ||
if (!number || isNaN(number)) { | ||
continue; | ||
} | ||
assert.equal(pluralRuleParser(rule, number), true, '[' + number + ']' + rule); | ||
} | ||
// Test all decimals | ||
for (var k = 0; k < integerSamples.length; k++) { | ||
number = integerSamples[k].trim(); | ||
if (!number) continue; | ||
for (j = 0; j < integerSamples.length; j++) { | ||
number = integerSamples[j].trim(); | ||
if (!number) { | ||
continue; | ||
} | ||
number = parseFloat(number.split('~')[0]); | ||
if (!number || number === NaN) continue; | ||
if (!number || isNaN(number)) { | ||
continue; | ||
} | ||
assert.equal(pluralRuleParser(rule, number), true, '[' + number + ']' + rule); | ||
} | ||
} | ||
}); | ||
}); | ||
}); | ||
}); |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
534566
10045
1
19