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,
to: NaiveDate,
},
Remind(Option<Spanned<Delta>>),
}
#[derive(Debug, Clone, Copy)]

View file

@ -221,6 +221,8 @@ impl fmt::Display for Statement {
Statement::Until(None) => writeln!(f, "UNTIL *"),
Statement::Except(date) => writeln!(f, "EXCEPT {}", date),
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_except = !{ "EXCEPT" ~ 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 = {
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 })
}
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>> {
assert_eq!(p.as_rule(), Rule::statements);
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_except => parse_stmt_except(p)?,
Rule::stmt_move => parse_stmt_move(p)?,
Rule::stmt_remind => parse_stmt_remind(p)?,
_ => unreachable!(),
});
}