def reference(name,
                  *_args,
                  hours: nil,
                  minutes: nil,
                  seconds: nil,
                  milliseconds: nil,
                  srt_timecode: nil,
                  ssa_timecode: nil,
                  ass_timecode: nil)

      @references[name] =
        case
        when hours
          { timecode: hours * 3600 }
        when minutes
          { timecode: minutes * 60 }
        when seconds
          { timecode: seconds }
        when milliseconds
          { timecode: milliseconds / 1000 }
        when srt_timecode
          { timecode: Titlekit::SRT.parse_timecode(srt_timecode) }
        when ssa_timecode
          { timecode: Titlekit::SSA.parse_timecode(ssa_timecode) }
        when ass_timecode
          { timecode: Titlekit::ASS.parse_timecode(ass_timecode) }
        end

      self
    end
def reference(name,
                  *_args,
                  hours: nil,
                  minutes: nil,
                  seconds: nil,
                  milliseconds: nil,
                  srt_timecode: nil,
                  ssa_timecode: nil,
                  ass_timecode: nil)

      @references[name] =
        case
        when hours
          { timecode: hours * 3600 }
        when minutes
          { timecode: minutes * 60 }
        when seconds
          { timecode: seconds }
        when milliseconds
          { timecode: milliseconds / 1000 }
        when srt_timecode
          { timecode: Titlekit::SRT.parse_timecode(srt_timecode) }
        when ssa_timecode
          { timecode: Titlekit::SSA.parse_timecode(ssa_timecode) }
        when ass_timecode
          { timecode: Titlekit::ASS.parse_timecode(ass_timecode) }
        end

      self
    end
Places a named reference (in the form of a string or a symbol)
 on a timecode specified by either +hours+, +minutes+, +seconds+
 or +milliseconds+.

 Its typical use-case is to reference a specific subtitle you can
 recognize in both the movie and your subtitle file, where usually
 for the subtitle file (represented by {Have}) you will reference
 the subtitle index and for the movie (represented by {Want}) you
 will reference the timecode that is displayed when the line occurs
 in the movie.

 @example Referencing a timecode by hours
   have.reference('Earl grey, hot', hours: 0.963)

 @example Referencing a timecode by seconds
   have.reference('In a galaxy ...', seconds: 14.2)

 @example Referencing a timecode by an SRT-style timecode
   have.reference('In a galaxy ...', srt_timecode: '00:00:14,200')

 @example Referencing a timecode by an ASS-style timecode
   have.reference('In a galaxy ...', ass_timecode: '0:00:14,20')

 @example Referencing a timecode by an SSA-style timecode
   have.reference('In a galaxy ...', ssa_timecode: '0:00:14,20')

 @example Symbols can be used as references as well!
   have.reference(:narrator_begins, minutes: 9.6)

 @param name [String, Symbol] The name of the reference
 @param hours [Float]
 @param minutes [Float]
 @param seconds [Float]
 @param milliseconds [Float]