use std::fmt;
pub mod lexical;
pub mod syntax;
#[cfg(doctest)]
use doc_comment::doctest;
#[cfg(doctest)]
doctest!("../README.md");
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub struct Pos {
pub offset: usize,
pub line: usize,
pub col: usize,
}
impl Pos {
#[inline(always)]
pub(crate) fn advance_line(&mut self) {
self.offset += 1;
self.line += 1;
self.col = 1;
}
#[inline(always)]
pub(crate) fn advance_line_no_offset(&mut self) {
self.line += 1;
self.col = 1;
}
#[inline(always)]
pub(crate) fn advance_col(&mut self) {
self.offset += 1;
self.col += 1;
}
#[inline(always)]
pub(crate) fn advance_offset(&mut self, by: usize) {
self.offset += by;
}
}
impl Default for Pos {
fn default() -> Self {
Self {
offset: 0,
line: 1,
col: 1,
}
}
}
impl fmt::Display for Pos {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"line {}, column {} (offset: {})",
self.line, self.col, self.offset
)
}
}