wani 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +262 -0
  4. data/assets/bootstrap.rb +9 -0
  5. data/assets/build.json +6 -0
  6. data/assets/fonts/IBMPlexSansJP-Bold.woff2 +0 -0
  7. data/assets/fonts/IBMPlexSansJP-Regular.woff2 +0 -0
  8. data/assets/highlight.css +117 -0
  9. data/assets/index.html +39 -0
  10. data/assets/rabbit.svg +1 -0
  11. data/assets/rouge.LICENSE +187 -0
  12. data/assets/runtime.LICENSE +21 -0
  13. data/assets/runtime.NOTICE +1292 -0
  14. data/assets/runtime.pr672.js +3143 -0
  15. data/assets/shark.svg +1 -0
  16. data/assets/speaker.html +2 -0
  17. data/assets/style.css +103 -0
  18. data/assets/time-expired.png +0 -0
  19. data/assets/wani.wasm +4 -0
  20. data/exe/wani +3 -0
  21. data/lib/wani/browser/application.rb +189 -0
  22. data/lib/wani/browser/bridge_progress.rb +19 -0
  23. data/lib/wani/browser/fonts.rb +60 -0
  24. data/lib/wani/browser/layout.rb +107 -0
  25. data/lib/wani/browser/presentation_timer.rb +66 -0
  26. data/lib/wani/browser/renderer.rb +80 -0
  27. data/lib/wani/cli.rb +134 -0
  28. data/lib/wani/core/fonts.rb +49 -0
  29. data/lib/wani/core/parser.rb +127 -0
  30. data/lib/wani/core/presentation.rb +15 -0
  31. data/lib/wani/core/safe_html.rb +74 -0
  32. data/lib/wani/core/validator.rb +31 -0
  33. data/lib/wani/fonts/http.rb +45 -0
  34. data/lib/wani/fonts/manager.rb +190 -0
  35. data/lib/wani/server/application.rb +92 -0
  36. data/lib/wani/server/http_server.rb +34 -0
  37. data/lib/wani/version.rb +3 -0
  38. data/lib/wani.rb +4 -0
  39. data/templates/images/workflow.svg +36 -0
  40. data/templates/slides.md +182 -0
  41. data/third_party/gems/kramdown-LICENSE +30 -0
  42. data/third_party/gems/kramdown-parser-gfm-LICENSE +21 -0
  43. data/third_party/gems/rexml-LICENSE +22 -0
  44. data/third_party/ibm-plex-sans-jp/LICENSE.txt +93 -0
  45. data/third_party/ibm-plex-sans-jp/README.md +39 -0
  46. data/third_party/ibm-plex-sans-jp/provenance.json +20 -0
  47. data/third_party/ruby-wasm-loader/LICENSE +21 -0
  48. data/third_party/ruby-wasm-loader/NOTICE +1292 -0
  49. data/third_party/ruby-wasm-loader/README.md +35 -0
  50. data/third_party/ruby-wasm-loader/browser.script.iife.js +3143 -0
  51. data/third_party/ruby-wasm-loader/provenance.json +10 -0
  52. metadata +159 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e9338fdd8ed02941cd6d07cc6476b48cc2654be6206c7cb2ff45cb19373ded1c
4
+ data.tar.gz: 2ad82dddc2290379193f50caa0c9fdcfc1ffe78318eae2cfe7bc60ab999967ee
5
+ SHA512:
6
+ metadata.gz: d92b2366d09835d908a122dbd85163548dbdcaafc0979eae8cd37e63763635faef4b3e4d93cd9c742d46a328217b259e547b54191fd2e843f8228a10161f4985
7
+ data.tar.gz: 112acd0ee5f293e4702abafc878dcdba4a4722508701260e5f9f92ea0ca276a7c9e872ef648a50271ed8cb372ae2dc0e3394002325fa76153347c37cc5f9b940
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ledsun
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,262 @@
1
+ # WANI — Web Assembly Narrative Illustrator
2
+
3
+ Markdown からスライドを作り、ブラウザー内の Ruby でプレゼンテーションするツールです。
4
+ Rabbit へのオマージュとして、因幡の白兎に登場するワニ(鮫)にちなんだ名前です。
5
+
6
+ <p align="center">
7
+ <img src="docs/images/wani-characters.png" alt="ノートパソコンを使う兎と、それを見守るワニ" width="640">
8
+ </p>
9
+
10
+ <p align="center">
11
+ <img src="docs/images/rabbit.png" alt="ノートパソコンを持った兎" width="240">
12
+ <img src="docs/images/wani.png" alt="笑顔のワニ" width="240">
13
+ </p>
14
+
15
+ ## インストールと開始
16
+
17
+ 現在はソースから gem をビルドして利用します。RubyGems.org への公開は行っていません。
18
+ Ruby 3.2 以上が必要です。ソースのビルドには Node.js 22.13 以上、npm、Bundler が必要ですが、
19
+ ビルド済み gem の利用に Node.js は不要です。
20
+
21
+ ```sh
22
+ bundle config set --local path vendor/bundle
23
+ bundle install
24
+ npm ci
25
+ bundle exec rake build:wasm
26
+
27
+ gem build wani.gemspec
28
+ gem install ./wani-0.1.8.gem
29
+
30
+ wani new my-talk
31
+ cd my-talk
32
+ wani check
33
+ wani serve
34
+ ```
35
+
36
+ rbenv 環境でインストール後に `wani: command not found` となる場合は、
37
+ `rbenv rehash` を実行して実行ファイルの shim を更新してください。
38
+
39
+ 表示された http://127.0.0.1:8000/ を Chrome または Edge で開きます。
40
+ `slides.md` を編集したらブラウザーを再読み込みしてください。
41
+ 生成されるプロジェクトには、各種Markdown記法を紹介する10ページの `slides.md` と、`images/` 内のサンプルSVG画像が含まれます。
42
+ HTML / CSS / JS ランタイム / wasm は gem が保持し、各プロジェクトへコピーしません。
43
+
44
+ ## コマンド
45
+
46
+ ```sh
47
+ wani new DIRECTORY
48
+ wani check [FILE]
49
+ wani serve [FILE] --port 8000 --bind 127.0.0.1
50
+ wani --version
51
+ wani --help
52
+ ```
53
+
54
+ - `new`: サンプルを生成します。既存のディレクトリ、ファイル、シンボリックリンクは上書きしません。
55
+ - `check`: ファイル省略時は `slides.md`。Front Matter・区切り・タイトル・ノート・画像を検証します。
56
+ エラーは終了コード1、成功および警告のみの場合は0です。実際のはみ出しはブラウザーが検出します。
57
+ - `serve`: 指定ファイルを静的配信します。省略時は `slides.md`。
58
+ `--port` / `-p`、`--bind` / `-b` で変更でき、Ctrl+C で正常終了します。
59
+ 初期バインド先は127.0.0.1、ポートは8000です。ポート0を指定すると利用可能なポートを選びます。
60
+
61
+ Markdown の画像は、そのファイルを基準に相対パスで記述します。
62
+ PNG / JPEG / WebP / SVG に対応します。HTTP(S)画像も表示できますが、`check` の存在確認はローカル画像だけです。
63
+
64
+ ## Markdown
65
+
66
+ ```markdown
67
+ ---
68
+ time_limit: 5
69
+ ---
70
+
71
+ # Ruby on WebAssembly
72
+
73
+ **Ruby** がブラウザーでスライドを描画します。
74
+
75
+ ![構成図](images/architecture.svg)
76
+
77
+ <!--
78
+ notes:
79
+ ここで仕組みを説明します。
80
+ **ノートの Markdown** も使えます。
81
+ -->
82
+
83
+ ---
84
+
85
+ ## 次のスライド
86
+
87
+ 見出しレベルが違っても、タイトルのデザインは同じです。
88
+ ```
89
+
90
+ 独立した `---` の行でスライドを分割し、各ページの最初の見出しをタイトルにします。
91
+ 本文には段落、強調、リスト、引用、コード、リンク、画像、表を使えます。
92
+ コードフェンスに `ruby` や `js` などの言語名を付けると、スライド・ノート・PDFで構文ハイライトが適用されます。
93
+ `<!-- notes: ... -->` は発表者ノート、`<!-- page-footnote: ... -->` はページごとの脚注です。
94
+
95
+ 設定、各記法の例、対応範囲と制約は [Markdown記法ガイド](docs/markdown.md) を参照してください。
96
+
97
+ ## 発表と印刷
98
+
99
+ | キー | 操作 |
100
+ | --- | --- |
101
+ | → / Space / PageDown | 次のスライド |
102
+ | ← / PageUp | 前のスライド |
103
+ | Home / End | 最初 / 最後 |
104
+ | F | 全画面の切り替え |
105
+ | Esc | 全画面を解除 |
106
+ | N | 発表者ノートを別ウィンドウに開く |
107
+
108
+ `#slide=3` のような URL で特定のスライドを開けます。
109
+ ノート画面は本文・ノート・ページ番号をメインから一方向で同期します。
110
+ 開けない場合はブラウザーのポップアップ設定を確認してください。
111
+
112
+ スライドは1920×1080、16:9、白背景です。タイトル・本文・脚注を分け、画面に合わせて全体を拡大縮小します。
113
+ 画像とフォントを読み込み、幅と高さに合わせて文字サイズを自動調整します。
114
+ 画像は比率を維持して縦に配置し、画像だけの場合は本文領域を広く使います。
115
+ 収まらない内容は分割・スクロールせず、番号と内容を含む警告を表示します。
116
+ 画像の読み込みを最大15秒待ち、失敗やタイムアウトを通知します。
117
+
118
+ ツールバーの「PDF」「ノート付き PDF」から印刷ダイアログを開き、PDFとして保存します。
119
+ Ctrl+P でも印刷できます。
120
+ 用紙は320×180mmを指定し、ブラウザーのヘッダー・フッターはオフにしてください。
121
+ 通常版は1スライド1ページ、ノート付きは各スライドの次に対応するノートを置きます。
122
+ 画像・フォントの完了後に印刷し、ページごとの脚注とページ番号を出力します。兎と鰐の装飾は常に非表示です。
123
+ 装飾はページの進捗に連動します。前半ではワニが右から左へ増えて橋を作り、後半では兎が左の島からサメの背中を通って右の島へ渡ります。
124
+ 1ページ目は総ページ数によらず必ずワニ1匹から始め、前半の終わりに橋が20匹で完成するように増やします。
125
+ 1ページだけの場合は1匹のまま、2ページの場合は2ページ目で橋を完成させます。
126
+ ページを戻すと位置と橋も戻り、最終ページで兎が右端に到着します。
127
+ 画面では動きを減らす設定にも対応します。
128
+
129
+ ## 発表タイマー
130
+
131
+ スライドの読み込み完了から計測し、既定では5分で時間切れ画面を表示します。
132
+ Front Matter の `time_limit` に分数を指定して変更できます(小数も可)。
133
+ `time_limit: 0` でタイマーを無効にします。
134
+
135
+ 残り30秒になると、全画面表示中もカウントダウンを表示します。
136
+ 残り5秒は中央に数字を表示し、画面の短辺に対して20%・40%・60%・80%・100%と強調サイズを増やします。
137
+ 各数字は0.8秒で通常サイズに戻ります。動きを減らす設定では拡大アニメーションを省略します。
138
+ 時間切れになると、兎柄フードをくわえたワニ(さめ)の画像を表示します。
139
+ 左右キーまたは「スライドに戻る」ボタンで、時間切れ直前のスライドに戻れます。
140
+ 戻った後は通常通りページを移動でき、時間切れ画面は再表示しません。
141
+ 最終スライドの表示中はタイマーを一時停止し、カウントダウンも時間切れ画面も表示しません。
142
+ 前のスライドに戻ると、停止前の残り時間から再開します。1ページだけの場合も停止します。
143
+ ページを再読み込みするとタイマーも最初から始まります。
144
+ タイマーと時間切れ画面はPDFには含めません。
145
+
146
+ ## 同梱フォント
147
+
148
+ 日本語・英数字の標準書体は **IBM Plex Sans JP** です。
149
+ 通常と太字のフォントを gem に同梱します。
150
+ OS へのインストールや外部 CDN への接続は不要です。
151
+
152
+ 本文・タイトル・発表者画面・PDF に同じ書体を使います。
153
+ コードは等幅フォントを優先し、日本語の代替候補に IBM Plex Sans JP を指定します。
154
+ 読み込みに失敗した場合は警告し、代替書体で表示を続けます。
155
+
156
+ フォントは SIL Open Font License 1.1 です。原文のライセンス・著作権表示と配布元・チェックサムは
157
+ [third_party/ibm-plex-sans-jp](third_party/ibm-plex-sans-jp/README.md) に保持しています。
158
+
159
+ ## フォントを変更する
160
+
161
+ タイトルと本文には、[Fontsource](https://fontsource.org/fonts)のフォントを追加して使えます。
162
+ フォントの追加時にはインターネット接続が必要です。追加後はオフラインで表示・PDF出力ができ、OSへのフォントのインストールやNode.js・npmは不要です。
163
+
164
+ ### Fontsourceのフォントを使う
165
+
166
+ 「Noto Sans JP」に変更する例です。
167
+
168
+ 1. **フォントを選ぶ**
169
+
170
+ [Fontsource](https://fontsource.org/fonts)で検索・プレビューし、使いたいフォントの名前を確認します。
171
+
172
+ 2. **スライドのディレクトリで追加する**
173
+
174
+ `slides.md`があるディレクトリへ移動して実行します。`my-talk`は自分のディレクトリ名に置き換えてください。既にその中にいる場合は`cd`は不要です。
175
+
176
+ ```sh
177
+ cd my-talk
178
+ wani font add "Noto Sans JP"
179
+ ```
180
+
181
+ この操作で、そのプレゼンテーションにフォントをダウンロードします。Markdownの設定は次の手順で行います。
182
+
183
+ 3. **`slides.md`の先頭に指定する**
184
+
185
+ ```yaml
186
+ ---
187
+ font: Noto Sans JP
188
+ ---
189
+ ```
190
+
191
+ 既にFront Matter(先頭の`---`で囲んだ設定)がある場合は、その中に`font: Noto Sans JP`を追記します。
192
+ 設定の下に、スライドの見出しや本文を続けてください。コードの等幅フォントは変更されません。
193
+
194
+ 4. **ブラウザーで確認する**
195
+
196
+ ```sh
197
+ wani serve slides.md
198
+ ```
199
+
200
+ 表示されたURLをブラウザーで開きます。既に`wani serve`を起動している場合は、開いているページを再読み込みしてください。
201
+ フォントが未登録・読み込み失敗の場合は警告を表示し、代替フォントで表示を続けます。
202
+
203
+ フォント名の代わりにIDやFontsourceの公式ページURLでも追加できます。例えば、手順2のコマンドを次のいずれかに置き換えられます。
204
+
205
+ ```sh
206
+ wani font add noto-sans-jp
207
+ wani font add https://fontsource.org/fonts/noto-sans-jp
208
+ ```
209
+
210
+ ### 文字の太さを変える
211
+
212
+ Front Matterの`title-weight`でタイトル、`body-weight`で本文の太さを指定できます。
213
+
214
+ ```yaml
215
+ ---
216
+ font: Noto Sans JP
217
+ title-weight: 500
218
+ body-weight: 400
219
+ ---
220
+ ```
221
+
222
+ 省略時はタイトル700・本文400です。`font`を省略して、既定フォントの太さだけを変えることもできます。
223
+ 値の範囲やフォントによる表示の違いは [Markdown記法ガイド](docs/markdown.md#front-matter文書全体の設定) を参照してください。
224
+
225
+ ### 追加済みフォントの確認・削除
226
+
227
+ `slides.md`があるディレクトリで、追加済みのフォントとIDを確認します。
228
+
229
+ ```sh
230
+ wani font list
231
+ ```
232
+
233
+ 不要になったフォントは、一覧に表示されたIDを使って削除します。例えばNoto Sans JPなら次のとおりです。
234
+
235
+ ```sh
236
+ wani font remove noto-sans-jp
237
+ ```
238
+
239
+ スライドで使用中の場合は確認を求めます。削除する場合は、Front Matterの`font`も削除するか、別の追加済みフォントに変更してください。
240
+
241
+ ### 他の人に渡す場合
242
+
243
+ 追加したフォントは`fonts/ID/`、登録情報は`.wani/fonts.yml`に保存されます。
244
+ `slides.md`や画像と一緒に、`fonts/`と`.wani/fonts.yml`も保存・配布してください。`.wani`は隠しディレクトリなので、コピーし忘れないようにしてください。
245
+
246
+ 各フォントのライセンスは`fonts/ID/LICENSE`に保存されます。Web公開・再配布・PDF配布の際は、そのフォントのライセンス条件を確認してください。
247
+
248
+ ## 動作環境と制約
249
+
250
+ 確認済みの環境は Linux / Ruby 4.0.7 / Chrome 156.0.8078.47 です。
251
+ Windows・WSL2、Edge / Firefox / Safari、通常ブラウザーの印刷ダイアログ操作は未検証です。
252
+
253
+ WSL2 内で `wani serve` を起動した場合は、Windows 側のブラウザーで http://localhost:8000/ を開きます。
254
+ 環境のポート転送設定に応じて `--bind 0.0.0.0` を指定してください。
255
+
256
+ 複雑に入れ子になった Markdown 方言、最適な画像の自動配置、ライブリロードは対象外です。
257
+ 発表者画面はメイン画面の終了・再読み込み後に開き直してください。
258
+
259
+ ## 開発者向けドキュメント
260
+
261
+ - [アーキテクチャ](docs/architecture.md):共通モジュール、静的配信、wasm・ローダー、フォント、レイアウトの設計
262
+ - [開発・検証](docs/development.md):ビルド、テスト、パッケージ作成、手動検証の手順
@@ -0,0 +1,9 @@
1
+ require "js"
2
+ begin
3
+ $LOAD_PATH.unshift("/wani/bundle/kramdown/lib", "/wani/bundle/rexml/lib", "/wani/bundle/kramdown-parser-gfm/lib", "/wani/bundle/rouge/lib")
4
+ require "/wani/lib/wani/browser/application"
5
+ Wani::Browser::Application.new.start
6
+ rescue LoadError, StandardError => error
7
+ document = JS.global[:document]
8
+ document.getElementById("status")[:textContent] = "起動失敗: #{error.message}"
9
+ end
data/assets/build.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": "0.1.8",
3
+ "source_sha256": "a062de0d12ccc06d3cfc1c4adf571fc247b9c2c77de149679e2a0b9d8cc47f7c",
4
+ "loader_commit": "dc6b0ffd5800ed9bfc49268ed8021d456f10ddf8",
5
+ "wasm_sha256": "bfb964e6d30c8045bcf2e742dde56f046b1968f9465457130c008e9cdb037600"
6
+ }
@@ -0,0 +1,117 @@
1
+ /* Generated by scripts/build_wasm.rb with Rouge 5.1.0. */
2
+ .highlight table td { padding: 5px; }
3
+ .highlight table pre { margin: 0; }
4
+ .highlight, .highlight .w {
5
+ color: #24292f;
6
+ background-color: #f6f8fa;
7
+ }
8
+ .highlight .k, .highlight .kd, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kt, .highlight .kv {
9
+ color: #cf222e;
10
+ }
11
+ .highlight .gr {
12
+ color: #f6f8fa;
13
+ }
14
+ .highlight .gd {
15
+ color: #82071e;
16
+ background-color: #ffebe9;
17
+ }
18
+ .highlight .nb {
19
+ color: #953800;
20
+ }
21
+ .highlight .nc {
22
+ color: #953800;
23
+ }
24
+ .highlight .no {
25
+ color: #953800;
26
+ }
27
+ .highlight .nn {
28
+ color: #953800;
29
+ }
30
+ .highlight .sr {
31
+ color: #116329;
32
+ }
33
+ .highlight .na {
34
+ color: #116329;
35
+ }
36
+ .highlight .nt {
37
+ color: #116329;
38
+ }
39
+ .highlight .gi {
40
+ color: #116329;
41
+ background-color: #dafbe1;
42
+ }
43
+ .highlight .ges {
44
+ font-weight: bold;
45
+ font-style: italic;
46
+ }
47
+ .highlight .kc {
48
+ color: #0550ae;
49
+ }
50
+ .highlight .l, .highlight .ld, .highlight .m, .highlight .mb, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mx {
51
+ color: #0550ae;
52
+ }
53
+ .highlight .sb {
54
+ color: #0550ae;
55
+ }
56
+ .highlight .bp {
57
+ color: #0550ae;
58
+ }
59
+ .highlight .ne {
60
+ color: #0550ae;
61
+ }
62
+ .highlight .nl {
63
+ color: #0550ae;
64
+ }
65
+ .highlight .py {
66
+ color: #0550ae;
67
+ }
68
+ .highlight .nv, .highlight .vc, .highlight .vg, .highlight .vi, .highlight .vm {
69
+ color: #0550ae;
70
+ }
71
+ .highlight .o, .highlight .ow {
72
+ color: #0550ae;
73
+ }
74
+ .highlight .gh {
75
+ color: #0550ae;
76
+ font-weight: bold;
77
+ }
78
+ .highlight .gu {
79
+ color: #0550ae;
80
+ font-weight: bold;
81
+ }
82
+ .highlight .s, .highlight .sa, .highlight .sc, .highlight .dl, .highlight .sd, .highlight .s2, .highlight .se, .highlight .sh, .highlight .sx, .highlight .s1, .highlight .ss {
83
+ color: #0a3069;
84
+ }
85
+ .highlight .nd {
86
+ color: #8250df;
87
+ }
88
+ .highlight .nf, .highlight .fm {
89
+ color: #8250df;
90
+ }
91
+ .highlight .err {
92
+ color: #f6f8fa;
93
+ background-color: #82071e;
94
+ }
95
+ .highlight .c, .highlight .ch, .highlight .cd, .highlight .cm, .highlight .cp, .highlight .cpf, .highlight .c1, .highlight .cs {
96
+ color: #6e7781;
97
+ }
98
+ .highlight .gl {
99
+ color: #6e7781;
100
+ }
101
+ .highlight .gt {
102
+ color: #6e7781;
103
+ }
104
+ .highlight .ni {
105
+ color: #24292f;
106
+ }
107
+ .highlight .si {
108
+ color: #24292f;
109
+ }
110
+ .highlight .ge {
111
+ color: #24292f;
112
+ font-style: italic;
113
+ }
114
+ .highlight .gs {
115
+ color: #24292f;
116
+ font-weight: bold;
117
+ }
data/assets/index.html ADDED
@@ -0,0 +1,39 @@
1
+ <!doctype html>
2
+ <html lang="ja">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Wani — Markdown presentation</title>
7
+ <link rel="stylesheet" href="/assets/style.css">
8
+ <link rel="stylesheet" href="/assets/highlight.css">
9
+ </head>
10
+ <body class="presentation-view">
11
+ <header class="toolbar">
12
+ <a class="brand" href="#slide=1" aria-label="Wani: 最初のスライド">Wani<span>Markdown × Ruby</span></a>
13
+ <nav aria-label="プレゼンテーション操作">
14
+ <button id="previous" title="前へ (← / PageUp)" disabled>←</button>
15
+ <output id="position" aria-live="polite">— / —</output>
16
+ <button id="next" title="次へ (→ / Space / PageDown)" disabled>→</button>
17
+ <span class="toolbar-divider"></span>
18
+ <button id="fullscreen" title="全画面 (F)" disabled>全画面</button>
19
+ <button id="speaker" title="発表者ノート (N)" disabled>ノート</button>
20
+ <button id="print" disabled>PDF</button>
21
+ <button id="print-notes" disabled>ノート付き PDF</button>
22
+ </nav>
23
+ </header>
24
+ <p id="status" role="status">Ruby を読み込んでいます…</p>
25
+ <aside id="warnings" role="status" hidden></aside>
26
+ <div id="viewport"><main id="stage" aria-label="スライド"></main></div>
27
+ <output id="countdown" aria-live="off" aria-label="発表の残り時間" hidden></output>
28
+ <section id="time-expired" role="dialog" aria-modal="true" aria-labelledby="time-expired-title" hidden>
29
+ <h1 id="time-expired-title">時間切れです!</h1>
30
+ <div class="time-expired-image" role="img" aria-label="兎柄フードをくわえるワニ(さめ)"></div>
31
+ <p>← または → キーで元のスライドに戻れます</p>
32
+ <button id="resume-slides">スライドに戻る</button>
33
+ </section>
34
+ <footer class="help">← → ページ移動 <span>F 全画面</span><span>N ノート</span><span>Home / End 最初・最後</span></footer>
35
+ <article id="print-pages" aria-hidden="true"></article>
36
+ <script src="/assets/runtime.pr672.js" data-ruby-wasm-url="/assets/wani.wasm"></script>
37
+ <script type="text/ruby" data-eval="async" src="/assets/bootstrap.rb"></script>
38
+ </body>
39
+ </html>
data/assets/rabbit.svg ADDED
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="100" height="48" viewBox="0 0 100 48"><g fill="#71887e"><ellipse cx="40" cy="30" rx="24" ry="14"/><circle cx="68" cy="23" r="12"/><ellipse cx="67" cy="9" rx="4" ry="9"/><ellipse cx="76" cy="10" rx="4" ry="9"/><circle cx="14" cy="29" r="7"/><path d="M25 38h20v7H24zm33-5h17v10H55z"/></g><circle cx="73" cy="21" r="2" fill="#fff"/></svg>
@@ -0,0 +1,187 @@
1
+ # MIT license. See http://www.opensource.org/licenses/mit-license.php
2
+
3
+ Copyright (c) 2012 Jeanine Adkisson.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
23
+ # SPECIAL NOTE:
24
+
25
+ Many of the lexers in this project are adaptations of those in Pygments
26
+ (pygments.org). The license for Pygments is as follows:
27
+
28
+ # BEGIN pygments/LICENSE #
29
+
30
+ Copyright (c) 2006-2012 by the respective authors (see AUTHORS file).
31
+ All rights reserved.
32
+
33
+ Redistribution and use in source and binary forms, with or without
34
+ modification, are permitted provided that the following conditions are
35
+ met:
36
+
37
+ * Redistributions of source code must retain the above copyright
38
+ notice, this list of conditions and the following disclaimer.
39
+
40
+ * Redistributions in binary form must reproduce the above copyright
41
+ notice, this list of conditions and the following disclaimer in the
42
+ documentation and/or other materials provided with the distribution.
43
+
44
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
45
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
46
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
47
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
48
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
49
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
50
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
51
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
52
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
53
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55
+
56
+ # END pygments/LICENSE #
57
+
58
+ The contents of the AUTHORS file at the time of porting was:
59
+
60
+ # BEGIN pygments/AUTHORS #
61
+
62
+ Pygments is written and maintained by Georg Brandl <georg@python.org>.
63
+
64
+ Major developers are Tim Hatch <tim@timhatch.com> and Armin Ronacher
65
+ <armin.ronacher@active-4.com>.
66
+
67
+ Other contributors, listed alphabetically, are:
68
+
69
+ * Sam Aaron -- Ioke lexer
70
+ * Kumar Appaiah -- Debian control lexer
71
+ * Ali Afshar -- image formatter
72
+ * Andreas Amann -- AppleScript lexer
73
+ * Jeffrey Arnold -- R/S lexer, BUGS lexers
74
+ * Jeremy Ashkenas -- CoffeeScript lexer
75
+ * Stefan Matthias Aust -- Smalltalk lexer
76
+ * Ben Bangert -- Mako lexers
77
+ * Max Battcher -- Darcs patch lexer
78
+ * Paul Baumgart, 280 North, Inc. -- Objective-J lexer
79
+ * Michael Bayer -- Myghty lexers
80
+ * John Benediktsson -- Factor lexer
81
+ * Christopher Bertels -- Fancy lexer
82
+ * Jarrett Billingsley -- MiniD lexer
83
+ * Adam Blinkinsop -- Haskell, Redcode lexers
84
+ * Frits van Bommel -- assembler lexers
85
+ * Pierre Bourdon -- bugfixes
86
+ * Hiram Chirino -- Scaml and Jade lexers
87
+ * Leaf Corcoran -- MoonScript lexer
88
+ * Christopher Creutzig -- MuPAD lexer
89
+ * Pete Curry -- bugfixes
90
+ * Owen Durni -- haXe lexer
91
+ * Nick Efford -- Python 3 lexer
92
+ * Sven Efftinge -- Xtend lexer
93
+ * Artem Egorkine -- terminal256 formatter
94
+ * James H. Fisher -- PostScript lexer
95
+ * Carlos Galdino -- Elixir and Elixir Console lexers
96
+ * Naveen Garg -- Autohotkey lexer
97
+ * Laurent Gautier -- R/S lexer
98
+ * Alex Gaynor -- PyPy log lexer
99
+ * Bertrand Goetzmann -- Groovy lexer
100
+ * Krzysiek Goj -- Scala lexer
101
+ * Matt Good -- Genshi, Cheetah lexers
102
+ * Patrick Gotthardt -- PHP namespaces support
103
+ * Olivier Guibe -- Asymptote lexer
104
+ * Martin Harriman -- SNOBOL lexer
105
+ * Matthew Harrison -- SVG formatter
106
+ * Steven Hazel -- Tcl lexer
107
+ * Aslak Hellesøy -- Gherkin lexer
108
+ * Greg Hendershott -- Racket lexer
109
+ * Jordi Gutiérrez Hermoso -- Octave lexer
110
+ * David Hess, Fish Software, Inc. -- Objective-J lexer
111
+ * Varun Hiremath -- Debian control lexer
112
+ * Doug Hogan -- Mscgen lexer
113
+ * Ben Hollis -- Mason lexer
114
+ * Tim Howard -- BlitzMax lexer
115
+ * Ivan Inozemtsev -- Fantom lexer
116
+ * Brian R. Jackson -- Tea lexer
117
+ * Dennis Kaarsemaker -- sources.list lexer
118
+ * Igor Kalnitsky -- vhdl lexer
119
+ * Eric Knibbe -- Lasso lexer
120
+ * Adam Koprowski -- Opa lexer
121
+ * Benjamin Kowarsch -- Modula-2 lexer
122
+ * Alexander Kriegisch -- Kconfig and AspectJ lexers
123
+ * Marek Kubica -- Scheme lexer
124
+ * Jochen Kupperschmidt -- Markdown processor
125
+ * Gerd Kurzbach -- Modelica lexer
126
+ * Olov Lassus -- Dart lexer
127
+ * Sylvestre Ledru -- Scilab lexer
128
+ * Mark Lee -- Vala lexer
129
+ * Ben Mabey -- Gherkin lexer
130
+ * Simone Margaritelli -- Hybris lexer
131
+ * Kirk McDonald -- D lexer
132
+ * Gordon McGregor -- SystemVerilog lexer
133
+ * Stephen McKamey -- Duel/JBST lexer
134
+ * Brian McKenna -- F# lexer
135
+ * Lukas Meuser -- BBCode formatter, Lua lexer
136
+ * Paul Miller -- LiveScript lexer
137
+ * Hong Minhee -- HTTP lexer
138
+ * Michael Mior -- Awk lexer
139
+ * Jon Morton -- Rust lexer
140
+ * Paulo Moura -- Logtalk lexer
141
+ * Mher Movsisyan -- DTD lexer
142
+ * Ana Nelson -- Ragel, ANTLR, R console lexers
143
+ * Nam T. Nguyen -- Monokai style
144
+ * Jesper Noehr -- HTML formatter "anchorlinenos"
145
+ * Mike Nolta -- Julia lexer
146
+ * Jonas Obrist -- BBCode lexer
147
+ * David Oliva -- Rebol lexer
148
+ * Jon Parise -- Protocol buffers lexer
149
+ * Ronny Pfannschmidt -- BBCode lexer
150
+ * Benjamin Peterson -- Test suite refactoring
151
+ * Dominik Picheta -- Nimrod lexer
152
+ * Clément Prévost -- UrbiScript lexer
153
+ * Kashif Rasul -- CUDA lexer
154
+ * Justin Reidy -- MXML lexer
155
+ * Norman Richards -- JSON lexer
156
+ * Lubomir Rintel -- GoodData MAQL and CL lexers
157
+ * Andre Roberge -- Tango style
158
+ * Konrad Rudolph -- LaTeX formatter enhancements
159
+ * Mario Ruggier -- Evoque lexers
160
+ * Stou Sandalski -- NumPy, FORTRAN, tcsh and XSLT lexers
161
+ * Matteo Sasso -- Common Lisp lexer
162
+ * Joe Schafer -- Ada lexer
163
+ * Ken Schutte -- Matlab lexers
164
+ * Tassilo Schweyer -- Io, MOOCode lexers
165
+ * Joerg Sieker -- ABAP lexer
166
+ * Robert Simmons -- Standard ML lexer
167
+ * Kirill Simonov -- YAML lexer
168
+ * Steve Spigarelli -- XQuery lexer
169
+ * Jerome St-Louis -- eC lexer
170
+ * James Strachan -- Kotlin lexer
171
+ * Tiberius Teng -- default style overhaul
172
+ * Jeremy Thurgood -- Erlang, Squid config lexers
173
+ * Erick Tryzelaar -- Felix lexer
174
+ * Daniele Varrazzo -- PostgreSQL lexers
175
+ * Abe Voelker -- OpenEdge ABL lexer
176
+ * Whitney Young -- ObjectiveC lexer
177
+ * Matthias Vallentin -- Bro lexer
178
+ * Nathan Weizenbaum -- Haml and Sass lexers
179
+ * Dietmar Winkler -- Modelica lexer
180
+ * Nils Winter -- Smalltalk lexer
181
+ * Davy Wybiral -- Clojure lexer
182
+ * Diego Zamboni -- CFengine3 lexer
183
+ * Alex Zimin -- Nemerle lexer
184
+
185
+ Many thanks for all contributions!
186
+
187
+ # END pygments/AUTHORS #