require 'slaw/grammars/schedules_nodes'

module Slaw

module Grammars
  grammar Schedules
    rule schedules_container
      schedules:schedules <ScheduleContainer>
    end

    rule schedules
      children:schedule+ <GroupNode>
    end

    rule schedule
      schedule_title
      body:body?
      <Schedule>
    end

    rule schedule_title
      new_schedule_title / legacy_schedule_title
    end

    rule new_schedule_title
      space? 'SCHEDULE'
      eol
      heading:schedule_heading?
      subheading:schedule_subheading?
      <ScheduleTitle>
    end

    rule schedule_heading
      'HEADING' space? title:inline_items? eol
    end

    rule schedule_subheading
      'SUBHEADING' space? title:inline_items? eol
    end

    # The legacy schedule mechanism is retained because it matches PDF imports well.
    # Subsequent edits will use the new schedule format.
    rule legacy_schedule_title
      space? schedule_title_prefix [ \t:.-]* heading:inline_items?
      subheading:(newline space? inline_items)?
      eol
      <LegacyScheduleTitle>
    end

    rule schedule_title_prefix
      'schedule'i 's'i?
    end
  end
end

end