%**********************************************************************
%
%  Rules for Date/Time names
%
%  date_np : date NP (days of the week, months, years)
%  time_np : time NP (eg. 12 a.m.)
%
%**********************************************************************


:- multifile best_parse_cats/1, rule/2.
:- dynamic best_parse_cats/1, rule/2.

%
% Best Parse Categories
best_parse_cats([ne_np]).


%
%   NP Rules
%
%% NE_NP --> DATE_NP
rule(ne_np(edge:Edge,s_form:F, % assume all non-days will be caught in timex
     sem:E^[[date,E],[name,E,F],[ne_tag,E,Edge],[realisation,E,Edge]]),
	[date_np(s_form:F)]).


%
% DATE_NP rules
% 

%% DATE_NP --> CD N(/) CD N(/) CD (in DD line)
rule(date_np(s_form:[F1,'/',F3,'/',F5]),[
        cd(s_form:F1),
        n(s_form:'/'),
	cd(s_form:F3),
        n(s_form:'/'),
        cd(s_form:F5)
    ]).

%% LIST_NP(date) VBD(ended) DATE CD
% rule for 'ended'
rule(date_np(s_form:[F1,' ended ',F2,' ',F3]),[
        list_np(s_form:F1,ne_tag:date),
        vbd(s_form:'ended'),
        date(s_form:F2),
	cd(s_form:F3)
	]).


%% DATE_NP --> DATE COMMA DATE CD COMMA LIST_NP(date)
% Mon, Jun 2, 1900
rule(date_np(s_form:[F1,', ',F2,' ',F3,', ',F4]),[
        date(s_form:F1),
	comma(s_form:','),
        date(s_form:F2),
	cd(s_form:F3),
        comma(s_form:','),
        [list_np(s_form:F4,ne_tag:date),cd_np(s_form:F4)]
    ]).

%% DATE_NP --> DATE PERIOD CD COMMA LIST_NP(date)
% Jun. 2, 1900
rule(date_np(s_form:[F1,F2,' ',F3,F4,' ',F5]),[
        date(s_form:F1),
        period(s_form:F2),
	cd(s_form:F3),
        comma(s_form:F4),
        [list_np(s_form:F5,ne_tag:date),cd_np(s_form:F5)]
    ]).

%% DATE_NP --> DATE CD COMMA LIST_NP(date)
% Jun 2, 1900
rule(date_np(s_form:[F1,' ',F2,F3,' ',F4]),[
        date(s_form:F1),
	cd(s_form:F2),
        comma(s_form:F3),
        [list_np(s_form:F4,ne_tag:date),cd_np(s_form:F4)]
    ]).


%% DATE_NP --> LIST_NP(date) IN(of) LIST_NP(date)
rule(date_np(s_form:[F1,' of ',F2]),[
        list_np(s_form:F1,ne_tag:date),
	in(s_form:'of'),
        list_np(s_form:F2,ne_tag:date)
    ]).

%%% DATE_NP --> LIST_NP(date) LIST_NP(date)
%rule(date_np(s_form:[F1,' ',F2]),[
%        list_np(s_form:F1,ne_tag:date),
%        list_np(s_form:F2,ne_tag:date)
%    ]).

%% DATE_NP --> LIST_NP(date) (for special date phrases from list-lookup)
rule(date_np(edge:Edge,s_form:F1,sem:E^[ne_tag,E,Edge]),[
        list_np(s_form:F1,ne_tag:date)
    ]).

%% DATE_NP --> DATE PERIOD LIST_NP(date)
rule(date_np(s_form:[F1,F2,' ',F3]),[
        date(s_form:F1),
        period(s_form:F2),
	list_np(s_form:F3,ne_tag:date)
    ]).

%% DATE_NP --> DATE COMMA LIST_NP(date)
rule(date_np(s_form:[F1,', ',F3]),[
        date(s_form:F1),
        comma(s_form:','),
	list_np(s_form:F3,ne_tag:date)
    ]).

%% DATE_NP --> DATE LIST_NP(date)
rule(date_np(s_form:[F1,' ',F2]),[
        date(s_form:F1),
        list_np(s_form:F2,ne_tag:date)
    ]).

%% DATE_NP --> DATE PERIOD CD
rule(date_np(s_form:[F1,F2,' ',F3]),[
        date(s_form:F1),
        period(s_form:F2),
	cd(s_form:F3)
    ]).

%% DATE_NP --> DATE CD
rule(date_np(s_form:[F1,' ',F2]),[
        date(s_form:F1),
        cd(s_form:F2)
    ]).

%% DATE_NP --> DATE

rule(date_np(s_form:F),[
        date(s_form:F)
    ]).

%% NE_NP --> TIME_NP
rule(ne_np(edge:Edge,s_form:F,source:S,
	   sem:E^[[time,E],[name,E,F],[ne_tag,E,Edge]]),
	[time_np(s_form:F,source:S)]).

%% TIME_NP --> CD LIST_NP(time)
rule(time_np(s_form:[F1,' ',F2]),[
        cd(s_form:F1),
        list_np(s_form:F2,ne_tag:time)
    ]).

%% TIME_NP --> CD : CD LIST_NP(time)
rule(time_np(s_form:[F1,':',F2,' ',F3]),[
        cd(s_form:F1),
	sym(s_form:':'),
        cd(s_form:F2),
        list_np(s_form:F3,ne_tag:time)
    ]).

%% TIME_NP --> LIST_NP(time)
rule(time_np(s_form:[F1],source:list),[
        list_np(s_form:F1,ne_tag:time)
    ]).