bms_utils/lib.rs
1//! BMSのライブラリです。
2//!
3//! BMSファイルの読み書きが出来ます
4//!
5//! # 拡張子がbms,bme,bml,pmsのファイル
6//! ```
7//! # let rng = rand::rngs::StdRng::from_rng(&mut rand::rng());
8//! # use rand::SeedableRng;
9//! // 読み込み
10//!
11//! let bms_str = r"
12//! #PLAYER 1
13//! #GENRE ジャンル
14//! #TITLE タイトル
15//! #ARTIST 制作者
16//! #BPM 180
17//! #PLAYLEVEL 12
18//! #RANK 3
19//!
20//! #SUBTITLE サブタイトル
21//! #SUBARTIST サブ制作者
22//! #STAGEFILE ステージ画像.bmp
23//! #BANNER バナー画像.bmp
24//! #BACKBMP タイトル文字画像.bmp
25//!
26//! #DIFFICULTY 4
27//! #TOTAL 400
28//! #LNOBJ ZZ
29//! #PREVIEW preview.wav
30//! #LNMODE 2
31//! ";
32//! // ランダム要素を確定していない状態のBMSを作成
33//! let rawbms = bms_utils::RawBms::parse(bms_str);
34//! // ランダム要素を確定させる
35//! // この時、疑似乱数生成器を渡す
36//! let bms = rawbms.make_bms(rng);
37//!
38//! // 書き込み
39//!
40//! // !!!開発中!!!
41//! ```
42//! # Bmsonファイル
43//! ```
44//! // 読み込み
45//!
46//! let bmson_string = r#"
47//! {
48//! "version": "1.0.0",
49//! "info": {
50//! "title": "タイトル",
51//! "subtitle": "サブタイトル",
52//! "artist": "制作者",
53//! "subartists": [],
54//! "genre": "ジャンル",
55//! "mode_hint": "beat-7k",
56//! "chart_name": "ANOTHER",
57//! "level": 12,
58//! "init_bpm": 200.0,
59//! "judge_rank": 100.0,
60//! "total": 400.0,
61//! "back_image": "背景画像.bmp",
62//! "eyecatch_image": "アイキャッチ画像.bmp",
63//! "title_image": "タイトル画像.bmp",
64//! "banner_image": "バナー画像.bmp",
65//! "preview_music": "preview.wav",
66//! "resolution": 240
67//! },
68//! "lines": [],
69//! "bpm_events": [],
70//! "stop_events": [],
71//! "sound_channels": [],
72//! "bga": {
73//! "bga_header": [],
74//! "bga_events": [],
75//! "layer_events": [],
76//! "poor_events": []
77//! }
78//! }
79//! "#;
80//! let bmson = bms_utils::Bmson::parse(bmson_string).unwrap();
81//!
82//! // 書き込み
83//!
84//! // 改行が無く、小さい長さの文字列へ
85//! let bmson_string = bmson.to_string().unwrap();
86//!
87//! // 改行やインデントがなされ、読みやすい文字列へ
88//! let bmson_string = bmson.to_string_pretty().unwrap();
89//! ```
90
91/// 拡張子がbms,bme,bml,pmsのファイル
92///
93/// 参考URL
94/// * <https://hitkey.nekokan.dyndns.info/cmdsJP.htm>
95/// * <https://bemuse.ninja/project/docs/bms-extensions/>
96/// * <https://github.com/exch-bms2/beatoraja/wiki/楽曲製作者向け資料>
97/// * <https://docs.google.com/document/u/0/d/e/2PACX-1vTl8zOS3ukl5HpuNsBUlN8rn_ZaNdJSHb8a4se3Z3ap9Y6UJ1nB8LA3HnxWAk9kMTDp0j9orpg43-tl/pub>
98/// * <https://hitkey.nekokan.dyndns.info/bmse_help_full/beat.html>
99pub mod bms;
100pub use bms::Bms;
101pub use bms::RawBms;
102
103/// 拡張子がbmsonのファイル
104///
105/// 参考URL
106/// * <https://bmson-spec.readthedocs.io/en/master/doc/index.html>
107/// * <https://github.com/exch-bms2/beatoraja/wiki/楽曲製作者向け資料>
108#[cfg(feature = "bmson")]
109pub mod bmson;
110#[cfg(feature = "bmson")]
111pub use bmson::Bmson;