// Generated by CoffeeScript 1.9.3 var SpecialString, fn, i, len, prop, ref; module.exports = SpecialString = (function() { var self; self = SpecialString; SpecialString._tabRx = /^\t/; SpecialString._tagRx = /^<[^>]+>/; SpecialString._quotedHtmlRx = /^&(gt|lt|quot|amp|apos|sp);/; function SpecialString(str) { if (!(this instanceof self)) { return new self(str); } this._str = String(str); this._len = 0; } SpecialString.prototype._getStr = function() { return this._str; }; SpecialString.prototype.set = function(str) { this._str = String(str); return this; }; SpecialString.prototype.clone = function() { return new SpecialString(this._str); }; SpecialString.prototype.isEmpty = function() { return this._str === ''; }; SpecialString.prototype.isOnlySpecialChars = function() { return !this.isEmpty() && this.length === 0; }; SpecialString.prototype._reset = function() { return this._len = 0; }; SpecialString.prototype.splitIn = function(limit, trimLeftEachLine) { var buffer, bufferLength, justSkippedSkipChar, lines; if (trimLeftEachLine == null) { trimLeftEachLine = false; } 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; }; SpecialString.prototype.trim = function() { return new SpecialString(this.str.trim()); }; SpecialString.prototype.trimLeft = function() { return new SpecialString(this.str.replace(/^\s+/, '')); }; SpecialString.prototype.trimRight = function() { return new SpecialString(this.str.replace(/\s+$/, '')); }; SpecialString.prototype._getLength = function() { var sum; sum = 0; self._countChars(this._str, function(char, charLength) { sum += charLength; }); return sum; }; SpecialString.prototype.cut = function(from, to, trimLeft) { var after, before, cur, cut; if (trimLeft == null) { trimLeft = false; } 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(_this) { return 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; } else if (cur < to || cur + charLength <= to) { cut += char; } else { after += char; } cur += charLength; }; })(this)); this._str = before + after; this._reset(); return SpecialString(cut); }; SpecialString._countChars = function(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; })(); ref = ['str', 'length']; fn = function() { var methodName; methodName = '_get' + prop[0].toUpperCase() + prop.substr(1, prop.length); return SpecialString.prototype.__defineGetter__(prop, function() { return this[methodName](); }); }; for (i = 0, len = ref.length; i < len; i++) { prop = ref[i]; fn(); }