add notes, formatting, shallow simplifications

This commit is contained in:
Michael Sippel 2024-03-10 14:04:08 +01:00
parent 73d457ba24
commit 77d9e64531
Signed by: senvas
GPG key ID: F96CF119C34B64A6
8 changed files with 69 additions and 69 deletions

View file

@ -40,26 +40,31 @@ async fn main() {
ctx.write().unwrap().meta_chars.push(','); ctx.write().unwrap().meta_chars.push(',');
ctx.write().unwrap().meta_chars.push('\"'); ctx.write().unwrap().meta_chars.push('\"');
ctx.write().unwrap().meta_chars.push('}');
// Define a hook which is executed when a new editTree of type `t` is created.
// this will setup the display and navigation elements of the editor.
// It provides the necessary bridge to the rendering- & input-backend.
ctx.write().unwrap().set_edittree_hook( ctx.write().unwrap().set_edittree_hook(
Arc::new( Arc::new(
move |et: Arc<RwLock<EditTree>>, t: laddertypes::TypeTerm| { move |et: Arc<RwLock<EditTree>>, t: laddertypes::TypeTerm| {
let mut et = et.write().unwrap();
if let Ok(σ) = laddertypes::unify(&t, &char_type.clone()) { if let Ok(σ) = laddertypes::unify(&t, &char_type.clone()) {
let mut et = et.write().unwrap();
*et = nested_tty::editors::edittree_make_char_view(et.clone()); *et = nested_tty::editors::edittree_make_char_view(et.clone());
} }
else if let Ok(σ) = laddertypes::unify(&t, &digit_type) { else if let Ok(σ) = laddertypes::unify(&t, &digit_type) {
let mut et = et.write().unwrap();
*et = nested_tty::editors::edittree_make_digit_view(et.clone()); *et = nested_tty::editors::edittree_make_digit_view(et.clone());
} }
else if let Ok(σ) = laddertypes::unify(&t, &posint_type) { else if let Ok(σ) = laddertypes::unify(&t, &posint_type) {
let mut et = et.write().unwrap();
nested_tty::editors::list::PTYListStyle::for_node( &mut *et, ("0d", "", "")); nested_tty::editors::list::PTYListStyle::for_node( &mut *et, ("0d", "", ""));
nested_tty::editors::list::PTYListController::for_node( &mut *et, None, None ); nested_tty::editors::list::PTYListController::for_node( &mut *et, None, None );
} }
else if let Ok(σ) = laddertypes::unify(&t, &list_type) { else if let Ok(σ) = laddertypes::unify(&t, &list_type) {
let mut et = et.write().unwrap();
let item_type = σ.get( &laddertypes::TypeID::Var(item_tyid) ).unwrap(); let item_type = σ.get( &laddertypes::TypeID::Var(item_tyid) ).unwrap();
if item_type == &char_type {
// choose style based on element type
if *item_type == char_type {
nested_tty::editors::list::PTYListStyle::for_node( &mut *et, ("\"", "", "\"")); nested_tty::editors::list::PTYListStyle::for_node( &mut *et, ("\"", "", "\""));
nested_tty::editors::list::PTYListController::for_node( &mut *et, None, Some('\"') ); nested_tty::editors::list::PTYListController::for_node( &mut *et, None, Some('\"') );
} else { } else {
@ -97,16 +102,23 @@ async fn main() {
rt_digit.write().unwrap() rt_digit.write().unwrap()
.insert_leaf( .insert_leaf(
vec![ Context::parse(&ctx, "Char") ].into_iter(), vec![ Context::parse(&ctx, "Char") ].into_iter(),
SingletonBuffer::new('x').get_port().into() SingletonBuffer::new('4').get_port().into()
); );
/* setup TTY-Display for DigitEditor /* setup TTY-Display for DigitEditor
*/ */
let edittree_digit = ctx.read().unwrap().setup_edittree(rt_digit.clone(), r3vi::buffer::singleton::SingletonBuffer::new(0).get_port()); let edittree_digit = ctx.read().unwrap()
.setup_edittree(
rt_digit
.read().unwrap()
.descend( Context::parse(&ctx, "Char") ).unwrap()
.clone(),
r3vi::buffer::singleton::SingletonBuffer::new(0).get_port());
//--- //---
let rt_string = ReprTree::new_arc( Context::parse(&ctx, "<List <List Char>>") ); let rt_string = ReprTree::new_arc( Context::parse(&ctx, "<List <Digit 10>>") );
let edittree = ctx.read().unwrap().setup_edittree(rt_string.clone(), r3vi::buffer::singleton::SingletonBuffer::new(0).get_port()); let edittree = ctx.read().unwrap()
.setup_edittree(rt_string.clone(), r3vi::buffer::singleton::SingletonBuffer::new(0).get_port());
/* setup terminal /* setup terminal
*/ */
@ -125,28 +137,39 @@ async fn main() {
let compositor = TerminalCompositor::new(app.port.inner()); let compositor = TerminalCompositor::new(app.port.inner());
// add some views to the display compositor // add some views to the display compositor
compositor.write().unwrap().push( {
nested_tty::make_label("Hello World") let mut comp = compositor.write().unwrap();
.map_item(|p, a| {
a.add_style_back(TerminalStyle::fg_color(((25 * p.x % 255) as u8, 200, 0)))
})
.offset(Vector2::new(5, 0)),
);
compositor.write().unwrap().push( edittree_digit.read().unwrap().display_view().offset(Vector2::new(0,2)) );
let label = ctx.read().unwrap().type_term_to_str(&rt_digit.read().unwrap().get_type()); comp.push(
compositor nested_tty::make_label("Hello World")
.write() .map_item(|p, a| {
.unwrap() a.add_style_back(TerminalStyle::fg_color(((25 * p.x % 255) as u8, 200, 0)))
.push(nested_tty::make_label(&label).offset(Vector2::new(0, 1))); })
.offset(Vector2::new(5, 0)),
);
compositor.write().unwrap().push( edittree.read().unwrap().display_view().offset(Vector2::new(0,4)) ); comp.push(
edittree_digit.read().unwrap().display_view()
.offset(Vector2::new(0,2))
);
let label = ctx.read().unwrap().type_term_to_str(&rt_string.read().unwrap().get_type()); let label_str = ctx.read().unwrap().type_term_to_str(&rt_digit.read().unwrap().get_type());
compositor comp.push(
.write() nested_tty::make_label(&label_str)
.unwrap() .offset(Vector2::new(0, 1))
.push(nested_tty::make_label(&label).offset(Vector2::new(0, 3))); );
comp.push(
edittree.read().unwrap().display_view()
.offset(Vector2::new(0,4))
);
let label_str = ctx.read().unwrap().type_term_to_str(&rt_string.read().unwrap().get_type());
comp.push(
nested_tty::make_label(&label_str)
.offset(Vector2::new(0, 3))
);
}
/* write the changes in the view of `term_port` to the terminal /* write the changes in the view of `term_port` to the terminal
*/ */

View file

@ -38,7 +38,7 @@ pub enum TreeNavCmd {
pub trait TreeNav { pub trait TreeNav {
/* CORE /* CORE
*/ */
fn get_cursor(&self) -> TreeCursor { fn get_cursor(&self) -> TreeCursor {
TreeCursor::default() TreeCursor::default()
} }

View file

@ -32,7 +32,9 @@ pub struct EdittreeControl {
Option< Arc<dyn Any + Send + Sync> > Option< Arc<dyn Any + Send + Sync> >
>, >,
pub spillbuf: Arc<RwLock< Vec< Arc<RwLock< EditTree >> > >>, pub spillbuf: Arc<RwLock<
Vec< Arc<RwLock< EditTree >> >
>>,
/// commander & navigation /// commander & navigation
pub cmd: SingletonBuffer< pub cmd: SingletonBuffer<
@ -47,9 +49,6 @@ pub struct EdittreeControl {
>, >,
} }
/*
* TODO: rename to EditNode
*/
#[derive(Clone)] #[derive(Clone)]
pub struct EditTree { pub struct EditTree {
/// context /// context

View file

@ -31,10 +31,15 @@ pub fn init_ctx( ctx: Arc<RwLock<Context>> ) {
{ {
let ctx = ctx.clone(); let ctx = ctx.clone();
move |rt, σ| { move |rt, σ| {
if let Some(v) = rt.read().unwrap().get_view::<dyn SingletonView<Item = char>>() {
eprintln!("prev value: {}", v.get());
}
/* Create EditTree object /* Create EditTree object
*/ */
let mut edittree_char = CharEditor::new_edit_tree( let mut edittree_char = CharEditor::new_edit_tree(
ctx.clone(), ctx.clone(),
SingletonBuffer::new('>'),
r3vi::buffer::singleton::SingletonBuffer::<usize>::new(0).get_port() r3vi::buffer::singleton::SingletonBuffer::<usize>::new(0).get_port()
); );
@ -97,6 +102,7 @@ impl CharEditor {
pub fn new_edit_tree( pub fn new_edit_tree(
ctx0: Arc<RwLock<Context>>, ctx0: Arc<RwLock<Context>>,
data: SingletonBuffer<char>,
depth: OuterViewPort<dyn SingletonView<Item = usize>> depth: OuterViewPort<dyn SingletonView<Item = usize>>
) -> EditTree { ) -> EditTree {
let data = SingletonBuffer::new('\0'); let data = SingletonBuffer::new('\0');

View file

@ -185,39 +185,6 @@ pub struct PosIntEditor {
impl PosIntEditor { impl PosIntEditor {
pub fn new(ctx: Arc<RwLock<Context>>, radix: u32) -> Self { pub fn new(ctx: Arc<RwLock<Context>>, radix: u32) -> Self {
/*
let mut node = Context::make_node(
&ctx,
Context::parse(&ctx, format!("<List <Digit {}>>", radix).as_str()),
r3vi::buffer::singleton::SingletonBuffer::new(0).get_port()
).unwrap();
// Set Type
node.data = ReprTree::ascend(
&node.data.clone(),
TypeTerm::App(vec![
TypeTerm::TypeID(ctx.read().unwrap().get_typeid("PosInt").unwrap()),
TypeTerm::Num(radix as i64).into(),
TypeTerm::TypeID(ctx.read().unwrap().get_typeid("BigEndian").unwrap())
]
));
*/
/*
PTYListController::for_node( &mut node, Some(' '), None );
PTYListStyle::for_node( &mut node,
(
match radix {
2 => "0b".into(),
8 => "0o".into(),
10 => "0d".into(),
16 => "0x".into(),
_ => "".into()
},
"".into(),
"".into()
)
);
*/
PosIntEditor { PosIntEditor {
radix, radix,
digits: EditTree::new( digits: EditTree::new(

View file

@ -22,6 +22,7 @@ pub enum ListCmd {
} }
impl ListCmd { impl ListCmd {
// note: cant use Into becaue of ctx (maybe global typedict?)
pub fn into_repr_tree(self, ctx: &Arc<RwLock<Context>>) -> Arc<RwLock<ReprTree>> { pub fn into_repr_tree(self, ctx: &Arc<RwLock<Context>>) -> Arc<RwLock<ReprTree>> {
let buf = r3vi::buffer::singleton::SingletonBuffer::new(self); let buf = r3vi::buffer::singleton::SingletonBuffer::new(self);
ReprTree::new_leaf( ReprTree::new_leaf(

View file

@ -24,6 +24,8 @@ pub struct ReprTree {
branches: HashMap<TypeTerm, Arc<RwLock<ReprTree>>>, branches: HashMap<TypeTerm, Arc<RwLock<ReprTree>>>,
} }
//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
impl std::fmt::Debug for ReprTree { impl std::fmt::Debug for ReprTree {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "| type: {:?}", self.type_tag)?; writeln!(f, "| type: {:?}", self.type_tag)?;
@ -36,6 +38,8 @@ impl std::fmt::Debug for ReprTree {
} }
} }
//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>
impl ReprTree { impl ReprTree {
pub fn new(type_tag: impl Into<TypeTerm>) -> Self { pub fn new(type_tag: impl Into<TypeTerm>) -> Self {
ReprTree { ReprTree {

View file

@ -190,15 +190,15 @@ impl PTYListController {
} }
pub fn handle_meta_char(&mut self, c: char, child_close_char: Option<char>) -> TreeNavResult { pub fn handle_meta_char(&mut self, c: char, child_close_char: Option<char>) -> TreeNavResult {
eprintln!("handle meta char: got '{}', child_close={:?}, self.close={:?}, split={:?}", c, child_close_char, self.close_char, self.split_char); // eprintln!("handle meta char: got '{}', child_close={:?}, self.close={:?}, split={:?}", c, child_close_char, self.close_char, self.split_char);
let mut e = self.editor.write().unwrap(); let mut e = self.editor.write().unwrap();
let cur = e.cursor.get(); let cur = e.cursor.get();
if Some(c) == self.split_char if Some(c) == self.split_char
// || Some(c) == child_close_char // || Some(c) == child_close_char
{ {
e.listlist_split(); e.listlist_split();
eprintln!("done listlist split"); // eprintln!("done listlist split");
TreeNavResult::Continue TreeNavResult::Continue
} else if Some(c) == child_close_char { } else if Some(c) == child_close_char {
e.goto(TreeCursor::none()); e.goto(TreeCursor::none());