Parse REMINDs

This commit is contained in:
Joscha 2021-12-21 00:13:06 +01:00
parent 03e98bbe72
commit fe22c66c5c
4 changed files with 17 additions and 1 deletions

View file

@ -267,6 +267,7 @@ pub enum Statement {
from: NaiveDate, from: NaiveDate,
to: NaiveDate, to: NaiveDate,
}, },
Remind(Option<Spanned<Delta>>),
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]

View file

@ -221,6 +221,8 @@ impl fmt::Display for Statement {
Statement::Until(None) => writeln!(f, "UNTIL *"), Statement::Until(None) => writeln!(f, "UNTIL *"),
Statement::Except(date) => writeln!(f, "EXCEPT {}", date), Statement::Except(date) => writeln!(f, "EXCEPT {}", date),
Statement::Move { from, to, .. } => writeln!(f, "MOVE {} TO {}", from, to), Statement::Move { from, to, .. } => writeln!(f, "MOVE {} TO {}", from, to),
Statement::Remind(Some(delta)) => writeln!(f, "REMIND {}", delta),
Statement::Remind(None) => writeln!(f, "REMIND *"),
} }
} }
} }

View file

@ -107,8 +107,9 @@ stmt_from = !{ "FROM" ~ (datum | "*") ~ eol }
stmt_until = !{ "UNTIL" ~ (datum | "*") ~ eol } stmt_until = !{ "UNTIL" ~ (datum | "*") ~ eol }
stmt_except = !{ "EXCEPT" ~ datum ~ eol } stmt_except = !{ "EXCEPT" ~ datum ~ eol }
stmt_move = !{ "MOVE" ~ datum ~ "TO" ~ datum ~ eol } stmt_move = !{ "MOVE" ~ datum ~ "TO" ~ datum ~ eol }
stmt_remind = !{ "REMIND" ~ (delta | "*") ~ eol }
statements = { (stmt_date | stmt_bdate | stmt_from | stmt_until | stmt_except | stmt_move)* } statements = { (stmt_date | stmt_bdate | stmt_from | stmt_until | stmt_except | stmt_move | stmt_remind)* }
donedate = { donedate = {
datum ~ time ~ "--" ~ datum ~ time datum ~ time ~ "--" ~ datum ~ time

View file

@ -623,6 +623,17 @@ fn parse_stmt_move(p: Pair<'_, Rule>) -> Result<Statement> {
Ok(Statement::Move { span, from, to }) Ok(Statement::Move { span, from, to })
} }
fn parse_stmt_remind(p: Pair<'_, Rule>) -> Result<Statement> {
assert_eq!(p.as_rule(), Rule::stmt_remind);
let mut p = p.into_inner();
let delta = match p.next() {
Some(p) => Some(parse_delta(p)?),
None => None,
};
assert_eq!(p.next(), None);
Ok(Statement::Remind(delta))
}
fn parse_statements(p: Pair<'_, Rule>, task: bool) -> Result<Vec<Statement>> { fn parse_statements(p: Pair<'_, Rule>, task: bool) -> Result<Vec<Statement>> {
assert_eq!(p.as_rule(), Rule::statements); assert_eq!(p.as_rule(), Rule::statements);
let mut statements = vec![]; let mut statements = vec![];
@ -635,6 +646,7 @@ fn parse_statements(p: Pair<'_, Rule>, task: bool) -> Result<Vec<Statement>> {
Rule::stmt_until => parse_stmt_until(p)?, Rule::stmt_until => parse_stmt_until(p)?,
Rule::stmt_except => parse_stmt_except(p)?, Rule::stmt_except => parse_stmt_except(p)?,
Rule::stmt_move => parse_stmt_move(p)?, Rule::stmt_move => parse_stmt_move(p)?,
Rule::stmt_remind => parse_stmt_remind(p)?,
_ => unreachable!(), _ => unreachable!(),
}); });
} }