"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.1 var 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') { 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](); }); })(); }