bezel-markdown 0.2.21

A Notion-style block document model for gpui — markdown in, markdown out
Documentation
use markdown::{Align, BlockKind, parse, serialize};

#[test]
fn rows_move_to_their_final_index_and_leave_the_header_fixed() {
    let mut doc = parse("| H |\n| --- |\n| one |\n| two |\n| three |");
    assert!(doc.move_row(0, 1, 3));
    assert_eq!(
        serialize(&doc),
        "| H |\n| --- |\n| two |\n| three |\n| one |"
    );
    assert!(doc.move_row(0, 3, 1));
    let original = doc.clone();
    for (from, to) in [(0, 1), (1, 0), (4, 1), (1, 4), (2, 2)] {
        assert!(!doc.move_row(0, from, to));
        assert_eq!(doc, original);
    }
}

#[test]
fn columns_carry_alignment_header_and_inline_marks() {
    let mut doc = parse("| A | B | C |\n| :--- | :---: | ---: |\n| **one** | two | three |");
    let original = doc.clone();
    assert!(doc.move_column(0, 0, 2));
    let BlockKind::Table {
        align,
        header,
        rows,
    } = &doc.blocks[0].kind
    else {
        panic!()
    };
    assert_eq!(align, &[Align::Center, Align::Right, Align::Left]);
    assert_eq!(header[2].text, "A");
    assert_eq!(rows[0][2].text, "one");
    assert!(!rows[0][2].marks.is_empty());
    assert!(doc.move_column(0, 2, 0));
    assert_eq!(doc, original);
    assert!(!doc.move_column(0, 3, 0));
    assert!(!doc.move_column(0, 0, 3));
    assert!(!doc.move_column(0, 0, 0));
    assert_eq!(doc, original);
}