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.
		
		
		
		
		
			
		
			
				
					
					
						
							218 lines
						
					
					
						
							5.8 KiB
						
					
					
				
			
		
		
	
	
							218 lines
						
					
					
						
							5.8 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: "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](); | 
						|
    }); | 
						|
  })(); | 
						|
} |