From a2b5909d2b689f4f609218d80087a332ce55f2be Mon Sep 17 00:00:00 2001
From: ulrich
Date: Fri, 24 Mar 2023 17:49:02 +0000
Subject: [PATCH] Kommentare fuer API-Doku hinzugefuegt

---
 src/de/uhilger/zeitrechnung/ereignis/EinzelEreignis.java       |    2 
 src/de/uhilger/zeitrechnung/ereignis/ChinesischesEreignis.java |    2 
 src/de/uhilger/zeitrechnung/ChinesischesDatum.java             |   49 +++++++++
 src/de/uhilger/zeitrechnung/kalender/ChinesischerKalender.java |  207 ++++++++++++++++++++++++++++++-----------
 4 files changed, 202 insertions(+), 58 deletions(-)

diff --git a/src/de/uhilger/zeitrechnung/ChinesischesDatum.java b/src/de/uhilger/zeitrechnung/ChinesischesDatum.java
index 3ece41c..e0c9f79 100644
--- a/src/de/uhilger/zeitrechnung/ChinesischesDatum.java
+++ b/src/de/uhilger/zeitrechnung/ChinesischesDatum.java
@@ -1,6 +1,27 @@
+/*
+  Zeitrechnung - a class library to determine calendar events
+  Copyright (c) 1984-2023 Ulrich Hilger, http://uhilger.de
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU Affero General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU Affero General Public License for more details.
+
+  You should have received a copy of the GNU Affero General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
 package de.uhilger.zeitrechnung;
 
 /**
+ * Einfache Klasse fuer ein ChinesischesDatum, die neben  
+ * Jahr, Monat und Tag auch den Zyklus im chinesischen 
+ * Kalender abbildet und festhaelt, ob der Monat ein 
+ * Schaltmonat ist.
  *
  * @author Ulrich Hilger
  */
@@ -9,28 +30,56 @@
   private long zyklus;
   private boolean schaltmonat;
   
+  /**
+   * Ein Objekt der Klasse ChinesischesDatum erzeugen
+   */
   public ChinesischesDatum() {
     super();
   }
   
+  /**
+   * Ein Objekt der Klasse ChinesischesDatum erzeugen
+   *
+   * @param zyklus  der Zyklus des chinesischen Kalenders
+   * @param jahr das Jahr im chinesischen Kalender
+   * @param monat  der Monat im chinesischen Kalender
+   * @param schaltmonat  true, wenn der Monat ein Schaltmonat ist, sonst false
+   * @param tag  Tag im Monat des chinesischen Kalenders
+   */
   public ChinesischesDatum(long zyklus, long jahr, int monat, boolean schaltmonat, int tag) {
     super(jahr, monat, tag);
     this.zyklus = zyklus;
     this.schaltmonat = schaltmonat;
   }
 
+  /**
+   * Den Zyklus dieses Datums im chinesischen Kalender ermitteln
+   * @return Zyklus
+   */
   public long getZyklus() {
     return zyklus;
   }
 
+  /**
+   * Den Zyklkus im chinesischen Kalender angeben
+   * @param zyklus der Zyklus dieses Datums
+   */
   public void setZyklus(long zyklus) {
     this.zyklus = zyklus;
   }
 
+  /**
+   * Ermitteln, ob der Monat dieses Datums ein Schaltmonat ist
+   * @return true, wenn der Monat ein Schaltmonat ist, sonst false 
+   */
   public boolean isSchaltmonat() {
     return schaltmonat;
   }
 
+  /**
+   * Angeben, ob der Monat dieses Datums ein Schaltmonat ist
+   * @param schaltmonat true, wenn der Monat ein Schaltmonat ist, sonst false
+   */
   public void setSchaltmonat(boolean schaltmonat) {
     this.schaltmonat = schaltmonat;
   }  
diff --git a/src/de/uhilger/zeitrechnung/ereignis/ChinesischesEreignis.java b/src/de/uhilger/zeitrechnung/ereignis/ChinesischesEreignis.java
index ff9b9f8..421bc76 100644
--- a/src/de/uhilger/zeitrechnung/ereignis/ChinesischesEreignis.java
+++ b/src/de/uhilger/zeitrechnung/ereignis/ChinesischesEreignis.java
@@ -55,7 +55,7 @@
   public List<Datum> getZeitpunkte(long isoJahr) {
     Definition def = getDefinition();
     ChinesischerKalender j = new ChinesischerKalender();
-    long tag = j.cDatumZuGenerisch(isoJahr, (int) def.getp1(), (int) def.getp2());
+    long tag = j.cDatumZuTagen(isoJahr, (int) def.getp1(), (int) def.getp2());
     List daten = new ArrayList();
     daten.add(new ISOKalender().vonTagen(tag));
     return daten;
diff --git a/src/de/uhilger/zeitrechnung/ereignis/EinzelEreignis.java b/src/de/uhilger/zeitrechnung/ereignis/EinzelEreignis.java
index 4ce9094..ec8c730 100644
--- a/src/de/uhilger/zeitrechnung/ereignis/EinzelEreignis.java
+++ b/src/de/uhilger/zeitrechnung/ereignis/EinzelEreignis.java
@@ -51,8 +51,10 @@
   /** Typnummer fuer Jom Ha Zikaron */
   public static final int EE_JOM_HA_ZIKARON = 4;
   
+  /** Typnummer fuer das chinesische Neujahr */
   public static final int EE_CHINESISCHES_NEUJAHR = 5;
   
+  /** Typnummer fuer Qingming */
   public static final int EE_QINGMING = 6;
 
   /**
diff --git a/src/de/uhilger/zeitrechnung/kalender/ChinesischerKalender.java b/src/de/uhilger/zeitrechnung/kalender/ChinesischerKalender.java
index aaad010..baf2fda 100644
--- a/src/de/uhilger/zeitrechnung/kalender/ChinesischerKalender.java
+++ b/src/de/uhilger/zeitrechnung/kalender/ChinesischerKalender.java
@@ -57,25 +57,86 @@
  */
 public class ChinesischerKalender extends BasisKalender implements Wandler {
 
+  /**
+   * Der Start der chinesischen Zeitrechung laesst sich aus dem heutigen 
+   * chinesischen Datum errechnen. Das erste Jahr des ersten Zyklus faellt 
+   * so auf den 15. Februar -2636 im gregorianischen Kalender.
+   */
 	public static final long STARTTAG = new ISOKalender().zuTagen(-2636, Definition.FEBRUAR, 15);
   
   private long zyklus;
   private boolean schaltmonat;
 
+  /**
+   * Den Zyklus angeben, in dem ein Jahr des chinesischen Kalenders liegt, das 
+   * mit der Methode zuTagen(jahr, monat, tag) in ein generisches Datum 
+   * umgerechnet werden soll.
+   * 
+   * Diese Methode ist eine Hilfsfunktion, wenn nicht die Methode 
+   * zuTagen(zyklus, jahr, monat, schaltmonat, tag) genutzt werden kann.
+   * 
+   * @param zyklus der Zyklus im chinesischen Ḱalender
+   */
   public void setZyklus(long zyklus) {
     this.zyklus = zyklus;
   }
 
+  /**
+   * Angeben, ob ein Monat eines Datums im chinesischen Kalender ein 
+   * Schaltmonat ist, das mit der Methode 
+   * zuTagen(jahr, monat, tag) in ein generisches Datum 
+   * umgerechnet werden soll.
+   * 
+   * Diese Methode ist eine Hilfsfunktion, wenn nicht die Methode 
+   * zuTagen(zyklus, jahr, monat, schaltmonat, tag) genutzt werden kann.
+   * 
+   * @param schaltmonat 
+   */
   public void setSchaltmonat(boolean schaltmonat) {
     this.schaltmonat = schaltmonat;
   }
   
+  /**
+   * Die Anzahl der Tage ermitteln, die zwischen einem gegebenen Datum 
+   * des chinesischen Kalenders und dem Tag liegen, der im
+   * Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist.
+   * 
+   * @param zyklus der Zyklus des chinesischen Kalenders
+   * @param jahr  das Jahr des chinesischen Kalenders
+   * @param monat  der Monat des chinesischen Kalenders
+   * @param schaltmonat true, wenn der Monat ein Schaltmonat ist, sonst false
+   * @param tag Tag im Monat des chinesischen Kalenders
+   * 
+   * @return Anzahl Tage, die zwischen dem gegebenen Datum 
+   * des chinesischen Kalenders und dem Tag liegen, der im 
+   * Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. 
+   * Liegt das gegebene Datum vor dem 1. Januar 1 (gregorianisch), wird 
+   * eine negative Zahl zurueckgegeben. 
+   */
 	public long zuTagen(long zyklus, int jahr, int monat, boolean schaltmonat, int tag) {
     this.zyklus = zyklus;
     this.schaltmonat = schaltmonat;
     return zuTagen(jahr, monat, tag);
 	}
 
+  /**
+   * Die Anzahl der Tage ermitteln, die zwischen einem gegebenen Datum 
+   * des chinesischen Kalenders und dem Tag liegen, der im
+   * Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist.
+   * 
+   * Bei Verwendung dieser Methode muessen zuvor die Methode setZyklus 
+   * und setSchaltmonat genutzt werden.
+   * 
+   * @param jahr das Jahr im betreffenden Kalendersystem
+   * @param monat der Monat im betreffenden Kalendersystem
+   * @param tag der Tag im betreffenden Kalendersysem
+   * 
+   * @return Anzahl Tage, die zwischen dem gegebenen Datum 
+   * des chinesischen Kalenders  und dem Tag liegen, der im 
+   * Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. 
+   * Liegt das gegebene Datum vor dem 1. Januar 1 (gregorianisch), wird 
+   * eine negative Zahl zurueckgegeben. 
+   */  
   @Override
   public long zuTagen(long jahr, int monat, int tag) {    
 		long midYear = (long)Math.floor(STARTTAG + ((zyklus - 1) * 60 + (jahr - 1) + .5) * MITTLERES_TROPISCHES_JAHR);
@@ -88,6 +149,19 @@
 		return priorNewMoon + tag - 1;
   }
 
+  /**
+   * Die Anzahl der Tage ermitteln, die zwischen einem gegebenen Datum 
+   * des chinesischen Kalenders und dem Tag liegen, der im
+   * Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist.
+   * 
+   * @param d das Datum im betreffenden Kalendersystem
+   * 
+   * @return Anzahl Tage, die zwischen dem gegebenen Datum 
+   * des chinesischen Kalenders und dem Tag liegen, der im 
+   * Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. 
+   * Liegt das gegebene Datum vor dem 1. Januar 1 (gregorianisch), wird 
+   * eine negative Zahl zurueckgegeben. 
+   */  
   @Override
   public long zuTagen(Datum d) {
     if(d instanceof ChinesischesDatum) {
@@ -98,6 +172,15 @@
     }
   }
 
+  /**
+   * Das Datum des chinesischen Kalenders fuer ein generisches Datum 
+   * ermitteln.
+   * 
+   * @param tage Anzahl der Tage zwischen 1. Januar 1 im gregorianischen 
+   * Kalender und dem Tag, dessen Datum des chinesischen Kalenders 
+   * ermittelt werden soll
+   * @return das Datum im chinesischen Kalender
+   */
   @Override
   public ChinesischesDatum vonTagen(long tage) {
 		long s1 = winterSonnenwendeAmOderVor(tage);
@@ -120,25 +203,53 @@
     return new ChinesischesDatum(cycle, year, month, leapMonth, day);
   }
   
-  /* ---- */
-  
-	public boolean hatSchaltmonatVorher(long mPrime, long m) {
-		return m >= mPrime && (keinSolarerHauptabschnitt(m) || hatSchaltmonatVorher(mPrime, chinesischerNeumondVor(m)));
-	}
-	
-	public double mitternachtInChina(long date) {
-		return universalVonStandard(date, chinesischerOrt(date));
-	}
-	
-	public final Ort peking(double tee) {
+	public long neujahr(long isoJahr) {
     ISOKalender g = new ISOKalender();
-		long year = g.jahrVonTagen((long)Math.floor(tee));
+		return neujahrAmOderVor(g.zuTagen(isoJahr, Definition.JULI, 1));
+	}
+
+	public long qingMing(long isoJahr) {
+    ISOKalender g = new ISOKalender();
+		return (long)Math.floor(solarerNebenabschnittAmOderNach(g.zuTagen(isoJahr, Definition.MAERZ, 30)));
+	}
+  
+  /**
+   * Das generische Datum des Tages mit einem gegebenen festen Datum 
+   * im chinesischen Kalender fuer ein gegebenes gregorianisches Jahr 
+   * ermitteln
+   * 
+   * @param isoJahr Jahr im gregorischen Kalender, in das ein gesuchtes Ereignis faellt
+   * @param cMonat Monat im chinesischen Kalender, an dem das Ereignis stattfindet
+   * @param cTag  Tag im Monat des chinesischen Kalenders, an dem das Ereignis stattfindet
+   * @return generisches Datum des Ereignisses
+   */
+	public long cDatumZuTagen(long isoJahr, int cMonat, int cTag) {
+    ISOKalender g = new ISOKalender();
+		long elapsedYears = isoJahr - g.jahrVonTagen(STARTTAG) + 1;
+		long cycle = ganzzahlQuotient(elapsedYears - 1, 60) + 1;
+		int year = (int)moduloAngepasst(elapsedYears, 60);
+		return zuTagen(cycle, year, cMonat, false, cTag);
+	}
+	
+  /* ---- Hilfsfunktionen --------- */
+  
+	public boolean hatSchaltmonatVorher(long mHaupt, long m) {
+		return m >= mHaupt && (keinSolarerHauptabschnitt(m) || hatSchaltmonatVorher(mHaupt, chinesischerNeumondVor(m)));
+	}
+	
+	public double mitternachtInChina(long tage) {
+		return universalVonStandard(tage, chinesischerOrt(tage));
+	}
+	
+	public final Ort peking(double t) {
+    ISOKalender g = new ISOKalender();
+		long year = g.jahrVonTagen((long)Math.floor(t));
 		return new Ort("Peking", (double) (39.55), winkel(116,25,0), 
             (double) (43.5), year < 1929 ? 1397d/180 : 8);
 	}
 	
-	public final Ort chinesischerOrt(double tee) {
-		return peking(tee);
+	public final Ort chinesischerOrt(double t) {
+		return peking(t);
 	}
 	
 	public long neujahrAmOderVor(long tage) {
@@ -151,77 +262,59 @@
 		long s2 = winterSonnenwendeAmOderVor(s1 + 370);
 		long m12 = chinesischerNeumondAmOderNach(s1 + 1);
 		long m13 = chinesischerNeumondAmOderNach(m12 + 1);
-		long nextM11 = chinesischerNeumondVor(s2 + 1);
-		if((Math.round((nextM11 - m12) / MITTLERER_SYNODISCHER_MONAT) == 12) && (keinSolarerHauptabschnitt(m12) || keinSolarerHauptabschnitt(m13))) {
+		long naechsterM11 = chinesischerNeumondVor(s2 + 1);
+		if((Math.round((naechsterM11 - m12) / MITTLERER_SYNODISCHER_MONAT) == 12) && (keinSolarerHauptabschnitt(m12) || keinSolarerHauptabschnitt(m13))) {
 			return chinesischerNeumondAmOderNach(m13 + 1);
 		} else {
 			return m13;
 		}
 	}
 
-	public long neujahr(long gYear) {
-    ISOKalender g = new ISOKalender();
-		return neujahrAmOderVor(g.zuTagen(gYear, Definition.JULI, 1));
-	}
-
-	public long qingMing(long gYear) {
-    ISOKalender g = new ISOKalender();
-		return (long)Math.floor(solarerNebenabschnittAmOderNach(g.zuTagen(gYear, Definition.MAERZ, 30)));
-	}
-  
-	public long cDatumZuGenerisch(long isoJahr, int cMonat, int cTag) {
-    ISOKalender g = new ISOKalender();
-		long elapsedYears = isoJahr - g.jahrVonTagen(STARTTAG) + 1;
-		long cycle = ganzzahlQuotient(elapsedYears - 1, 60) + 1;
-		int year = (int)moduloAngepasst(elapsedYears, 60);
-		return zuTagen(cycle, year, cMonat, false, cTag);
-	}
-	
-	public long winterSonnenwendeAmOderVor(long date) {
-		double approx = geschaetzteSolareLaengeVor(mitternachtInChina(date + 1), Definition.WINTER);
+	public long winterSonnenwendeAmOderVor(long tage) {
+		double approx = geschaetzteSolareLaengeVor(mitternachtInChina(tage + 1), Definition.WINTER);
 		long i;
 		for(i = (long)(Math.floor(approx) - 1); !(Definition.WINTER <= solareLaenge(mitternachtInChina(i + 1))); ++i);
 		return i;
 	}
 	  
-	public boolean keinSolarerHauptabschnitt(long date) {
-		return aktuellerSolarerHauptabschnitt(date) ==
-			aktuellerSolarerHauptabschnitt(chinesischerNeumondAmOderNach(date + 1));
+	public boolean keinSolarerHauptabschnitt(long tage) {
+		return aktuellerSolarerHauptabschnitt(tage) ==
+			aktuellerSolarerHauptabschnitt(chinesischerNeumondAmOderNach(tage + 1));
 	}
 
-	public int aktuellerSolarerHauptabschnitt(long date) {
-		double s = solareLaenge(standardVonUniversal(date, chinesischerOrt(date)));
+	public int aktuellerSolarerHauptabschnitt(long tage) {
+		double s = solareLaenge(standardVonUniversal(tage, chinesischerOrt(tage)));
 		return (int)moduloAngepasst(2 + ganzzahlQuotient(s, (double) (30)), 12);
 	}
 
-	public double solarerHauptabschnittAmOderNach(long date) {
-		double l = modulo(30 * Math.ceil(solareLaenge(mitternachtInChina(date)) / 30), 360);
-		return chinesischeSolareLaengeAmOderNach(date, l);
+	public double solarerHauptabschnittAmOderNach(long tage) {
+		double l = modulo(30 * Math.ceil(solareLaenge(mitternachtInChina(tage)) / 30), 360);
+		return chinesischeSolareLaengeAmOderNach(tage, l);
 	}
   
-	public double solarerNebenabschnittAmOderNach(long date) {
-		double l = modulo(30 * Math.ceil((solareLaenge(mitternachtInChina(date)) - (double) (15)) / 30) + (double) (15), 360);
-		return chinesischeSolareLaengeAmOderNach(date, l);
+	public double solarerNebenabschnittAmOderNach(long tage) {
+		double l = modulo(30 * Math.ceil((solareLaenge(mitternachtInChina(tage)) - (double) (15)) / 30) + (double) (15), 360);
+		return chinesischeSolareLaengeAmOderNach(tage, l);
 	}
 	
-	public double chinesischeSolareLaengeAmOderNach(long date, double theta) {
-		Ort beijing = chinesischerOrt(date);
-		double tee = solareLaengeNach(standardVonUniversal(date, beijing), theta);
-		return standardVonUniversal(tee, beijing);
+	public double chinesischeSolareLaengeAmOderNach(long tage, double theta) {
+		Ort peking = chinesischerOrt(tage);
+		double t = solareLaengeNach(standardVonUniversal(tage, peking), theta);
+		return standardVonUniversal(t, peking);
 	}
 	
-	public int aktuellerSolarerUnterabschnitt(long date) {
-		double s = solareLaenge(mitternachtInChina(date));
+	public int aktuellerSolarerUnterabschnitt(long tage) {
+		double s = solareLaenge(mitternachtInChina(tage));
 		return (int)moduloAngepasst(3 + ganzzahlQuotient(s - (double) (15), (double) (30)), 12);
 	}
 
-	public long chinesischerNeumondAmOderNach(long date) {
-		double t = neumondNach(mitternachtInChina(date));
+	public long chinesischerNeumondAmOderNach(long tage) {
+		double t = neumondNach(mitternachtInChina(tage));
 		return (long)Math.floor(standardVonUniversal(t, chinesischerOrt(t)));
 	}
 
-	public long chinesischerNeumondVor(long date) {
-    double t = neumondVor((long) mitternachtInChina(date));
+	public long chinesischerNeumondVor(long tage) {
+    double t = neumondVor((long) mitternachtInChina(tage));
 		return (long)Math.floor(standardVonUniversal(t, chinesischerOrt(t)));
 	}
 }

--
Gitblit v1.9.3