1//
2// Copyright (C) 2018 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17// Meridiem field.
18namespace libtextclassifier3.grammar.datetime;
19enum Meridiem : int {
20  UNKNOWN = 0,
21
22  // Ante meridiem: Before noon
23  AM = 1,
24
25  // Post meridiem: After noon
26  PM = 2,
27}
28
29// Enum represents a unit of date and time in the expression.
30// Next field: 10
31namespace libtextclassifier3.grammar.datetime;
32enum ComponentType : int {
33  UNSPECIFIED = 0,
34
35  // Year of the date seen in the text match.
36  YEAR = 1,
37
38  // Month of the year starting with January = 1.
39  MONTH = 2,
40
41  // Week (7 days).
42  WEEK = 3,
43
44  // Day of week, start of the week is Sunday &  its value is 1.
45  DAY_OF_WEEK = 4,
46
47  // Day of the month starting with 1.
48  DAY_OF_MONTH = 5,
49
50  // Hour of the day.
51  HOUR = 6,
52
53  // Minute of the hour with a range of 0-59.
54  MINUTE = 7,
55
56  // Seconds of the minute with a range of 0-59.
57  SECOND = 8,
58
59  // Meridiem field i.e. AM/PM.
60  MERIDIEM = 9,
61}
62
63namespace libtextclassifier3.grammar.datetime;
64table TimeZone {
65  // Offset from UTC/GTM in minutes.
66  utc_offset_mins:int;
67}
68
69namespace libtextclassifier3.grammar.datetime.RelativeDatetimeComponent_;
70enum Modifier : int {
71  UNSPECIFIED = 0,
72  NEXT = 1,
73  THIS = 2,
74  LAST = 3,
75  NOW = 4,
76  TOMORROW = 5,
77  YESTERDAY = 6,
78  PAST = 7,
79  FUTURE = 8,
80}
81
82// Message for representing the relative date-time component in date-time
83// expressions.
84// Next field: 4
85namespace libtextclassifier3.grammar.datetime;
86table RelativeDatetimeComponent {
87  component_type:ComponentType = UNSPECIFIED;
88  modifier:RelativeDatetimeComponent_.Modifier = UNSPECIFIED;
89  value:int;
90}
91
92// AbsoluteDateTime represents date-time expressions that is not ambiguous.
93// Next field: 11
94namespace libtextclassifier3.grammar.datetime;
95table AbsoluteDateTime {
96  // Year value of the date seen in the text match.
97  year:int = -1;
98
99  // Month value of the year starting with January = 1.
100  month:int = -1;
101
102  // Day value of the month starting with 1.
103  day:int = -1;
104
105  // Day of week, start of the week is Sunday and its value is 1.
106  week_day:int = -1;
107
108  // Hour value of the day.
109  hour:int = -1;
110
111  // Minute value of the hour with a range of 0-59.
112  minute:int = -1;
113
114  // Seconds value of the minute with a range of 0-59.
115  second:int = -1;
116
117  partial_second:double = -1;
118
119  // Meridiem field i.e. AM/PM.
120  meridiem:Meridiem;
121
122  time_zone:TimeZone;
123}
124
125// Message to represent relative datetime expressions.
126// It encode expressions
127// - Where modifier such as before/after shift the date e.g.[three days ago],
128// [2 days after March 1st].
129// - When prefix make the expression relative e.g. [next weekend],
130// [last Monday].
131// Next field: 3
132namespace libtextclassifier3.grammar.datetime;
133table RelativeDateTime {
134  relative_datetime_component:[RelativeDatetimeComponent];
135
136  // The base could be an absolute datetime point for example: "March 1", a
137  // relative datetime point, for example: "2 days before March 1"
138  base:AbsoluteDateTime;
139}
140
141// Datetime result.
142namespace libtextclassifier3.grammar.datetime;
143table UngroundedDatetime {
144  absolute_datetime:AbsoluteDateTime;
145  relative_datetime:RelativeDateTime;
146
147  // The annotation usecases.
148  // There are two modes.
149  // 1- SMART - Datetime results which are optimized for Smart select
150  // 2- RAW - Results are optimized for where annotates as much as possible.
151  annotation_usecases:uint = 4294967295;
152}
153
154