code: function LineMaker(options) {
      this._tabSize = options.tabSize || 2;
      if (typeof options.styleMode === 'undefined')
          this._styleMode = LineMaker.STYLE_ALL;
      else
          this._styleMode = options.styleMode;
      this._continuation = options.continuation || '';
      this._writeFunc = options.writeFunc || null;
      
      this._styleMap = { // common terminal escape sequences
          bold: '\x1b[1m',
          clearEnd: '\x1b[K',
          reverse: '\x1b[7m',
          normal: '\x1b[0m',
          underline: '\x1b[4m',
          upLine: '\x1b[F'
      };
      if (options.styleMap) {
          for (var styleName in options.styleMap)
              this._styleMap[styleName] = options.styleMap[styleName];
      }
  
      if (this._styleMode > LineMaker.STYLE_MONOCHROME) {
          var colorMap = null;
          if (colorSupport.has16m && options.colorMap16M)
              colorMap = options.colorMap16M;
          else if (colorSupport.has256 && options.colorMap256)
              colorMap = options.colorMap256;
          else if (colorSupport.hasBasic && options.colorMap16)
              colorMap = options.colorMap16;
          else
              this._styleMode = LineMaker.STYLE_MONOCHROME;
          if (colorMap) {
              for (var styleName in colorMap)
                  this._styleMap[styleName] = colorMap[styleName];
          }
          if (options.colorOverrides) {
              for (var styleName in options.colorOverrides)
                  this._styleMap[styleName] = options.colorOverrides[styleName];
          }
      }
      
      this._lineIsClear = true;
      this._upLineCount = 0;
      this._blanksInARow = 0;
  }
docs: _lineIsClear - whether line following cursor is clear of prewritten text _upLineCount - number of lines moved up from bottom-most line _blanksInARow - number of blank lines output in a row // CONSTRUCTION /////////////////////////////////////////////////////////////