diff options
| author | tslil <tslil@posteo.de> | 2025-10-31 11:29:08 +0000 |
|---|---|---|
| committer | tslil <tslil@posteo.de> | 2025-10-31 11:55:36 +0000 |
| commit | f7c23142e8c73732fe3f75d03dc36e905f28715b (patch) | |
| tree | 7dc1e0c6919cc9469f013b6015d4dc9356c7a9c9 /rprt-engine/src/selection_functions/function_character.rs | |
| parent | c16e21d82e3b398c572e48ccbf4ff896086425ef (diff) | |
Refactor selection functions into a module, one function per file
Diffstat (limited to 'rprt-engine/src/selection_functions/function_character.rs')
| -rw-r--r-- | rprt-engine/src/selection_functions/function_character.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/rprt-engine/src/selection_functions/function_character.rs b/rprt-engine/src/selection_functions/function_character.rs new file mode 100644 index 0000000..3d9695f --- /dev/null +++ b/rprt-engine/src/selection_functions/function_character.rs @@ -0,0 +1,38 @@ +use crate::selection::Selection; +use crate::selection_function_param; +use crate::selection_functions::types::{get_buffer, SFArguments, SFError, SFResult}; +use crate::state::EditorState; + +selection_function_param! { + name: character_structural, + param_type: usize, + niladic: |(param, es): (usize, &EditorState)| { + let buf = get_buffer(es, es.current_buffer_id)?; + Ok(Selection::Position { + buffer_id: es.current_buffer_id, + pos: usize::min(param, buf.max_pos()) + + }) }, + monadic_rank0: |_, buffer_id, pos| Ok(Selection::Position {buffer_id, pos}), + monadic_rank1: |(param, _), buffer_id, int| Ok(Selection::Position {buffer_id, pos: usize::min(int.end, *param)}) +} + +selection_function_param! { + name: character_sequential, + param_type: usize, + niladic: |(param, es): (usize, &EditorState)| { + let buf = get_buffer(es, es.current_buffer_id)?; + Ok(Selection::Position { + buffer_id: es.current_buffer_id, + pos: usize::min(param, buf.max_pos()), + }) + }, + monadic_rank0: |(param, es), buffer_id, pos| { + let buf = get_buffer(es, buffer_id)?; + Ok(Selection::Position {buffer_id, pos: usize::min(pos+*param, buf.max_pos())}) + }, + monadic_rank1: |(param, es), buffer_id, int| { + let buf = get_buffer(es, buffer_id)?; + Ok(Selection::Position {buffer_id, pos: usize::min(int.end+*param, buf.max_pos())}) + } +} |
