| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | "use strict";function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }// Generated by CoffeeScript 2.5.1var SpecialString, i, len, prop, ref;module.exports = SpecialString = function () {  var self;  var SpecialString = /*#__PURE__*/function () {    function SpecialString(str) {      _classCallCheck(this, SpecialString);      if (!(this instanceof self)) {        return new self(str);      }      this._str = String(str);      this._len = 0;    }    _createClass(SpecialString, [{      key: "_getStr",      value: function _getStr() {        return this._str;      }    }, {      key: "set",      value: function set(str) {        this._str = String(str);        return this;      }    }, {      key: "clone",      value: function clone() {        return new SpecialString(this._str);      }    }, {      key: "isEmpty",      value: function isEmpty() {        return this._str === '';      }    }, {      key: "isOnlySpecialChars",      value: function isOnlySpecialChars() {        return !this.isEmpty() && this.length === 0;      }    }, {      key: "_reset",      value: function _reset() {        return this._len = 0;      }    }, {      key: "splitIn",      value: function splitIn(limit) {        var trimLeftEachLine = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;        var buffer, bufferLength, justSkippedSkipChar, lines;        buffer = '';        bufferLength = 0;        lines = [];        justSkippedSkipChar = false;        self._countChars(this._str, function (char, charLength) {          if (bufferLength > limit || bufferLength + charLength > limit) {            lines.push(buffer);            buffer = '';            bufferLength = 0;          }          if (bufferLength === 0 && char === ' ' && !justSkippedSkipChar && trimLeftEachLine) {            return justSkippedSkipChar = true;          } else {            buffer += char;            bufferLength += charLength;            return justSkippedSkipChar = false;          }        });        if (buffer.length > 0) {          lines.push(buffer);        }        return lines;      }    }, {      key: "trim",      value: function trim() {        return new SpecialString(this.str.trim());      }    }, {      key: "trimLeft",      value: function trimLeft() {        return new SpecialString(this.str.replace(/^\s+/, ''));      }    }, {      key: "trimRight",      value: function trimRight() {        return new SpecialString(this.str.replace(/\s+$/, ''));      }    }, {      key: "_getLength",      value: function _getLength() {        var sum;        sum = 0;        self._countChars(this._str, function (char, charLength) {          sum += charLength;        });        return sum;      }    }, {      key: "cut",      value: function cut(from, to) {        var _this = this;        var trimLeft = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;        var after, before, cur, cut;        if (to == null) {          to = this.length;        }        from = parseInt(from);        if (from >= to) {          throw Error("`from` shouldn't be larger than `to`");        }        before = '';        after = '';        cut = '';        cur = 0;        self._countChars(this._str, function (char, charLength) {          if (_this.str === 'ab<tag>') {            console.log(charLength, char);          }          if (cur === from && char.match(/^\s+$/) && trimLeft) {            return;          }          if (cur < from) {            before += char; // let's be greedy          } else if (cur < to || cur + charLength <= to) {            cut += char;          } else {            after += char;          }          cur += charLength;        });        this._str = before + after;        this._reset();        return new SpecialString(cut);      }    }], [{      key: "_countChars",      value: function _countChars(text, cb) {        var char, charLength, m;        while (text.length !== 0) {          if (m = text.match(self._tagRx)) {            char = m[0];            charLength = 0;            text = text.substr(char.length, text.length);          } else if (m = text.match(self._quotedHtmlRx)) {            char = m[0];            charLength = 1;            text = text.substr(char.length, text.length);          } else if (text.match(self._tabRx)) {            char = "\t";            charLength = 8;            text = text.substr(1, text.length);          } else {            char = text[0];            charLength = 1;            text = text.substr(1, text.length);          }          cb.call(null, char, charLength);        }      }    }]);    return SpecialString;  }();  ;  self = SpecialString;  SpecialString._tabRx = /^\t/;  SpecialString._tagRx = /^<[^>]+>/;  SpecialString._quotedHtmlRx = /^&(gt|lt|quot|amp|apos|sp);/;  return SpecialString;}.call(void 0);ref = ['str', 'length'];for (i = 0, len = ref.length; i < len; i++) {  prop = ref[i];  (function () {    var methodName;    methodName = '_get' + prop[0].toUpperCase() + prop.substr(1, prop.length);    return SpecialString.prototype.__defineGetter__(prop, function () {      return this[methodName]();    });  })();}
 |