Skip to content

Commit

Permalink
wasm: add to_ans
Browse files Browse the repository at this point in the history
  • Loading branch information
ahaoboy committed Oct 27, 2024
1 parent 0e6a3bc commit 43d19ff
Show file tree
Hide file tree
Showing 12 changed files with 234 additions and 10 deletions.
6 changes: 1 addition & 5 deletions ansi2/src/ans.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,16 +80,12 @@ mod test {
if p.ends_with(".min.ans") {
continue;
}
println!("{:?}", p);
let s = std::fs::read_to_string(&p).unwrap();
let min = to_ans(&s, None, true);

let c1 = Canvas::new(&s, None);
let c2 = Canvas::new(&min, None);
// assert_eq!(c1, c2);
if c1 != c2 {
println!("{}", p);
}
assert_eq!(c1, c2);
}
}
}
19 changes: 16 additions & 3 deletions ansi2/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ pub struct Canvas {
}

fn set_node(v: &mut Vec<Vec<Node>>, node: Node, x: usize, y: usize) {
while y >= v.len() {
v.push(Vec::new());
}
ensure_height(v, y);

let row = &mut v[y];
while x >= row.len() {
Expand All @@ -68,6 +66,12 @@ fn set_node(v: &mut Vec<Vec<Node>>, node: Node, x: usize, y: usize) {
row[x] = node;
}

fn ensure_height(v: &mut Vec<Vec<Node>>, h: usize) {
while v.len() <= h {
v.push(Vec::new());
}
}

impl Canvas {
pub fn new<S: AsRef<str>>(str: S, max_width: Option<usize>) -> Self {
let s = str.as_ref();
Expand Down Expand Up @@ -115,7 +119,9 @@ impl Canvas {
Token::LineFeed => {
cur_y += 1;
cur_x = 0;
ensure_height(&mut pixels, cur_y);
}

Token::Char(c) => {
let node = Node {
text: c.into(),
Expand Down Expand Up @@ -183,6 +189,7 @@ impl Canvas {
Token::CursorUp(c) => cur_y = cur_y.saturating_sub(c as usize),
Token::CursorDown(c) => {
cur_y += c as usize;
ensure_height(&mut pixels, cur_y);
}
Token::CursorBack(c) => cur_x = cur_x.saturating_sub(c as usize),
Token::CursorForward(c) => {
Expand All @@ -191,6 +198,7 @@ impl Canvas {
cur_x %= max_width;
cur_y += 1;
}
ensure_height(&mut pixels, cur_y);
}
Token::Backspace => cur_x = cur_x.saturating_sub(1),
Token::Tab => {
Expand All @@ -205,22 +213,26 @@ impl Canvas {
cur_x %= max_width;
cur_y += 1;
}
ensure_height(&mut pixels, cur_y);
}

Token::CarriageReturn => cur_x = 0,

Token::CursorNextLine(n) => {
cur_y += n as usize;
cur_x = 0;
ensure_height(&mut pixels, cur_y);
}
Token::CursorPreviousLine(n) => {
cur_y = cur_y.saturating_sub(n as usize);
cur_x = 0;
ensure_height(&mut pixels, cur_y);
}
Token::CursorHorizontalAbsolute(n) => cur_x = (n - 1).max(0) as usize,
Token::CursorPosition(x, y) => {
cur_x = x as usize;
cur_y = y as usize;
ensure_height(&mut pixels, cur_y);
}
Token::SlowBlink | Token::RapidBlink => blink = true,
Token::Reverse => {
Expand Down Expand Up @@ -268,6 +280,7 @@ impl Canvas {
if i == '\n' {
cur_x = 0;
cur_y += 1;
ensure_height(&mut pixels, cur_y);
continue;
}

Expand Down
4 changes: 3 additions & 1 deletion ansi2/src/snapshots/ansi2__test__fastfetch-2.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ source: ansi2/src/lib.rs
expression: canvas
---
Canvas {
pixels: [],
pixels: [
[],
],
w: 48,
h: 1,
}
4 changes: 3 additions & 1 deletion ansi2/src/snapshots/ansi2__test__fastfetch-3.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
source: ansi2/src/lib.rs
expression: canvas.minify()
---
[]
[
[],
]
3 changes: 3 additions & 0 deletions assets/24bit-color.min.ans
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
██████████████████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████████████████████████████
17 changes: 17 additions & 0 deletions assets/8bit-color.min.ans
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
████████
████████

██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████
██████████████████

████████████████████████
9 changes: 9 additions & 0 deletions assets/ansi-default.min.ans
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
╭─#─┬───────name────────┬─preview─┬─short name─┬───code───╮
│ 0 │ default │ NUSHELL │ def │ \e[39m │
│ 1 │ default_bold │ NUSHELL │ defb │ \e[1;39m │
│ 2 │ default_underline │ NUSHELL │ defu │ \e[4;39m │
│ 3 │ default_italic │ NUSHELL │ defi │ \e[3;39m │
│ 4 │ default_dimmed │ NUSHELL │ defd │ \e[2;39m │
│ 5 │ default_reverse │ NUSHELL │ defr │ \e[7;39m │
│ 6 │ bg_default │ NUSHELL │ bg_def │ \e[49m │
╰───┴───────────────────┴─────────┴────────────┴──────────╯
22 changes: 22 additions & 0 deletions assets/colortable.min.ans
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

40m 41m 42m 43m 44m 45m 46m 47m 49m
30m  30;40m  30;41m  30;42m  30;43m  30;44m  30;45m  30;46m  30;47m  30;49m
31m  31;40m  31;41m  31;42m  31;43m  31;44m  31;45m  31;46m  31;47m  31;49m
32m  32;40m  32;41m  32;42m  32;43m  32;44m  32;45m  32;46m  32;47m  32;49m
33m  33;40m  33;41m  33;42m  33;43m  33;44m  33;45m  33;46m  33;47m  33;49m
34m  34;40m  34;41m  34;42m  34;43m  34;44m  34;45m  34;46m  34;47m  34;49m
35m  35;40m  35;41m  35;42m  35;43m  35;44m  35;45m  35;46m  35;47m  35;49m
36m  36;40m  36;41m  36;42m  36;43m  36;44m  36;45m  36;46m  36;47m  36;49m
37m  37;40m  37;41m  37;42m  37;43m  37;44m  37;45m  37;46m  37;47m  37;49m
39m  39;40m  39;41m  39;42m  39;43m  39;44m  39;45m  39;46m  39;47m  39;49m


100m 101m 102m 103m 104m 105m 106m 107m
90m  90;100m  90;101m  90;102m  90;103m  90;104m  90;105m  90;106m  90;107m
91m  91;100m  91;101m  91;102m  91;103m  91;104m  91;105m  91;106m  91;107m
92m  92;100m  92;101m  92;102m  92;103m  92;104m  92;105m  92;106m  92;107m
93m  93;100m  93;101m  93;102m  93;103m  93;104m  93;105m  93;106m  93;107m
94m  94;100m  94;101m  94;102m  94;103m  94;104m  94;105m  94;106m  94;107m
95m  95;100m  95;101m  95;102m  95;103m  95;104m  95;105m  95;106m  95;107m
96m  96;100m  96;101m  96;102m  96;103m  96;104m  96;105m  96;106m  96;107m
97m  97;100m  97;101m  97;102m  97;103m  97;104m  97;105m  97;106m  97;107m
Loading

0 comments on commit 43d19ff

Please sign in to comment.