def parse_ms(with_hour: false)
      s0 = @current_pos
      s1 = match_digits!
      if s1 != :failed
        if match_str(":") != :failed
          s3 = match_digits!
          if s3 != :failed
            @reported_pos = s0
            m = s1.join.to_i
            s = s3.join.to_i
            if with_hour
              h = m / 60
              m = m % 60
              s0 = { "h" => h, "m" => m, "s" => s }
            else
              s0 = { "m" => m, "s" => s }
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
      else
        @current_pos = s0
        s0 = :failed
      end
      s0
    end
def parse_ms(with_hour: false)
      s0 = @current_pos
      s1 = match_digits!
      if s1 != :failed
        if match_str(":") != :failed
          s3 = match_digits!
          if s3 != :failed
            @reported_pos = s0
            m = s1.join.to_i
            s = s3.join.to_i
            if with_hour
              h = m / 60
              m = m % 60
              s0 = { "h" => h, "m" => m, "s" => s }
            else
              s0 = { "m" => m, "s" => s }
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
      else
        @current_pos = s0
        s0 = :failed
      end
      s0
    end
ms : [0-9]+ ":" [0-9]+