Skip to content

西暦(グレゴリオ暦)から元号を使った日付に変換するSAORI

License

Notifications You must be signed in to change notification settings

tukinami/saori-japanese-gengou

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Japanese Gengou

GitHub repository

これは何?

デスクトップマスコット、「伺か」で使用できるSAORIの一種です。

西暦(グレゴリオ暦)の日付から元号を使用した日付を割り出して返します。

「伺か」「SAORI」等の用語については詳しく説明いたしませんのでご了承下さい。

使い方

SAORI自体の使い方は、使用するSHIORIなどによって異なりますので、ご自身でお調べ下さい。

ここではこのSAORIの使い方について説明いたします。

japanesegengou.dllファイルとgengou_listsディレクトリを同じフォルダに入れて使用してください。 gengou_listsの中のファイルに記された元号情報を読み込み、元号を割り出します。

以下の引数を指定して使用します。

  • Argument0: 調べたい西暦年(グレゴリオ暦)
  • Argument1: 調べたい西暦月(グレゴリオ暦)
  • Argument2: 調べたい西暦日(グレゴリオ暦)
  • Argument3: 動作指定パラメータ(下記参照・省略可能)
  • Argument4: ファイル指定パラメータ(下記参照・省略可能)

失敗したとき

ResultにErrorから始まる失敗理由が返ります。Valueには何も返りません。 主に、gengou_lists内のファイルの書式が間違っているか、調べたい日付が異常なときに失敗します。

成功したとき

パターンは2つあります。

ファイルに記された範囲にあてはまらなかったとき

Resultは空で、Valueも空になります。

ファイルに記された範囲にあてはまったとき

Resultにはその中での一つの元号を使用した日付が入ります。

例: 貞和6年1月1日

Value1には、あてはまった元号の一覧(,区切り)が入ります。

例: 貞和6年1月1日,正平4年1月1日

Value2には、あてはまった元号がどのファイルに記されてあったかの情報の一覧(,区切り)が入ります。

Value2の情報の書式は%Y-%m-%d(ファイルの範囲の開始日付)_%Y-%m-%d(ファイルの範囲の終了日付)_*(ファイル名の最初の_の次の文字)です。

例: 1329-09-30_1394-08-10_h,1329-09-30_1394-08-10_n

動作指定パラメータ

Gi*のように文字列で指定します。 一文字を1つのパラメータとして動作を指定します。 種類が重複していた場合、既定値の方が優先されます。 Gi*と指定したときの動作が既定値です。 省略可能です。

出力する日付の形式

  • G(既定値): グレゴリオ暦換算で日付を出力します。実際の暦が太陰暦だった時代などで年月日の表記がずれますが、現代の日付感覚と同じように扱える利点があります。
  • I(対応未定): 太陰暦で日付を出力します。明治以後の日付がずれます。

出力する数字の書式

  • i(既定値): 半角数字で出力します。
  • k: 漢数字で出力します。

現在日付以後を指定した場合の元号の取扱い

  • *(既定値): 現在を日付指定に含んでいる元号が、その指定日付まで続いていると仮定して元号を割り出します。今日が2023-10-01で令和なら、明日2023-10-02も令和であるとします。
  • !: 厳密に範囲を取扱います。今日が令和であっても、明日が令和かは不明なので、範囲に含みません。

ファイル指定パラメータ

割り出しに使うファイルを指定します。指定に使うのは、ファイル名の最初の_の次の1文字です。 _で区切って、一つの範囲ずつ指定します。

例: 1つめの範囲のファイルが001_Aaa.txt、2つめの範囲のファイルが002_Bbb.txtだったとき、この二つを指定したいときはA_Bとする。

指定しなかった場合、指定されなかった範囲の全てのファイルが使用されます。 また、ファイル名の文字の代わりに*を使っても、その範囲の全てのファイルが使用されます。

例として、同梱のgengou_listでは、2つめの範囲である南北朝時代のファイルが002_hokutyou.txt002_nantyou.txtに分かれています。 このとき、北朝の元号を使用したいときは、*_h、南朝の元号を使用したいときは*_nと指定すると使用できます。

*で1つめの範囲は全て指定し、_を挟んで次の文字でどちらのファイルを使用するか指定します。 残りのファイルは全て一つずつなので、特定のファイルを指定せずとも大丈夫です。

(この場合意味は薄いですが、*_hnと複数指定することも可能です) (a_hn_n_a_mと全ての範囲を指定しても問題ありません)

省略可能です。

YAYA

On_Test
{
    // 北朝の元号を出す
    _result = FUNCTIONEX('path/to/japanesegengou.dll', 1350, 1, 1, 'Gi*', '*_h') // 貞和6年1月1日
    // 南朝の元号を出す
    _result = FUNCTIONEX('path/to/japanesegengou.dll', 1350, 1, 1, 'Gi*', '*_n') // 正平4年1月1日

    // 南北朝どちらでもいいのでとりあえず元号を割り出す
    _result = FUNCTIONEX('path/to/japanesegengou.dll', 1350, 1, 1) // 貞和6年1月1日

    // 失敗だったらreturn
    if STRSTR(_result, 'Error') == 0 {
        return
    }
    // 範囲外だった場合もreturn
    if STRLEN(_result) == 0 {
        return
    }

    // 元号とそのファイル情報の一覧を作成
    _gengous = valueex[0]
    _spans = valueex[1]

    _gengous = SPLIT(_gengous, ',')
    _spans = SPLIT(_spans, ',')

    _s = ''
    _len = ARRAYSIZE(_gengous)
    for _i = 0; i < _len; _i++ {
        _s += _gengous[_i] + ':' + _spans[_i] + '\n'
    }
    // _sの中身
    /*
    貞和6年1月1日:1329-09-30_1394-08-10_h
    正平4年1月1日:1329-09-30_1394-08-10_n
    */
}

里々(簡易)

satori_conf.txt

@SAORI
お好きな登録名,path/to/japanesegengou.dll

使用時

*テスト
# 北朝の元号 貞和6年1月1日
$元号=(お好きな登録名,1350,1,1,Gi*,*_h)
# 南朝の元号 正平4年1月1日
$元号=(お好きな登録名,1350,1,1,Gi*,*_n)
# どちらでも可 貞和6年1月1日
$元号=(お好きな登録名,1350,1,1,Gi*,*_*)
>テスト失敗	(compare_head,(元号),Error)
>テスト範囲外	(is_empty,(元号))
$元号一覧=(S0)
$元号範囲=(S1)

その他の使い方

gengou_lists中のファイルを編集・追加・削除することで、独自の元号を返すことも可能です。

gengou_lists中のファイルの書式については、gengou_lists中のREADME.mdに記載しております。

元号が変更になったときもgengou_lists内のファイルを編集すればdllを更新せずに情報を更新できます。

使用ライブラリ

いずれも敬称略。ありがとうございます。

ライセンス

MITにて配布いたします。

作成者

月波 清火 (tukinami seika)

GitHub

About

西暦(グレゴリオ暦)から元号を使った日付に変換するSAORI

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages