forked from ratatui/ansi-to-tui
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is most probably terrible code !
- Loading branch information
0 parents
commit 4cd9c8f
Showing
13 changed files
with
527 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
/target | ||
Cargo.lock |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
[package] | ||
name = "ansitui" | ||
version = "0.1.0" | ||
edition = "2018" | ||
|
||
[dependencies] | ||
tui = { version = "0.14.0", default-features = false } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#!/usr/bin/env python | ||
|
||
# for code in range(107): | ||
# print(f"\x1b[{code}mTHIS IS TEXT\x1b[0m") | ||
|
||
# for z in range(255): | ||
# print( | ||
# f"\x1b[{38};{5};{z};{1};{7};{3};{5};{4}mTEXT \\x1b[{38};{5};{z}m\\1xb[0m\x1b[0m") | ||
|
||
llist = [27, 49, 49, 49, 51, 49, 109, 49, 50, 51, 52, 27, 48, 109, ] | ||
|
||
for l in llist: | ||
print(chr(l)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;197;228;243m.[0m[38;2;188;224;242m.[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;240;248;252m [0m[38;2;63;166;217mc[0m[38;2;49;159;214ml[0m[38;2;225;241;249m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;247;251;253m [0m[38;2;82;174;221m:[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;65;166;217mc[0m[38;2;238;247;252m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;253;254;255m [0m[38;2;103;184;225m;[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;72;170;219m:[0m[38;2;239;247;252m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;252;254;254m [0m[38;2;193;226;243m.[0m[38;2;37;154;212ml[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;78;172;220m:[0m[38;2;242;249;252m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;249;252;254m [0m[38;2;105;185;225m;[0m[38;2;55;162;215mc[0m[38;2;103;184;225m;[0m[38;2;77;172;220m:[0m[38;2;45;157;213ml[0m[38;2;24;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;69;168;218mc[0m[38;2;231;244;250m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;242;249;252m [0m[38;2;87;177;222m:[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;24;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;59;164;216mc[0m[38;2;225;241;249m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;236;246;251m [0m[38;2;75;171;219m:[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;47;158;214ml[0m[38;2;210;234;246m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;221;239;248m [0m[38;2;58;163;216mc[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;44;157;213ml[0m[38;2;95;181;223m;[0m[38;2;98;182;224m;[0m[38;2;50;160;214ml[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;40;155;212ml[0m[38;2;197;228;244m.[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;200;229;244m.[0m[38;2;46;158;214ml[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;128;196;230m'[0m[38;2;247;251;253m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;250;252;254m [0m[38;2;151;207;234m.[0m[38;2;26;148;210mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;30;150;210mo[0m[38;2;169;215;238m.[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;171;216;238m.[0m[38;2;29;150;210mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;62;165;217mc[0m[38;2;254;254;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;102;184;225m;[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;29;150;210mo[0m[38;2;55;162;215mc[0m[38;2;46;158;214ml[0m[38;2;140;201;232m'[0m[38;2;254;254;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;253;254;255m [0m[38;2;141;202;232m'[0m[38;2;25;148;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;85;176;221m:[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;130;197;230m'[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;25;148;209mo[0m[38;2;72;170;219m:[0m[38;2;112;189;227m,[0m[38;2;210;234;246m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;255;255;255m [0m[38;2;249;252;254m [0m[38;2;110;187;226m,[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;43;156;213ml[0m[38;2;86;176;221m:[0m[38;2;125;195;229m,[0m[38;2;160;211;236m.[0m[38;2;190;225;242m.[0m[38;2;218;238;248m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;227;242;249m [0m[38;2;192;226;243m.[0m[38;2;162;212;237m.[0m[38;2;128;196;230m,[0m[38;2;89;178;222m:[0m[38;2;46;158;214ml[0m[38;2;23;147;209mo[0m[38;2;23;147;209mo[0m[38;2;28;149;210mo[0m[38;2;102;184;225m;[0m[38;2;240;248;252m [0m[38;2;255;255;255m [0m | ||
[0m[38;2;235;246;251m [0m[38;2;81;174;221m:[0m[38;2;59;164;216mc[0m[38;2;114;189;227m,[0m[38;2;166;214;237m.[0m[38;2;215;237;247m [0m[38;2;252;254;254m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;254;254;255m [0m[38;2;219;238;248m [0m[38;2;170;215;238m.[0m[38;2;117;191;228m,[0m[38;2;63;166;217mc[0m[38;2;72;170;219m:[0m[38;2;231;244;250m [0m | ||
[0m[38;2;153;207;235m.[0m[38;2;193;226;243m.[0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;255;255;255m [0m[38;2;200;230;244m.[0m[38;2;141;202;232m'[0m |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,209 @@ | ||
#![allow(dead_code, unused_mut, unused_imports)] | ||
use crate::code::AnsiCode; | ||
use crate::color::AnsiColor; | ||
use crate::error::Error; | ||
use crate::stack::Stack; | ||
use std::slice::Iter; | ||
use tui::{ | ||
style::{Color, Modifier, Style}, | ||
text::{Span, Spans, Text}, | ||
}; | ||
|
||
impl Stack<u8> { | ||
pub fn parse_usize(&mut self) -> usize { | ||
let mut num: usize = 0 as usize; | ||
for n in self.iter() { | ||
// num = num * 10 + (n.saturating_sub(48_u8)) as usize | ||
num = num * 10 + (n - 48_u8) as usize | ||
} | ||
self.clear(); | ||
num | ||
} | ||
pub fn parse_color(&mut self) -> Result<Color, Error> { | ||
let mut color: Color; | ||
let length = self.len(); | ||
if length == 1 { | ||
color = Color::Indexed(self.pop().expect("Shouldn't happen len check in place")) | ||
} else if length == 3 { | ||
let b = self.pop().unwrap(); | ||
let g = self.pop().unwrap(); | ||
let r = self.pop().unwrap(); | ||
color = Color::Rgb(r, g, b); | ||
} else { | ||
return Err(Error::TempError); | ||
} | ||
self.clear(); | ||
Ok(color) | ||
} | ||
} | ||
|
||
#[derive(Debug, PartialEq, Clone, Copy)] | ||
#[repr(u8)] | ||
pub enum AnsiColorMode { | ||
RGB = 2, | ||
Indexed = 5, | ||
} | ||
|
||
#[derive(Debug, PartialEq, Clone, Copy)] | ||
#[repr(u8)] | ||
pub enum AnsiColorLayer { | ||
Background, | ||
Foreground, | ||
} | ||
|
||
#[derive(Debug)] | ||
pub struct AnsiGraphicsStack { | ||
stack: Stack<usize>, | ||
} | ||
|
||
impl AnsiGraphicsStack { | ||
pub fn new() -> Self { | ||
Self { | ||
stack: Stack::new(), | ||
} | ||
} | ||
pub fn push(&mut self, sequence: usize) { | ||
self.stack.push(sequence); | ||
} | ||
pub fn iter(&mut self) -> Iter<usize> { | ||
self.stack.iter() | ||
} | ||
pub fn parse_ansi(&mut self) -> Style { | ||
let mut style = Style::default(); | ||
let mut color_stack: Stack<u8> = Stack::new(); | ||
let mut color_parse: bool = false; | ||
let mut color_parse_mode: Option<AnsiColorMode> = None; | ||
let mut last_sequence: usize = 0; | ||
let mut color_layer: Option<AnsiColorLayer> = None; | ||
// println!("{:?}", self); | ||
for sequence in self.iter().cloned() { | ||
if color_parse { | ||
if sequence < 255 { | ||
if AnsiCode::from(last_sequence as u8) == AnsiCode::ForegroundColorIndex | ||
|| AnsiCode::from(last_sequence as u8) == AnsiCode::BackgroundColorIndex | ||
|| sequence == AnsiColorMode::RGB as usize | ||
{ | ||
color_parse_mode = Some(AnsiColorMode::RGB) | ||
} else if AnsiCode::from(last_sequence as u8) == AnsiCode::ForegroundColorIndex | ||
|| AnsiCode::from(last_sequence as u8) == AnsiCode::BackgroundColorIndex | ||
|| sequence == AnsiColorMode::Indexed as usize | ||
{ | ||
color_parse_mode = Some(AnsiColorMode::Indexed) | ||
} else if color_parse_mode.is_some() { | ||
let mode = color_parse_mode.unwrap(); | ||
match mode { | ||
AnsiColorMode::Indexed => { | ||
color_stack.push(sequence as u8); | ||
match color_layer.unwrap() { | ||
AnsiColorLayer::Foreground => { | ||
style = style.fg(color_stack.parse_color().unwrap()) | ||
} | ||
AnsiColorLayer::Background => { | ||
style = style.bg(color_stack.parse_color().unwrap()) | ||
} | ||
} | ||
} | ||
AnsiColorMode::RGB => { | ||
color_stack.push(sequence as u8); | ||
if color_stack.len() == 3 { | ||
match color_layer.unwrap() { | ||
AnsiColorLayer::Foreground => { | ||
style = style.fg(color_stack.parse_color().unwrap()) | ||
} | ||
AnsiColorLayer::Background => { | ||
style = style.bg(color_stack.parse_color().unwrap()) | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} else { | ||
color_parse = false; | ||
} | ||
} else { | ||
// println!("stop color index"); | ||
color_parse = false; | ||
} | ||
last_sequence = sequence; | ||
continue; | ||
} | ||
let code = AnsiCode::from(sequence as u8); | ||
match code { | ||
AnsiCode::Reset => style = Style::default(), | ||
AnsiCode::Bold => style = style.add_modifier(Modifier::BOLD), | ||
AnsiCode::Faint => style = style.add_modifier(Modifier::DIM), | ||
AnsiCode::Italic => style = style.add_modifier(Modifier::ITALIC), | ||
AnsiCode::Underline => style = style.add_modifier(Modifier::UNDERLINED), | ||
AnsiCode::SlowBlink => style = style.add_modifier(Modifier::SLOW_BLINK), | ||
AnsiCode::RapidBlink => style = style.add_modifier(Modifier::RAPID_BLINK), | ||
AnsiCode::Reverse => style = style.add_modifier(Modifier::REVERSED), | ||
AnsiCode::Conceal => style = style.add_modifier(Modifier::HIDDEN), | ||
AnsiCode::CrossedOut => style = style.add_modifier(Modifier::CROSSED_OUT), | ||
AnsiCode::DefaultForegroundColor => style = style.fg(Color::Reset), | ||
AnsiCode::DefaultBackgroundColor => style = style.bg(Color::Reset), | ||
AnsiCode::ForegroundColorIndex => { | ||
// println!("foreground color index"); | ||
color_parse = true; | ||
color_layer = Some(AnsiColorLayer::Foreground) | ||
} | ||
AnsiCode::BackgroundColorIndex => { | ||
// println!("background color index"); | ||
color_parse = true; | ||
color_layer = Some(AnsiColorLayer::Background) | ||
} | ||
AnsiCode::ForegroundColor(color) => style = style.fg(Color::from(color)), | ||
AnsiCode::BackgroundColor(color) => style = style.bg(Color::from(color)), | ||
_ => (), | ||
} | ||
last_sequence = sequence; | ||
} | ||
self.stack.clear(); | ||
println!("style {:?}", style); | ||
// println!("-----------------------------"); | ||
style | ||
} | ||
} | ||
|
||
pub fn ansi_to_text<'t, B: AsRef<[u8]>>(bytes: B) -> Result<Text<'t>, Error> { | ||
let mut reader = bytes.as_ref().iter(); | ||
let mut buffer: Vec<Spans> = Vec::new(); | ||
let mut style: Option<Style> = None; | ||
let mut ansi_stack: AnsiGraphicsStack = AnsiGraphicsStack::new(); | ||
let mut num_stack: Stack<u8> = Stack::new(); | ||
let mut graphics_start: bool = false; | ||
let mut line_buffer = String::new(); | ||
// let mut last_byte: &u8 = reader.next().expect("Zero size bytes buffer"); | ||
let mut last_byte: &u8 = &0_u8; | ||
for byte in reader { | ||
match (last_byte, byte) { | ||
(&b'\x1b', &b'[') => { | ||
if style.is_some() { | ||
buffer.push(Spans::from(Span::styled( | ||
line_buffer.clone(), | ||
style.unwrap(), | ||
))); | ||
} | ||
graphics_start = true; | ||
} | ||
(_, code) => { | ||
if graphics_start { | ||
if code == &b'm' { | ||
ansi_stack.push(num_stack.parse_usize()); | ||
style = Some(ansi_stack.parse_ansi()); | ||
graphics_start = false; | ||
} else if code == &b';' { | ||
ansi_stack.push(num_stack.parse_usize()); | ||
} else { | ||
num_stack.push(*code); | ||
} | ||
} else if code != &b'\x1b' { | ||
line_buffer.push(*code as char) | ||
} | ||
last_byte = code; | ||
} | ||
} | ||
} | ||
println!("{:?}", buffer); | ||
|
||
Ok(buffer.into()) | ||
} |
Oops, something went wrong.