diff options
author | Melody Horn <melody@boringcactus.com> | 2021-04-04 14:57:44 -0600 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2021-04-04 14:57:44 -0600 |
commit | e3c7df868b638f8dbf2423401b2fb72fc0779249 (patch) | |
tree | b84dbac90821d97cf58d67b48d6f6622b6217530 | |
parent | 81a9e84be89719e2a856b7600b6cf5780295d340 (diff) | |
download | makers-e3c7df868b638f8dbf2423401b2fb72fc0779249.tar.gz makers-e3c7df868b638f8dbf2423401b2fb72fc0779249.zip |
implement `strip` function
-rw-r--r-- | src/makefile/functions.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/makefile/functions.rs b/src/makefile/functions.rs index d746d8a..750d56a 100644 --- a/src/makefile/functions.rs +++ b/src/makefile/functions.rs @@ -16,6 +16,10 @@ pub fn expand_call( to_eval: Option<Rc<RefCell<Vec<String>>>>, ) -> Result<String> { match name { + "strip" => { + assert_eq!(args.len(), 1); + text::strip(macros, &args[0]) + } "filter" => { assert_eq!(args.len(), 2); text::filter(macros, &args[0], &args[1]) @@ -95,6 +99,13 @@ pub fn expand_call( mod text { use super::*; + pub fn strip(macros: &MacroSet, text: &TokenString) -> Result<String> { + let text = macros.expand(text)?; + // TODO don't allocate this vec + let words = text.split_whitespace().collect::<Vec<_>>(); + Ok(words.join(" ")) + } + pub fn filter(macros: &MacroSet, patterns: &TokenString, text: &TokenString) -> Result<String> { let patterns = macros.expand(patterns)?; let patterns = patterns.split_whitespace().collect::<Vec<_>>(); |