TypeNovel用のリーダーアプリ「TypeNovelReader」を公開しました。
TypeNovelで記載した「時間」とか「人物」などといった情報も、表示に反映されます。
ちなみにTypeNovelコンパイラも一緒に入っているので、別途ダウンロードする必要はありません。
使い方
TypeNovelで書かれた原稿を、ドラッグ・アンド・ドロップで放り込むだけです。
FileメニューからOpenを選んでもいいです。
設定ファイル(この記事の下で解説)や、複数ファイルをまとめてzip化したものを開くこともできます。あと*.html
, *.txt
, *.md
も可。
コンパイルエラーは(もしあれば)画面下のほうに表示されます。
特徴
TypeNovelで執筆した原稿をTypeNovelReaderで表示させることで、以下のような「読者を補助する機能」が、簡単に利用できます。
誰のセリフなのかが分かり、かつその人物が何者なのかを思い出せるUI
@speak
タグを使って台詞を記述すると、各セリフの上に人物アイコンが出ます。
カーソルを上に乗せると人物名がポップアップします。
また@sb-start
や@sb-end
を使うと、画像つきの吹き出しセリフを表示します。
@sb-start
を使うとアバター画像が先に表示され、台詞が次に表示されます。@sb-end
はその逆で、台詞が先でアバターが後です。
人物アイコンやアバター画像をクリックすると、詳細なプロフィールが表示されます。
一般に登場人物の多い作品は、それぞれの名前を覚えるのに難儀しますので、こういうUIは有効なのではないでしょうか。
シーンの切り替わりで改ページが入る
一般にシーンの切り替えは、場所、時間などの切り替えを伴うはずです。
よって、そのタイミングで読者の視覚に全く変化がないのは直感的におかしいと考え、シーンの切り替えで改ページが入るようにしました。
シーンに記述された季節や時刻がUIのテーマに反映される
シーンにseason
(季節)とdate
(日付)とtime
(時刻)の記述があった場合、その情報がUIに反映されます。
例えば季節が秋だと、メニューと本文の間にある補助線が紅葉に代わり、時刻が夕方だとオレンジ色の空の画像が左上に表示されます。
「逆に情緒が削がれる!」という場合は、画面上部のメニューボタンから無効にすることも出来ます。あるいは後ほど解説する設定ファイル(
data.json
)で無効にすることも可能です。
チップ機能と脚注機能
チップ機能は、文章の中の特定の単語に補足の説明を付け足したいときに使います。
クリックすると、補足情報が表示されます。
部分的にちょっとした情報を付け足したいときには、脚注が便利です。
これも同じく、クリックすると補足情報が表示されます。
目次項目を追従
作中に目次が設定されていれば、ステータス部分で現在読んでいる章が表示されます。
縦書きにも横書きにも対応
nehanを使っているので当たり前なのですが、縦書き横書き(のページ送り)に対応しています。
ルビ、圏点・傍点、ドロップキャプス、画像などにも対応
ルビの書き方とかは、公式のサンプルを見て下さい。
執筆する人たち向けの情報
以下は執筆者向けの情報です。
まずはサンプルを動かす
先の表示例は公式のサンプルによるものです。
公式サンプルのsemantic-novel-jp.zip
をTypeNovelReaderにドラッグ・アンド・ドロップしてください。
あるいは解凍して、中身の
index.tn
を放り込んでも同じ結果になります。
次にサンプルを解凍して、中にあるindex.tn
とかdata.json
を眺め、表示結果と比べてみてください。
なんとなく書き方がわかると思います。
ちなみに解凍した先のディレクトリからindex.tn
だけをTypeNovelReaderに放り込んでも、同じように作品を表示させることができます。
なお、原稿の中身を書き換えた場合は、画面上部のメニューに再構築(Rebuild)用のボタンが便利です。押すと作品が再コンパイルされ、変更が反映されます。
注意点
執筆するにあたり、いくつかの注意点があります。
注意1 メインの原稿ファイルはindex.tn
に
TypeNovelでは、各ソースの中で外部の原稿を$include("chapter1.tn")
のようにして取り込むことができます。
なので、複数のファイルをzip化して開くときなどに、どのファイルが原稿の入り口なのかがわからないと、困ったことになります。
というわけで、TypeNovelReaderでは、その入り口に該当するファイルをindex.tn
である、と規定しています。
とはいえzip化せず、直に原稿ファイル(*.tn
)を放り込むのであれば、どんなファイル名でも問題ないのですが、いちおう「そういうルールがあるんだな」ぐらいに覚えておいてください。
注意2 作品情報はdata.json
に記述
中身はこんな感じのファイルです。なんとなくですが、見たらわかるのではないでしょうか。
作品のタイトル、作者情報、初期の書式モード(縦書きか、横書きか)、登場人物など、色々なことについて設定できます。
内容については、各自で自分の作品用に直して使ってください。
{ "title": "サンプル作品", "author": "縦書き文庫", "email": "lambda.watanabe@gmail.com", "homepage": "https://tb.antiscroll.com", "writingMode": "vertical-rl", "speechAvatarSize": 50, "enableSemanticUI": true, "displayTypeNovelError": true, "characters": { "john": { "names": ["John", "Adams"], "images": { "normal": "images/avatar2.svg" }, "description": "Desription of John Adams" }, "taro": { "names": ["山田", "太郎"], "images": { "normal": "images/avatar1.svg" }, "description": "山田太郎の詳細をここに書く" } } }
注意3 tnconfig.json
はなくても大丈夫
サンプルにも含まれていませんが、tnconfig.json
がない場合は公式の初期設定ファイルが勝手に使用されます。
公式の設定に加えて独自のマークアップなどを追加したい場合は、このファイルを編集して、index.tn
と同じ場所に置くことになります。
しかし不注意に弄ると公式のマークアップと矛盾したり、公式の更新と衝突したりするので、あまり手を出さないほうが無難だと思います…
注意4 SemanticNovelについて
サンプルのファイル名がsemantic-novel-jp.zip
とあるのですが、実はこのサンプルはSemanticNovelというTypeNovelのマークアップ仕様に沿って記述されています。
で、TypeNovelReaderも、この仕様に沿ったものを表示するという前提で開発されています。
つまり、この仕様に則っていない場合は、せっかくTypeNovelで型を書いても、それを十分に活かせないということになります。
ただこの仕様、まだまだ検討中のもので、今後大きく変わることもあり得るので、ご注意下さい。
SemanticNovelについて、何かしら新しいアイデアや要望があるかたは、Githubの上のページでご提案いただけたらと思います。
オープンソースという文化の性質上、やむを得ずページは英語で公開していますが、もちろん日本語で投稿していただいても全く問題ないです。
ライセンス
ライセンスはGPLv3です。
つまり無償で利用できるし、無償で改変できるけれども、改変したソースもまたGPLv3であることが求められます。
ということで、ソフトウェアを改変した後に、ソースを秘密にしたまま別アプリとかウェブサービスとして再配布、みたいなことはできません。
利用するにしても、ソースはGPLv3で公開して下さい、ということになります。