lazyspec 0.8.0

A little TUI & CLI for project documentation.
Documentation
pub fn find_fenced_code_ranges(content: &str) -> Vec<(usize, usize)> {
    let mut ranges = Vec::new();
    let mut pos = 0;
    let bytes = content.as_bytes();
    while pos < bytes.len() {
        if bytes[pos] == b'`'
            && pos + 2 < bytes.len()
            && bytes[pos + 1] == b'`'
            && bytes[pos + 2] == b'`'
        {
            let fence_start = pos;
            pos += 3;
            while pos < bytes.len() && bytes[pos] != b'\n' {
                pos += 1;
            }
            let mut found_close = false;
            while pos < bytes.len() {
                if bytes[pos] == b'\n'
                    && pos + 3 < bytes.len()
                    && bytes[pos + 1] == b'`'
                    && bytes[pos + 2] == b'`'
                    && bytes[pos + 3] == b'`'
                {
                    pos += 4;
                    while pos < bytes.len() && bytes[pos] != b'\n' {
                        pos += 1;
                    }
                    ranges.push((fence_start, pos));
                    found_close = true;
                    break;
                }
                pos += 1;
            }
            if !found_close {
                ranges.push((fence_start, bytes.len()));
            }
        } else {
            pos += 1;
        }
    }
    ranges
}

pub fn is_inside_fence(ranges: &[(usize, usize)], offset: usize) -> bool {
    ranges
        .iter()
        .any(|&(start, end)| offset >= start && offset < end)
}