diff --git a/src/elements.rs b/src/elements.rs index d4c29ff3..ea307aff 100644 --- a/src/elements.rs +++ b/src/elements.rs @@ -7,5 +7,6 @@ pub mod pipeline; pub mod command; pub mod io; pub mod word; +pub mod subword; use self::io::pipe::Pipe; diff --git a/src/elements/subword.rs b/src/elements/subword.rs new file mode 100644 index 00000000..6aca362e --- /dev/null +++ b/src/elements/subword.rs @@ -0,0 +1,26 @@ +//SPDX-FileCopyrightText: 2022 Ryuichi Ueda ryuichiueda@gmail.com +//SPDX-License-Identifier: BSD-3-Clause + +pub mod unquoted; +pub mod brace; + +use crate::{Feeder, ShellCore}; +use super::subword::unquoted::UnquotedSubword; +use std::fmt; +use std::fmt::Debug; + +impl Debug for dyn Subword { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + fmt.debug_struct(&self.get_text()).finish() + } +} + +pub trait Subword { + fn get_text(&self) -> String; + fn eval(&mut self) -> Vec>; +} + +pub fn parse(feeder: &mut Feeder, core: &mut ShellCore) -> Option> { + if let Some(a) = UnquotedSubword::parse(feeder, core){ Some(Box::new(a)) } + else{ None } +} diff --git a/src/elements/word.rs b/src/elements/word.rs index 3fbdb7f9..c2d8a4e6 100644 --- a/src/elements/word.rs +++ b/src/elements/word.rs @@ -2,6 +2,8 @@ //SPDX-License-Identifier: BSD-3-Clause use crate::{Feeder, ShellCore}; +use crate::elements::subword; +use crate::elements::subword::Subword; #[derive(Debug)] pub struct Word {