Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tukinami/saori-japanese-gengou

西暦(グレゴリオ暦)から元号を使った日付に変換するSAORI
https://github.com/tukinami/saori-japanese-gengou

sirefaso ukagaka ukagaka-saori

Last synced: about 2 months ago
JSON representation

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

Awesome Lists containing this project

README

        

# Japanese Gengou

[GitHub repository](https://github.com/tukinami/saori-japanese-gengou)

## これは何?

デスクトップマスコット、「伺か」で使用できる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.txt`と`002_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を更新せずに情報を更新できます。

## 使用ライブラリ

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

+ [winapi\_rs](https://github.com/retep998/winapi-rs) / Peter Atashian
+ [Chrono](https://github.com/chronotope/chrono) / Kang Seonghoon and contributors
+ (テスト実行時) [encoding\_rs](https://github.com/hsivonen/encoding_rs) / Henri Sivonen

## ライセンス

MITにて配布いたします。

## 作成者

月波 清火 (tukinami seika)

[GitHub](https://github.com/tukinami)