use proc_macro::TokenStream;
use proc_macro2::TokenStream as TokenStream2;
use quote::quote;
use syn::LitStr;
use crate::color_context::Context;
use crate::error::{Error, SpanError};
use crate::format_args::{Node, get_format_string, parse_args, parse_format_string};
pub fn get_untagged(input: TokenStream) -> Result<TokenStream2, SpanError> {
let args = parse_args(input)?;
let format_string_token = get_format_string(args.first())?;
let format_string = format_string_token.value();
if args.len() > 1 {
return Err(SpanError::new(Error::TooManyArgs, None));
}
let format_nodes = parse_format_string(&format_string, &format_string_token)?;
let mut format_string = String::new();
let mut color_context = Context::new();
for node in format_nodes {
match node {
Node::Text(s) | Node::Placeholder(s) => {
format_string.push_str(s);
},
Node::ColorTagGroup(tag_group) => {
color_context.apply_tags(tag_group)?;
},
}
}
let format_string = LitStr::new(&format_string, format_string_token.span());
Ok(quote! { #format_string })
}