grammar Period
rule period ( number [\s]* time_unit [\s]* loop:loop? { def timestamp?; false end def to_seconds if time_unit.second? number.text_value.to_f elsif time_unit.minute? number.text_value.to_f * 60 elsif time_unit.hour? number.text_value.to_f * 60 * 24 end end def to_days if time_unit.second? number.text_value.to_f / 86400 elsif time_unit.minute? number.text_value.to_f / 1440 elsif time_unit.hour? number.text_value.to_f / 24 end end def loop?; not loop.text_value.empty? end } ) / ( hour:[\d]1..2 (':')? minute:[\d]2..2 (':' second:[\d]2..2)? ([\s]* 'am' / 'pm')? { def timestamp?; true end def date_hash { :hour => hour.text_value.to_f, :minute => minute.text_value.to_f, :second => second.text_value.to_f } end } ) end rule number [\d]+ end rule time_unit second / minute / hour end rule word_end !(!' ' .) end rule second (en_second / pt_second) { def second?; true end def minute?; false end def hour?; false end } end rule en_second 'seconds' word_end / 'second' word_end / 'secs' word_end / 'sec' word_end / 's' word_end end rule pt_second 'segundo' word_end / 'segundos' word_end / 'seg' word_end / 'segs' word_end / 's' word_end end rule minute (en_minute / pt_minute) { def minute?; true end def second?; false end def hour?; false end } end rule en_minute 'minute' word_end / 'minutes' word_end / 'min' word_end / 'mins' word_end / 'm' word_end end rule pt_minute 'minuto' word_end / 'minutos' word_end / 'min' word_end / 'mins' word_end / 'm' word_end end rule hour (en_hour / pt_hour) { def hour?; true end def second?; false end def minute?; false end } end rule en_hour 'hour' word_end / 'hours' word_end / 'h' word_end end rule pt_hour 'hora' word_end / 'horas' word_end / 'h' word_end end rule loop 'loop' end
end