12345678910111213141516171819202122232425262728293031323334353637383940 |
- // Thanks @mathiasbynens
- // http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols
-
- "use strict";
-
- var setPrototypeOf = require("es5-ext/object/set-prototype-of")
- , d = require("d")
- , Symbol = require("es6-symbol")
- , Iterator = require("./");
-
- var defineProperty = Object.defineProperty, StringIterator;
-
- StringIterator = module.exports = function (str) {
- if (!(this instanceof StringIterator)) throw new TypeError("Constructor requires 'new'");
- str = String(str);
- Iterator.call(this, str);
- defineProperty(this, "__length__", d("", str.length));
- };
- if (setPrototypeOf) setPrototypeOf(StringIterator, Iterator);
-
- // Internal %ArrayIteratorPrototype% doesn't expose its constructor
- delete StringIterator.prototype.constructor;
-
- StringIterator.prototype = Object.create(Iterator.prototype, {
- _next: d(function () {
- if (!this.__list__) return undefined;
- if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++;
- this._unBind();
- return undefined;
- }),
- _resolve: d(function (i) {
- var char = this.__list__[i], code;
- if (this.__nextIndex__ === this.__length__) return char;
- code = char.charCodeAt(0);
- if (code >= 0xd800 && code <= 0xdbff) return char + this.__list__[this.__nextIndex__++];
- return char;
- })
- });
- defineProperty(StringIterator.prototype, Symbol.toStringTag, d("c", "String Iterator"));
|