123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
-
-
-
-
-
- var emitNewlineEvents = require('./newlines')
- , prefix = '\x1b['
- , suffix = 'm'
-
-
-
- var codes = {
- up: 'A'
- , down: 'B'
- , forward: 'C'
- , back: 'D'
- , nextLine: 'E'
- , previousLine: 'F'
- , horizontalAbsolute: 'G'
- , eraseData: 'J'
- , eraseLine: 'K'
- , scrollUp: 'S'
- , scrollDown: 'T'
- , savePosition: 's'
- , restorePosition: 'u'
- , queryPosition: '6n'
- , hide: '?25l'
- , show: '?25h'
- }
-
-
-
- var styles = {
- bold: 1
- , italic: 3
- , underline: 4
- , inverse: 7
- }
-
-
-
- var reset = {
- bold: 22
- , italic: 23
- , underline: 24
- , inverse: 27
- }
-
-
-
- var colors = {
- white: 37
- , black: 30
- , blue: 34
- , cyan: 36
- , green: 32
- , magenta: 35
- , red: 31
- , yellow: 33
- , grey: 90
- , brightBlack: 90
- , brightRed: 91
- , brightGreen: 92
- , brightYellow: 93
- , brightBlue: 94
- , brightMagenta: 95
- , brightCyan: 96
- , brightWhite: 97
- }
-
-
-
-
- function ansi (stream, options) {
- if (stream._ansicursor) {
- return stream._ansicursor
- } else {
- return stream._ansicursor = new Cursor(stream, options)
- }
- }
- module.exports = exports = ansi
-
-
-
- function Cursor (stream, options) {
- if (!(this instanceof Cursor)) {
- return new Cursor(stream, options)
- }
- if (typeof stream != 'object' || typeof stream.write != 'function') {
- throw new Error('a valid Stream instance must be passed in')
- }
-
-
- this.stream = stream
-
-
- this.enabled = options && options.enabled
- if (typeof this.enabled === 'undefined') {
- this.enabled = stream.isTTY
- }
- this.enabled = !!this.enabled
-
-
-
- this.buffering = !!(options && options.buffering)
- this._buffer = []
-
-
- this.fg = this.foreground = new Colorer(this, 0)
- this.bg = this.background = new Colorer(this, 10)
-
-
- this.Bold = false
- this.Italic = false
- this.Underline = false
- this.Inverse = false
-
-
- this.newlines = 0
- emitNewlineEvents(stream)
- stream.on('newline', function () {
- this.newlines++
- }.bind(this))
- }
- exports.Cursor = Cursor
-
-
-
- Cursor.prototype.write = function (data) {
- if (this.buffering) {
- this._buffer.push(arguments)
- } else {
- this.stream.write.apply(this.stream, arguments)
- }
- return this
- }
-
-
-
- Cursor.prototype.buffer = function () {
- this.buffering = true
- return this
- }
-
-
-
- Cursor.prototype.flush = function () {
- this.buffering = false
- var str = this._buffer.map(function (args) {
- if (args.length != 1) throw new Error('unexpected args length! ' + args.length);
- return args[0];
- }).join('');
- this._buffer.splice(0);
- this.write(str);
- return this
- }
-
-
-
-
- function Colorer (cursor, base) {
- this.current = null
- this.cursor = cursor
- this.base = base
- }
- exports.Colorer = Colorer
-
-
-
- Colorer.prototype._setColorCode = function setColorCode (code) {
- var c = String(code)
- if (this.current === c) return
- this.cursor.enabled && this.cursor.write(prefix + c + suffix)
- this.current = c
- return this
- }
-
-
-
-
- Object.keys(codes).forEach(function (name) {
- var code = String(codes[name])
- Cursor.prototype[name] = function () {
- var c = code
- if (arguments.length > 0) {
- c = toArray(arguments).map(Math.round).join(';') + code
- }
- this.enabled && this.write(prefix + c)
- return this
- }
- })
-
-
-
- Object.keys(styles).forEach(function (style) {
- var name = style[0].toUpperCase() + style.substring(1)
- , c = styles[style]
- , r = reset[style]
-
- Cursor.prototype[style] = function () {
- if (this[name]) return this
- this.enabled && this.write(prefix + c + suffix)
- this[name] = true
- return this
- }
-
- Cursor.prototype['reset' + name] = function () {
- if (!this[name]) return this
- this.enabled && this.write(prefix + r + suffix)
- this[name] = false
- return this
- }
- })
-
-
-
- Object.keys(colors).forEach(function (color) {
- var code = colors[color]
-
- Colorer.prototype[color] = function () {
- this._setColorCode(this.base + code)
- return this.cursor
- }
-
- Cursor.prototype[color] = function () {
- return this.foreground[color]()
- }
- })
-
-
-
- Cursor.prototype.beep = function () {
- this.enabled && this.write('\x07')
- return this
- }
-
-
-
- Cursor.prototype.goto = function (x, y) {
- x = x | 0
- y = y | 0
- this.enabled && this.write(prefix + y + ';' + x + 'H')
- return this
- }
-
-
-
- Colorer.prototype.reset = function () {
- this._setColorCode(this.base + 39)
- return this.cursor
- }
-
-
-
- Cursor.prototype.reset = function () {
- this.enabled && this.write(prefix + '0' + suffix)
- this.Bold = false
- this.Italic = false
- this.Underline = false
- this.Inverse = false
- this.foreground.current = null
- this.background.current = null
- return this
- }
-
-
-
- Colorer.prototype.rgb = function (r, g, b) {
- var base = this.base + 38
- , code = rgb(r, g, b)
- this._setColorCode(base + ';5;' + code)
- return this.cursor
- }
-
-
-
- Cursor.prototype.rgb = function (r, g, b) {
- return this.foreground.rgb(r, g, b)
- }
-
-
-
- Colorer.prototype.hex = function (color) {
- return this.rgb.apply(this, hex(color))
- }
-
-
-
- Cursor.prototype.hex = function (color) {
- return this.foreground.hex(color)
- }
-
-
-
-
-
-
- function rgb (r, g, b) {
- var red = r / 255 * 5
- , green = g / 255 * 5
- , blue = b / 255 * 5
- return rgb5(red, green, blue)
- }
-
-
-
- function rgb5 (r, g, b) {
- var red = Math.round(r)
- , green = Math.round(g)
- , blue = Math.round(b)
- return 16 + (red*36) + (green*6) + blue
- }
-
-
-
- function hex (color) {
- var c = color[0] === '#' ? color.substring(1) : color
- , r = c.substring(0, 2)
- , g = c.substring(2, 4)
- , b = c.substring(4, 6)
- return [parseInt(r, 16), parseInt(g, 16), parseInt(b, 16)]
- }
-
-
-
- function toArray (a) {
- var i = 0
- , l = a.length
- , rtn = []
- for (; i<l; i++) {
- rtn.push(a[i])
- }
- return rtn
- }
|