FMD

月日の配当パターンの種類が限定されている暦の抽象基底クラス

新年の日付が専用メソッドで与えられ、月日の配当が1年の日数等
で決まる暦。いわゆる Rule-Based な暦はほとんど該当します。

サブクラスで新年の日付を与えるメソッド _new_year を再定義し
月日の配当パターンを new への引数で与えます。

スーパークラス:

クラス メソッド:

FMD.new([quality={})
FMD オブジェクトを生成して返します。
  quality  暦法の性質定義ハッシュ

プロテクテッド インスタンス メソッド:

FMD#_date_to_sdn(y [, m=1 or 0 [, d=1 or 0]])
年・月・日を地方時正午通日に変換して返します。
  y  年
  m  月 (デフォルト値は最初の月の番号)
  d  日 (デフォルト値は最初の日の番号)
FMD#_sdn_to_date(sdn)
地方時正午通日を年・月・日に変換して返します。
  sdn 地方時正午通日
FMD#_m_in_y(y)
指定した年に含まれる月の数を返します。
(運用表現の年初は考慮されません)
  y  年
FMD#_d_in_y(y)
指定した年に含まれる日の数を返します。
(運用表現の年初は考慮されません)
  y  年
FMD#_d_in_m(y [, m=1 or 0])
指定した月に含まれる日の数を返します。
  y  年
  m  月 (デフォルト値は最初の月の番号)
FMD#_new_year(y)
y で指定した年の始めの地方時正午通日を返します。
(サブクラスで再定義してください)
このメソッドは Calendar  クラスで定義している new_year(運用上の年初)
とは異なり暦法上の年初(1月1日)を与えます。
  y  年 
FMD#_new_year_sd(y)
y で指定した年の始めの地方時正午通日と、その1年の日数を返します。
  y  年 
FMD#_new_year_yd(sdn)
地方時正午通日 sdn を含む年と、その日の年の通日、その1年の日数を返します。
  sdn  地方時正午通日
FMD#_index_of_m(rule, m)
月 m の年の始めからの通月番号を返します。
  rule 月日配当規則
  m    月を与える id または番号

ブライベート インスタンス メソッド:

FMD#_find_rule(key)
key に対応する月日配当規則を返します。
(なければ key から新規に月日配当規則を作ります)
  key  1年の日数
FMD#_make_rule(key, rule)
new で指定された月日配当規則をプログラムで利用可能にします。

  key  月日配当規則のハッシュキー(オーバーライド時に必要)
  rule 月日配当規則
FMD#_qualify
FMD オブジェクトの性質定義を初期設定します。
@RuleTable      = It defines (year,) month, day arrangement rule.
@HalfMoon       = If defines days in halfmoon for thai calendar
@Months_in_Year = If exist then every year  has defined months.
@Days_in_Month = If exist then every month has defined days.

データ構造:

@HalfMoon : 白分・黒分の指定

Integer  白分の日数
 この変数が存在するときは、1ヶ月を白分と黒分に分割します。月の最初の
 @HalfMoon 日間が白分、それ以降が黒分です。この指定を必要とするのはタ
 イ暦のみです。

@Months_in_Year : 1年の月数

@Days_in_Month : 1月の日数

Integer
 _qualify が @RuleTable を解析した後、もしこれらの数が常に一定であ 
 ることが判ったならば、これらの変数にその値を設定します。Calendar
 _qualify は、これらの変数を参照して、@TimeUnits の設定を行います。

@RuleTable : 月日の配当ルールを定義するテーブル

Hash
 FMD オブジェクトはハッシュのハッシュ@RuleTableにルール情報
 を保持しています。以下そのハッシュの要素の説明です。なお、
 ハッシュのキーの取得方法は、サブクラスによって異なります。

'Years' : ルールの周期の長さ(年単位)

'Months' : ルールの周期の長さ(月単位)

'Days' : ルールの周期の長さ(日単位)

Integer
  ハッシュで定義されるルールの周期の長さをそれぞれの単位で表します。
  年の中の月日の配置を定義するルールでは、'Years'は常に 1 です。
  現状、要素'Months'は使われていません。

'IDs' : 月のID

Array [月のID, ...]
  ハッシュで定義されるルールでの、月のIDの配置を保持します。
  閏月のない暦法では、月のIDは単なる通し番号(整数)なので、
  この要素は不要です。

'Length' : 月の日数

Array [月の日数, ...]
  ハッシュで定義されるルールでの、各月の日数を保持します。
  このデータは必ず指定しなければなりません。

'Offset' : 月の開始日のオフセット

Array [月の開始日のオフセット, ...]
  ハッシュで定義されるルールでの、各月の開始日の年初からの日数を保持
  します。_qualify 時に 'Length' から自動生成するのでユーザが指定する
  ことは通常ありません。