line.dart 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import 'dart:math';
  2. import 'package:xterm/buffer/line/line_bytedata.dart';
  3. import 'package:xterm/buffer/line/line_list.dart';
  4. import 'package:xterm/terminal/cursor.dart';
  5. import 'package:xterm/util/constants.dart';
  6. abstract class BufferLine {
  7. factory BufferLine({int length = 64, bool isWrapped = false}) {
  8. if (kIsWeb) {
  9. return ListBufferLine(length, isWrapped);
  10. }
  11. return ByteDataBufferLine(length, isWrapped);
  12. }
  13. bool get isWrapped;
  14. set isWrapped(bool value);
  15. void ensure(int length);
  16. void insert(int index) {
  17. insertN(index, 1);
  18. }
  19. void removeN(int index, int count);
  20. void insertN(int index, int count);
  21. void clear();
  22. void erase(Cursor cursor, int start, int end, [bool resetIsWrapped = false]);
  23. void cellClear(int index);
  24. void cellInitialize(
  25. int index, {
  26. required int content,
  27. required int width,
  28. required Cursor cursor,
  29. });
  30. bool cellHasContent(int index);
  31. int cellGetContent(int index);
  32. void cellSetContent(int index, int content);
  33. int cellGetFgColor(int index);
  34. void cellSetFgColor(int index, int color);
  35. int cellGetBgColor(int index);
  36. void cellSetBgColor(int index, int color);
  37. int cellGetFlags(int index);
  38. void cellSetFlags(int index, int flags);
  39. int cellGetWidth(int index);
  40. void cellSetWidth(int index, int width);
  41. void cellClearFlags(int index);
  42. bool cellHasFlag(int index, int flag);
  43. void cellSetFlag(int index, int flag);
  44. void cellErase(int index, Cursor cursor);
  45. int getTrimmedLength([int? cols]);
  46. void copyCellsFrom(covariant BufferLine src, int srcCol, int dstCol, int len);
  47. // int cellGetHash(int index);
  48. void removeRange(int start, int end);
  49. void clearRange(int start, int end);
  50. String toDebugString(int cols) {
  51. final result = StringBuffer();
  52. final length = getTrimmedLength();
  53. for (int i = 0; i < max(cols, length); i++) {
  54. var code = cellGetContent(i);
  55. if (code == 0) {
  56. if (cellGetWidth(i) == 0) {
  57. code = '_'.runes.first;
  58. } else {
  59. code = cellGetWidth(i).toString().runes.first;
  60. }
  61. }
  62. result.writeCharCode(code);
  63. }
  64. return result.toString();
  65. }
  66. }