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}