Fix post blank for timestamp date ranges.
This commit is contained in:
parent
28f12a04f7
commit
252be3e001
@ -82,7 +82,7 @@ fn clock_timestamp<'b, 'g, 'r, 's>(
|
||||
|(timestamp, duration)| (timestamp, duration.map(Into::<&str>::into)),
|
||||
),
|
||||
map(
|
||||
parser_with_context!(inactive_timestamp)(context),
|
||||
parser_with_context!(inactive_timestamp(true))(context),
|
||||
|timestamp| (timestamp, None),
|
||||
),
|
||||
))(input)
|
||||
|
@ -53,8 +53,8 @@ pub(crate) fn timestamp<'b, 'g, 'r, 's>(
|
||||
parser_with_context!(inactive_time_range_timestamp)(context),
|
||||
parser_with_context!(active_date_range_timestamp)(context),
|
||||
parser_with_context!(inactive_date_range_timestamp)(context),
|
||||
parser_with_context!(active_timestamp)(context),
|
||||
parser_with_context!(inactive_timestamp)(context),
|
||||
parser_with_context!(active_timestamp(true))(context),
|
||||
parser_with_context!(inactive_timestamp(true))(context),
|
||||
))(input)
|
||||
}
|
||||
|
||||
@ -126,13 +126,23 @@ fn sexp_end<'b, 'g, 'r, 's>(
|
||||
alt((tag(")>"), recognize(one_of(">\n"))))(input)
|
||||
}
|
||||
|
||||
const fn active_timestamp(
|
||||
allow_post_blank: bool,
|
||||
) -> impl for<'b, 'g, 'r, 's> Fn(
|
||||
RefContext<'b, 'g, 'r, 's>,
|
||||
OrgSource<'s>,
|
||||
) -> Res<OrgSource<'s>, Timestamp<'s>> {
|
||||
move |context, input| impl_active_timestamp(context, input, allow_post_blank)
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
feature = "tracing",
|
||||
tracing::instrument(ret, level = "debug", skip(context))
|
||||
)]
|
||||
fn active_timestamp<'b, 'g, 'r, 's>(
|
||||
fn impl_active_timestamp<'b, 'g, 'r, 's>(
|
||||
context: RefContext<'b, 'g, 'r, 's>,
|
||||
input: OrgSource<'s>,
|
||||
allow_post_blank: bool,
|
||||
) -> Res<OrgSource<'s>, Timestamp<'s>> {
|
||||
let (remaining, _) = tag("<")(input)?;
|
||||
let (remaining, start) = date(context, remaining)?;
|
||||
@ -160,8 +170,11 @@ fn active_timestamp<'b, 'g, 'r, 's>(
|
||||
)))(remaining)?;
|
||||
let (remaining, _) = tag(">")(remaining)?;
|
||||
|
||||
let (remaining, post_blank) =
|
||||
maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?;
|
||||
let (remaining, post_blank) = if allow_post_blank {
|
||||
maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?
|
||||
} else {
|
||||
(remaining, None)
|
||||
};
|
||||
let source = get_consumed(input, remaining);
|
||||
|
||||
Ok((
|
||||
@ -181,13 +194,23 @@ fn active_timestamp<'b, 'g, 'r, 's>(
|
||||
))
|
||||
}
|
||||
|
||||
pub(crate) const fn inactive_timestamp(
|
||||
allow_post_blank: bool,
|
||||
) -> impl for<'b, 'g, 'r, 's> Fn(
|
||||
RefContext<'b, 'g, 'r, 's>,
|
||||
OrgSource<'s>,
|
||||
) -> Res<OrgSource<'s>, Timestamp<'s>> {
|
||||
move |context, input| impl_inactive_timestamp(context, input, allow_post_blank)
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
feature = "tracing",
|
||||
tracing::instrument(ret, level = "debug", skip(context))
|
||||
)]
|
||||
pub(crate) fn inactive_timestamp<'b, 'g, 'r, 's>(
|
||||
fn impl_inactive_timestamp<'b, 'g, 'r, 's>(
|
||||
context: RefContext<'b, 'g, 'r, 's>,
|
||||
input: OrgSource<'s>,
|
||||
allow_post_blank: bool,
|
||||
) -> Res<OrgSource<'s>, Timestamp<'s>> {
|
||||
let (remaining, _) = tag("[")(input)?;
|
||||
let (remaining, start) = date(context, remaining)?;
|
||||
@ -215,8 +238,11 @@ pub(crate) fn inactive_timestamp<'b, 'g, 'r, 's>(
|
||||
)))(remaining)?;
|
||||
let (remaining, _) = tag("]")(remaining)?;
|
||||
|
||||
let (remaining, post_blank) =
|
||||
maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?;
|
||||
let (remaining, post_blank) = if allow_post_blank {
|
||||
maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?
|
||||
} else {
|
||||
(remaining, None)
|
||||
};
|
||||
let source = get_consumed(input, remaining);
|
||||
|
||||
Ok((
|
||||
@ -244,10 +270,10 @@ fn active_date_range_timestamp<'b, 'g, 'r, 's>(
|
||||
context: RefContext<'b, 'g, 'r, 's>,
|
||||
input: OrgSource<'s>,
|
||||
) -> Res<OrgSource<'s>, Timestamp<'s>> {
|
||||
let (remaining, first_timestamp) = active_timestamp(context, input)?;
|
||||
let (remaining, first_timestamp) = impl_active_timestamp(context, input, false)?;
|
||||
// TODO: Does the space0 at the end of the active/inactive timestamp parsers cause this to be incorrect? I could use a look-behind to make sure the preceding character is not whitespace
|
||||
let (remaining, _separator) = tag("--")(remaining)?;
|
||||
let (remaining, second_timestamp) = active_timestamp(context, remaining)?;
|
||||
let (remaining, second_timestamp) = impl_active_timestamp(context, remaining, false)?;
|
||||
|
||||
let (remaining, post_blank) =
|
||||
maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?;
|
||||
@ -335,10 +361,10 @@ pub(crate) fn inactive_date_range_timestamp<'b, 'g, 'r, 's>(
|
||||
context: RefContext<'b, 'g, 'r, 's>,
|
||||
input: OrgSource<'s>,
|
||||
) -> Res<OrgSource<'s>, Timestamp<'s>> {
|
||||
let (remaining, first_timestamp) = inactive_timestamp(context, input)?;
|
||||
let (remaining, first_timestamp) = impl_inactive_timestamp(context, input, false)?;
|
||||
// TODO: Does the space0 at the end of the active/inactive timestamp parsers cause this to be incorrect? I could use a look-behind to make sure the preceding character is not whitespace
|
||||
let (remaining, _separator) = tag("--")(remaining)?;
|
||||
let (remaining, second_timestamp) = inactive_timestamp(context, remaining)?;
|
||||
let (remaining, second_timestamp) = impl_inactive_timestamp(context, remaining, false)?;
|
||||
|
||||
let (remaining, post_blank) =
|
||||
maybe_consume_object_trailing_whitespace_if_not_exiting(context, remaining)?;
|
||||
|
Loading…
Reference in New Issue
Block a user