badascii_doc/
lib.rs

1use badascii::{render::RenderJob, text_buffer::TextBuffer};
2use proc_macro::TokenStream;
3use quote::quote;
4use syn::{LitStr, parse_macro_input};
5
6fn get_text_buffer(input: LitStr) -> TextBuffer {
7    let input = input.token().to_string();
8    let input_len = input.len();
9    let input = input
10        .chars()
11        .skip(1)
12        .take(input_len - 2)
13        .collect::<String>();
14    TextBuffer::with_text(&input)
15}
16
17#[proc_macro]
18pub fn badascii_formal(input: TokenStream) -> TokenStream {
19    let input = parse_macro_input!(input as LitStr);
20    let text_buffer = get_text_buffer(input);
21    let job = RenderJob::formal(text_buffer);
22    let svg = badascii::svg::render(&job, "currentColor", "none");
23    let svg = format!("<p>{svg}</p>");
24    quote!(#svg).into()
25}
26
27#[proc_macro]
28pub fn badascii(input: TokenStream) -> TokenStream {
29    let input = parse_macro_input!(input as LitStr);
30    let text_buffer = get_text_buffer(input);
31    let job = RenderJob::rough(text_buffer);
32    let svg = badascii::svg::render(&job, "currentColor", "none");
33    let svg = format!("<p>{svg}</p>");
34    quote!(#svg).into()
35}