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};
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(),
));
}