summaryrefslogtreecommitdiffstats
path: root/korganizer/plugins/hebrew/converter.h
blob: 8a3bc8baf90a80d5dd9f4f4bdd1a08509b5a14bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/***************************************************************************
 *   Copyright (C) 2003 by Jonathan Singer                                             *
 *   jsinger@leeta.net                                                                                *
 *   Calendar routines from Hebrew Calendar by Frank Yellin                     *
 *                                                                                                             *
 *   This program is free software; you can redistribute it and/or modify      *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or      *
 *   (at your option) any later version.                                                       *
 ***************************************************************************/
#ifndef CONVERTER_H
#define CONVERTER_H

#include <qstring.h>
#include <qstringlist.h>

struct DateResult
{
  int year;
  int month;
  int day;
  int day_of_week;

  int hebrew_month_length, secular_month_length;
  bool hebrew_leap_year_p, secular_leap_year_p;
  int kvia;
  int hebrew_day_number;
};

/**
@author Jonathan Singer
*/
class Converter
{
public:

  Converter();
  ~Converter();

  static bool hebrew_leap_year_p(int year);
  static bool gregorian_leap_year_p(int year);

  static long absolute_from_gregorian(int year, int month, int day);
  static long absolute_from_hebrew(int year, int month, int day);

  static void gregorian_from_absolute(long date, int *yearp,
                                      int *monthp, int *dayp);
  static void hebrew_from_absolute(long date, int *yearp, int *monthp,
                                   int *dayp);

  static int hebrew_months_in_year(int year);
  static int hebrew_month_length(int year, int month);
  static int secular_month_length(int year, int month);

  static long hebrew_elapsed_days(int year);
  static long hebrew_elapsed_days2(int year);
  static int hebrew_year_length(int year);

  static void finish_up(long absolute, int hyear, int hmonth,
                        int syear, int smonth,
                        struct DateResult *result);

  static void SecularToHebrewConversion(int year, int month, int day,
                                        struct DateResult *result);
  static void HebrewToSecularConversion(int year, int month, int day,
                                        struct DateResult *result);

private:

  static QStringList HebrewMonthNames;
  static QStringList SecularMonthNames;

};

#endif