Merge pull request #220 from streaka/master

Add multiline handling functionality
This commit is contained in:
DABH 2018-04-30 11:26:37 -07:00 committed by GitHub
commit c13ff984bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 8 deletions

View File

@ -36,6 +36,7 @@ colors.themes = {};
var util = require('util');
var ansiStyles = colors.styles = require('./styles');
var defineProps = Object.defineProperties;
var newLineRegex = new RegExp(/[\r\n]+/g);
colors.supportsColor = require('./system/supports-colors').supportsColor;
@ -110,12 +111,17 @@ function applyStyle() {
return str;
}
var newLinesPresent = str.indexOf('\n') != -1;
var nestedStyles = this._styles;
var i = nestedStyles.length;
while (i--) {
var code = ansiStyles[nestedStyles[i]];
str = code.open + str.replace(code.closeRe, code.open) + code.close;
if (newLinesPresent){
str = str.replace(newLineRegex, code.close + '\n' + code.open);
}
}
return str;

View File

@ -1,5 +1,5 @@
var assert = require('assert'),
colors = require('../lib/index');
colors = require('../lib/index');
var s = 'string';
@ -43,8 +43,19 @@ aE(s, 'yellow', 33);
assert.equal(s, 'string');
colors.setTheme({error:'red'});
var testStringWithNewLines = s + '\n' + s;
assert.equal(typeof("astring".red),'string');
assert.equal(typeof("astring".error),'string');
// single style
assert.equal(testStringWithNewLines.red, '\x1b[31m' + s + '\n' + s + '\x1b[39m');
var testStringWithNewLinesStyled = s.underline + '\n' + s.bold;
// nested styles
assert.equal(testStringWithNewLinesStyled.red, '\x1b[31m' + '\x1b[4m' + s + '\x1b[24m' + '\n' + '\x1b[1m' + s + '\x1b[22m' + '\x1b[39m');
colors.setTheme({ error: 'red' });
assert.equal(typeof ("astring".red), 'string');
assert.equal(typeof ("astring".error), 'string');
assert.equal(s, 'string');

View File

@ -1,5 +1,5 @@
var assert = require('assert'),
colors = require('../safe');
colors = require('../safe');
var s = 'string';
@ -39,7 +39,18 @@ aE(s, 'red', 31);
aE(s, 'yellow', 33);
assert.equal(s, 'string');
colors.setTheme({error:'red'});
assert.equal(typeof(colors.red("astring")), 'string');
assert.equal(typeof(colors.error("astring")), 'string');
var testStringWithNewLines = s + '\n' + s;
// single style
assert.equal(colors.red(testStringWithNewLines), '\x1b[31m' + s + '\x1b[39m' + '\n' + '\x1b[31m' + s + '\x1b[39m');
var testStringWithNewLinesStyled = colors.underline(s) + '\n' + colors.bold(s);
// nested styles
assert.equal(colors.red(testStringWithNewLinesStyled), '\x1b[31m' + '\x1b[4m' + s + '\x1b[24m' + '\x1b[39m' + '\n' + '\x1b[31m' + '\x1b[1m' + s + '\x1b[22m' + '\x1b[39m');
colors.setTheme({ error: 'red' });
assert.equal(typeof (colors.red("astring")), 'string');
assert.equal(typeof (colors.error("astring")), 'string');