Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
tukinami committed Oct 27, 2023
0 parents commit 4f2ae43
Show file tree
Hide file tree
Showing 20 changed files with 3,427 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[build]
target = "i686-pc-windows-msvc"
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/target
/Cargo.lock
30 changes: 30 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[package]
name = "saori-japanese-gengou"
version = "1.0.0"
edition = "2021"
authors = [ "tukinami seika" ]
license = "MIT"
readme = "README.md"
description = "SAORI to calculate Japanese gengou."

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[target.'cfg(windows)'.dependencies]
winapi = {version = "0.3.9", features = ["winbase", "libloaderapi", "stringapiset"]}

[dependencies]
chrono = "0.4.31"

[dev-dependencies]
encoding_rs = "0.8.33"

[lib]
name = "japanesegengou"
path = "src/lib.rs"
crate-type = ["rlib", "cdylib"]

[profile.release]
strip = true
opt-level = "z"
lto = true
codegen-units = 1
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2023 月波 清火

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
194 changes: 194 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# 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)
Loading

0 comments on commit 4f2ae43

Please sign in to comment.