line.dart 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. void insertN(int index, int count);
  18. void removeN(int index, int count);
  19. void clear();
  20. void erase(Cursor cursor, int start, int end, [bool resetIsWrapped = false]);
  21. void cellClear(int index);
  22. void cellInitialize(
  23. int index, {
  24. required int content,
  25. required int width,
  26. required Cursor cursor,
  27. });
  28. bool cellHasContent(int index);
  29. int cellGetContent(int index);
  30. void cellSetContent(int index, int content);
  31. int cellGetFgColor(int index);
  32. void cellSetFgColor(int index, int color);
  33. int cellGetBgColor(int index);
  34. void cellSetBgColor(int index, int color);
  35. int cellGetFlags(int index);
  36. void cellSetFlags(int index, int flags);
  37. int cellGetWidth(int index);
  38. void cellSetWidth(int index, int width);
  39. void cellClearFlags(int index);
  40. bool cellHasFlag(int index, int flag);
  41. void cellSetFlag(int index, int flag);
  42. void cellErase(int index, Cursor cursor);
  43. int getTrimmedLength([int? cols]);
  44. void copyCellsFrom(covariant BufferLine src, int srcCol, int dstCol, int len);
  45. // int cellGetHash(int index);
  46. void removeRange(int start, int end);
  47. void clearRange(int start, int end);
  48. String toDebugString(int cols) {
  49. final result = StringBuffer();
  50. final length = getTrimmedLength();
  51. for (int i = 0; i < max(cols, length); i++) {
  52. var code = cellGetContent(i);
  53. if (code == 0) {
  54. if (cellGetWidth(i) == 0) {
  55. code = '_'.runes.first;
  56. } else {
  57. code = cellGetWidth(i).toString().runes.first;
  58. }
  59. }
  60. result.writeCharCode(code);
  61. }
  62. return result.toString();
  63. }
  64. }