asciimation

An ASCII animation interpreter for the terminal.


asciimation

/

src

/

ansi_escape_codes.hh

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
#ifndef OB_ANSI_ESCAPE_CODES_HH
#define OB_ANSI_ESCAPE_CODES_HH

#include <string>
#include <vector>
#include <sstream>
#include <iostream>

namespace OB
{

namespace ANSI_Escape_Codes
{
  // standard escaped characters
  extern std::string const nl;
  extern std::string const cr;
  extern std::string const tab;
  extern std::string const alert;

  // escape code sequence
  extern std::string const esc;

  // clears all attributes
  extern std::string const reset;

  // style
  extern std::string const bold;
  extern std::string const dim;
  extern std::string const italic;
  extern std::string const underline;
  extern std::string const blink;
  extern std::string const rblink;
  extern std::string const reverse;
  extern std::string const conceal;
  extern std::string const cross;

  // erasing
  extern std::string const erase_end;
  extern std::string const erase_start;
  extern std::string const erase_line;
  extern std::string const erase_down;
  extern std::string const erase_up;
  extern std::string const erase_screen;

  // cursor visibility
  extern std::string const cursor_hide;
  extern std::string const cursor_show;

  // cursor movement
  extern std::string const cursor_home;
  extern std::string const cursor_up;
  extern std::string const cursor_down;
  extern std::string const cursor_right;
  extern std::string const cursor_left;
  extern std::string const cursor_save;
  extern std::string const cursor_load;

  // foreground color
  extern std::string const fg_black;
  extern std::string const fg_red;
  extern std::string const fg_green;
  extern std::string const fg_yellow;
  extern std::string const fg_blue;
  extern std::string const fg_magenta;
  extern std::string const fg_cyan;
  extern std::string const fg_white;

  // background color
  extern std::string const bg_black;
  extern std::string const bg_red;
  extern std::string const bg_green;
  extern std::string const bg_yellow;
  extern std::string const bg_blue;
  extern std::string const bg_magenta;
  extern std::string const bg_cyan;
  extern std::string const bg_white;

  // prototypes
  std::string fg_256(std::string x);
  std::string bg_256(std::string x);
  std::string htoi(std::string x);
  std::string fg_true(std::string x);
  std::string bg_true(std::string x);
  std::string cursor_set(size_t x, size_t y);

  template<class T>
  std::string wrap(T const val, std::string col)
  {
    std::string x {std::to_string(val)};
    if (x.size() != 6) return {};
    std::string h1 {x.substr(0, 2)};
    std::string h2 {x.substr(2, 2)};
    std::string h3 {x.substr(4, 2)};
    std::stringstream ss; ss
    << esc << "38;2;"
    << htoi(h1) << ";"
    << htoi(h2) << ";"
    << htoi(h3) << "m"
    << val
    << reset;
    return ss.str();
  }

  template<class T>
  std::string wrap(T const val, std::vector<std::string> const col)
  {
    std::stringstream ss;
    for (auto const& e : col)
    {
      ss << e;
    }
    ss << val << reset;
    return ss.str();
  }

} // namespace ANSI_Escape_Codes

} // namespace OB

#endif // OB_ANSI_ESCAPE_CODES_HH
Back to Top