#ascii-art #font #user #cli #printing

text2art

简单的将文本转换为ascii艺术的库

3个稳定版本

1.0.2 2023年10月10日
1.0.1 2022年8月25日
0.3.0 2022年8月16日
0.2.0 2022年8月16日
0.1.0 2022年8月9日

#967文本处理

Download history 22/week @ 2024-04-03 22/week @ 2024-04-10 2/week @ 2024-04-17 6/week @ 2024-04-24 1/week @ 2024-05-22 6/week @ 2024-05-29 3/week @ 2024-06-05

61 每月下载量
ChatGPT_rust 中使用

MIT 许可证

31KB
611 代码行

 _                ___                _   
| |              |__ \              | |  
| |_   ___ __  __   ) |  __ _  _ __ | |_ 
| __| / _ \\ \/ /  / /  / _` || '__|| __|
| |_ |  __/ )  (  / /_ | (_| || |   | |_ 
 \__| \___|/_/\_\|____| \__,_||_|    \__|

Status Crates.io downloads Crates.io downloads License


描述

简单的将文本转换为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>

字体规则

  1. 固定行宽。所有行应该具有相同的宽度
  2. 字体行必须符合格式。字体必须包含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
  1. 使用"\n"进行行分割。例如
 _   
| |  
| |_ 
| __|
| |_ 
 \__|

将被实现为

't':0: _   \n| |  \n| |_ \n| __|\n| |_ \n \__|\n
  1. 如果需要,使用偏移。通过偏移,您可以上下移动字符。所有字符都对齐在基线。以下是大字体的示例。

没有偏移的字符

'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 
| __|| '_ \ 
| |_ | |_) |
 \__|| .__/       
     | |    
     |_|     
  1. 您可以添加注释。使用'#'进行注释。

例如

# letters [a-z]
'a':0:  __ _ \n / _` |\n| (_| |\n \__,_|\n
'b':0: _     \n| |    \n| |__  \n| '_ \ \n| |_) |\n|_.__/ \n

依赖项

~2.8–4MB
~62K SLoC