summaryrefslogtreecommitdiff
path: root/src/buffer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.rs')
-rw-r--r--src/buffer.rs235
1 files changed, 0 insertions, 235 deletions
diff --git a/src/buffer.rs b/src/buffer.rs
deleted file mode 100644
index 78b6bd5..0000000
--- a/src/buffer.rs
+++ /dev/null
@@ -1,235 +0,0 @@
-use serde::{Deserialize, Serialize};
-
-use crate::ScriptContext;
-
-mod tortuise {
- #[link(wasm_import_module = "tortuise")]
- unsafe extern "C" {
- pub safe fn add_cell(
- context: u64,
- character: u32,
- location: u32,
- z: u32,
- foreground_color: u32,
- background_color: u32,
- underline_color: u32,
- attributes: u32,
- );
- pub safe fn window_size(context: u64) -> u32;
- }
-}
-
-#[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Serialize, Deserialize)]
-pub struct Cell {
- pub character: char,
- pub foreground_color: Color,
- pub background_color: Color,
- pub underline_color: Color,
- pub attributes: Attributes,
- pub x: u16,
- pub y: u16,
- pub z: u8,
-}
-
-#[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Serialize, Deserialize)]
-pub struct WindowSize {
- pub rows: u16,
- pub columns: u16,
-}
-
-#[derive(
- Copy, Clone, Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash, Serialize, Deserialize,
-)]
-pub enum Color {
- /// Resets the terminal color.
- #[default]
- Reset,
-
- /// Black color.
- Black,
-
- /// Dark grey color.
- DarkGrey,
-
- /// Light red color.
- Red,
-
- /// Dark red color.
- DarkRed,
-
- /// Light green color.
- Green,
-
- /// Dark green color.
- DarkGreen,
-
- /// Light yellow color.
- Yellow,
-
- /// Dark yellow color.
- DarkYellow,
-
- /// Light blue color.
- Blue,
-
- /// Dark blue color.
- DarkBlue,
-
- /// Light magenta color.
- Magenta,
-
- /// Dark magenta color.
- DarkMagenta,
-
- /// Light cyan color.
- Cyan,
-
- /// Dark cyan color.
- DarkCyan,
-
- /// White color.
- White,
-
- /// Grey color.
- Grey,
-
- /// An RGB color. See [RGB color model](https://en.wikipedia.org/wiki/RGB_color_model) for more info.
- ///
- /// Most UNIX terminals and Windows 10 supported only.
- /// See [Platform-specific notes](enum.Color.html#platform-specific-notes) for more info.
- Rgb { r: u8, g: u8, b: u8 },
-
- /// An ANSI color. See [256 colors - cheat sheet](https://jonasjacek.github.io/colors/) for more info.
- ///
- /// Most UNIX terminals and Windows 10 supported only.
- /// See [Platform-specific notes](enum.Color.html#platform-specific-notes) for more info.
- AnsiValue(u8),
-}
-
-#[derive(
- Copy, Clone, Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash, Serialize, Deserialize,
-)]
-pub struct Attributes(u32);
-
-pub enum Attribute {
- /// Increases the text intensity.
- Bold = 1,
- /// Decreases the text intensity.
- Dim = 2,
- /// Emphasises the text.
- Italic = 4,
- /// Underlines the text.
- Underlined = 8,
-
- // Other types of underlining
- /// Double underlines the text.
- DoubleUnderlined = 16,
- /// Undercurls the text.
- Undercurled = 32,
- /// Underdots the text.
- Underdotted = 64,
- /// Underdashes the text.
- Underdashed = 128,
-
- /// Makes the text blinking (< 150 per minute).
- SlowBlink = 256,
- /// Makes the text blinking (>= 150 per minute).
- RapidBlink = 512,
- /// Swaps foreground and background colors.
- Reverse = 1024,
- /// Hides the text (also known as Conceal).
- Hidden = 2048,
- /// Crosses the text.
- CrossedOut = 4096,
- /// Sets the [Fraktur](https://en.wikipedia.org/wiki/Fraktur) typeface.
- ///
- /// Mostly used for [mathematical alphanumeric symbols](https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols).
- Fraktur = 8192,
- /// Makes the text framed.
- Framed = 16384,
- /// Makes the text encircled.
- Encircled = 32768,
- /// Draws a line at the top of the text.
- OverLined = 65536,
-}
-
-fn color_to_u32(color: Color) -> u32 {
- match color {
- Color::Reset => 1 << 24,
- Color::Black => 1 << 24 | 1,
- Color::DarkGrey => 1 << 24 | 2,
- Color::Red => 1 << 24 | 3,
- Color::DarkRed => 1 << 24 | 4,
- Color::Green => 1 << 24 | 5,
- Color::DarkGreen => 1 << 24 | 6,
- Color::Yellow => 1 << 24 | 7,
- Color::DarkYellow => 1 << 24 | 8,
- Color::Blue => 1 << 24 | 9,
- Color::DarkBlue => 1 << 24 | 10,
- Color::Magenta => 1 << 24 | 11,
- Color::DarkMagenta => 1 << 24 | 12,
- Color::Cyan => 1 << 24 | 13,
- Color::DarkCyan => 1 << 24 | 14,
- Color::White => 1 << 24 | 15,
- Color::Grey => 1 << 24 | 16,
- Color::AnsiValue(num) => 2 << 24 | num as u32,
- Color::Rgb { r, g, b } => 3 << 24 | ((r as u32) << 16) | ((g as u32) << 8) | (b as u32),
- }
-}
-
-impl Attributes {
- pub fn none() -> Self {
- Self(0)
- }
-
- pub fn with(self, attribute: Attribute) -> Self {
- Self(self.0 | attribute as u32)
- }
-
- pub fn without(self, attribute: Attribute) -> Self {
- Self(self.0 & !(attribute as u32))
- }
-
- pub fn set(&mut self, attribute: Attribute) {
- self.0 |= attribute as u32;
- }
-
- pub fn unset(&mut self, attribute: Attribute) {
- self.0 &= !(attribute as u32)
- }
-
- pub fn has(self, attribute: Attribute) -> bool {
- self.0 & (attribute as u32) != 0
- }
-
- pub fn extend(&mut self, attributes: Attributes) {
- self.0 |= attributes.0
- }
-
- pub fn is_empty(self) -> bool {
- self.0 == 0
- }
-}
-
-impl ScriptContext {
- pub fn add_cell(&self, cell: Cell) {
- tortuise::add_cell(
- self.0,
- cell.character as u32,
- (cell.x as u32) << 16 | cell.y as u32,
- cell.z as u32,
- color_to_u32(cell.foreground_color),
- color_to_u32(cell.background_color),
- color_to_u32(cell.underline_color),
- cell.attributes.0,
- );
- }
-
- pub fn window_size(&self) -> WindowSize {
- let size = tortuise::window_size(self.0);
- WindowSize {
- rows: (size >> 16) as u16,
- columns: (size & 0xffff) as u16,
- }
- }
-}