use super::parser::ValueParser;
use crate::ast::CssValue;
use bumpalo::Bump;
use bumpalo::collections::Vec as BumpVec;
use tsv_lang::Span;
pub(crate) fn parse_function_arguments<'arena>(
args_str: &str,
parent_span: Span,
arena: &'arena Bump,
) -> &'arena [CssValue<'arena>] {
let trim_start_offset = args_str.len() - crate::escapes::trim_start_css(args_str).len();
let trimmed = crate::escapes::trim_end_preserving_escape(&args_str[trim_start_offset..]);
if trimmed.is_empty() {
return &[];
}
let trim_end_offset = args_str.len() - trim_start_offset - trimmed.len();
let adjusted_span = Span {
start: parent_span.start + trim_start_offset as u32,
end: parent_span.end - trim_end_offset as u32,
};
let parser = ValueParser::new_within(trimmed, adjusted_span, true);
let value = parser.parse(arena);
match value {
CssValue::CommaSeparated { values, .. } => values,
single => {
let mut v = BumpVec::new_in(arena);
v.push(single);
v.into_bump_slice()
}
}
}