alma 0.1.1

A Bevy-native modal text editor with Vim-style navigation.
Documentation
//! Startup spawning for the first editor buffer and view.

use super::InitialEditorBuffer;
use crate::ecs::components::{
    buffer::{
        BufferEntity, BufferRevision, BufferText, BufferUndoHistory, EditorBuffer, EditorView,
        FocusedEditorView,
    },
    cursor::{ByteIndex, CursorPosition},
    layout::{TextSpanLayout, ViewportState, VisibleTextRange},
    vim::VimModalState,
};
use bevy::prelude::{Commands, Res};

/// Spawns the current editor buffer entity from launch resources.
pub(super) fn spawn_editor_buffer(
    mut commands: Commands,
    initial_buffer: Res<InitialEditorBuffer>,
) {
    let initial_buffer = initial_buffer.into_inner();
    let text_stream = &initial_buffer.stream;
    let buffer = commands
        .spawn((
            EditorBuffer,
            initial_buffer.file.clone(),
            BufferText {
                stream: text_stream.clone(),
            },
            BufferRevision {
                revision: text_stream.revision(),
            },
            BufferUndoHistory::default(),
        ))
        .id();
    let _view = commands.spawn((
        EditorView {
            buffer: BufferEntity(buffer),
        },
        FocusedEditorView,
        CursorPosition {
            byte_index: ByteIndex(0),
            desired_column: None,
        },
        ViewportState {
            viewport: crate::domain::viewport::TextViewport::default(),
            pending_intent: None,
        },
        VisibleTextRange::default(),
        TextSpanLayout::default(),
        VimModalState::default(),
    ));
}