def GetNextSankranti(startDate): zodiac = 0 step = 1.0 count = 0 prevday = GCGregorianDate() d = GCGregorianDate(date=startDate) prev = GCMath.putIn360( GCSunData.GetSunLongitude(d) - GCAyanamsha.GetAyanamsa(d.GetJulian())) prev_rasi = int(floor(prev / 30.0)) while count < 20: prevday.Set(d) d.shour += step d.NormalizeHours() ld = GCMath.putIn360( GCSunData.GetSunLongitude(d) - GCAyanamsha.GetAyanamsa(d.GetJulian())) new_rasi = int(floor(ld / 30.0)) if prev_rasi != new_rasi: zodiac = new_rasi step *= 0.5 d.Set(prevday) count += 1 continue return d, zodiac
def GetPrevConjunctionEx(test_date, found, this_conj, earth, forward=False): phi = 12.0 dir = 1.0 if forward else -1.0 if this_conj: test_date.shour += 0.2 * dir test_date.NormalizeHours() jday = test_date.GetJulianComplete() moon = GCMoonData.MOONDATA() d = GCGregorianDate(date=test_date) xd = GCGregorianDate() scan_step = 1.0 prev_tit = 0 new_tit = -1 moon.Calculate(jday, earth) sunl = GCSunData.GetSunLongitude(d) l1 = GCMath.putIn180(moon.longitude_deg - sunl) prev_tit = int(math.floor(l1 / phi)) counter = 0 while counter < 20: xj = jday xd.Set(d) jday += scan_step * dir d.shour += scan_step * dir d.NormalizeHours() moon.Calculate(jday, earth) sunl = GCSunData.GetSunLongitude(d) l2 = GCMath.putIn180(moon.longitude_deg - sunl) new_tit = int(math.floor(l2 / phi)) if forward: is_change = prev_tit < 0 and new_tit >= 0 else: is_change = prev_tit >= 0 and new_tit < 0 if is_change: jday = xj d.Set(xd) scan_step *= 0.5 counter += 1 else: l1 = l2 prev_tit = new_tit found.Set(d) return sunl
def GetNextYogaStart(ed, startDate, nextDate): phi = 40.0 / 3.0 jday = startDate.GetJulianComplete() moon = MOONDATA() d = GCGregorianDate(date=startDate) xd = GCGregorianDate() scan_step = 0.5 prev_tit = 0 new_tit = -1 ayanamsha = GCAyanamsha.GetAyanamsa(jday) moon.Calculate(jday, ed) sunl = GetSunLongitude(d) l1 = GCMath.putIn360(moon.longitude_deg + sunl - 2 * ayanamsha) prev_tit = int(floor(l1 / phi)) counter = 0 while counter < 20: xj = jday xd.Set(d) jday += scan_step d.shour += scan_step d.NormalizeHours() moon.Calculate(jday, ed) sunl = GetSunLongitude(d) l2 = GCMath.putIn360(moon.longitude_deg + sunl - 2 * ayanamsha) new_tit = int(floor(l2 / phi)) if prev_tit != new_tit: jday = xj d.Set(xd) scan_step *= 0.5 counter += 1 continue else: l1 = l2 nextDate.Set(d) return new_tit
def GetNextTithiStart(ed, startDate, nextDate, forward=True): phi = 12.0 jday = startDate.GetJulianComplete() moon = MOONDATA() d = GCGregorianDate(date=startDate) xd = GCGregorianDate() dir = 1.0 if forward else -1.0 scan_step = 0.5 * dir prev_tit = 0 new_tit = -1 moon.Calculate(jday, ed) sunl = GetSunLongitude(d) l1 = GCMath.putIn360(moon.longitude_deg - sunl - 180.0) prev_tit = int(floor(l1 / phi)) counter = 0 while counter < 20: xj = jday xd.Set(d) jday += scan_step d.shour += scan_step d.NormalizeHours() moon.Calculate(jday, ed) sunl = GetSunLongitude(d) l2 = GCMath.putIn360(moon.longitude_deg - sunl - 180.0) new_tit = int(floor(l2 / phi)) if prev_tit != new_tit: jday = xj d.Set(xd) scan_step *= 0.5 counter += 1 continue else: l1 = l2 nextDate.Set(d) return new_tit
def unittests(): GCUT.info('conjunctions') b = IsConjunction(10, 11, 12, 20) GCUT.val(b, True, 'is conjunction') e = GCEarthData.EARTHDATA() e.longitude_deg = 27.0 e.latitude_deg = 45.0 e.tzone = 1.0 vc = Today() vc2 = GCGregorianDate(date=vc) vc3 = GCGregorianDate(date=vc) l = GetPrevConjunction(vc2, e) GCUT.msg('Conjunction on: {}'.format(repr(vc2))) vc2.Set(vc) l = GetNextConjunctionEx(vc2, vc3, True, e) GCUT.msg('Conjunction on: {}'.format(repr(vc3)))
def writeXml(xml, loc, vcStart, vcEnd): dt = GCTime() zodiac = 0 d = GCGregorianDate(date=vcStart) xml.write("<xml>\n") xml.write("\t<request name=\"Sankranti\" version=\"") xml.write(GCStrings.getString(130)) xml.write("\">\n") xml.write("\t\t<arg name=\"longitude\" val=\"") xml.write(str(loc.m_fLongitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"latitude\" val=\"") xml.write(str(loc.m_fLatitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"timezone\" val=\"") xml.write(str(loc.m_fTimezone)) xml.write("\" />\n") xml.write("\t\t<arg name=\"location\" val=\"") xml.write(loc.m_strName) xml.write("\" />\n") xml.write("\t\t<arg name=\"startdate\" val=\"") xml.write(repr(vcStart)) xml.write("\" />\n") xml.write("\t\t<arg name=\"enddate\" val=\"") xml.write(repr(vcEnd)) xml.write("\" />\n") xml.write("\t</request>\n") xml.write("\t<result name=\"SankrantiList\">\n") while d.IsBeforeThis(vcEnd): nextDate, zodiac = GetNextSankranti(d) d.Set(nextDate) d.InitWeekDay() xml.write("\t\t<sank date=\"") xml.write(str(d)) xml.write("\" ") xml.write("dayweekid=\"") xml.write(str(d.dayOfWeek)) xml.write("\" dayweek=\"") xml.write(GCStrings.getString(d.dayOfWeek)) xml.write("\" ") dt.SetDegTime(360 * d.shour) xml.write(" time=\"") xml.write(repr(dt)) xml.write("\" >\n") xml.write("\t\t\t<zodiac sans=\"") xml.write(GCStrings.GetSankrantiName(zodiac)) xml.write("\" eng=\"") xml.write(GCStrings.GetSankrantiNameEn(zodiac)) xml.write("\" id=\"") xml.write(str(zodiac)) xml.write("\" />\n") xml.write("\t\t</sank>\n") d.NextDay() d.NextDay() xml.write("\t</result>\n") xml.write("</xml>") return 1
def writeGaurabdaTithiXml(xml, loc, vaStart, vaEnd): gyearA = vaStart.gyear gyearB = vaEnd.gyear gmasa = vaStart.masa gpaksa = 1 if vaStart.tithi >= 15 else 0 gtithi = vaStart.tithi % 15 if gyearB < gyearA: gyearB = gyearA xml.write("<xml>\n") xml.write("\t<request name=\"Tithi\" version=\"") xml.write(GCStrings.getString(130)) xml.write("\">\n") xml.write("\t\t<arg name=\"longitude\" val=\"") xml.write(str(loc.m_fLongitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"latitude\" val=\"") xml.write(str(loc.m_fLatitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"timezone\" val=\"") xml.write(str(loc.m_fTimezone)) xml.write("\" />\n") if gyearA > 1500: xml.write("\t\t<arg name=\"year-start\" val=\"") xml.write(str(gyearA)) xml.write("\" />\n") xml.write("\t\t<arg name=\"year-end\" val=\"") xml.write(str(gyearB)) xml.write("\" />\n") else: xml.write("\t\t<arg name=\"gaurabdayear-start\" val=\"") xml.write(str(gyearA)) xml.write("\" />\n") xml.write("\t\t<arg name=\"gaurabdayear-end\" val=\"") xml.write(str(gyearB)) xml.write("\" />\n") xml.write("\t\t<arg name=\"masa\" val=\"") xml.write(str(gmasa)) xml.write("\" />\n") xml.write("\t\t<arg name=\"paksa\" val=\"") xml.write(str(gpaksa)) xml.write("\" />\n") xml.write("\t\t<arg name=\"tithi\" val=\"") xml.write(str(gtithi)) xml.write("\" />\n") xml.write("\t</request>\n") xml.write("\t<result name=\"Tithi\">\n") earth = loc.GetEarthData() vcs = GCGregorianDate() vce = GCGregorianDate() today = GCGregorianDate() sun = SUNDATA() day = GCDayData() A = B = 0 if gyearA > 1500: A = gyearA - 1487 B = gyearB - 1485 else: A = gyearA B = gyearB for A in range(A, B + 1): vcs.Set(GCTithi.CalcTithiEnd(A, gmasa, gpaksa, gtithi, earth, vce)) if gyearA > 1500: if (vcs.year < gyearA) or (vcs.year > gyearB): continue oTithi = gpaksa * 15 + gtithi oMasa = gmasa oPaksa = gpaksa oYear = 0 xml.write("\t<celebration\n") xml.write("\t\trtithi=\"") xml.write(GCStrings.GetTithiName(oTithi)) xml.write("\"\n") xml.write("\t\trmasa=\"") xml.write(GCStrings.GetMasaName(oMasa)) xml.write("\"\n") xml.write("\t\trpaksa=\"") xml.write('Gaura' if oPaksa else "Krsna") xml.write("\"\n") # test ci je ksaya today.Set(vcs) today.shour = 0.5 sun.SunCalc(today, earth) sunrise = (sun.sunrise_deg + loc.m_fTimezone * 15.0) / 360 if sunrise < vcs.shour: today.Set(vce) sun.SunCalc(today, earth) sunrise = (sun.sunrise_deg + loc.m_fTimezone * 15.0) / 360 if sunrise < vce.shour: # normal type vcs.NextDay() xml.write("\t\ttype=\"normal\"\n") else: # ksaya vcs.NextDay() day.DayCalc(vcs, earth) oTithi = day.nTithi oPaksa = day.nPaksa oMasa = day.MasaCalc(vcs, earth) oYear = day.nGaurabdaYear xml.write("\t\ttype=\"ksaya\"\n") else: # normal, alebo prvy den vriddhi today.Set(vce) sun.SunCalc(today, earth) if (sun.sunrise_deg + loc.m_fTimezone * 15.0) / 360 < vce.shour: # first day of vriddhi type xml.write("\t\ttype=\"vriddhi\"\n") else: # normal xml.write("\t\ttype=\"normal\"\n") xml.write("\t\tdate=\"") xml.write(str(vcs)) xml.write("\"\n") xml.write("\t\totithi=\"") xml.write(GCStrings.GetTithiName(oTithi)) xml.write("\"\n") xml.write("\t\tomasa=\"") xml.write(GCStrings.GetMasaName(oMasa)) xml.write("\"\n") xml.write("\t\topaksa=\"") xml.write('Gaura' if oPaksa else 'Krsna') xml.write("\"\n") xml.write("\t/>\n") xml.write("\t</result>\n") xml.write("</xml>\n") return 1
def writeGaurabdaNextTithiXml(xml, loc, vcStart, vaStart): gmasa = vaStart.masa gpaksa = 1 if vaStart.tithi >= 15 else 0 gtithi = vaStart.tithi % 15 xml.write("<xml>\n") xml.write("\t<request name=\"Tithi\" version=\"") xml.write(GCStrings.getString(130)) xml.write("\">\n") xml.write("\t\t<arg name=\"longitude\" val=\"") xml.write(str(loc.m_fLongitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"latitude\" val=\"") xml.write(str(loc.m_fLatitude)) xml.write("\" />\n") xml.write("\t\t<arg name=\"timezone\" val=\"") xml.write(str(loc.m_fTimezone)) xml.write("\" />\n") xml.write("\t\t<arg name=\"start date\" val=\"") xml.write(str(vcStart)) xml.write("\" />\n") xml.write("\t\t<arg name=\"masa\" val=\"") xml.write(str(gmasa)) xml.write("\" />\n") xml.write("\t\t<arg name=\"paksa\" val=\"") xml.write(str(gpaksa)) xml.write("\" />\n") xml.write("\t\t<arg name=\"tithi\" val=\"") xml.write(str(gtithi)) xml.write("\" />\n") xml.write("\t</request>\n") xml.write("\t<result name=\"Tithi\">\n") earth = loc.GetEarthData() vcs = GCGregorianDate() vce = GCGregorianDate() sun = SUNDATA() A = 0 day = GCDayData() today = GCGregorianDate(date=vcStart) today.PreviousDay() vcStart.SubtractDays(15) for A in range(0, 4): vcs.Set( GCTithi.CalcTithiEndEx(vcStart, 0, gmasa, gpaksa, gtithi, earth, vce)) if not vcs.IsBeforeThis(today): oTithi = gpaksa * 15 + gtithi oMasa = gmasa oPaksa = gpaksa oYear = 0 xml.write("\t<celebration\n") xml.write("\t\trtithi=\"") xml.write(GCStrings.GetTithiName(oTithi)) xml.write("\"\n") xml.write("\t\trmasa=\"") xml.write(GCStrings.GetMasaName(oMasa)) xml.write("\"\n") xml.write("\t\trpaksa=\"") xml.write("Gaura" if oPaksa else "Krsna") xml.write("\"\n") # test ci je ksaya today.Set(vcs) today.shour = 0.5 sun.SunCalc(today, earth) sunrise = (sun.sunrise_deg + loc.m_fTimezone * 15.0) / 360 if sunrise < vcs.shour: today.Set(vce) sun.SunCalc(today, earth) sunrise = (sun.sunrise_deg + loc.m_fTimezone * 15.0) / 360 if sunrise < vce.shour: # normal type vcs.NextDay() xml.write("\t\ttype=\"normal\"\n") else: # ksaya vcs.NextDay() day.DayCalc(vcs, earth) oTithi = day.nTithi oPaksa = day.nPaksa oMasa = day.MasaCalc(vcs, earth) oYear = day.nGaurabdaYear xml.write("\t\ttype=\"ksaya\"\n") else: # normal, alebo prvy den vriddhi today.Set(vce) sun.SunCalc(today, earth) if (sun.sunrise_deg + loc.m_fTimezone * 15.0) / 360 < vce.shour: # first day of vriddhi type xml.write("\t\ttype=\"vriddhi\"\n") else: # normal xml.write("\t\ttype=\"normal\"\n") xml.write("\t\tdate=\"") xml.write(str(vcs)) xml.write("\"\n") xml.write("\t\totithi=\"") xml.write(GCStrings.GetTithiName(oTithi)) xml.write("\"\n") xml.write("\t\tomasa=\"") xml.write(GCStrings.GetMasaName(oMasa)) xml.write("\"\n") xml.write("\t\topaksa=\"") xml.write("Gaura" if oPaksa else "Krsna") xml.write("\"\n") xml.write("\t/>\n") break else: vcStart.Set(vcs) vcs.NextDay() xml.write("\t</result>\n") xml.write("</xml>\n") return 1
def CalcTithiEndEx(vcStart, GYear, nMasa, nPaksa, nTithi, earth, endTithi): d = GCGregorianDate() dtemp = GCGregorianDate() day = GCDayData() tithi = 0 counter = 0 sunrise = 0.0 start = GCGregorianDate() end = GCGregorianDate() start.shour = -1.0 end.shour = -1.0 start.day = start.month = start.year = -1 end.day = end.month = end.year = -1 d.Set(vcStart) i = 0 while True: d.AddDays(13) day.DayCalc(d, earth) day.nMasa = day.MasaCalc(d, earth) gy = day.nGaurabdaYear i += 1 if ((day.nPaksa == nPaksa) and (day.nMasa == nMasa)) or i > 30: break if i > 30: d.year = d.month = d.day = -1 return d # we found masa and paksa # now we have to find tithi tithi = nTithi + nPaksa * 15 if day.nTithi == tithi: # loc1 # find tithi juncts in this day and according to that times, # look in previous or next day for end and start of this tithi nType = 1 else: if day.nTithi < tithi: # do increment of date until nTithi == tithi # but if nTithi > tithi # then do decrement of date counter = 0 while counter < 30: d.NextDay() day.DayCalc(d, earth) if day.nTithi == tithi: break if (day.nTithi < tithi) and (day.nPaksa != nPaksa): d.PreviousDay() break if day.nTithi > tithi: d.PreviousDay() break counter += 1 # somewhere is error if counter >= 30: d.year = d.month = d.day = 0 nType = 0 else: # do decrement of date until nTithi <= tithi counter = 0 while counter < 30: d.PreviousDay() day.DayCalc(d, earth) if day.nTithi == tithi: break if (day.nTithi > tithi) and (day.nPaksa != nPaksa): break if day.nTithi < tithi: break counter += 1 # somewhere is error if counter >= 30: d.year = d.month = d.day = 0 nType = 0 if day.nTithi == tithi: # do the same as in loc1 nType = 1 else: # nTithi != tithi and nTithi < tithi # but on next day is nTithi > tithi # that means we will find start and the end of tithi # in this very day or on next day before sunrise nType = 2 # now we know the type of day-accurancy # nType = 0 means, that we dont found a day # nType = 1 means, we find day, when tithi was present at sunrise # nType = 2 means, we found day, when tithi started after sunrise # but ended before next sunrise # sunrise = day.sun.sunrise_deg / 360 + earth.tzone / 24 if nType == 1: d1 = GCGregorianDate() d2 = GCGregorianDate() d.shour = sunrise GCTithi.GetPrevTithiStart(earth, d, d1) #d = d1 #d.shour += 0.02 GCTithi.GetNextTithiStart(earth, d, d2) endTithi.Set(d2) return d1 elif nType == 2: d1 = GCGregorianDate() d2 = GCGregorianDate() d.shour = sunrise GCTithi.GetNextTithiStart(earth, d, d1) d.Set(d1) d.shour += 0.1 d.NormalizeValues() GCTithi.GetNextTithiStart(earth, d, d2) endTithi.Set(d2) return d1 # if nType == 0, then this algoritmus has some failure if nType == 0: d.year = 0 d.month = 0 d.day = 0 d.shour = 0.0 endTithi.Set(d) else: d.Set(start) endTithi.Set(end) return d
class TAppDay: def __init__(self): self.m_location = GCLocation() self.eventTime = GCGregorianDate() self.details = GCDayData() self.b_adhika = False self.celeb_gy = [0] * TRESULT_APP_CELEBS self.celeb_date = [ GCGregorianDate() for i in range(TRESULT_APP_CELEBS) ] def calculateAppDay(self, location, eventDate): d = self.details vc = GCGregorianDate(date=eventDate) vcsun = GCGregorianDate(date=eventDate) dprev = GCGregorianDate() dnext = GCGregorianDate() m_earth = location.GetEarthData() self.b_adhika = False self.eventTime.Set(eventDate) self.m_location.Set(location) vcsun.shour -= vcsun.tzone / 24.0 vcsun.NormalizeValues() vcsun.tzone = 0.0 d.sun.SunPosition(vcsun, m_earth, vcsun.shour - 0.5) d.moon.Calculate(vcsun.GetJulianComplete(), m_earth) d.msDistance = GCMath.putIn360(d.moon.longitude_deg - d.sun.longitude_deg - 180.0) d.msAyanamsa = GCAyanamsha.GetAyanamsa(vc.GetJulianComplete()) # tithi dd = d.msDistance / 12.0 d.nTithi = int(floor(dd)) d.nTithiElapse = (dd - floor(dd)) * 100.0 # naksatra dd = GCMath.putIn360(d.moon.longitude_deg - d.msAyanamsa) dd = (dd * 3.0) / 40.0 d.nNaksatra = int(floor(dd)) d.nNaksatraElapse = (dd - floor(dd)) * 100.0 d.nMasa = d.MasaCalc(vc, m_earth) d.nMoonRasi = GCRasi.GetRasi(d.moon.longitude_deg, d.msAyanamsa) d.nSunRasi = GCRasi.GetRasi(d.sun.longitude_deg, d.msAyanamsa) if (d.nMasa == ADHIKA_MASA): d.nMasa = GCRasi.GetRasi(d.sun.longitude_deg, d.msAyanamsa) self.b_adhika = True vc.Today() vc.tzone = m_earth.tzone m = 0 va = GCGaurabdaDate() vctemp = GCGregorianDate() va.tithi = d.nTithi va.masa = d.nMasa va.gyear = GCCalendar.GetGaurabdaYear(vc, m_earth) if (va.gyear < d.nGaurabdaYear): va.gyear = d.nGaurabdaYear for i in range(6): GCCalendar.Gaurabda2Gregorian(va, vctemp, m_earth) if (va.gyear > d.nGaurabdaYear): if (m < TRESULT_APP_CELEBS): self.celeb_date[m].Set(vctemp) self.celeb_gy[m] = va.gyear m += 1 va.gyear += 1 def formatPlainText(self, stream): d = self.details vc = GCGregorianDate(date=self.eventTime) m_earth = self.m_location.GetEarthData() sb = GCStringBuilder(stream) sb.Format = SBTF_TEXT sb.AppendLine(GCStrings.getString(25)) sb.AppendLine("") sb.AppendLine("{:15s} : {} {} {}".format( GCStrings.getString(7), vc.day, GCStrings.GetMonthAbreviation(vc.month), vc.year)) sb.AppendLine("{:15s} : {}:{:02d}".format(GCStrings.getString(8), vc.GetHour(), vc.GetMinuteRound())) sb.AppendLine("") sb.AppendLine("{:15s} : {}".format(GCStrings.getString(9), self.m_location.m_strName)) sb.AppendLine("{:15s} : {}".format(GCStrings.getString(10), self.m_location.m_strLatitude)) sb.AppendLine("{:15s} : {}".format(GCStrings.getString(11), self.m_location.m_strLongitude)) sb.AppendLine("{:15s} : {}".format(GCStrings.getString(12), self.m_location.m_strTimeZone)) sb.AppendLine("{:15s} : N/A".format("DST")) sb.AppendLine("") sb.AppendLine("{:15s} : {}".format(GCStrings.getString(13), GCStrings.GetTithiName(d.nTithi))) sb.AppendLine("{:15s} : {:.2f} %".format(GCStrings.getString(14), d.nTithiElapse)) sb.AppendLine("{:15s} : {}".format( GCStrings.getString(15), GCStrings.GetNaksatraName(d.nNaksatra))) sb.AppendLine("{:15s} : {:.2f} % ({} pada)".format( GCStrings.getString(16), d.nNaksatraElapse, GCStrings.getString(811 + int(d.nNaksatraElapse / 25.0)))) sb.AppendLine("{:15s} : {} ({})".format( "Moon Rasi", GCStrings.GetSankrantiName(d.nMoonRasi), GCStrings.GetSankrantiNameEn(d.nMoonRasi))) sb.AppendLine("{:15s} : {} ({})".format( "Sun Rasi", GCStrings.GetSankrantiName(d.nSunRasi), GCStrings.GetSankrantiNameEn(d.nSunRasi))) sb.AppendLine("{:15s} : {}".format(GCStrings.getString(20), GCStrings.GetPaksaName(d.nPaksa))) if (self.b_adhika == True): sb.AppendLine("{:15s} : {} {}".format( GCStrings.getString(22), GCStrings.GetMasaName(d.nMasa), GCStrings.getString(21))) else: sb.AppendLine("{:15s} : {}".format(GCStrings.getString(22), GCStrings.GetMasaName(d.nMasa))) sb.AppendLine("{:15s} : {}".format(GCStrings.getString(23), d.nGaurabdaYear)) if (GCDisplaySettings.getValue(48)): sb.AppendLine() sb.AppendLine(GCStrings.getString(17)) sb.AppendLine() sb.AppendLine("%25s : {}... ".format( GCStrings.getString(18), GCStrings.GetNaksatraChildSylable( d.nNaksatra, int(d.nNaksatraElapse / 25.0)))) sb.AppendLine("%25s : {}... ".format( GCStrings.getString(19), GCStrings.GetRasiChildSylable(d.nMoonRasi))) sb.AppendLine() sb.AppendLine(GCStrings.getString(24)) sb.AppendLine() for o in range(TRESULT_APP_CELEBS): sb.AppendLine(" Gaurabda {:3d} : {} ".format( self.celeb_gy[o], self.celeb_date[o])) sb.AppendNote() def formatRtf(self, stream): d = self.details vc = GCGregorianDate(date=self.eventTime) m_earth = self.m_location.GetEarthData() sb = GCStringBuilder(stream) sb.fontSizeH1 = GCLayoutData.textSizeH1 sb.fontSizeH2 = GCLayoutData.textSizeH2 sb.fontSizeText = GCLayoutData.textSizeText sb.fontSizeNote = GCLayoutData.textSizeNote sb.Format = SBTF_RTF sb.AppendDocumentHeader() sb.AppendHeader1(GCStrings.getString(25)) sb.AppendLine("\\tab {} : {{\\b {} {} {} }}".format( GCStrings.getString(7), vc.day, GCStrings.GetMonthAbreviation(vc.month), vc.year)) sb.AppendLine("\\tab {} : {{\\b {}:{:02d} }}".format( GCStrings.getString(8), vc.GetHour(), vc.GetMinuteRound())) sb.AppendLine("") sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(9), self.m_location.m_strName)) sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(10), self.m_location.m_strLatitude)) sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(11), self.m_location.m_strLongitude)) sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(12), GCTimeZone.GetTimeZoneName(self.m_location.m_nTimezoneId))) sb.AppendLine("\\tab {} : {{\\b N/A }}".format("DST")) sb.AppendLine("") sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(13), GCStrings.GetTithiName(d.nTithi))) sb.AppendLine("\\tab {} : {{\\b {:.2f} % }}".format( GCStrings.getString(14), d.nTithiElapse)) sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(15), GCStrings.GetNaksatraName(d.nNaksatra))) sb.AppendLine("\\tab {} : {{\\b {:.2f} % ({} pada) }}".format( GCStrings.getString(16), d.nNaksatraElapse, GCStrings.getString(811 + int(d.nNaksatraElapse / 25.0)))) sb.AppendLine("\\tab {} : {{\\b {} ({}) }}".format( "Moon Rasi", GCStrings.GetSankrantiName(d.nMoonRasi), GCStrings.GetSankrantiNameEn(d.nMoonRasi))) sb.AppendLine("\\tab {} : {{\\b {} ({}) }}".format( "Sun Rasi", GCStrings.GetSankrantiName(d.nSunRasi), GCStrings.GetSankrantiNameEn(d.nSunRasi))) sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(20), GCStrings.GetPaksaName(d.nPaksa))) if (self.b_adhika == True): sb.AppendLine("\\tab {} : {{\\b {} {} }}".format( GCStrings.getString(22), GCStrings.GetMasaName(d.nMasa), GCStrings.getString(21))) else: sb.AppendLine("\\tab {} : {{\\b {} }}".format( GCStrings.getString(22), GCStrings.GetMasaName(d.nMasa))) sb.AppendLine("\\tab {} : {{\\b {} }}".format(GCStrings.getString(23), d.nGaurabdaYear)) if (GCDisplaySettings.getValue(48)): sb.AppendLine("") sb.AppendHeader2(GCStrings.getString(17)) sb.AppendLine("") sb.AppendLine("\\tab {} : {{\\b {}... }}".format( GCStrings.getString(18), GCStrings.GetNaksatraChildSylable( d.nNaksatra, int(d.nNaksatraElapse / 25.0)))) sb.AppendLine("\\tab {} : {{\\b {}... }}".format( GCStrings.getString(19), GCStrings.GetRasiChildSylable(d.nMoonRasi))) sb.AppendLine("{{\\fs{} {} }}".format(GCLayoutData.textSizeH2, GCStrings.getString(24))) sb.AppendLine("") for o in range(TRESULT_APP_CELEBS): sb.AppendLine("\\tab Gaurabda {} : {{\\b {} }}".format( self.celeb_gy[o], self.celeb_date[o])) sb.AppendDocumentTail() def formatXml(self, stream): d = self.details vc = GCGregorianDate(date=self.eventTime) m_earth = self.m_location.GetEarthData() loc = self.m_location bDuringAdhika = False stream.write('''<xml> <request name="AppDay" version="{}"> <arg name="longitude" value="{}" /> <arg name="latitude" value="{}" /> <arg name="timezone" value="{}" /> <arg name="year" value="{}" /> <arg name="month" value="{}" /> <arg name="day" value="{}" /> <arg name="hour" value="{}" /> <arg name="minute" value="{}" /> </request>'''.format(GCStrings.getString(130), loc.m_fLongitude, loc.m_fLatitude, loc.m_fTimezone, self.eventTime.year, self.eventTime.month, self.eventTime.day, self.eventTime.GetHour(), self.eventTime.GetMinuteRound())) npada = int(floor(d.nNaksatraElapse / 25.0)) + 1 if (npada > 4): npada = 4 is_adhika = "yes" if bDuringAdhika else "no" stream.write( "\t<result name=\"AppDay\" >\n\t\t<tithi name=\"{}\" elapse=\"%f\" />\n\t\t<naksatra name=\"{}\" elapse=\"%f\" pada=\"{}\"/>\n\t\t<paksa name=\"{}\" />\n\t\t<masa name=\"{}\" adhikamasa=\"{}\"/>\n\t\t<gaurabda value=\"{}\" />\n" .format(GCStrings.GetTithiName(d.nTithi), d.nTithiElapse, GCStrings.GetNaksatraName(d.nNaksatra), d.nNaksatraElapse, npada, GCStrings.GetPaksaName(d.nPaksa), GCStrings.GetMasaName(d.nMasa), is_adhika, d.nGaurabdaYear)) stream.write("\t\t<celebrations>\n") for i in range(TRESULT_APP_CELEBS): stream.write( "\t\t\t<celebration gaurabda=\"{}\" day=\"{}\" month=\"{}\" monthabr=\"{}\" year=\"{}\" />\n" .format( self.celeb_gy[i], self.celeb_date[i].day, self.celeb_date[i].month, GCStrings.GetMonthAbreviation(self.celeb_date[i].month), self.celeb_date[i].year)) stream.write("\t\t</celebrations>\n\t</result>\n</xml>\n") def writeHtml(self, stream): d = self.details vc = GCGregorianDate(date=self.eventTime) m_earth = self.m_location.GetEarthData() stream.write("<html><head><title>Appearance day</title>") stream.write( "<style>\n<!--\nbody {\n font-family:Verdana;\n font-size:11pt;\n}\n\ntd.hed {\n font-size:11pt;\n font-weight:bold;\n" ) stream.write( " background:#aaaaaa;\n color:white;\n text-align:center;\n vertical-align:center;\n padding-left:15pt;\n padding-right:15pt;\n" ) stream.write( " padding-top:5pt;\n padding-bottom:5pt;\n}\n-->\n</style>\n") stream.write("</head>\n\n<body>\n") stream.write("<h2 align=center>Appearance day Calculation</h2>") stream.write("<table align=center><tr><td valign=top>\n\n") stream.write("<table align=center>") stream.write("<tr><td colspan=3 class=hed>Details</td></tr>\n") stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(7), vc)) stream.write( "<tr><td colspan=2>{}</td><td> {}:{:02d}</td></tr>\n\n".format( GCStrings.getString(8), vc.GetHour(), vc.GetMinuteRound())) stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(9), self.m_location.m_strName)) stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(10), GCEarthData.GetTextLatitude(self.m_location.m_fLatitude))) stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(11), GCEarthData.GetTextLongitude(self.m_location.m_fLongitude))) stream.write("<tr><td colspan=2>{}</td><td> ".format( GCStrings.getString(12))) stream.write( GCTimeZone.GetTimeZoneOffsetText(self.m_location.m_fTimezone)) stream.write("</td></tr>\n") stream.write("<tr><td colspan=2>DST</td><td>N/A</td></tr>\n") stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(13), GCStrings.GetTithiName(d.nTithi))) stream.write( "<tr><td colspan=2>{}</td><td> {:.2f} %</td></tr>\n".format( GCStrings.getString(14), d.nTithiElapse)) stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(15), GCStrings.GetNaksatraName(d.nNaksatra))) stream.write( "<tr><td colspan=2>{}</td><td> {:.2f} %</td></tr>\n".format( GCStrings.getString(16), d.nNaksatraElapse)) stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(20), GCStrings.GetPaksaName(d.nPaksa))) if (self.b_adhika == True): stream.write( "<tr><td colspan=2>{}</td><td> {} {}</td></tr>\n".format( GCStrings.getString(22), GCStrings.GetMasaName(d.nMasa), GCStrings.getString(21))) else: stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n".format( GCStrings.getString(22), GCStrings.GetMasaName(d.nMasa))) stream.write("<tr><td colspan=2>{}</td><td> {}</td></tr>\n\n".format( GCStrings.getString(23), d.nGaurabdaYear)) stream.write("</table></td><td valign=top><table>") stream.write("<tr><td colspan=3 class=hed>{}</td></tr>\n".format( GCStrings.getString(24))) for o in range(TRESULT_APP_CELEBS): stream.write( "<tr><td>Gaurabda {}</td><td> : </td><td><b>{}</b></td></tr>" .format(self.celeb_gy[o], self.celeb_date[o])) stream.write("</table>") stream.write("</td></tr></table>\n\n") stream.write( "<hr align=center width=\"50%\">\n<p style=\'text-align:center;font-size:8pt\'>Generated by {}</p>" .format(GCStrings.getString(130))) stream.write("</body></html>") def write(self, stream, format='html', layout='list'): if format == 'plain': self.formatPlainText(stream) elif format == 'rtf': self.formatRtf(stream) elif format == 'xml': self.formatXml(stream) elif format == 'html': self.writeHtml(stream)
class TCoreEvents: header_text = { CCTYPE_DATE: " DATE ", CCTYPE_S_ARUN: " SUNRISE, SUNSET ", CCTYPE_S_RISE: " SUNRISE, SUNSET ", CCTYPE_S_NOON: " SUNRISE, SUNSET ", CCTYPE_S_SET: " SUNRISE, SUNSET ", CCTYPE_TITHI: " TITHI ", CCTYPE_NAKS: " NAKSATRA ", CCTYPE_SANK: " SANKRANTI ", CCTYPE_CONJ: " SUN-MOON CONJUNCTION ", CCTYPE_YOGA: " YOGA ", CCTYPE_KALA_START: " KALAS ", CCTYPE_KALA_END: " KALAS ", CCTYPE_M_RISE: " MOONRISE, MOONSET ", CCTYPE_M_SET: " MOONRISE, MOONSET ", CCTYPE_M_RASI: " MOON RASI ", CCTYPE_ASCENDENT: " ASCENDENT " } def __init__(self): self.m_vcStart = GCGregorianDate() self.m_vcEnd = GCGregorianDate() self.m_options = 0 self.m_location = GCLocation() self.p_events = [] self.b_sorted = True def AddEvent(self, inTime, inType, inData, inDst): p = TDayEvent() self.p_events.append(p) if inDst == 1: if (inTime.shour >= 2 / 24.0): inTime.shour += 1 / 24.0 inTime.NormalizeValues() p.nDst = 1 elif inDst == 2: inTime.shour += 1 / 24.0 inTime.NormalizeValues() p.nDst = 1 elif inDst == 3: if (inTime.shour <= 2 / 24.0): inTime.shour += 1 / 24.0 inTime.NormalizeValues() p.nDst = 1 p.Time.Set(inTime) p.Time.InitWeekDay() p.julianDay = p.Time.GetJulianComplete() p.nData = inData p.nType = inType return True def Sort(self): self.p_events = sorted(self.p_events, key=lambda k: k.julianDay) def CalculateEvents(self, loc, vcStart, vcEnd): sun = SUNDATA() ndst = 0 self.m_location.Set(loc) self.m_vcStart.Set(vcStart) self.m_vcEnd.Set(vcEnd) vcNext = GCGregorianDate() earth = loc.GetEarthData() vc = GCGregorianDate(date=vcStart) vcAdd = GCGregorianDate(date=vcStart) vcAdd.InitWeekDay() previousLongitude = -100 todayLongitude = 0 fromTimeLimit = 0 while vcAdd.IsBeforeThis(vcEnd): if (GCDisplaySettings.getValue(COREEVENTS_SUN)): ndst = GCTimeZone.determineDaylightChange( vcAdd, loc.m_nTimezoneId) sun.SunCalc(vcAdd, earth) vcAdd.shour = sun.arunodaya.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_ARUN, 0, ndst) vcAdd.shour = sunRise = sun.rise.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_RISE, 0, ndst) vcAdd.shour = sun.noon.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_NOON, 0, ndst) vcAdd.shour = sunSet = sun.set.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_SET, 0, ndst) else: ndst = GCTimeZone.determineDaylightChange( vcAdd, loc.m_nTimezoneId) sun.SunCalc(vcAdd, earth) sunRise = sun.rise.GetDayTime() sunSet = sun.set.GetDayTime() if (GCDisplaySettings.getValue(COREEVENTS_ASCENDENT)): todayLongitude = sun.longitude_deg vcAdd.shour = sunRise todaySunriseHour = sunRise if (previousLongitude < -10): prevSunrise = GCGregorianDate(date=vcAdd) prevSunrise.PreviousDay() sun.SunCalc(prevSunrise, earth) previousSunriseHour = sun.rise.GetDayTime() - 1 previousLongitude = sun.longitude_deg fromTimeLimit = 0 jd = vcAdd.GetJulianComplete() ayan = GCAyanamsha.GetAyanamsa(jd) r1 = GCMath.putIn360(previousLongitude - ayan) / 30 r2 = GCMath.putIn360(todayLongitude - ayan) / 30 while (r2 > r1 + 13): r2 -= 12.0 while (r2 < r1 + 11): r2 += 12.0 a = (r2 - r1) / (todaySunriseHour - previousSunriseHour) b = r2 - a * todaySunriseHour tr = ceil(r1) for tr in range(ceil(r1), ceil(r2)): tm = (tr - b) / a if (tm > fromTimeLimit): vcNext.Set(vcAdd) vcNext.shour = tm vcNext.NormalizeValues() self.AddEvent(vcNext, CCTYPE_ASCENDENT, tr, ndst) previousLongitude = todayLongitude previousSunriseHour = todaySunriseHour - 1 fromTimeLimit = previousSunriseHour if (GCDisplaySettings.getValue(COREEVENTS_RAHUKALAM)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_RAHU_KALAM) vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_RAHU_KALAM, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_RAHU_KALAM, ndst) if (GCDisplaySettings.getValue(COREEVENTS_YAMAGHANTI)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_YAMA_GHANTI) vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_YAMA_GHANTI, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_YAMA_GHANTI, ndst) if (GCDisplaySettings.getValue(COREEVENTS_GULIKALAM)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_GULI_KALAM) vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_GULI_KALAM, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_GULI_KALAM, ndst) if (GCDisplaySettings.getValue(COREEVENTS_ABHIJIT_MUHURTA)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_ABHIJIT) if (r1 > 0 and r2 > 0): vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_ABHIJIT, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_ABHIJIT, ndst) vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_TITHI)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GCTithi.GetNextTithiStart(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_TITHI, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.2 if (vcAdd.shour >= 1.0): vcAdd.shour -= 1.0 vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_NAKSATRA)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GCNaksatra.GetNextNaksatra(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_NAKS, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.2 if (vcAdd.shour >= 1.0): vcAdd.shour -= 1.0 vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_YOGA)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GCYoga.GetNextYogaStart(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_YOGA, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.2 if (vcAdd.shour >= 1.0): vcAdd.shour -= 1.0 vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_SANKRANTI)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): date, nData = GCSankranti.GetNextSankranti(vcAdd) vcNext.Set(date) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_SANK, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_MOONRASI)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GetNextMoonRasi(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_M_RASI, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.5 vcAdd.NormalizeValues() if (GCDisplaySettings.getValue(COREEVENTS_CONJUNCTION)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): dlong = GCConjunction.GetNextConjunctionEx( vcAdd, vcNext, True, earth) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent( vcNext, CCTYPE_CONJ, GCRasi.GetRasi( dlong, GCAyanamsha.GetAyanamsa( vcNext.GetJulianComplete())), ndst) else: break vcAdd.Set(vcNext) vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_MOON)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): vcNext.Set(MOONDATA.GetNextRise(earth, vcAdd, True)) self.AddEvent(vcNext, CCTYPE_M_RISE, 0, ndst) vcNext.Set(MOONDATA.GetNextRise(earth, vcNext, False)) self.AddEvent(vcNext, CCTYPE_M_SET, 0, ndst) vcNext.shour += 0.05 vcNext.NormalizeValues() vcAdd.Set(vcNext) if self.b_sorted: self.Sort() def formatText(self, stream): sb = GCStringBuilder(stream) sb.Format = SBTF_TEXT stream.write("Events from {} to {}.\r\n\r\n".format( self.m_vcStart, self.m_vcEnd)) stream.write("{}\r\n\r\n".format(self.m_location.m_strFullName)) prevd = GCGregorianDate() prevd.day = 0 prevd.month = 0 prevd.year = 0 prevt = -1 last_header = '' for dnr in self.p_events: new_header = '' if self.b_sorted: new_header = " {} - {} ".format( dnr.Time, GCStrings.GetDayOfWeek(dnr.Time.dayOfWeek)) else: new_header = header_text[dnr.nType] if last_header != new_header: sb.AppendLine() sb.AppendHeader3(new_header) sb.AppendLine() last_header = new_header stream.write(" {} {} {}".format( dnr.Time.time_str(), GCStrings.GetDSTSignature(dnr.nDst), dnr.EventText())) sb.AppendLine() sb.AppendLine() sb.AppendNote() return 1 def formatXml(self, strXml): strXml.write( "<xml>\r\n<program version=\"{}\">\r\n<location longitude=\"{}\" latitude=\"{}\" timezone=\"{}\" dst=\"{}\" />\n" .format(GCStrings.getString(130), self.m_location.m_fLongitude, self.m_location.m_fLatitude, self.m_location.m_fTimezone, GCTimeZone.GetTimeZoneName(self.m_location.m_nTimezoneId))) for dnr in self.p_events: strXml.write( " <event type=\"{}\" date=\"{}\" time=\"{}\" dst=\"{}\" />\n". format(dnr.EventText(), str(dnr.Time), dnr.Time.time_str(), dnr.nDst)) strXml.write("</xml>\n") return 1 def formatRtf(self, stream): sb = GCStringBuilder(stream) sb.Format = SBTF_RTF sb.fontSizeH1 = GCLayoutData.textSizeH1 sb.fontSizeH2 = GCLayoutData.textSizeH2 sb.fontSizeText = GCLayoutData.textSizeText sb.fontSizeNote = GCLayoutData.textSizeNote sb.AppendDocumentHeader() sb.AppendHeader1("Events") stream.write("\\par from {} to {}.\\par\r\n\\par\r\n".format( self.m_vcStart, self.m_vcEnd)) stream.write("{}\\par\r\n\\par\r\n".format( self.m_location.m_strFullName)) prevd = GCGregorianDate() prevd.day = 0 prevd.month = 0 prevd.year = 0 prevt = -1 last_header = '' for dnr in self.p_events: new_header = '' if self.b_sorted: new_header = " {} - {} ".format( dnr.Time, GCStrings.GetDayOfWeek(dnr.Time.dayOfWeek)) else: new_header = header_text[dnr.nType] if last_header != new_header: sb.AppendLine() sb.AppendHeader2(new_header) sb.AppendLine() last_header = new_header stream.write("\\par {} {} {}".format( dnr.Time.time_str(), GCStrings.GetDSTSignature(dnr.nDst), dnr.EventText())) sb.AppendLine() sb.AppendNote() sb.AppendDocumentTail() return 1 def writeHtml(self, stream): stream.write("<html>\n<head>\n<title>Core Events</title>\n\n") stream.write( "<style>\n<!--\nbody {\n font-family:Verdana;\n font-size:11pt;\n}\n\ntd.hed {\n font-size:11pt;\n font-weight:bold;\n" ) stream.write( " background:#aaaaaa;\n color:white;\n text-align:center;\n vertical-align:center;\n padding-left:15pt;\n padding-right:15pt;\n" ) stream.write( " padding-top:5pt;\n padding-bottom:5pt;\n}\n-->\n</style>\n") stream.write("</head>\n") stream.write("<body>\n\n") stream.write( "<h1 align=center>Events</h1>\n<p align=center>From {} to {}.</p>\n\n" .format(self.m_vcStart, self.m_vcEnd)) stream.write("<p align=center>{}</p>\n".format( self.m_location.m_strFullName)) prevd = GCGregorianDate() prevd.day = 0 prevd.month = 0 prevd.year = 0 prevt = -1 stream.write("<table align=center><tr>\n") last_header = '' new_header = '' for dnr in self.p_events: if self.b_sorted: new_header = " {} - {} ".format( dnr.Time, GCStrings.GetDayOfWeek(dnr.Time.dayOfWeek)) else: new_header = self.header_text[dnr.nType] if last_header != new_header: stream.write( f"<td class=\"hed\" colspan=2>{new_header}</td></tr>\n<tr>\n" ) last_header = new_header stream.write("<td>{}</td><td>{}</td></tr><tr>\n".format( dnr.EventText(), dnr.Time.time_str())) stream.write("</tr></table>\n") stream.write( "<hr align=center width=\"50%%\">\n<p align=center>Generated by {}</p>" .format(GCStrings.getString(130))) stream.write("</body>\n</html>\n") return 1 def write(self, stream, format='html', layout='list'): if format == 'plain': self.formatText(stream) elif format == 'rtf': self.formatRtf(stream) elif format == 'xml': self.formatXml(stream) elif format == 'html': self.writeHtml(stream)
def CalculateEvents(self, loc, vcStart, vcEnd): sun = SUNDATA() ndst = 0 self.m_location.Set(loc) self.m_vcStart.Set(vcStart) self.m_vcEnd.Set(vcEnd) vcNext = GCGregorianDate() earth = loc.GetEarthData() vc = GCGregorianDate(date=vcStart) vcAdd = GCGregorianDate(date=vcStart) vcAdd.InitWeekDay() previousLongitude = -100 todayLongitude = 0 fromTimeLimit = 0 while vcAdd.IsBeforeThis(vcEnd): if (GCDisplaySettings.getValue(COREEVENTS_SUN)): ndst = GCTimeZone.determineDaylightChange( vcAdd, loc.m_nTimezoneId) sun.SunCalc(vcAdd, earth) vcAdd.shour = sun.arunodaya.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_ARUN, 0, ndst) vcAdd.shour = sunRise = sun.rise.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_RISE, 0, ndst) vcAdd.shour = sun.noon.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_NOON, 0, ndst) vcAdd.shour = sunSet = sun.set.GetDayTime() self.AddEvent(vcAdd, CCTYPE_S_SET, 0, ndst) else: ndst = GCTimeZone.determineDaylightChange( vcAdd, loc.m_nTimezoneId) sun.SunCalc(vcAdd, earth) sunRise = sun.rise.GetDayTime() sunSet = sun.set.GetDayTime() if (GCDisplaySettings.getValue(COREEVENTS_ASCENDENT)): todayLongitude = sun.longitude_deg vcAdd.shour = sunRise todaySunriseHour = sunRise if (previousLongitude < -10): prevSunrise = GCGregorianDate(date=vcAdd) prevSunrise.PreviousDay() sun.SunCalc(prevSunrise, earth) previousSunriseHour = sun.rise.GetDayTime() - 1 previousLongitude = sun.longitude_deg fromTimeLimit = 0 jd = vcAdd.GetJulianComplete() ayan = GCAyanamsha.GetAyanamsa(jd) r1 = GCMath.putIn360(previousLongitude - ayan) / 30 r2 = GCMath.putIn360(todayLongitude - ayan) / 30 while (r2 > r1 + 13): r2 -= 12.0 while (r2 < r1 + 11): r2 += 12.0 a = (r2 - r1) / (todaySunriseHour - previousSunriseHour) b = r2 - a * todaySunriseHour tr = ceil(r1) for tr in range(ceil(r1), ceil(r2)): tm = (tr - b) / a if (tm > fromTimeLimit): vcNext.Set(vcAdd) vcNext.shour = tm vcNext.NormalizeValues() self.AddEvent(vcNext, CCTYPE_ASCENDENT, tr, ndst) previousLongitude = todayLongitude previousSunriseHour = todaySunriseHour - 1 fromTimeLimit = previousSunriseHour if (GCDisplaySettings.getValue(COREEVENTS_RAHUKALAM)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_RAHU_KALAM) vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_RAHU_KALAM, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_RAHU_KALAM, ndst) if (GCDisplaySettings.getValue(COREEVENTS_YAMAGHANTI)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_YAMA_GHANTI) vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_YAMA_GHANTI, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_YAMA_GHANTI, ndst) if (GCDisplaySettings.getValue(COREEVENTS_GULIKALAM)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_GULI_KALAM) vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_GULI_KALAM, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_GULI_KALAM, ndst) if (GCDisplaySettings.getValue(COREEVENTS_ABHIJIT_MUHURTA)): r1, r2 = CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, KT_ABHIJIT) if (r1 > 0 and r2 > 0): vcAdd.shour = r1 self.AddEvent(vcAdd, CCTYPE_KALA_START, KT_ABHIJIT, ndst) vcAdd.shour = r2 self.AddEvent(vcAdd, CCTYPE_KALA_END, KT_ABHIJIT, ndst) vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_TITHI)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GCTithi.GetNextTithiStart(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_TITHI, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.2 if (vcAdd.shour >= 1.0): vcAdd.shour -= 1.0 vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_NAKSATRA)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GCNaksatra.GetNextNaksatra(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_NAKS, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.2 if (vcAdd.shour >= 1.0): vcAdd.shour -= 1.0 vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_YOGA)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GCYoga.GetNextYogaStart(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_YOGA, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.2 if (vcAdd.shour >= 1.0): vcAdd.shour -= 1.0 vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_SANKRANTI)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): date, nData = GCSankranti.GetNextSankranti(vcAdd) vcNext.Set(date) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_SANK, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_MOONRASI)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): nData = GetNextMoonRasi(earth, vcAdd, vcNext) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent(vcNext, CCTYPE_M_RASI, nData, ndst) else: break vcAdd.Set(vcNext) vcAdd.shour += 0.5 vcAdd.NormalizeValues() if (GCDisplaySettings.getValue(COREEVENTS_CONJUNCTION)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): dlong = GCConjunction.GetNextConjunctionEx( vcAdd, vcNext, True, earth) if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()): vcNext.InitWeekDay() ndst = GCTimeZone.determineDaylightChange( vcNext, loc.m_nTimezoneId) self.AddEvent( vcNext, CCTYPE_CONJ, GCRasi.GetRasi( dlong, GCAyanamsha.GetAyanamsa( vcNext.GetJulianComplete())), ndst) else: break vcAdd.Set(vcNext) vcAdd.NextDay() if (GCDisplaySettings.getValue(COREEVENTS_MOON)): vcAdd.Set(vc) vcAdd.shour = 0.0 while vcAdd.IsBeforeThis(vcEnd): vcNext.Set(MOONDATA.GetNextRise(earth, vcAdd, True)) self.AddEvent(vcNext, CCTYPE_M_RISE, 0, ndst) vcNext.Set(MOONDATA.GetNextRise(earth, vcNext, False)) self.AddEvent(vcNext, CCTYPE_M_SET, 0, ndst) vcNext.shour += 0.05 vcNext.NormalizeValues() vcAdd.Set(vcNext) if self.b_sorted: self.Sort()
class TToday: def __init__(self): self.currentDay = GCGregorianDate() self.calendar = TCalendar() def Calculate(self, dateTime, location): self.currentDay.Set(dateTime) self.currentDay.InitWeekDay() vc2 = GCGregorianDate(date = self.currentDay, addDays=-4) vc2.tzone = location.m_fTimezone self.calendar.CalculateCalendar(location, vc2, 9) def GetCurrentDay(self): i = self.calendar.FindDate(self.currentDay) return self.calendar.GetDay(i) def formatPlain(self, stream): p = self.GetCurrentDay() loc = self.calendar.m_Location vc = p.date sb = GCStringBuilder(stream) sb.Format = SBTF_TEXT if (p == None): return stream.write("{} ({}, {}, Timezone: {})\r\n\r\n[{} - {}]\r\n {}, {} {}\r\n {} {}, {} Gaurabda\r\n\r\n".format(loc.m_strName, GCEarthData.GetTextLatitude(loc.m_fLatitude), GCEarthData.GetTextLongitude(loc.m_fLongitude), GCTimeZone.GetTimeZoneName(loc.m_nTimezoneId), vc, GCStrings.getString(vc.dayOfWeek), GCStrings.GetTithiName(p.astrodata.nTithi), GCStrings.GetPaksaName(p.astrodata.nPaksa), GCStrings.getString(20), GCStrings.GetMasaName(p.astrodata.nMasa), GCStrings.getString(22), p.astrodata.nGaurabdaYear)) self.WriteTodayInfo(sb,p) def formatRtf(self, stream): p = self.GetCurrentDay() loc = self.calendar.m_Location vc = p.date sb = GCStringBuilder(stream) sb.Format = SBTF_RTF sb.fontSizeH1 = GCLayoutData.textSizeH1 sb.fontSizeH2 = GCLayoutData.textSizeH2 sb.fontSizeText = GCLayoutData.textSizeText sb.fontSizeNote = GCLayoutData.textSizeNote sb.AppendDocumentHeader() stream.write("\\f2\\fs{} {} ".format(GCLayoutData.textSizeH1, vc.GetDateTextWithTodayExt())) stream.write("\\par\\f2\\fs{} {{\\fs{} {} }}\\line {} ({}, {}, Timezone: {})\\par\r\n\\par\r\n {}, {} {}\\par\r\n {} {}, {} Gaurabda\\par\r\n\\par\r\n".format( GCLayoutData.textSizeText, GCLayoutData.textSizeText+4, GCStrings.getString(p.date.dayOfWeek), loc.m_strName, GCEarthData.GetTextLatitude(loc.m_fLatitude), GCEarthData.GetTextLongitude(loc.m_fLongitude), GCTimeZone.GetTimeZoneName(loc.m_nTimezoneId), GCStrings.GetTithiName(p.astrodata.nTithi), GCStrings.GetPaksaName(p.astrodata.nPaksa), GCStrings.getString(20), GCStrings.GetMasaName(p.astrodata.nMasa), GCStrings.getString(22), p.astrodata.nGaurabdaYear)) self.WriteTodayInfo(sb,p) def writeHtml(self, stream): p = self.GetCurrentDay() loc = self.calendar.m_Location vc = p.date sb = GCStringBuilder(stream) sb.Format = SBTF_HTML if (p == None): return stream.write("<html>\n<head>\n<title></title>") stream.write("<style>\n<!--\nbody {\n font-family:Verdana;\n font-size:9.5pt;\n}\n\ntd.hed {\n font-size:9.5pt;\n font-weight:bold;\n") stream.write(" background:#aaaaaa;\n color:white;\n text-align:center;\n vertical-align:center;\n padding-left:15pt;\n padding-right:15pt;\n") stream.write(" padding-top:5pt;\n padding-bottom:5pt;\n}\n-->\n</style>\n") stream.write("</head>\n") stream.write("<body>\n") stream.write("<h2>{}</h2>\n".format(vc.GetDateTextWithTodayExt())) stream.write("<h4>{}</h4>\n".format(loc.m_strFullName)) stream.write("<p> {}, {} {}<br> {} {}, {} Gaurabda</p>".format(GCStrings.GetTithiName(p.astrodata.nTithi), GCStrings.GetPaksaName(p.astrodata.nPaksa), GCStrings.getString(20), GCStrings.GetMasaName(p.astrodata.nMasa), GCStrings.getString(22), p.astrodata.nGaurabdaYear)) prevCountFest = 0 stream.write("<p>") self.WriteTodayInfo(sb,p) def WriteTodayInfo(self,sb,p): sb.AppendLine() stream = sb.Target for ed in p.dayEvents: if 'disp' not in ed or ed['disp'] == -1 or GCDisplaySettings.getValue(ed['disp']): if 'spec' in ed: sb.AppendHeader3(ed['text'],fillChar='-') else: sb.AppendString(ed['text']) sb.AppendLine() if GCDisplaySettings.getValue(45): tda = p.astrodata.sun.rise sb.AppendLine() stream.write("Brahma Muhurta {} - {} ({})".format(tda.short(-96), tda.short(-48), GCStrings.GetDSTSignature(p.hasDST))) if GCDisplaySettings.getValue(29): sb.AppendLine() tda = p.astrodata.sun.rise stream.write("{} {} ".format(GCStrings.getString(51), tda.short() )) if (GCDisplaySettings.getValue(32)): stream.write(" sandhya {} - {} ", tda.short(-24), tda.short(24)) stream.write(" ({})".format(GCStrings.GetDSTSignature(p.hasDST))) sb.AppendLine() if (GCDisplaySettings.getValue(30)): sb.AppendLine() tda = p.astrodata.sun.noon stream.write("{} {} ".format(GCStrings.getString(857), tda.short() )) if (GCDisplaySettings.getValue(32)): stream.write(" sandhya {} - {} ", tda.short(-24), tda.short(24)) stream.write(" ({})".format(GCStrings.GetDSTSignature(p.hasDST))) sb.AppendLine() if (GCDisplaySettings.getValue(31)): sb.AppendLine() tda = p.astrodata.sun.set stream.write("{} {} ".format(GCStrings.getString(52), tda.short() )) if (GCDisplaySettings.getValue(32)): stream.write(" sandhya {} - {} ", tda.short(-24), tda.short(24)) stream.write(" ({})".format(GCStrings.GetDSTSignature(p.hasDST))) sb.AppendLine() if (GCDisplaySettings.getValue(33)): sb.AppendLine() sb.AppendString(GCStrings.getString(51) + " info") sb.AppendLine() sb.AppendString(" Moon in {} {}".format(GCStrings.GetNaksatraName(p.astrodata.nNaksatra), GCStrings.getString(15))) if (GCDisplaySettings.getValue(47)): sb.AppendString(", {:.1f}% passed ({} Pada)".format(p.astrodata.nNaksatraElapse, GCStrings.getString(811+int(p.astrodata.nNaksatraElapse/25)))) if (GCDisplaySettings.getValue(46)): sb.AppendString(", Moon in {} {}".format( GCStrings.GetSankrantiName(p.astrodata.nMoonRasi), GCStrings.getString(105))) sb.AppendString(", {} {}".format(GCStrings.GetYogaName(p.astrodata.nYoga), GCStrings.getString(104))) sb.AppendLine() sb.AppendString(" Sun in {} {}.".format(GCStrings.GetSankrantiName(p.astrodata.nSunRasi), GCStrings.getString(105))) sb.AppendLine() sb.AppendNote() sb.AppendDocumentTail() def write(self,stream,format='html'): if format=='plain': self.formatPlain(stream) elif format=='rtf': self.formatRtf(stream) elif format=='html': self.writeHtml(stream)