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 strip_outer(x: &str) -> String {
7    let x = x
8        .chars()
9        .skip_while(|&c| c != '"')
10        .skip(1)
11        .collect::<String>();
12    let x = x
13        .chars()
14        .rev()
15        .skip_while(|&c| c != '"')
16        .skip(1)
17        .collect::<String>();
18    x.chars().rev().collect()
19}
20
21fn get_text_buffer(input: LitStr) -> TextBuffer {
22    let input = input.token().to_string();
23    let input = strip_outer(&input);
24    TextBuffer::with_text(&input)
25}
26
27#[proc_macro]
28pub fn badascii_formal(input: TokenStream) -> TokenStream {
29    let input = parse_macro_input!(input as LitStr);
30    let text_buffer = get_text_buffer(input);
31    let job = RenderJob::formal(text_buffer);
32    let svg = badascii::svg::render(&job, "currentColor", "none");
33    let svg = format!("<p></p><div style=\"text-align:center;\">{svg}</div><p></p>");
34    quote!(#svg).into()
35}
36
37#[proc_macro]
38pub fn badascii(input: TokenStream) -> TokenStream {
39    let input = parse_macro_input!(input as LitStr);
40    let text_buffer = get_text_buffer(input);
41    let job = RenderJob::rough(text_buffer);
42    let svg = badascii::svg::render(&job, "currentColor", "none");
43    let svg = format!("<p></p><div style=\"text-align:center;\">{svg}</div><p></p>");
44    quote!(#svg).into()
45}