Skip to main content

frankenterm_core/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Host-agnostic VT/ANSI terminal engine.
4//!
5//! `frankenterm-core` is the platform-independent terminal model at the heart of
6//! FrankenTerm. It owns grid state, VT/ANSI parsing, cursor positioning, and
7//! scrollback — all without any host I/O dependencies.
8//!
9//! # Primary responsibilities
10//!
11//! - **Grid**: 2D cell matrix representing the visible terminal viewport.
12//! - **Cell**: character content + SGR attributes (colors, bold, italic, etc.).
13//! - **Parser**: VT/ANSI state machine (Paul Flo Williams model, 12 states).
14//! - **Cursor**: position, visibility, and origin/autowrap mode tracking.
15//! - **Modes**: DEC private modes and ANSI standard modes.
16//! - **Patch**: minimal diff between two grid snapshots for efficient updates.
17//! - **Scrollback**: ring buffer for lines scrolled off the top of the viewport.
18//!
19//! # Design principles
20//!
21//! - **No I/O**: all types are pure data + logic; the host adapter supplies bytes.
22//! - **Deterministic**: identical byte sequences always produce identical state.
23//! - **`#![forbid(unsafe_code)]`**: safety enforced at compile time.
24
25pub mod cell;
26pub mod cursor;
27pub mod export;
28pub mod flow_control;
29pub mod grid;
30pub mod modes;
31pub mod parser;
32pub mod patch;
33pub mod reply;
34pub mod scrollback;
35pub mod selection;
36pub mod selection_state;
37pub mod terminal_engine;
38pub mod width_policy;
39#[cfg(feature = "ws-codec")]
40pub mod ws_codec;
41
42pub use cell::{
43    Cell, CellFlags, Color, HyperlinkId, HyperlinkRegistry, MAX_COMBINING, SgrAttrs, SgrFlags,
44};
45pub use cursor::{Cursor, SavedCursor, translate_charset};
46pub use export::{
47    AnsiExportOptions, ColorDepth, ExportContext, ExportRange, ExportRow, HtmlExportOptions,
48    LineEnding, TextExportOptions, export_ansi, export_html, export_text,
49};
50pub use flow_control::{
51    ActionLoss, BackpressureAction, DecisionReason, FlowControlConfig, FlowControlDecision,
52    FlowControlPolicy, FlowControlSnapshot, InputEventClass, LatencyWindowMs, LossWeights,
53    QueueDepthBytes, RateWindowBps, jain_fairness_index,
54};
55pub use grid::Grid;
56pub use modes::{AnsiModes, DecModes, Modes};
57pub use parser::{Action, CsiParams, Parser};
58pub use patch::{CellUpdate, ChangeRun, DirtySpan, DirtyTracker, GridDiff, Patch};
59pub use reply::{
60    ReplyContext, ReplyEngine, TerminalQuery, parse_terminal_query, reply_for_query,
61    reply_for_query_bytes,
62};
63pub use scrollback::{Scrollback, ScrollbackLine, ScrollbackWindow};
64pub use selection::{BufferPos, CopyOptions, Selection};
65pub use selection_state::{
66    AutoScrollHint, GestureConfig, SelectionDirection, SelectionGestureController,
67    SelectionGranularity, SelectionPhase, SelectionShape, SelectionState,
68};
69pub use terminal_engine::{DEFAULT_SCROLLBACK_CAPACITY, TerminalEngine, TerminalEngineConfig};
70pub use width_policy::WidthPolicy;