diff --git a/src/lib/definitions.js b/src/lib/definitions.js index 3250a4da..ed798a09 100644 --- a/src/lib/definitions.js +++ b/src/lib/definitions.js @@ -386,6 +386,9 @@ function getFHPaddingEntries(index) var LOCALE_INFINITY = Feature.LOCALE_INFINITY; var LOCALE_NUMERALS = Feature.LOCALE_NUMERALS; var LOCALE_NUMERALS_EXT = Feature.LOCALE_NUMERALS_EXT; + var LOCALE_NUMERALS_IE11_WIN7 = Feature.LOCALE_NUMERALS_IE11_WIN7; + var LOCALE_NUMERALS_IE11_WIN7_8 = Feature.LOCALE_NUMERALS_IE11_WIN7_8; + var LOCALE_NUMERALS_IE11_WIN8 = Feature.LOCALE_NUMERALS_IE11_WIN8; var LOCATION = Feature.LOCATION; var MOZILLA = Feature.MOZILLA; var NAME = Feature.NAME; @@ -522,10 +525,22 @@ function getFHPaddingEntries(index) var expr = '(' + number + ')[TO_LOCALE_STRING](' + locale + ')'; if (index != null) { - if (index > 4) + if (index > 4 && index < 10) { - var paddingBlock = R_PADDINGS[10 - index]; - expr = '(' + paddingBlock + ' + ' + expr + ')[10]'; + var padding; + var shiftedIndex; + if (index === 8) + { + padding = 3; + shiftedIndex = 11; + } + else + { + padding = 10 - index; + shiftedIndex = 10; + } + var paddingBlock = R_PADDINGS[padding]; + expr = '(' + paddingBlock + ' + ' + expr + ')[' + shiftedIndex + ']'; } else expr += '[' + index + ']'; @@ -1321,6 +1336,8 @@ function getFHPaddingEntries(index) '∞': [ define('Infinity[TO_LOCALE_STRING]()', LOCALE_INFINITY), + define('Infinity[TO_LOCALE_STRING]("ja")[1]', LOCALE_NUMERALS_IE11_WIN7_8), + define('Infinity[TO_LOCALE_STRING]("ru")', LOCALE_NUMERALS_IE11_WIN8), define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")', JAPANESE_INFINITY), define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', JAPANESE_INFINITY, AT), defineCharDefault(), @@ -2640,15 +2657,43 @@ function getFHPaddingEntries(index) useLocaleNumeralDefinition('ي', '"ar"', NaN, 1); useLocaleNumeralDefinition('س', '"ar"', NaN, 2); useLocaleNumeralDefinition('ر', '"ar"', NaN, 4, LOCALE_NUMERALS_EXT); + useLocaleNumeralDefinition('ب', '"ar"', NaN, 4, LOCALE_NUMERALS_IE11_WIN7_8); useLocaleNumeralDefinition('ق', '"ar"', NaN, 5, LOCALE_NUMERALS_EXT); + useLocaleNumeralDefinition('ر', '"ar"', NaN, 5, LOCALE_NUMERALS_IE11_WIN7_8); useLocaleNumeralDefinition('م', '"ar"', NaN, 6, LOCALE_NUMERALS_EXT); + useLocaleNumeralDefinition('ق', '"ar"', NaN, 6, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('م', '"ar"', NaN, 7, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ا', '"ar"', Infinity, 2, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ن', '"ar"', Infinity, 4, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ه', '"ar"', Infinity, 5, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ة', '"ar"', Infinity, 8, LOCALE_NUMERALS_IE11_WIN7_8); useLocaleNumeralDigitDefinitions('"bn"', 0x09e6, LOCALE_NUMERALS_EXT); + useLocaleNumeralDefinition('č', '"cs"', NaN, 5, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('μ', '"el"', NaN, 0, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('η', '"el"', NaN, 1, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('α', '"el"', NaN, 3, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ρ', '"el"', NaN, 4, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ι', '"el"', NaN, 5, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('θ', '"el"', NaN, 6, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ό', '"el"', NaN, 8, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ς', '"el"', NaN, 9, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('Ά', '"el"', Infinity, 0, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('π', '"el"', Infinity, 1, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ε', '"el"', Infinity, 2, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ο', '"el"', Infinity, 5, LOCALE_NUMERALS_IE11_WIN7_8); useLocaleNumeralDigitDefinitions('"fa"', 0x06f0); useLocaleNumeralDefinition('٬', '"fa"', 1000, 1); useLocaleNumeralDefinition('ن', '"fa"', NaN, 0, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('ا', '"fa"', NaN, 1, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('ع', '"fa"', NaN, 2, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('د', '"fa"', NaN, 3, LOCALE_NUMERALS_EXT); + useLocaleNumeralDefinition('ל', '"he"', NaN, 0, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('非', '"ja"', NaN, 5, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('数', '"ja"', NaN, 6, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('値', '"ja"', NaN, 7, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ė', '"lt"', Infinity, 7, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('ī', '"lv"', Infinity, 6, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('ś', '"pl"', Infinity, 13, LOCALE_NUMERALS_IE11_WIN7_8); useLocaleNumeralDefinition('н', '"ru"', NaN, 0, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('е', '"ru"', NaN, 1, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('ч', '"ru"', NaN, 3, LOCALE_NUMERALS_EXT); @@ -2656,5 +2701,16 @@ function getFHPaddingEntries(index) useLocaleNumeralDefinition('с', '"ru"', NaN, 5, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('л', '"ru"', NaN, 6, LOCALE_NUMERALS_EXT); useLocaleNumeralDefinition('о', '"ru"', NaN, 7, LOCALE_NUMERALS_EXT); + useLocaleNumeralDefinition('б', '"ru"', Infinity, 0, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('е', '"ru"', Infinity, 1, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('с', '"ru"', Infinity, 2, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('к', '"ru"', Infinity, 3, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('н', '"ru"', Infinity, 5, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('ч', '"ru"', Infinity, 7, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('о', '"ru"', Infinity, 9, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('т', '"ru"', Infinity, 11, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('ь', '"ru"', Infinity, 12, LOCALE_NUMERALS_IE11_WIN7); + useLocaleNumeralDefinition('正', '"zh"', Infinity, 0, LOCALE_NUMERALS_IE11_WIN7_8); + useLocaleNumeralDefinition('字', '"zh-cn"', NaN, 2, LOCALE_NUMERALS_IE11_WIN7_8); } )(); diff --git a/src/lib/features.js b/src/lib/features.js index 9025835c..c74379b2 100644 --- a/src/lib/features.js +++ b/src/lib/features.js @@ -581,6 +581,77 @@ var featureInfos = }, includes: ['LOCALE_NUMERALS'], }, + LOCALE_NUMERALS_IE11_WIN7: + { + description: + 'Localized number formatting exclusive to Interner Explorer 11 in Windows 7.\n' + + 'This includes the letters in the Latvian string representation of Infinity ' + + '("bezgalība") and the letters in the Russian string representation of Infinity ' + + '("бесконечность").', + check: + function () + { + var available = + checkLocaleNumeral('lv', Infinity, /^bezgalība/) && + checkLocaleNumeral('ru', Infinity, /^бесконечность/); + return available; + }, + includes: ['LOCALE_NUMERALS_IE11_WIN7_8'], + excludes: ['LOCALE_NUMERALS_IE11_WIN8'], + }, + LOCALE_NUMERALS_IE11_WIN7_8: + { + description: + 'Localized number formatting exclusive to Interner Explorer 11 in Windows 7 and 8.\n' + + 'This includes all features of LOCALE_NUMERALS plus the output of the letters in the ' + + 'second word of the Arabic string representation of NaN ("برقم"), the letters in the ' + + 'Arabic string representation of Infinity ("+لا\xa0نهاية"), the letters in the the Czech ' + + 'string representation of NaN ("Není\xa0číslo"), the letters in the the Greek string ' + + 'representation of Infinity ("Άπειρο"), the letters in the Greek string representation ' + + 'of NaN ("μη\xa0αριθμός"), the letters in the Hebrew string representation of NaN ' + + '("לא\xa0מספר"), the characters in the Japanese string representation of Infinity ' + + '("+∞"), the characters in the Japanese string representation of NaN ("NaN\xa0(非数値)"), ' + + 'the letters in the Lithuanian string representation of Infinity ("begalybė"), the ' + + 'letters in the Polish string representation of Infinity ("+nieskończoność"), the ' + + 'characters in the Chinese string representation of Infinity ("正无穷大" or "正無窮大"), the ' + + 'characters in the Simplified Chinese string representation of NaN ("非数字").', + check: + function () + { + var available = + checkLocaleNumeral('ar', NaN, /^ليس.برقم/) && + checkLocaleNumeral('ar', Infinity, /^\+لا.نهاية/) && + checkLocaleNumeral('ar-td', 234567890.1, /^٢٣٤٬?٥٦٧٬?٨٩٠٫١/) && + checkLocaleNumeral('cs', NaN, /^Není.číslo/) && + checkLocaleNumeral('el', Infinity, /^Άπειρο/) && + checkLocaleNumeral('el', NaN, /^μη.αριθμός/) && + checkLocaleNumeral('he', NaN, /^לא.מספר/) && + checkLocaleNumeral('ja', Infinity, /^\+∞/) && + checkLocaleNumeral('ja', NaN, /^NaN \(非数値\)/) && + checkLocaleNumeral('lt', Infinity, /^begalybė/) && + checkLocaleNumeral('pl', Infinity, /^\+nieskończoność/) && + checkLocaleNumeral('zh', Infinity, /^正/) && + checkLocaleNumeral('zh-cn', NaN, /^非数字/); + return available; + }, + includes: ['LOCALE_NUMERALS'], + excludes: ['LOCALE_NUMERALS_EXT'], + }, + LOCALE_NUMERALS_IE11_WIN8: + { + description: + 'Localized number formatting exclusive to Interner Explorer 11 in Windows 8.\n' + + 'In this case, Latvian and Russian string representation of Infinity are both "∞".', + check: + function () + { + var available = Infinity.toLocaleString('lv') === '∞' && + Infinity.toLocaleString('ru') === '∞'; + return available; + }, + includes: ['LOCALE_NUMERALS_IE11_WIN7_8'], + excludes: ['LOCALE_NUMERALS_IE11_WIN7'], + }, LOCATION: { description: @@ -1128,23 +1199,39 @@ var featureInfos = versions: ['11'], includes: { - ANY_DOCUMENT: true, - DOCUMENT: false, - GMT: true, - JAPANESE_INFINITY: true, - LOCALE_NUMERALS: true, - PLAIN_INTL: true, - SHORT_LOCALES: true, + ANY_DOCUMENT: true, + DOCUMENT: false, + GMT: true, + JAPANESE_INFINITY: true, + LOCALE_NUMERALS: true, + LOCALE_NUMERALS_IE11_WIN7: true, + LOCALE_NUMERALS_IE11_WIN7_8: true, + PLAIN_INTL: true, + SHORT_LOCALES: true, }, }, - IE_11_WIN_10: + IE_11_WIN_8: { inherits: 'IE_11', versions: ['11'], + compatibilityTag: 'on Windows 8', + compatibilityShortTag: 'W8', + includes: + { LOCALE_NUMERALS_IE11_WIN7: false, LOCALE_NUMERALS_IE11_WIN8: true }, + }, + IE_11_WIN_10: + { + inherits: 'IE_11_WIN_8', + versions: ['11'], compatibilityTag: 'on Windows 10', compatibilityShortTag: 'W10', includes: - { LOCALE_INFINITY: true, LOCALE_NUMERALS: false, LOCALE_NUMERALS_EXT: true }, + { + LOCALE_INFINITY: true, + LOCALE_NUMERALS_EXT: true, + LOCALE_NUMERALS_IE11_WIN7_8: false, + LOCALE_NUMERALS_IE11_WIN8: false, + }, }, NODE_0_10: { diff --git a/test/helpers/feature-emulation.helpers.js b/test/helpers/feature-emulation.helpers.js index 77cf8032..1c505908 100644 --- a/test/helpers/feature-emulation.helpers.js +++ b/test/helpers/feature-emulation.helpers.js @@ -1086,6 +1086,183 @@ } ); }, + LOCALE_NUMERALS_IE11_WIN7: + function () + { + registerNumberToLocaleStringAdapter + ( + this, + function (locale) + { + var returnValue; + switch (locale) + { + case 'lv': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return 'bezgalība'; + case -Infinity: + return '-bezgalība'; + } + break; + case 'ru': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return 'бесконечность'; + case -Infinity: + return '-бесконечность'; + } + break; + } + return returnValue; + } + ); + }, + LOCALE_NUMERALS_IE11_WIN7_8: + function () + { + this.arabicNaNString = 'ليس\xa0برقم'; + registerNumberToLocaleStringAdapter + ( + this, + function (locale) + { + var returnValue; + var number; + switch (locale) + { + case 'ar': + case 'ar-td': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return '+لا\xa0نهاية'; + case -Infinity: + return '-لا\xa0نهاية'; + } + break; + case 'cz': + number = Number(this); + if (isNaN(number)) + returnValue = 'Není\xa0číslo'; + break; + case 'el': + number = Number(this); + if (isNaN(number)) + returnValue = 'μη\xa0αριθμός'; + else + { + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return 'Άπειρο'; + case -Infinity: + return '-Άπειρο'; + } + } + break; + case 'he': + number = Number(this); + if (isNaN(number)) + returnValue = 'לא\xa0מספר'; + break; + case 'ja': + number = Number(this); + if (isNaN(number)) + returnValue = 'NaN\xa0(非数値)'; + else + { + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return '+∞'; + case -Infinity: + return '-∞'; + } + } + break; + case 'lt': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return 'begalybė'; + case -Infinity: + return '-begalybė'; + } + break; + case 'pl': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return '+nieskończoność'; + case -Infinity: + return '-nieskończoność'; + } + break; + case 'ru': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return 'бесконечность'; + case -Infinity: + return '-бесконечность'; + } + break; + case 'zh': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return '正无穷大'; + case -Infinity: + return '负无穷大'; + } + break; + case 'zh-cn': + number = Number(this); + if (isNaN(number)) + returnValue = '非数字'; + break; + } + return returnValue; + } + ); + }, + LOCALE_NUMERALS_IE11_WIN8: + function () + { + registerNumberToLocaleStringAdapter + ( + this, + function (locale) + { + var returnValue; + switch (locale) + { + case 'lv': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return '∞'; + case -Infinity: + return '-∞'; + } + break; + case 'ru': + switch (+this) // In Internet Explorer 9, +this is different from this. + { + case Infinity: + return '∞'; + case -Infinity: + return '-∞'; + } + break; + } + return returnValue; + } + ); + }, LOCATION: function () {