From 4051f2ec7d86ff2de1dc5f1015e9c569048aa1c0 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 21 Jul 2014 22:35:07 -0700 Subject: Added ansi so we don't need to install anything to run testjs. --- js/ansi/newlines.js | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 js/ansi/newlines.js (limited to 'js/ansi/newlines.js') diff --git a/js/ansi/newlines.js b/js/ansi/newlines.js new file mode 100644 index 0000000..4e37a0a --- /dev/null +++ b/js/ansi/newlines.js @@ -0,0 +1,71 @@ + +/** + * 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