use crate::doc::DocFragment;
use crate::editor::UndoEntry;
use crate::model::{Cursor, FracStyle, Mark, MatrixEnv, ScriptSlot, Symbol, UnderOverSpec, Variant};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Dir {
Left,
Right,
Up,
Down,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Side {
Before,
After,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExitDir {
Left,
Right,
Up,
Down,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Point {
pub x: f64,
pub y: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Command {
Move(Dir),
MoveLineStart,
MoveLineEnd,
Tab,
ShiftTab,
MoveTo(Point),
Extend(Dir),
ExtendTo(Point),
SelectAll,
Collapse,
InsertAtom(Symbol),
InsertText(String),
InsertFraction(FracStyle),
InsertScript(ScriptSlot),
InsertBigOp(Symbol),
InsertSqrt,
InsertDelimiters {
open: char,
close: char,
},
InsertAccent(Mark),
InsertUnderOver(UnderOverSpec),
InsertStyled(Variant),
InsertMatrix {
env: MatrixEnv,
rows: usize,
cols: usize,
},
InsertFragment(DocFragment),
DeleteBackward,
DeleteForward,
MatrixInsertRow(Side),
MatrixDeleteRow,
MatrixInsertCol(Side),
MatrixDeleteCol,
ApplyStyle(Variant),
Confirm,
MenuSelect(usize),
}
#[derive(Debug, Clone)]
pub struct CommandResult {
pub cursor: Cursor,
pub undo: Option<UndoEntry>,
pub exit: Option<ExitDir>,
}