KLRichTextEngine
v0.1.0リッチテキストを編集しても、文書の構造を保ちます。
KLRichTextEngineは、リッチテキスト、チェックリストの意味、実行時メタデータ、未対応の値を安全に扱うための文書コーデックと編集ルーティングを提供します。
- 構造化されたリッチテキスト文書のエンコード
- 編集可能な属性付き文字列への変換
- チェックリストの意味と実行時メタデータ
オープンソース · Swift · 実製品で検証済み
Nuancery Labsは、実際のプロダクトづくりで磨いてきた仕組みを、役割の明確なSwiftパッケージとして公開しています。
Swiftコンポーネント
どのコンポーネントも役割を一つに絞り、挙動をテストで固め、APIを文書化しています。単体で動くデモアプリも2本ずつ用意しています。
リッチテキストを編集しても、文書の構造を保ちます。
KLRichTextEngineは、リッチテキスト、チェックリストの意味、実行時メタデータ、未対応の値を安全に扱うための文書コーデックと編集ルーティングを提供します。
ギャラリーの状態を保ちながらメディアを段階的に読み込みます。
KLLazyGalleryは、画像と動画の遅延読み込み、キャンセル、終了、プレイヤーの解放、UIKitのフォトブラウザ連携を調整します。
画像のジオメトリとモデルの境界を明確にしたOCRパイプラインです。
KLOCRPipelineは、画像の前処理、Visionによる文字認識、読み順の復元、任意のPaddleOCR Core ML推論を段階的に実行します。
アクセシビリティと視差効果を減らす設定に対応したページめくりを追加します。
KLPageCurlはSwiftUI用のページめくりレイヤーです。ページめくりの表示、アクセシビリティ、視差効果を減らす設定に応じたフォールバックを一つの境界で扱います。
ネイティブなガラス表現とマテリアルのフォールバックをまたいで、ナビゲーション向けのセグメントコントロールを使えます。
KLGlassSegmentsはSwiftUIとUIKit向けのセグメントコントロールです。ジェネリックな選択ID、再タップ、ドラッグの取り消し、アクセシビリティ識別子、視差効果を減らす設定を一貫して扱い、利用できる環境ではiOSのネイティブなガラス表現を使います。
画像から得た色を、画面に置く前に読みやすい表面色へ整えます。
KLAdaptiveSurfaceは同期的な色のポリシーです。元の色相をできるだけ残し、暗すぎる色や鮮やかすぎる色だけを読みやすい範囲へ整え、結果に合う前景色を返します。
ホストコンテナで実際に表示される画像領域からパレットを生成します。
KLAdaptivePaletteは `CGImage`、コンテナサイズ、表示モード、クロップアンカーを使って、実際に表示される画像領域を解析します。ソースカラー、候補色、前景色、決定的なキャッシュキーを返します。
カレンダーグリッドの複数日にまたがる終日イベントバーへ決定的にレーンを割り当てます。
KLCalendarLanesはUIに依存しないカレンダーグリッド用のレイアウトエンジンです。渡された `Calendar` で日付を正規化し、行の境界でバーを分割して、レーン、オーバーフロー、日ごとの占有状況を返します。
共有された文章から、必要な公開リンクだけを安全に取り出します。
KLShareLinkは、共有シートから渡されるURLや文章を解析する、外部ライブラリ不要のSwiftパッケージです。明示的なURL、文章中の複数リンク、サービスごとのドメイン、旧形式の識別文字列を順番に確認し、安全なHTTP(S) URLとサービス名を返します。
画像から正方形のサムネイルを生成します。被写体を切り抜けるときはApple Visionを使い、抽出できない場合は元画像を使った表示へ自動で切り替えます。
KLSubjectVisionは、被写体の切り抜きと正方形への配置をまとめたSwiftパッケージです。`.subject` は切り抜いた被写体全体を透明な正方形の中に収め、抽出できなかった場合は元画像を正方形いっぱいに配置します。`.room` は、場所や室内写真など、画面全体を残したい画像向けです。
同じデータを、Swift Chartsの平面表示と、操作できる立体的なCanvas表示で切り替えられます。表示を変えても周囲のレイアウトは動きません。
KLChartsは、`.flat` と `.dimensional` の2種類の棒グラフを提供します。選択状態、数値の書式、色、元データ、画面遷移はアプリ側で管理し、パッケージは描画、モード切り替え、タップ判定、項目が多い場合の横スクロールを担当します。
OCRの認識結果が順不同でも、座標情報を使って人が読む順番に並べ直します。
KLReadingOrderは、文字列、信頼度、正規化した矩形、ページ番号、元の並び順を受け取り、読み順にまとめた行を返すSwiftパッケージです。OCR自体や文章の意味解析は行わず、認識結果を読みやすい順番へ並べる処理だけを担当します。
設計方針
想像上の汎用性ではなく、実際のプロダクトで必要になった挙動と回帰テストから始めます。
保存、ローカライズ、画面遷移、ドメイン固有の意味は、そのパッケージの仕事でない限りアプリ側に残します。
並び順、失敗時の動き、座標計算、フォールバック、並行処理まで、利用側が判断できるように文書化します。
wondays: はNuanceryのアプリケーションで、これらのパッケージを利用しています。