/** * Accepts any node Stream instance and hijacks its "write()" function, * so that it can count any newlines that get written to the output. * * When a '\n' byte is encountered, then a "newline" event will be emitted * on the stream, with no arguments. It is up to the listeners to determine * any necessary deltas required for their use-case. * * Ex: * * var cursor = ansi(process.stdout) * , ln = 0 * process.stdout.on('newline', function () { * ln++ * }) */ /** * Module dependencies. */ var assert = require('assert') var NEWLINE = '\n'.charCodeAt(0) function emitNewlineEvents (stream) { if (stream._emittingNewlines) { // already emitting newline events return } var write = stream.write stream.write = function (data) { // first write the data var rtn = write.apply(stream, arguments) if (stream.listeners('newline').length > 0) { var len = data.length , i = 0 // now try to calculate any deltas if (typeof data == 'string') { for (; i