etch 0.4.2

Not just a text formatter, don't mark it down, etch it.
Documentation
use glue::prelude::*;
use std::ops::RangeBounds;

pub fn identifier_character(character: char) -> bool {
    character.is_alphanumeric()
}

pub fn identifier<'a>() -> impl Parser<'a, &'a str> {
    move |ctx| {
        take(1.., is(identifier_character))
            .parse(ctx)
            .map_error(|error| error.tag("identifier"))
    }
}

pub fn indentation(character: char) -> bool {
    character == ' ' || character == '\t'
}

pub fn indent<'a, R>(range: R) -> impl Parser<'a, &'a str>
where
    R: RangeBounds<usize> + Clone,
{
    move |ctx| take(range.clone(), is(indentation)).parse(ctx)
}