3个稳定版本
1.0.2 | 2023年10月10日 |
---|---|
1.0.1 | 2022年8月25日 |
0.3.0 |
|
0.2.0 |
|
0.1.0 |
|
#967 在 文本处理
61 每月下载量
在 ChatGPT_rust 中使用
31KB
611 代码行
_ ___ _ | | |__ \ | | | |_ ___ __ __ ) | __ _ _ __ | |_ | __| / _ \\ \/ / / / / _` || '__|| __| | |_ | __/ ) ( / /_ | (_| || | | |_ \__| \___|/_/\_\|____| \__,_||_| \__|
描述
简单的将文本转换为ascii艺术的库。该库包含多种字体,用户可以从文件或字符串中自行选择字体。安装
text2art = "1.0.2"
使用方法
运行cargo run --example basic_usage
代码
use text2art::BasicFonts;
use text2art::Font;
use text2art::Printer;
fn main() {
let font = match Font::from_basic(BasicFonts::Big) {
Ok(font) => font,
Err(_) => panic!("something wrong with font"),
};
let prntr = Printer::with_font(font);
prntr.print_to_stdio("Welcome to tex2art! :)").ok();
prntr.print_to_stdio("text for print_to_stdio").ok();
prntr
.print_to("text for print_to", &mut std::io::stdout())
.ok();
let rendered_text = prntr.render_text("text for render");
match rendered_text {
Ok(rendered_text) => println!("{}", rendered_text),
Err(_) => println!("Something went wrong!"),
}
}
输出
__ __ __ _ _ _ ___ _ _ \ \ \ \ / / | | | | | | |__ \ | | | | _ | | \ \ /\ / / ___ | | ___ ___ _ __ ___ ___ | |_ ___ | |_ ___ __ __ ) | __ _ _ __ | |_ | | (_) | | \ \/ \/ / / _ \| | / __| / _ \ | '_ ` _ \ / _ \ | __| / _ \ | __| / _ \\ \/ / / / / _` || '__|| __|| | | | \ /\ / | __/| || (__ | (_) || | | | | || __/ | |_ | (_) | | |_ | __/ ) ( / /_ | (_| || | | |_ |_| _ | | \/ \/ \___||_| \___| \___/ |_| |_| |_| \___| \__| \___/ \__| \___|/_/\_\|____| \__,_||_| \__|(_) (_)/_/ _ _ __ _ _ _ _ _ _ | | | | / _| (_) | | | | | | | |(_) | |_ ___ __ __| |_ | |_ ___ _ __ _ __ _ __ _ _ __ | |_ | |_ ___ ___ | |_ __| | _ ___ | __| / _ \\ \/ /| __| | _| / _ \ | '__| | '_ \ | '__|| || '_ \ | __| | __| / _ \ / __|| __| / _` || | / _ \ | |_ | __/ ) ( | |_ | | | (_) || | | |_) || | | || | | || |_ ______ | |_ | (_) | ______ \__ \| |_ | (_| || || (_) | \__| \___|/_/\_\ \__| |_| \___/ |_| | .__/ |_| |_||_| |_| \__||______| \__| \___/ |______||___/ \__| \__,_||_| \___/ | | |_| _ _ __ _ _ _ | | | | / _| (_) | | | | | |_ ___ __ __| |_ | |_ ___ _ __ _ __ _ __ _ _ __ | |_ | |_ ___ | __| / _ \\ \/ /| __| | _| / _ \ | '__| | '_ \ | '__|| || '_ \ | __| | __| / _ \ | |_ | __/ ) ( | |_ | | | (_) || | | |_) || | | || | | || |_ ______ | |_ | (_) | \__| \___|/_/\_\ \__| |_| \___/ |_| | .__/ |_| |_||_| |_| \__||______| \__| \___/ | | |_| _ _ __ _ | | | | / _| | | | |_ ___ __ __| |_ | |_ ___ _ __ _ __ ___ _ __ __| | ___ _ __ | __| / _ \\ \/ /| __| | _| / _ \ | '__| | '__| / _ \| '_ \ / _` | / _ \| '__| | |_ | __/ ) ( | |_ | | | (_) || | | | | __/| | | || (_| || __/| | \__| \___|/_/\_\ \__| |_| \___/ |_| |_| \___||_| |_| \__,_| \___||_|
如何创建字体
您可以从字符串或文件中使用自己的字体。您可以使用以下函数
pub fn from_basic(font: basic_fonts::BasicFonts) -> Result<Font, FontError>
pub fn from_file<P: AsRef<std::path::Path>>(path: P) -> Result<Font, FontError>
字体规则
- 固定行宽。所有行应该具有相同的宽度
- 字体行必须符合格式。字体必须包含3个部分:字符、偏移和数据。
例如
'a':0: __ _ \n / _` |\n| (_| |\n \__,_|\n
其中
'a' - font grapheme (you can use any unicode grapheme here) : - segmentation symbol 0 - shift __ _ \n / _` |\n| (_| |\n \__,_|\n - data
- 使用"\n"进行行分割。例如
_ | | | |_ | __| | |_ \__|
将被实现为
't':0: _ \n| | \n| |_ \n| __|\n| |_ \n \__|\n
- 如果需要,使用偏移。通过偏移,您可以上下移动字符。所有字符都对齐在基线。以下是大字体的示例。
没有偏移的字符
't':0: _ \n| | \n| |_ \n| __|\n| |_ \n \__|\n _ ___ 5 | | | |_ | __| | |_ \__| ___ 0 | | 1 5 Internal parameters: Width - 5 Height - 6 Shift - 0
负偏移的字符
'p':-2: _ __ \n| '_ \ \n| |_) |\n| .__/ \n| | \n|_| \n _ __ ___ 3 | '_ \ | |_) | | .__/ ___ 0 | | |_| __ -2 | | 1 7 Internal parameters: Width - 7 Height - 6 Shift - -2
正偏移的字符
'"':3: _ _ \n( | )\n V V \n _ _ ___ 5 ( | ) V V ___ 3 ___ 0 | | 1 5 Internal parameters: Width - 5 Height - 3 Shift - 3
所有示例在一个结构中
_ _ _ | | ( | ) | |_ _ __ V V | __|| '_ \ | |_ | |_) | \__|| .__/ | | |_|
- 您可以添加注释。使用'#'进行注释。
例如
# letters [a-z] 'a':0: __ _ \n / _` |\n| (_| |\n \__,_|\n 'b':0: _ \n| | \n| |__ \n| '_ \ \n| |_) |\n|_.__/ \n
依赖项
~2.8–4MB
~62K SLoC