You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
5.6 KiB
208 lines
5.6 KiB
"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: "_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](); |
|
}); |
|
})(); |
|
} |