code: public static <U, D extends Calendrical<U, D>> Factory<D> on(TimeAxis<U, D> axis) {
  
          Class<D> chronoType = axis.getChronoType();
          CalendarSystem<D> calsys = axis.getCalendarSystem();
          return new Factory<>(chronoType, "", axis, calsys);
  
      }
docs: /*[deutsch]
  <p>Definiert einen Zeitstrahl, auf dem neue generische Kalenderintervalle erzeugt werden k&ouml;nnen. </p>
  
  <p>Beispiel: </p>
  
  <pre>
  PersianCalendar start = PersianCalendar.of(1392, PersianMonth.ESFAND, 27);
  PersianCalendar end = PersianCalendar.of(1393, PersianMonth.FARVARDIN, 6);
  
  CalendarPeriod&lt;PersianCalendar&gt; i1 =
  CalendarPeriod.on(PersianCalendar.axis()).between(start, end);
  CalendarPeriod&lt;PersianCalendar&gt; i2 =
  CalendarPeriod.on(PersianCalendar.axis()).between(
  end.minus(CalendarDays.ONE),
  end.plus(CalendarDays.ONE));
  
  System.out.println(
  interval.findIntersection(
  CalendarPeriod.on(PersianCalendar.axis()).between(
  end.minus(CalendarDays.ONE), end.plus(CalendarDays.ONE))).get());
  // [AP-1393-01-05/AP-1393-01-06]
  </pre>
  
  @param   <D> generic type of timepoints on the underlying timeline
  @param   axis    the calendrical timeline
  @return  new interval factory