Releases: shunnag/Washi
Release list
Washi 1.20.0
追加
- EPUB の scrolled-doc / scrolled-continuous と roll の表示に対応した。
横書き・縦書きのスクロール、章境界、位置復元、検索、census と画面サムネイルを
同じ表示モデルで扱う。旧形式の pre-paginated + scrolled-continuous も
幅に合わせた roll として表示する。 - README 冒頭にクイックスタートを追加し、導入・SwiftUI・ファイル権限・
読み込みと終了・検索と画像取得・スクロール表示の DocC ガイドを整備した。 - AppKit / SwiftUI の独立したサンプルアプリと合成 EPUB を追加した。
非同期読み込み、検索とハイライト、読書位置の保存・復元、終了処理を示す。
修正
- 非準拠の text/html など、表示できない章へ移動した後に、前章の DOM から
誤った検索位置・矩形・テキストアンカーを返す問題を修正した。 - 本を読み込み直すとき、保存したテキスト位置を復元に使うようにした。
- 同じ表示条件で連続表示を再計測したとき、フレームとスクロール位置を保持する。
- 画像の spine 項目を roll で表示するとき、既定の余白による隙間を除いた。
変更
- スクロール対応に伴い、ページ割りエンジン版を 5 に更新した。
以前保存した census の実測値は無効になり、再計測が必要になる。 - Reduce Motion が有効な CI でも、ページめくり中の本の差し替えと予約済み演出の
取り消しを検証する。OS 設定を尊重して演出を省略する経路も併せて検証する。 - DocC の警告とガイドの全 Swift コード例を CI で検査し、両モジュールの
ドキュメントを GitHub Pages に公開する。サンプルの描画・状態管理も CI で検証する。 navigator.epubReadingSystem.versionを公開版の1.20.0に合わせた。
Washi 1.19.0
追加
EPUBKeyEventに公開初期化子を追加した。keyとcodeを指定し、
修飾キー4項目は省略するとfalseになる。利用側が通常のimport Washiで
キーイベントを生成し、didReceiveKey/shouldConsumeKeyの実装を
単体テストできるようにした(Washi #3 の追加提案、Washi-crq)。
修正
- ページ数の実測で JavaScript がタイムアウトしたとき、誤って1ページとして
保存せず、失敗を返して WebView を解放するようにした。次回は作り直して計測する。 - 固定レイアウトの描画完了後もナビゲーションの制限を保持し、遅れて発生する
本の外への遷移を拒否するようにした。 - 固定レイアウトの画像・フォント待ちがタイムアウトした後も WebView が
保持される問題を修正した。画面外のスナップショット取得にも5秒の期限と
キャンセル処理を適用し、後続の描画と解放を進められるようにした。 - サムネイルの幅に NaN・無限大・非正数・整数変換不能な値を指定した場合は、
WebKit を作らずnilを返す。固定レイアウトの整数変換クラッシュを防ぐ。 - 全文検索を取り消したとき、長い1章の畳み込み・位置写像・ヒット列挙も
途中で止めるようにした。従来は章の末尾まで検索が続いていた。 - リリース前検証と GitHub Release 公開の変更履歴の検査を共通化した。
空のノートや日付なしの重複見出しを、タグ作成前に拒否できるようにした。 navigator.epubReadingSystem.versionを公開版の1.19.0に合わせた。
リリース前検証で版番号の更新漏れも検出する。
変更
- タグの全 CI 検証が成功した後、変更履歴から GitHub Release を自動公開する。
公開済みの最新版を Latest に指定し、過去版の公開で表示が戻らないようにした。 - 本文キャッシュの追い出しで、毎回すべての索引を移動せず、消費済みの部分を
まとめて回収するようにした。32 MiBのキャッシュへ1 KiBの本文を20万回
挿入する単体計測では、5回の中央値が727 msから19 msになった。
本全体の読み込み・検索の所要時間を表す値ではない。
Washi 1.18.1
修正
- 1.18.0 が Xcode 16 系の Swift でビルドできなかった問題を修正した。
CRC32 の計算に入れた 8 項の式が型チェックの制限時間を超えていた。
式を分けただけで、算法・多項式・返り値は 1.18.0 と同じ。
Washi 1.18.0
この版には古い Swift で CRC32 の式の型チェックが時間切れになる既知のビルド不具合があります。修正版の 1.18.1 以降を利用してください。
追加
- 読み込んだ本を明示的に手放せる
EPUBReaderView.unload()を追加した。
変更
- ZIP エントリを読み出す際の検査の負担を減らした。CRC32 の計算を実測で
4.21 倍高速化した。 - ZIP 展開時に最大 4 MiB の出力領域を先に確保し、リソースを読み出すたびに
メモリを繰り返し確保し直す負担を減らした。 - 本文キャッシュの件数上限を固定 512 件から本の読み順の長さに追随させ、
章数の多い本で抽出済み本文がまったく再利用されない問題を修正した。 - 検索で一致がない場合は早く処理を終えるようにし、検索の負担を減らした。
修正
- 音声同期で読み飛ばし対象の区間を再帰的に送っていたため、20,000 区間の
SMIL や 5,000 個の連続した SMIL でスタックを使い切りクラッシュする問題を
修正した。祖先seqのepub:type、同一音声内の連続区間、空または壊れた
中間 SMIL にも読み飛ばしを正しく適用する。 - 複数文書で共有する SMIL を後半の文書から再生すると前の文書へ戻る問題と、
「現在ページから再生」の古い JavaScript 応答が停止・ページ移動・別の本の
読み込み後に音声を開始する問題を修正した。停止・完了後の再生位置は
API の説明どおりnilを返す。 - 途中で切れた
-epub-CSS 宣言によるホスト側のクラッシュを修正した。
コメント・文字列・カスタムプロパティ内の記述を誤って補正する問題も修正した。 - ZIP の展開後サイズと CRC が先頭部分だけを指す場合や、空エントリを偽装した
不正な deflate ストリームを拒否する。宣言値だけで巨大な出力領域を確保せず、
実際の展開結果に合わせて確保する。 - 本文キャッシュを文字数ではなく UTF-8 のバイト数と項目数で制限し、結合文字の
多い文章や大量の空の章で保持メモリが増え続ける問題を修正した。 - 深い入れ子の XML を含む EPUB でプロセスごと落ちる問題を修正した。
深さ 2000 の 1.4 KB の本でも再現し、利用側のtry/catchでは防げなかった。
XML の木を構築する解析の前に、深さ(上限 512)と要素数(上限 100 万)を
検査し、上限を超える入力を拒否する。同じ本がクラッシュしないことを確認した。
同じ検査により、13 KB の EPUB によるメモリ確保も 542 MB から 25 MiB になった。 - 同名エントリを持つ ZIP は開けなくなった。 従来は最初のエントリを採用して
読んでいたが、他のリーダーと内容が食い違うため、開く時点で拒否する。
受け入れる入力の範囲が狭まる変更で、公開コーパス 251 冊には影響がなかった。 - ページ数の実測結果(census)の版番号を 4 に上げた。CSS 補正でページ割りが
変わっても古い結果が再利用され、N/M 表示とページバーがずれ続ける問題を
修正した。ホストが保存済みの census は全件無効になり、再実測が走る。 - サムネイル生成とページ数の実測で WebKit が無応答になると、見えない
ウインドウが解放されず、後続の要求も進まない問題を修正した。
JavaScript の応答待ちを 5 秒で打ち切る。 - 画面外の WebView が読み込み後に
meta refreshなどで本の外の URL へ
移動できる問題を修正した。読み込み完了後も移動先の制限を維持する。 - リーダーがウインドウから外れた後のサムネイル要求で、見えない WebView を
作り直していた問題を修正した。 - リーダーがウインドウから外れても音声同期が鳴り続ける問題を修正した。
再生位置を保ったまま一時停止する。 - リソースを部分的に読み出す Range 応答用キャッシュに 32 MiB の上限と
破棄処理を設け、保持するメモリを制限した。 - ページ数のキャッシュが増え続ける問題を修正した。保持件数を 16 件に制限し、
先に追加されたものから破棄する。ページ数の無効化時にもキャッシュを消す。 - 本の中の iframe がすべて拒否されて表示できず、読み順に含まれる文書を指す
iframe ではリーダー本体が別の章へ飛ぶ問題を修正した。 - 本の要素をリーダーの内部スタイルと誤認して版面制御に使う問題を修正した。
同じidがあっても、リーダー自身が用意したスタイルかを確認する。 - SVG を本文とする項目で、SVG から参照する CSS・画像・フォントが
読み込まれない問題を修正した。 - 描画できないリソースで、失敗が通知されず白紙になる問題を修正した。
WebKit のエラー 102 を一律に正常なキャンセルとして扱わないようにした。 go(to:)/goBack()が保存したテキストアンカーを捨て、進行率だけで
位置を復元していた問題を修正した。保存した本文位置を使って戻るようにした。- 代替リソース(fallback)の連鎖に含まれる別の項目を指す目次・内部リンクが
反応しない問題を修正した。読み順の索引にそれらの項目も登録する。 - 全角・半角を同一視する検索で、変換により文字数が変わるとヒット位置と
utf16Rangeがずれ、ハイライトが違う位置を指す問題を修正した。 - 書名・著者名を
display-seqで並べ替えず、パッケージ文書の記載順で
保持するようにした。mainTitleはtitle-typeによらず先頭のタイトルとし、
authorsも並べ替えない。
検証
- 公開 EPUB 251 冊の取得元・ライセンス情報・SHA-256 と、再取得用スクリプトを追加した。
- 公開コーパス 251 冊を含む 499 テストが全通過した。ASan・TSan とも報告 0 件。
Washi 1.17.0
追加
- 保存できるハイライト(とメモ)に対応した(
EPUBHighlightと
EPUBReaderView.highlights)。位置は抽出本文の UTF-16 範囲で持つので、
文字サイズ・画面幅・テーマを変えてもずれない。描画は CSS Custom Highlight
API で行い本文の DOM には触れないため、著者 CSS や選択・検索と干渉せず、
範囲が重なっても入れ子要素を作らない。見た目は 4 色 + 下線。 - 本が要求する表示形式(
rendition:flow)と、切れ目ないスクロールを求めて
いるかを読めるようにした(requestedFlow/requestsContinuousScroll)。
これまで解析はしていたが表示層から参照できなかった。表示自体は現状どおり
段組みで行う。 dc:source/dc:type/dc:relation/dc:coverage/dc:formatを
保持するようにした。これまで読み捨てていたため、書誌表示や索引作成で
使えなかった。- 音声同期の再生速度を設定できるようにした(
mediaOverlayPlaybackRate、
0.5〜3.0)。これまで収録速度に固定だった。 - 読み飛ばす区間を
epub:typeで指定できるようにした
(mediaOverlaySkippedTypes。EPUB Reading Systems 3.3 §9.4.1 の skippability)。
ページ番号や注を読み上げから外せる。既定は何も飛ばさない。 - 音声同期の再生位置を取り出して復元できるようにした
(mediaOverlayPositionとplayMediaOverlay(atSpineIndex:parIndex:))。
閉じたときの位置をホスト側で保存できる。 - 音声同期を、章の先頭ではなくいま画面に見えている区間から始められる
ようにした(playMediaOverlayFromCurrentPage())。これまでは必ず章頭へ
引き戻されていた。 - EPUB 3.4 の
rendition:layout="roll"(縦スクロール漫画・絵巻の切れ目ない
表示)を認識するようにした。これまで未知の値としてリフローに倒していた。
日本の出版社が roll 以前に使っていたpre-paginated+
scrolled-continuousの組み合わせも同義として扱い、isScrollLikeで
判別できる。描画は現状リフローと同じ経路で行う。 - 読書位置・しおりにテキストアンカーを併記できるようにした
(EPUBLocator.textOffsetとcurrentLocatorWithTextAnchor())。位置は
これまで進行率だけで保存しており、文字サイズや画面幅を変えると再量子化で
数ページずれて「しおりを打った文」が画面外へ出ていた(青空文庫のような
1 ファイル 1 冊の本で顕著)。アンカーがあれば同じ文へ戻る。既存の保存データは
そのまま読め、アンカーが無ければ従来どおり進行率で復元する。 - 本の中のスクリプトを有効にしたとき、
navigator.epubReadingSystemを
提供するようにした(EPUB Reading Systems 3.3 §6.4 の必須要件)。対応状況は
実際に合わせて申告する(touch-events は false)。既定でスクリプトは無効の
ままなので、通常の本には影響しない。
修正
- コンテナ内リソースの応答から
Cache-Control: no-storeを外した。非 HTTP
スキームのサブリソースに WebKit が与える無期限鮮度をこのヘッダが打ち消して
おり、章送り・ページ数の実測・サムネイル生成のたびに同じ CSS と埋め込み
フォントを再展開していた。30 章・CSS 267KB・フォント 600KB の本で全章の
ページ数実測が 1.40 秒から 0.97 秒になった。ホスト名は本ごとに一意で、
データストアも非永続なので、別の本の内容が混ざることはない。 - メディアオーバーレイ再生のタイマーが実行ループの既定モードにしか入らず、
ウインドウのライブリサイズ中やメニューを開いている間は進行が止まっていた。
その間に音声だけ進むと区間の終わりを跨いでしまい、復帰時に同じ区間の
先頭へ巻き戻ることがあった。追跡モードでも動くようにした。 - 音声の再生開始に失敗した場合に、その失敗を無視して次の断片へ進み続け、
25 ミリ秒間隔で本の終わりまで走り抜けることがあった。音声を用意できない
断片と同じ扱いにして止まらないようにした。 - スクロール位置の補正が、常に直前のページへ戻していた。VoiceOver のカーソル
移動やキーボードフォーカスのために WebKit が行ったスクロールまで巻き戻され、
読み上げ位置やフォーカス中の要素が画面外に残り、ページ番号と保存位置も
更新されなかった。着地した位置が属するページへ揃えて通知するようにした。
選択ドラッグのような半ページ未満のずれは、これまでどおり元のページへ戻る。 - 難読化フォントの解除結果を検証するようにした。
encryption.xmlの宣言を
無条件に信じていたため、編集ソフトで識別子が差し替わった本や、難読化して
いないのに宣言だけ残った本ではフォントが壊れ、表示が黙って代替フォントに
落ちていた(縦書き専用フォントや外字で字形が消える)。解除結果がフォントとして
読めない場合は、本に書かれた他の識別子と素のデータを順に試す。 - 自炊でよくある梱包ミスの本を開けるようにした。いずれも従来は「EPUB ではない」
「リソースが見つからない」で開けなかったもので、正しい本の読み込み経路は
変わらない。- フォルダごと圧縮して全体が 1 段深くなっている本(OS の既定操作で起きる)
- 旧 Windows ツールが
\を区切りに使った本 - パッケージ文書の参照と実ファイルで大文字小文字が食い違う本(候補が
一つに定まる場合のみ) - 末尾にゴミが付いた ZIP(Python や Info-ZIP は開ける形)
- ZIP の Unicode Path 拡張フィールドに正しい UTF-8 名を持つ本(推測での
文字コード判定より優先する)
- 章を切り替えた直後に、差し替え前の章から遅れて届いた位置通知を新しい章の
位置として受け取ることがあった。読み込み中は既に弾いていたが、読み込みが
済んだ後に届く分は素通りしていた。表示中の文書を示す印を通知に付けて
判別するようにした。 - 取り消された前の読み込みの通知が次のページ数計測へ配達され、偽の失敗として
数えられることがあった(2 回続くと計測が 5 分止まる)。待っている読み込みと
同一かを照合し、取り消し由来のエラーは失敗として扱わないようにした。 - 日本語縦書きの縦中横(
-epub-text-combine-horizontal: all)が効かなかった。
WebKit はこの-epub-接頭辞に別名を持たないため、電書協テンプレート系の本で
数字が縦のまま並んでいた。スタイルシートの配信時に標準プロパティの宣言を
補うようにした。同じく無視されていた-epub-line-break/-epub-text-align-last
/-epub-text-emphasis-position/-epub-text-underline-position/
-epub-ruby-positionも補う(いずれも macOS 26 の WebKit で無視されることを
実測して選んだ。解釈されるものには手を触れない)。 rendition:layoutより前の時代の固定レイアウト表明を読むようにした。
2011〜2013 年の iBooks / Kobo 向け漫画や、Amazon 形式から作られた中間 EPUB は
リフロー扱いになり、固定レイアウトとして開けなかった。対象は
<meta name="fixed-layout" content="true">、book-type: comic、
original-resolution: 幅x高さ、および META-INF の display-options.xml の
fixed-layout指定。明示のrendition:layoutがある本には影響しない。- 同じ本の中の iframe が空枠になっていた(CSP の
frame-srcがnoneだった)。
EPUB 3.3 が認めるコンテナ内の iframe を表示できるようにした。外部への
埋め込みは従来どおり遮断される。 - 1 つの SMIL が複数の本文ファイルを束ねる本で、音声同期の再生がおかしかった。
別の本文ファイルを指す区間でハイライトが空振りし、末尾では同じ SMIL を
先頭から鳴らし直していた。区間が指す本文ファイルへ移ってからハイライトし、
連続再生では同じ SMIL を指す項目を飛ばすようにした。あわせて、再生中に
読者が別の章へ移った場合は、章の終わりで元の流れへ引き戻さず停止する。 media:active-classを宣言せず、対応する CSS も持たない本では、音声同期の
ハイライトがまったく見えなかった。既定クラスに最小限の下地を与えた
(本が同じクラスを飾っている場合はそちらが優先される)。
Washi 1.16.4
修正
- 検索ヒットへの移動(
go(to:textRange:))で作る本文位置の対応表が、UTF-16
1 単位につきオブジェクト 1 個を割り当てていた。長い章(27 万単位)で
WebContent の常駐が 78MB 増え、移動後も解放されなかった。対応表を
Text ノード表と型付き配列(Int32Array/Uint16Array)で表し、構築中も
単位ごとのオブジェクトを作らないようにして、同じ章で 17MB(4.6 分の 1)に
下げた。抽出本文・選択範囲・矩形の対応は変えていない。
Washi 1.16.3
追加
EPUBReaderViewDelegateにreaderView(_:shouldConsumeKey:)を追加した
(既定true)。handlesKeyboardNavigationがfalseのとき、
didReceiveKeyへ配送したキーをここで止めるかを問い合わせる。falseを
返すと元のNSEventがそのまま responder チェーンへ上がるため、ホストが
扱わないキー(-・Esc・+など)がウインドウやメニューへ届く(Washi #3
のコメントで報告)。既定値は 1.16.2 までと同じ挙動で、delegate 未設定の
場合も従来どおりキーはここで止まる。
Washi 1.16.2
Washi 1.16.2 is a bug-fix release covering keyboard delivery, reader state transitions, mixed-layout publications, media overlays, and parsing boundaries.
Fixes
- Deliver native and JavaScript key callbacks once per event, including WebKit's unhandled-key redispatch. Restrict native interception to the focused reader or its WebView so other text fields keep their input.
- Preserve a new book or navigation request issued from a delegate callback. Cancel obsolete page-turn work and ignore callbacks from detached WebViews.
- Restore normal zoom when moving from a fixed-layout page to reflowable content.
- Resume silent media-overlay segments at the paused segment, stop preceding audio on entering a silent segment, and suppress obsolete completion callbacks after a book replacement or playback restart.
- Reject invalid persisted pagination counts and safely convert very large accepted counts to page positions.
- Prevent an integer overflow when a caller requests an extremely large search snippet.
- Preserve literal percent sequences in canonical container base paths when resolving resources and same-document fragments.
Validation
27 regression tests have been added since 1.16.1. The complete 362-test suite passes with Swift 6.4 and Swift 6.3.3 on Apple Silicon (two existing optional corpus tests skipped). GitHub CI also passed on macOS 15. The keyboard fixes were additionally checked with an AppKit event-loop probe.
Full changelog: 1.16.1...1.16.2
Washi 1.16.1
Fixes a stack overflow in EPUBReaderView.keyDown(with:) when keyboard navigation is enabled and WebKit returns an unhandled key, such as -, Esc, or +, to the reader view. Reentrant key events now continue up the responder chain instead of being forwarded back to WebKit.
The default handlesKeyboardNavigation = true configuration is supported again. Container-focused keyboard navigation and native delegate interception continue to work; no public API changes are required.
Validation:
- Added three regression tests for reentrant routing, guard reset, settings changes during forwarding, and routing before a publication is loaded.
- Swift 6.4 and 6.3.3: 335 tests each, zero failures; two existing optional corpus tests skipped.
- A standalone AppKit event-loop probe reproduced the crash with 1.16.0 and passed all 17 checks with the fix, covering unhandled keys, PageDown navigation, both focus targets, and native delegate interception.
Thanks to the StackNest developer for the detailed report in #3.
Full changelog: 1.16.0...1.16.1
Washi 1.16.0
追加
- 内部リンク・目次・検索/ブックマーク位置へのジャンプを最大 50 件保持する
EPUBReaderView.canGoBack/goBack()と、利用可否の変更通知を追加した。
通常のページ送り・位置復元・メディアオーバーレイ移動は履歴へ含めない
(cooViewer-oxr.31)。 - 内部リンクの EPUB セマンティクス・解決先・アンカー矩形を表す
EPUBInternalLinkと遷移前 delegate、同一文書/別文書の脚注本文を取り出す
noteContent(for:)を追加した。hidesFootnoteAsidesで脚注 aside を本文の
ページ割りから除外できる(cooViewer-oxr.32)。 - delegate で抑止した内部リンクをホスト UI から明示的にたどり、遷移履歴へ
記録するEPUBReaderView.follow(_:)を追加した(cooViewer-oxr.32)。 EPUBReaderSettingsに行間倍率・横組み字間・段落間隔・
著者フォント上書き・ルビ非表示を型付きで指定するlineHeightScale/
letterSpacingEm/
paragraphSpacingEm/fontFamilyOverride/hidesRubyを追加した。すべて
ページ割りと census キーへ反映し、CJK 縦組みでは字間指定を適用しない
(cooViewer-oxr.33)。- 正規化 UTF-16 範囲と reader-view 座標の矩形を返す
EPUBTextSelection、
currentSelection、clearSelection()、rects(forTextRange:inSpineIndex:)と
選択変更 delegate を追加した(cooViewer-oxr.34)。 EPUBContextMenuPolicyと表示直前 delegate、EPUBClickEvent.locationInView、
EPUBReaderView.contentFrameを追加した。EPUBRGBAColorによる型付き背景色/
文字色は従来の CSS 文字列より優先し、CSS 色の解析を
rgb()/hsl()/名前付き色へ拡張した。従来のsuppressesContextMenuも
引き続き利用できる(cooViewer-oxr.35)。- 宣言 PPD、
primary-writing-mode、冒頭 XHTML/CSS の縦書き、RTL 言語の
優先順で.byDefaultを解決するeffectiveReadingDirectionと判定元を追加し、
表示層の綴じ方向をこの実効値へ統一した(cooViewer-oxr.36)。 - 確定したページ変更の VoiceOver 通知、reader の accessibility label/value、
コントラスト増加/色以外での区別への追従を追加した。Accessibility metadata
では<link rel="dcterms:conformsTo">とa11y:certifierCredentialも収集し、
EPUBAccessibility.certifierCredentialsとして公開する(cooViewer-oxr.37)。 - EPUB の page-list を読む
printPageLabels/go(toPrintPage:)/
currentPrintPageと変更 delegate を追加した。本文の pagebreak marker を追跡し、
showsPrintPageInFurnitureで印刷ページ名をノンブルへ併記できる
(cooViewer-oxr.38)。 - census と画面サムネイルの不可視 WebKit を、最後の計測/描画完了から
20 秒後に自動解放し、次の要求で遅延再構築するようにした。進行中または
FIFO 待機中の要求がある間は解放しない(cooViewer-oxr.68)。 - 著者スクリプトを許可した場合だけ、PAGE world の document-start script で
WebRTC コンストラクタを復元不能なundefinedにし、CSP だけでは
遮断できない STUN / UDP 経路を閉じる防御を追加した(cooViewer-oxr.87)。
修正
- コンテキストメニューポリシーによるフィルタ後に項目が残らない場合や
.suppressedの場合も表示直前 delegate を必ず 1 回呼び出し、delegate が返した
非空メニューを表示できるよう修正した。delegate がnilまたは空メニューを
返した場合は表示を抑止する(cooViewer-oxr.93)。 dc:title/dc:creator/dc:contributorのdirとxml:langを、
metadata・package 要素からの継承込みで保持するよう修正し、
EPUBTextDirectionと既定値付きの追加フィールドを公開した(cooViewer-oxr.52)。- ダークテーマで小さなインライン外字画像だけを判定して反転できる
invertsGlyphImagesInDarkを追加し、無指定 fill のインライン SVG と黒 stroke も
currentColorで描画して、黒い字形が背景へ消える問題を修正した。あわせて
snapshot テストの画素取得ではNSCalibratedRGBColorSpaceの未変換成分値を使い、
sRGB への再変換による値の歪みを除いた(cooViewer-oxr.78)。 - 1.16.0 の公開 API 追加は、delegate の既定実装と初期化引数/設定の既定値に
より既存利用側とのソース互換性を維持する(cooViewer-oxr.31、
cooViewer-oxr.32、cooViewer-oxr.33、cooViewer-oxr.34、cooViewer-oxr.35、
cooViewer-oxr.36、cooViewer-oxr.37、cooViewer-oxr.38、cooViewer-oxr.52、
cooViewer-oxr.78)。