module Music module Transcription module Parsing

grammar Tempo

include PositiveInteger
include PositiveFloat
include PositiveRational

rule tempo
  tempo_bpm / tempo_qnpm / tempo_npm / tempo_nps
end

rule tempo_bpm
  val:positive_number ("bpm" / "BPM") {
    def to_tempo
      Music::Transcription::Tempo::BPM.new(val.to_num)
    end }
end

rule tempo_qnpm
  val:positive_number ("qnpm" / "QNPM") {
    def to_tempo
      Music::Transcription::Tempo::QNPM.new(val.to_num)
    end }
end

rule tempo_npm
  val:positive_number ("npm" / "NPM") {
    def to_tempo
      Music::Transcription::Tempo::NPM.new(val.to_num)
    end }
end

rule tempo_nps
  val:positive_number ("nps" / "NPS") {
    def to_tempo
      Music::Transcription::Tempo::NPS.new(val.to_num)
    end }
end

rule positive_number
  positive_float / positive_rational / positive_integer
end

end

end end end