Compare commits

...

2 commits

Author SHA1 Message Date
44ebe17c66 input_dsl: cleanup commented code
Some checks are pending
/ build (push) Waiting to run
2025-04-30 21:51:07 +03:00
119d5c35f0 input_dsl: expose InputMap layers; add From<SourceIter> for TokenIter 2025-04-30 21:49:01 +03:00
2 changed files with 11 additions and 36 deletions

View file

@ -14,7 +14,10 @@ use crate::*;
/// Provides a native [Iterator] API over the [ConstIntoIter] [SourceIter] /// Provides a native [Iterator] API over the [ConstIntoIter] [SourceIter]
/// [TokenIter::next] returns just the [Token] and mutates `self`, /// [TokenIter::next] returns just the [Token] and mutates `self`,
/// instead of returning an updated version of the struct as [SourceIter::next] does. /// instead of returning an updated version of the struct as [SourceIter::next] does.
#[derive(Copy, Clone, Debug, Default, PartialEq)] pub struct TokenIter<'a>(pub SourceIter<'a>); #[derive(Copy, Clone, Debug, Default, PartialEq)] pub struct TokenIter<'a>(
pub SourceIter<'a>
);
impl<'a> TokenIter<'a> { impl<'a> TokenIter<'a> {
pub const fn new (source: &'a str) -> Self { pub const fn new (source: &'a str) -> Self {
Self(SourceIter::new(source)) Self(SourceIter::new(source))
@ -31,6 +34,12 @@ impl<'a> Iterator for TokenIter<'a> {
} }
} }
impl<'a> From<SourceIter<'a>> for TokenIter<'a> {
fn from (source: SourceIter<'a>) -> Self{
Self(source)
}
}
/// Owns a reference to the source text. /// Owns a reference to the source text.
/// [SourceIter::next] emits subsequent pairs of: /// [SourceIter::next] emits subsequent pairs of:
/// * a [Token] and /// * a [Token] and

View file

@ -74,7 +74,7 @@ impl<'a, S, C: DslCommand<'a, S>, I: DslInput> KeyMap<'a, S, C, I> for TokenIter
/// which may be made available subject to given conditions. /// which may be made available subject to given conditions.
pub struct InputMap<'a, S, C: DslCommand<'a, S>, I: DslInput, M: KeyMap<'a, S, C, I> + Send + Sync> { pub struct InputMap<'a, S, C: DslCommand<'a, S>, I: DslInput, M: KeyMap<'a, S, C, I> + Send + Sync> {
__: &'a PhantomData<(S, C, I)>, __: &'a PhantomData<(S, C, I)>,
layers: Vec<( pub layers: Vec<(
fn(&S)->bool, fn(&S)->bool,
M M
)>, )>,
@ -152,37 +152,3 @@ where
None None
} }
} }
//fn handle <C> (&self, state: &mut T, input: &U) -> Perhaps<bool> {
//for layer in self.layers.iter() {
//if !(layer.0)(state) {
//continue
//}
//let command: Option<C> = SourceIter(layer.1).command::<_, _, _>(state, input);
//if let Some(command) = command {
//if let Some(undo) = command.execute(state)? {
////app.history.push(undo);
//}
//return Ok(Some(true))
//}
//}
//Ok(None)
//}
//}
//fn layer (mut self, keymap: &'static str) -> Self {
//self.add_layer(keymap);
//self
//}
//fn layer_if (mut self, condition: impl Fn(&T)->bool + 'static, keymap: &'static str) -> Self {
//self.add_layer_if(condition, keymap);
//self
//}
//fn add_layer (&mut self, keymap: &'static str) -> &mut Self {
//self.layers.push((Box::new(|_|true), keymap));
//self
//}
//fn add_layer_if (&mut self, condition: impl Fn(&T)->bool + 'static, keymap: &'static str) -> &mut Self {
//self.layers.push((Box::new(condition), keymap));
//self
//}
//}