Index: src/i18n.js |
diff --git a/src/i18n.js b/src/i18n.js |
index a64c7e67844b01ebc134956e95c2cba87cd5a288..f23b222981ee7d743ac5c0def23e58acad4ce09e 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. |
*/ |
@@ -1988,6 +1993,40 @@ $Object.defineProperty($String.prototype, 'localeCompare', { |
%FunctionRemovePrototype($String.prototype.localeCompare); |
%SetNativeFlag($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); |
+ } |
+ |
+ if (IS_NULL_OR_UNDEFINED(this)) { |
+ throw new $TypeError('Method invoked on undefined or null value.'); |
+ } |
+ |
+ var form = $String(%_Arguments(0) || 'NFC'); |
+ |
+ var normalizationForm = NORMALIZATION_FORMS.indexOf(form); |
+ if (normalizationForm !== -1) { |
+ return %StringNormalize(this, normalizationForm); |
+ } |
+ throw new $RangeError('The normalization form should be one of ' |
+ + NORMALIZATION_FORMS.join(', ') + '.'); |
+ }, |
+ 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. |