92_picoterm.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import picoterm
  2. from vmath import rgb
  3. picoterm.enable_full_buffering_mode()
  4. bg = rgb(78, 118, 164)
  5. fg = rgb(200, 200, 0)
  6. text = "hello, \nworld"
  7. text = bg.ansi_bg(text)
  8. text = fg.ansi_fg(text)
  9. def ansi_italic(text: str):
  10. return f'\x1b[3m{text}\x1b[0m'
  11. text = ansi_italic(text) + '123'
  12. print(text)
  13. cpnts = picoterm.split_ansi_escaped_string(text)
  14. assert cpnts == ['\x1b[3m', '\x1b[38;2;200;200;0m', '\x1b[48;2;78;118;164m', 'hello, ', '\n', 'world', '\x1b[0m', '\x1b[0m', '\x1b[0m', '123']
  15. cpnts_join = ''.join(cpnts)
  16. assert cpnts_join == text
  17. assert picoterm.wcwidth(ord('\n')) == 0
  18. assert picoterm.wcwidth(ord('a')) == 1
  19. assert picoterm.wcwidth(ord('测')) == 2
  20. assert picoterm.wcwidth(ord('👀')) == 2
  21. assert picoterm.wcswidth("hello, 测试a测试👀测\n") == 7 + 1 + 12
  22. text = rgb(12, 34, 56).ansi_fg("hello")
  23. out_list = []
  24. assert picoterm.sscanf(text, "\x1b[38;2;%d;%d;%dm", out_list)
  25. assert out_list == [12, 34, 56]
  26. assert picoterm.sscanf(text, "\x1b[38;2;%d;%d;%dmhello", out_list)
  27. assert out_list == [12, 34, 56]
  28. assert picoterm.sscanf(text, "\x1b[38;2;%d;%d;%d", out_list)
  29. assert not picoterm.sscanf(text, "\x1b[38;2;%d;%d;%dm???", out_list)
  30. assert not picoterm.sscanf(text, "\x1b[77;2;%d;%d;%dm", out_list)