Don't parse if there are no flags.
This commit is contained in:
parent
fd3661b21b
commit
edb77726f1
4 changed files with 71 additions and 49 deletions
106
lib/dcat.dart
106
lib/dcat.dart
|
@ -120,64 +120,78 @@ Future<void> _writeStream(
|
|||
bool showNonPrinting) async {
|
||||
const tab = 9;
|
||||
int squeeze = 0;
|
||||
final noFlags = !showEnds &&
|
||||
!showLineNumbers &&
|
||||
!numberNonBlank &&
|
||||
!showTabs &&
|
||||
!squeezeBlank &&
|
||||
!showNonPrinting;
|
||||
final sb = StringBuffer();
|
||||
await stream.forEach((data) {
|
||||
sb.clear();
|
||||
for (final ch in utf8.decode(data).runes) {
|
||||
if (lastLine.lastChar == _lineFeed) {
|
||||
if (squeezeBlank) {
|
||||
if (ch == _lineFeed) {
|
||||
if (squeeze >= 1) {
|
||||
lastLine.lastChar = ch;
|
||||
if (noFlags) {
|
||||
sb.writeCharCode(ch);
|
||||
} else {
|
||||
if (lastLine.lastChar == _lineFeed) {
|
||||
if (squeezeBlank) {
|
||||
if (ch == _lineFeed) {
|
||||
if (squeeze >= 1) {
|
||||
lastLine.lastChar = ch;
|
||||
continue;
|
||||
}
|
||||
squeeze++;
|
||||
} else {
|
||||
squeeze = 0;
|
||||
}
|
||||
}
|
||||
if (showLineNumbers || numberNonBlank) {
|
||||
if (!numberNonBlank || ch != _lineFeed) {
|
||||
sb
|
||||
..write('${++lastLine.lineNumber}'.padLeft(6))
|
||||
..write('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
lastLine.lastChar = ch;
|
||||
if (ch == _lineFeed) {
|
||||
if (showEnds) {
|
||||
sb.write('\$');
|
||||
}
|
||||
} else if (ch == tab) {
|
||||
if (showTabs) {
|
||||
sb.write('^I');
|
||||
continue;
|
||||
}
|
||||
} else if (showNonPrinting) {
|
||||
if (ch >= 32) {
|
||||
if (ch < 127) {
|
||||
// ASCII
|
||||
sb.writeCharCode(ch);
|
||||
continue;
|
||||
} else if (ch == 127) {
|
||||
// NULL
|
||||
sb.write('^?');
|
||||
continue;
|
||||
} else {
|
||||
// UNICODE
|
||||
sb
|
||||
..write('U+')
|
||||
..write(ch.toRadixString(16).padLeft(4, '0').toUpperCase());
|
||||
continue;
|
||||
}
|
||||
squeeze++;
|
||||
} else {
|
||||
squeeze = 0;
|
||||
}
|
||||
}
|
||||
if (showLineNumbers || numberNonBlank) {
|
||||
if (!numberNonBlank || ch != _lineFeed) {
|
||||
sb.write('${++lastLine.lineNumber}'.padLeft(6) + '\t');
|
||||
sb
|
||||
..write('^')
|
||||
..writeCharCode(ch + 64);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
sb.writeCharCode(ch);
|
||||
}
|
||||
lastLine.lastChar = ch;
|
||||
if (ch == _lineFeed) {
|
||||
if (showEnds) {
|
||||
sb.write('\$');
|
||||
}
|
||||
} else if (ch == tab) {
|
||||
if (showTabs) {
|
||||
sb.write('^I');
|
||||
continue;
|
||||
}
|
||||
} else if (showNonPrinting) {
|
||||
if (ch >= 32) {
|
||||
if (ch < 127) {
|
||||
// ASCII
|
||||
sb.writeCharCode(ch);
|
||||
continue;
|
||||
} else if (ch == 127) {
|
||||
// NULL
|
||||
sb.write('^?');
|
||||
continue;
|
||||
} else {
|
||||
// UNICODE
|
||||
sb.write('U+' + ch.toRadixString(16).padLeft(4, '0').toUpperCase());
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
sb
|
||||
..write('^')
|
||||
..writeCharCode(ch + 64);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
sb.writeCharCode(ch);
|
||||
}
|
||||
if (sb.isNotEmpty) {
|
||||
out.write(sb);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue