1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#[cfg(test)]
#[macro_use]
mod test_macros;

pub mod blocks;
pub mod html;
pub mod inlines;
pub mod macros;

mod input;
mod parse;
mod parsing_mode;
mod utils;

use crate::blocks::{Context, ParseBlock};
use crate::input::Input;
use crate::parse::{Parse, ParseInfallible};
use crate::utils::Indents;

pub use detached_str::{Str, StrSlice, StrSliceIndex};
use unidok_repr::ir::blocks::AnnBlockIr;
use unidok_repr::ir::IrState;
use unidok_repr::IntoIR;

pub struct DocIr<'a> {
    pub blocks: Vec<AnnBlockIr<'a>>,
    pub state: IrState<'a>,
}

pub fn parse(s: &str) -> DocIr {
    let mut input = Input::new(s);
    let parsed = input.parse(ParseBlock::new_global()).unwrap();
    debug_assert!(input.is_empty());

    let blocks = parsed.into_ir(s, input.state_mut());
    let state = IrState::new(s, input.into_state());
    DocIr { blocks, state }
}