Chromium Code Reviews| Index: src/i18n.js |
| diff --git a/src/i18n.js b/src/i18n.js |
| index 6b563a00f915a867056e73c02856f8132226d5eb..2e5485749ae766fc469c8cd52c8257fe5b57e7b4 100644 |
| --- a/src/i18n.js |
| +++ b/src/i18n.js |
| @@ -45,6 +45,11 @@ var AVAILABLE_SERVICES = ['collator', |
| 'dateformat', |
| 'breakiterator']; |
| +var NORMALIZATION_FORMS = ['NFC', |
| + 'NFD', |
| + 'NFKC', |
| + 'NFKD']; |
| + |
| /** |
| * Caches available locales for each service. |
| */ |
| @@ -1987,6 +1992,40 @@ $Object.defineProperty($String.prototype, 'localeCompare', { |
| /** |
| + * Unicode normalization. This method is called with one argument that |
| + * specifies the normalization form. |
| + * If none is specified, "NFC" is assumed. |
| + * If the form is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw |
| + * a RangeError Exception. |
| + */ |
| +$Object.defineProperty($String.prototype, 'normalize', { |
| + value: function(that) { |
| + if (%_IsConstructCall()) { |
| + throw new $TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR); |
|
arv (Not doing code reviews)
2014/04/10 18:20:10
Does the spec really mandate this?
mnita
2014/04/10 21:20:30
Hmmmm... Not in spec, sorry.
I will remove this wh
|
| + } |
| + |
| + CHECK_OBJECT_COERCIBLE(this, "String.prototype.normalize"); |
| + |
| + var form = $String(%_Arguments(0) || 'NFC'); |
| + |
| + var normalizationForm = NORMALIZATION_FORMS.indexOf(form); |
|
arv (Not doing code reviews)
2014/04/10 18:20:10
Does this need to ensure we are calling the origin
mnita
2014/04/10 21:20:30
Done.
|
| + if (normalizationForm === -1) { |
| + throw new $RangeError('The normalization form should be one of ' |
| + + NORMALIZATION_FORMS.join(', ') + '.'); |
| + } |
| + |
| + return %StringNormalize(this, normalizationForm); |
| + }, |
| + writable: true, |
| + configurable: true, |
| + enumerable: false |
| +}); |
| +%FunctionSetName($String.prototype.normalize, 'normalize'); |
| +%FunctionRemovePrototype($String.prototype.normalize); |
| +%SetNativeFlag($String.prototype.normalize); |
| + |
| + |
| +/** |
| * Formats a Number object (this) using locale and options values. |
| * If locale or options are omitted, defaults are used. |
| */ |