[california] Permit am/pm as separate token in Quick Add: Bug #731634
- From: Jim Nelson <jnelson src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [california] Permit am/pm as separate token in Quick Add: Bug #731634
- Date: Thu, 19 Jun 2014 02:25:55 +0000 (UTC)
commit 0ee60b1358831b6dbf5a5183005c6bd4bfc9fa27
Author: Jim Nelson <jim yorba org>
Date: Wed Jun 18 19:25:25 2014 -0700
Permit am/pm as separate token in Quick Add: Bug #731634
src/component/component-details-parser.vala | 21 ++++++++++++++++++++-
src/tests/tests-quick-add.vala | 24 ++++++++++++++++++++++++
2 files changed, 44 insertions(+), 1 deletions(-)
---
diff --git a/src/component/component-details-parser.vala b/src/component/component-details-parser.vala
index e5ad17b..6a25eac 100644
--- a/src/component/component-details-parser.vala
+++ b/src/component/component-details-parser.vala
@@ -296,8 +296,27 @@ public class DetailsParser : BaseObject {
if (date != null && add_date(date))
return true;
+ // store locally so it can be modified w/o risk (tokens may be reused)
+ string specifier_casefolded = specifier.casefolded;
+
+ // if meridiem found in next token, append to specifier for WallTime.parse()
+ bool found_meridiem = false;
+ stack.mark();
+ {
+ Token? meridiem = stack.pop();
+ if (meridiem != null
+ && (meridiem.casefolded == Calendar.FMT_AM.casefold() || meridiem.casefolded ==
Calendar.FMT_PM.casefold())) {
+ specifier_casefolded += meridiem.casefolded;
+ found_meridiem = true;
+ }
+ }
+
+ // swallow meridiem if being used for WallTime.parse()
+ if (!found_meridiem)
+ stack.restore();
+
bool strictly_parsed;
- Calendar.WallTime? wall_time = Calendar.WallTime.parse(specifier.casefolded,
+ Calendar.WallTime? wall_time = Calendar.WallTime.parse(specifier_casefolded,
out strictly_parsed);
if (wall_time != null && !strictly_parsed && strict)
return false;
diff --git a/src/tests/tests-quick-add.vala b/src/tests/tests-quick-add.vala
index 78f1147..e24e58c 100644
--- a/src/tests/tests-quick-add.vala
+++ b/src/tests/tests-quick-add.vala
@@ -25,6 +25,8 @@ private class QuickAdd : UnitTest.Harness {
add_case("zero-hour", zero_hour);
add_case("oh-twenty-four-hours", oh_twenty_four_hours);
add_case("midnight-to-one", midnight_to_one);
+ add_case("separate-am", separate_am);
+ add_case("separate-pm", separate_pm);
}
protected override void setup() throws Error {
@@ -237,6 +239,28 @@ private class QuickAdd : UnitTest.Harness {
&& parser.event.exact_time_span.start_exact_time.equal_to(start)
&& parser.event.exact_time_span.end_exact_time.equal_to(end);
}
+
+ private bool separate_am() throws Error {
+ Component.DetailsParser parser = new Component.DetailsParser(
+ "Dinner at 1 pm with Denny", null);
+
+ Calendar.ExactTime start = new Calendar.ExactTime(Calendar.Timezone.local, Calendar.System.today,
+ new Calendar.WallTime(13, 0, 0));
+
+ return parser.event.summary == "Dinner with Denny"
+ && parser.event.exact_time_span.start_exact_time.equal_to(start);
+ }
+
+ private bool separate_pm() throws Error {
+ Component.DetailsParser parser = new Component.DetailsParser(
+ "Dinner at 11 am", null);
+
+ Calendar.ExactTime start = new Calendar.ExactTime(Calendar.Timezone.local, Calendar.System.today,
+ new Calendar.WallTime(11, 0, 0));
+
+ return parser.event.summary == "Dinner"
+ && parser.event.exact_time_span.start_exact_time.equal_to(start);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]