graphannis 4.1.4

This is a new backend implementation of the ANNIS linguistic search and visualization system.
Documentation
use std::fmt;

#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum RangeSpec {
    Bound { min_dist: usize, max_dist: usize },
    Unbound,
}

impl RangeSpec {
    pub fn max_dist(&self) -> std::ops::Bound<usize> {
        match &self {
            RangeSpec::Bound { max_dist, .. } => std::ops::Bound::Included(*max_dist),
            RangeSpec::Unbound => std::ops::Bound::Unbounded,
        }
    }

    pub fn min_dist(&self) -> usize {
        match &self {
            RangeSpec::Bound { min_dist, .. } => *min_dist,
            RangeSpec::Unbound => 1,
        }
    }
}

impl fmt::Display for RangeSpec {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match &self {
            RangeSpec::Bound { min_dist, max_dist } => {
                if *min_dist == 1 && *max_dist == 1 {
                    write!(f, "")
                } else {
                    write!(f, "{},{}", min_dist, max_dist)
                }
            }
            RangeSpec::Unbound => write!(f, "*"),
        }
    }
}

mod arity;
mod edge_op;
mod equal_value;
mod identical_cov;
mod identical_node;
mod inclusion;
mod leftalignment;
mod near;
mod negated_op;
mod non_existing;
mod overlap;
mod precedence;
mod rightalignment;

pub use self::arity::AritySpec;
pub use self::edge_op::{DominanceSpec, PartOfSubCorpusSpec, PointingSpec};
pub use self::equal_value::EqualValueSpec;
pub use self::identical_cov::IdenticalCoverageSpec;
pub use self::identical_node::IdenticalNodeSpec;
pub use self::inclusion::InclusionSpec;
pub use self::leftalignment::LeftAlignmentSpec;
pub use self::near::NearSpec;
pub use self::negated_op::NegatedOpSpec;
pub use self::non_existing::NonExistingUnaryOperatorSpec;
pub use self::overlap::OverlapSpec;
pub use self::precedence::PrecedenceSpec;
pub use self::rightalignment::RightAlignmentSpec;