2023年の中旬ごろ、HomebrewがBigSurなどの古いMacOSをサポートから外してしまいました。 しばらくは「なんとかなるさ!」と使っていたのですが、半年もしないうちに重要なパッケージが更新できなくなり… 特に痛かったのは、libheifが更新できなくなって、Im…
小さな修正ですが、作品のビューアー下部に表示されるシリーズ情報から、以下のようにシリーズ内の別の作品に移動できるようになりました(これまではシリーズページをわざわざ開く必要がありました)。 ドロップダウンからシリーズ内の作品に移動できる ぜ…
以前、青空文庫の作品をシリーズにまとめた、という記事を書きました。 tategakibunko.hatenablog.com 今回はその第二弾です(ちなみに、鏡の国のアリスは青空文庫ではなく、プロジェクト杉田玄白の作品です)。 細雪(谷崎潤一郎) 鏡の国のアリス(ルイス…
縦書き文庫内の作品が、タイトル名、筆者、タグなどで検索できるようになりました。表示順序は、人気順と新着順が選べます。 これまで縦書き文庫内の検索はグーグルさんの検索に任せていたのですが、最近グーグルさんの検索結果から縦書き文庫のページが(た…
縦書き文庫にて「ドラマモード」の提供が開始されました。 ドラマモードは、背景画像と、キャラクターのアバターと、アニメーションテキストで語られる表示モードです。 ようするに、ビジュアルノベルみたいな表示ができるモードですね。 動作サンプルはhttp…
ページ指定の方法 作品ページのURLの末尾に?p={ページ番号}を付けると、そのページ番号から作品を開けるようになりました。 例えば、夏目漱石の「こころ」の10ページ目を開くリンクは、次のようになります。 https://tb.antiscroll.com/novels/library/6162?…
非同期処理への対応 少し前にブログで「wasmではjsと非同期のやり取りをするのが難しい」と書いたのですが、この技術的な課題をなんとか解決できたので、組版の完了したページを(全ページの計算の完了を待たずに)表示できるようになりました。 これによっ…
先日、縦書き文庫の組版エンジン(nehan)をRustで書き直し、WebAssembly化したと報告しました。 tategakibunko.hatenablog.com その際に「約3倍の速度向上があった」と書いたのですが、あれから約2週間分の利用者のログをもとに、プラットフォーム別に速度…
縦書き文庫の組版エンジンであるnehan(js製)をRustで書き換え、WebAssemblyで実行したところ、約3倍の高速化に成功しました。 現時点ですでに運用されています。 感想としては「本当は10倍ぐらい速くなって欲しかったけど、そこまでは速度が出ずにトホホ……
nehan-playerの0.1.1を公開しました。 tategakibunko.github.io 変更点 NehanPlayer.initializeにて、cssTextオプションを指定できるようになりました。 ページ番号(ノンブル)の表示位置が、ページ送りメニューバーの中ではなく、本文画面の中に表示される…
縦書き文庫のビューアーを久しぶりにリニューアルしました。 いくつかあった不満点を、それなりに改善できたと思います。 旧ビューアーの不満点 目次、登場人物、コメントなどの各種情報が確認しにくかった(下方向へのスクロールが必要だった) 解像度の大…
nehanによるページ組版を簡単に扱えるウェブコンポーネントを作ってみました。 ドキュメント デモ 導入 テキストの内容を、サーバーからsrc属性で読み込む場合は、こんな感じになります。 <nehan-player writing-mode="horizontal-tb" width="responsive" src="/path/to/your-novel.html" height="500" font-size="16" layout="1x2"> </nehan-player>
縦書き文庫で数式とプログラムの自動色付け表示ができるようになりました。 縦書き文庫ヘルプ 数式を入力してみよう 縦書き文庫ヘルプ プログラムコードを入力してみよう 数式 数式は文の途中に差し込む場合(インライン表示)と、行全体を使って表示する場…
アンカーリンクと、リンク先のプレビューに対応しました。 アンカーリンクを使ったサンプルを見る アンカーリンクとは id属性を付けた要素に対して、<a href="#そのidの値">...</a>のように宣言したリンクのことを、アンカーリンクといいます。 リンクのhref属性の値が #(シャープ)か…
原因はGuestAdditionが作成するvboxsf.koが、/lib/modules/4.18.0-193.28.1.el8_2.x86_64/misc/にコピーされていなかったからのようです。 解決方法 まず、最新カーネルイメージは正常起動せず、emergency modeで起動するため、一つ前の世代のイメージからOS…
縦書き文庫の各種機能を改善しました。 作品一覧にてタグが表示されるように 作品の一覧にて、タグが表示されるようになりました。 タグの表示 これによって、同じ系統の作品にアクセスしやすくなりました。 シリーズに追加できる作品数を20から50に増やしま…
きっかけ 作ったきっかけは、最近買ったウイイレ2020の操作が、ちっとも頭に入らなかったからです。。。 一応ゲーム内にマニュアルがあるんですけど、文字とか矢印で説明されても、ピンと来ないんですよね。。。 そこで思いついたのが「ゲームの操作をぱぱっ…
作品に登場人物を登録した場合、先頭ページに「登場人物の一覧」が表示されるようになりました。 登場人物の一覧 市販の書籍でも、だいたいこんな感じで冒頭に表示されてますよね。 登場人物の挿絵については、小説本文の下側に「登場人物」のタブメニューが…
jingoo 1.4.0をリリースしました。 github.com 新しくなった点 Jg_templateモジュールを部分的に改良したJg_template2というモジュールが追加されました。 サンプル これまでJg_templateモジュールは、次のようにmodelsに連想リストを与えていました。 open …
Togetterの次の記事に「探す作業が嫌だ」みたいなことが書かれていて「そりゃごもっとも…」と思ったので、表題の件を実装しました。 少年ジャンプ+副編集長が大学1年生から「漫画アプリのUIについて物申したい!」というDMが来て実際に会って考えが整理され…
nehan6からnehan7にバージョンアップしました。 インストール npm install --save nehan 変更点 組版速度が約20%向上しました。 コードサイズが約10%削減されました。 nehan.cssが不要になりました。 行内に置換要素、画像、ルビ、圏点傍点、複数サイズの文…
結論だけ先に述べておきます。 Angular8以下では、nehan(<=6.0.38)までしか使えません。 ただしTypescript3.6.3以降を使える環境では、なんの問題もなくnehan(>=6.0.40)を使用できます。 以下に理由を書きますが、非常にしょうもないことです。 package.json…
VSCodeのマーケットプレースにvscode-typenovelというTypeNovel用のVisual Studio Code拡張を公開しました。 marketplace.visualstudio.com インストール後は、*.tnファイルを編集するときに有効になります。 実際に動かすと、こんな感じです。 主な機能 ブ…
久しぶりになりますが、jingooのv1.3.1をリリースしました。 Release v1.3.1 · tategakibunko/jingoo · GitHub 変更点 演算子として、新たに+=, -=,*=, /=,%= がサポートされました。 匿名関数がサポートされました。 条件分岐の構文にて、elseif だけではな…
この記事は、TypeNovelのコンパイラをアプリケーションから利用したい開発者向けのものです。 導入 npm install --save typenovel コンパイラの呼び出し ソーステキストからコンパイルするときは、Tnc.fromStringです。 import { Tnc } from 'typenovel'; co…
TypeNovelは、制約と注釈の組み合わせによって、型付きの小説を記述するための言語です。 参考:プロとアマの小説の特徴を数値化して比較してみたらやっぱり差があったので、それを埋めるための型付き小説記述用言語 TypeNovel を公開した件について これま…
TypeNovelで記述した原稿を公開する時、そのファイルをそのままTypeNovelReaderで開いても、それなりには表示されます。 しかし、どうせなら作品タイトルや、作者の情報や、作中キャラクターの情報などが表示されるように公開したいものです。 ここではそう…
TypeNovel用のリーダーアプリ「TypeNovelReader」を公開しました。 github.com TypeNovelで記載した「時間」とか「人物」などといった情報も、表示に反映されます。 ちなみにTypeNovelコンパイラも一緒に入っているので、別途ダウンロードする必要はありませ…
ルビタグをそのまま記述しても良いのですが、こういう感じの設定をtnconfig.jsonに加えると(気持ち?)楽になります。 { "markupMap":{ "$ruby":{ "validate": false, "content": "<arg1><rt><arg2></rt>" } } } 本文中はこんな感じでマークアップします。 $ruby("漢字", "かんじ</arg1>…
どういうものか 次のように、制約の値を"?"で始まる値にすると、その制約は本文中で注釈されなくてもエラーになりません。 @scene({ time:"?" // 注釈する必要のないtime制約 }){ 本文中でtimeの注釈をしなくてもエラーにならない! } どうして必要なのか 注…