Skip to content

Commit

Permalink
feat: format codes
Browse files Browse the repository at this point in the history
  • Loading branch information
hyiso committed Mar 22, 2023
1 parent d904f45 commit c56d1d4
Show file tree
Hide file tree
Showing 15 changed files with 346 additions and 275 deletions.
66 changes: 43 additions & 23 deletions packages/ansi/lib/ansi.dart
Expand Up @@ -5,9 +5,8 @@ import 'package:ansi_codes/ansi_codes.dart';

///
/// Ansi class
///
///
class Ansi {

final bool supportAnsi;

Ansi({this.supportAnsi = true});
Expand All @@ -16,10 +15,12 @@ class Ansi {
String bold(String text) => _style(text: text, code: ansiCodes.bold);
String dim(String text) => _style(text: text, code: ansiCodes.dim);
String italic(String text) => _style(text: text, code: ansiCodes.italic);
String underline(String text) => _style(text: text, code: ansiCodes.underline);
String underline(String text) =>
_style(text: text, code: ansiCodes.underline);
String inverse(String text) => _style(text: text, code: ansiCodes.inverse);
String hidden(String text) => _style(text: text, code: ansiCodes.hidden);
String strikeThrough(String text) => _style(text: text, code: ansiCodes.strikeThrough);
String strikeThrough(String text) =>
_style(text: text, code: ansiCodes.strikeThrough);

String black(String text) => _style(text: text, code: ansiCodes.black);
String red(String text) => _style(text: text, code: ansiCodes.red);
Expand All @@ -29,14 +30,22 @@ class Ansi {
String magenta(String text) => _style(text: text, code: ansiCodes.magenta);
String cyan(String text) => _style(text: text, code: ansiCodes.cyan);
String white(String text) => _style(text: text, code: ansiCodes.white);
String blackBright(String text) => _style(text: text, code: ansiCodes.blackBright);
String redBright(String text) => _style(text: text, code: ansiCodes.redBright);
String greenBright(String text) => _style(text: text, code: ansiCodes.greenBright);
String yellowBright(String text) => _style(text: text, code: ansiCodes.yellowBright);
String blueBright(String text) => _style(text: text, code: ansiCodes.blueBright);
String magentaBright(String text) => _style(text: text, code: ansiCodes.magentaBright);
String cyanBright(String text) => _style(text: text, code: ansiCodes.cyanBright);
String whiteBright(String text) => _style(text: text, code: ansiCodes.whiteBright);
String blackBright(String text) =>
_style(text: text, code: ansiCodes.blackBright);
String redBright(String text) =>
_style(text: text, code: ansiCodes.redBright);
String greenBright(String text) =>
_style(text: text, code: ansiCodes.greenBright);
String yellowBright(String text) =>
_style(text: text, code: ansiCodes.yellowBright);
String blueBright(String text) =>
_style(text: text, code: ansiCodes.blueBright);
String magentaBright(String text) =>
_style(text: text, code: ansiCodes.magentaBright);
String cyanBright(String text) =>
_style(text: text, code: ansiCodes.cyanBright);
String whiteBright(String text) =>
_style(text: text, code: ansiCodes.whiteBright);
String grey(String text) => _style(text: text, code: ansiCodes.grey);
String gray(String text) => _style(text: text, code: ansiCodes.gray);

Expand All @@ -45,17 +54,26 @@ class Ansi {
String bgGreen(String text) => _style(text: text, code: ansiCodes.bgGreen);
String bgYellow(String text) => _style(text: text, code: ansiCodes.bgYellow);
String bgBlue(String text) => _style(text: text, code: ansiCodes.bgBlue);
String bgMagenta(String text) => _style(text: text, code: ansiCodes.bgMagenta);
String bgMagenta(String text) =>
_style(text: text, code: ansiCodes.bgMagenta);
String bgCyan(String text) => _style(text: text, code: ansiCodes.bgCyan);
String bgWhite(String text) => _style(text: text, code: ansiCodes.bgWhite);
String bgBlackBright(String text) => _style(text: text, code: ansiCodes.bgBlackBright);
String bgRedBright(String text) => _style(text: text, code: ansiCodes.bgRedBright);
String bgGreenBright(String text) => _style(text: text, code: ansiCodes.bgGreenBright);
String bgYellowBright(String text) => _style(text: text, code: ansiCodes.bgYellowBright);
String bgBlueBright(String text) => _style(text: text, code: ansiCodes.bgBlueBright);
String bgMagentaBright(String text) => _style(text: text, code: ansiCodes.bgMagentaBright);
String bgCyanBright(String text) => _style(text: text, code: ansiCodes.bgCyanBright);
String bgWhiteBright(String text) => _style(text: text, code: ansiCodes.bgWhiteBright);
String bgBlackBright(String text) =>
_style(text: text, code: ansiCodes.bgBlackBright);
String bgRedBright(String text) =>
_style(text: text, code: ansiCodes.bgRedBright);
String bgGreenBright(String text) =>
_style(text: text, code: ansiCodes.bgGreenBright);
String bgYellowBright(String text) =>
_style(text: text, code: ansiCodes.bgYellowBright);
String bgBlueBright(String text) =>
_style(text: text, code: ansiCodes.bgBlueBright);
String bgMagentaBright(String text) =>
_style(text: text, code: ansiCodes.bgMagentaBright);
String bgCyanBright(String text) =>
_style(text: text, code: ansiCodes.bgCyanBright);
String bgWhiteBright(String text) =>
_style(text: text, code: ansiCodes.bgWhiteBright);

String _style({required String text, required AnsiCode code}) {
if (!supportAnsi) return text;
Expand All @@ -77,5 +95,7 @@ class Ansi {
///
/// Default ansi entry.
/// Auto detect ansi support.
///
final ansi = Ansi(supportAnsi: stdout.supportsAnsiEscapes && stdioType(stdout) == StdioType.terminal);
///
final ansi = Ansi(
supportAnsi:
stdout.supportsAnsiEscapes && stdioType(stdout) == StdioType.terminal);
56 changes: 30 additions & 26 deletions packages/ansi/lib/src/utils.dart
@@ -1,32 +1,36 @@
String stringReplaceAll(String string, String substring, String replacer) {
int index = string.indexOf(substring);
if (index == -1) {
return string;
}
int index = string.indexOf(substring);
if (index == -1) {
return string;
}

final substringLength = substring.length;
int endIndex = 0;
String returnValue = '';
do {
returnValue += string.substring(endIndex, index) + substring + replacer;
endIndex = index + substringLength;
index = string.indexOf(substring, endIndex);
} while (index != -1);
final substringLength = substring.length;
int endIndex = 0;
String returnValue = '';
do {
returnValue += string.substring(endIndex, index) + substring + replacer;
endIndex = index + substringLength;
index = string.indexOf(substring, endIndex);
} while (index != -1);

returnValue += string.substring(endIndex);
return returnValue;
returnValue += string.substring(endIndex);
return returnValue;
}

String stringEncaseCRLFWithFirstIndex(String string, String prefix, String suffix, int index) {
int endIndex = 0;
String returnValue = '';
do {
final gotCR = string[index - 1] == '\r';
returnValue += string.substring(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\r\n' : '\n') + suffix;
endIndex = index + 1;
index = string.indexOf('\n', endIndex);
} while (index != -1);
String stringEncaseCRLFWithFirstIndex(
String string, String prefix, String suffix, int index) {
int endIndex = 0;
String returnValue = '';
do {
final gotCR = string[index - 1] == '\r';
returnValue += string.substring(endIndex, (gotCR ? index - 1 : index)) +
prefix +
(gotCR ? '\r\n' : '\n') +
suffix;
endIndex = index + 1;
index = string.indexOf('\n', endIndex);
} while (index != -1);

returnValue += string.substring(endIndex);
return returnValue;
}
returnValue += string.substring(endIndex);
return returnValue;
}
1 change: 0 additions & 1 deletion packages/ansi/test/ansi_test.dart
Expand Up @@ -7,5 +7,4 @@ void main() {
expect(ansi.red('foo'), '\u001B[31mfoo\u001B[39m');
expect(ansi.bgRed('foo'), '\u001B[41mfoo\u001B[49m');
});

}
14 changes: 8 additions & 6 deletions packages/ansi_codes/lib/ansi_codes.dart
Expand Up @@ -7,9 +7,11 @@ class AnsiCode {
final List<int> codes;
final int offset;

AnsiCode(int open, int close, {
AnsiCode(
int open,
int close, {
this.offset = 0,
}): codes = List.unmodifiable([open, close]) {
}) : codes = List.unmodifiable([open, close]) {
_codes[open] = close;
}

Expand All @@ -19,8 +21,8 @@ class AnsiCode {
}

class AnsiCodes {

AnsiCodes();

/// Modifiers
final AnsiCode reset = AnsiCode(0, 0);
final AnsiCode bold = AnsiCode(1, 22);
Expand All @@ -31,7 +33,7 @@ class AnsiCodes {
final AnsiCode inverse = AnsiCode(7, 27);
final AnsiCode hidden = AnsiCode(8, 28);
final AnsiCode strikeThrough = AnsiCode(9, 29);

/// Colors
final AnsiCode black = AnsiCode(30, _kColorClose);
final AnsiCode red = AnsiCode(31, _kColorClose);
Expand All @@ -54,7 +56,7 @@ class AnsiCodes {
/// Color Alias
AnsiCode get gray => blackBright;
AnsiCode get grey => blackBright;

/// Background Colors
final AnsiCode bgBlack = AnsiCode(40, _kBgColorClose);
final AnsiCode bgRed = AnsiCode(41, _kBgColorClose);
Expand All @@ -77,4 +79,4 @@ class AnsiCodes {
int? operator [](int? open) => _codes[open];
}

final ansiCodes = AnsiCodes();
final ansiCodes = AnsiCodes();
15 changes: 9 additions & 6 deletions packages/ansi_regex/example/ansi_regex_example.dart
Expand Up @@ -7,15 +7,18 @@ void main() {
print(ansiRegex().hasMatch('cake'));
//=> false

print(ansiRegex().allMatches('\u001B[4mcake\u001B[0m')
.map((match) => match.group(0)));
print(ansiRegex()
.allMatches('\u001B[4mcake\u001B[0m')
.map((match) => match.group(0)));
//=> ['\u001B[4m', '\u001B[0m']

print(ansiRegex().allMatches('\u001B[4mcake\u001B[0m')
.map((match) => match.group(0)));
print(ansiRegex()
.allMatches('\u001B[4mcake\u001B[0m')
.map((match) => match.group(0)));
//=> ['\u001B[4m']

print(ansiRegex().allMatches('\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007')
.map((match) => match.group(0)));
print(ansiRegex()
.allMatches('\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007')
.map((match) => match.group(0)));
//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
}
3 changes: 1 addition & 2 deletions packages/ansi_regex/test/ansi_regex_test.dart
@@ -1,5 +1,4 @@
import 'package:ansi_regex/ansi_regex.dart';
import 'package:test/test.dart';

void main() {
}
void main() {}
3 changes: 2 additions & 1 deletion packages/ansi_slice/example/ansi_slice_example.dart
Expand Up @@ -2,6 +2,7 @@ import 'package:ansi/ansi.dart';
import 'package:ansi_slice/ansi_slice.dart';

void main() {
final string = 'The quick brown ${ansi.red('fox jumped over ')}the lazy ${ansi.green('dog and then ran away with the unicorn.')}';
final string =
'The quick brown ${ansi.red('fox jumped over ')}the lazy ${ansi.green('dog and then ran away with the unicorn.')}';
print(sliceAnsi(string, start: 20, end: 30));
}
8 changes: 3 additions & 5 deletions packages/ansi_slice/test/ansi_slice_test.dart
Expand Up @@ -7,14 +7,12 @@ void main() {
});

test('should remove ANSI color codes from a string', () {
expect(
sliceAnsi('\u001b[31mHello\u001b[32m \u001b[33mworld\u001b[0m'),
expect(sliceAnsi('\u001b[31mHello\u001b[32m \u001b[33mworld\u001b[0m'),
equals('Hello world'));
});

test('should remove all ANSI escape sequences from a string', () {
expect(
sliceAnsi('\u001b[31mHello\u001b[1;32m \u001b[33mworld\u001b[0m\n'),
expect(sliceAnsi('\u001b[31mHello\u001b[1;32m \u001b[33mworld\u001b[0m\n'),
equals('Hello world\n'));
});
}
1 change: 0 additions & 1 deletion packages/ansi_strip/example/ansi_strip_example.dart
@@ -1,7 +1,6 @@
import 'package:ansi_strip/ansi_strip.dart';

void main() {

print(stripAnsi('\u001B[4mUnicorn\u001B[0m'));
//=> 'Unicorn'

Expand Down
4 changes: 2 additions & 2 deletions packages/ansi_strip/lib/ansi_strip.dart
@@ -1,9 +1,9 @@
import 'package:ansi_regex/ansi_regex.dart';

///
///
/// Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a [text]
///
/// Use ansiRegex to match ANSI escape codes
String stripAnsi(String text) {
return text.replaceAll(ansiRegex(), '');
}
}
24 changes: 13 additions & 11 deletions packages/ansi_strip/test/ansi_strip_test.dart
Expand Up @@ -2,18 +2,20 @@ import 'package:ansi_strip/ansi_strip.dart';
import 'package:test/test.dart';

void main() {
test('should strip ANSI escape codes from a string', () {
final formattedString = '\x1B[31mError:\x1B[0m \x1B[33mSomething went wrong\x1B[0m';
final expectedString = 'Error: Something went wrong';
final strippedString = stripAnsi(formattedString);
test('should strip ANSI escape codes from a string', () {
final formattedString =
'\x1B[31mError:\x1B[0m \x1B[33mSomething went wrong\x1B[0m';
final expectedString = 'Error: Something went wrong';
final strippedString = stripAnsi(formattedString);

expect(strippedString, equals(expectedString));
});
expect(strippedString, equals(expectedString));
});

test('should return the same string when no ANSI escape codes are present', () {
final plainString = 'Hello, world!';
final strippedString = stripAnsi(plainString);
test('should return the same string when no ANSI escape codes are present',
() {
final plainString = 'Hello, world!';
final strippedString = stripAnsi(plainString);

expect(strippedString, equals(plainString));
});
expect(strippedString, equals(plainString));
});
}
3 changes: 2 additions & 1 deletion packages/ansi_wrap/example/ansi_wrap_example.dart
Expand Up @@ -2,6 +2,7 @@ import 'package:ansi/ansi.dart';
import 'package:ansi_wrap/ansi_wrap.dart';

void main() {
final input = 'The quick brown ${ansi.red('fox jumped over ')}the lazy ${ansi.green('dog and then ran away with the unicorn.')}';
final input =
'The quick brown ${ansi.red('fox jumped over ')}the lazy ${ansi.green('dog and then ran away with the unicorn.')}';
print(wrapAnsi(input, 20));
}
16 changes: 9 additions & 7 deletions packages/ansi_wrap/lib/ansi_wrap.dart
@@ -1,15 +1,17 @@

import 'src/ansi_wrap.dart';

/// For each newline, wrap separately
String wrapAnsi(String string, int columns, {
String wrapAnsi(
String string,
int columns, {
bool? trim,
bool? wordWrap,
bool hard = false,
}) {
return string
.replaceAll(RegExp('\r\n'), '\n')
.split('\n')
.map((line) => wrap(line, columns, trim: trim, wordWrap: wordWrap, hard: hard))
.join('\n');
return string
.replaceAll(RegExp('\r\n'), '\n')
.split('\n')
.map((line) =>
wrap(line, columns, trim: trim, wordWrap: wordWrap, hard: hard))
.join('\n');
}

0 comments on commit c56d1d4

Please sign in to comment.