テキスト (Text)

Kanzi にはこれらのテキストノードがあります。

  • アプリケーションにテキストを表示するには、Text Block ノードを使用します。

    Text Block ノードを使用する を参照してください。

    ../../_images/text-blcok-2d-icon.png
  • アプリケーションに一行テキスト入力を追加するには、Text Box ノードを使用します。

    Text Box ノードを使用する を参照してください。

    ../../_images/text-box-2d-icon.png

フォントタイプ

Kanzi でのデフォルトのフォントファミリーは Fira Sans Regular です。フォントファイルは <KanziInstallation>/Studio/Asset Library/Fonts に保存されています。独自のフォントを使用したい場合は、それを Kanzi Studio プロジェクトにインポートしてください。

フォントのインポート を参照してください。

Kanzi アプリケーションでこれらのフォントタイプを使用できます。

使用するフォントが、アプリケーション内のテキストに必要なグリフを備えていることを確認してください。FreeType フォントエンジンを使用する場合は、Unicode の書記体系ごとにフォールバック用のフォントファミリーを設定できます。フォントフォールバックの使用 を参照してください。

フォントサイズ (Font Size)

Kanzi はフォントのサイズをピクセル単位で設定します。Font Size プロパティを設定すると、Kanzi はその値をFreetypeライブラリに渡し、Kanzi はフォントをレンダリングするために使用します。FT_Set_Char_Size 関数を使用し、デフォルトで72のdpi値を使用します。

例えば、どちらも同じサイズの文字Hを表示します。

  • Text Block または Text Box ノードにこれらのプロパティが設定されています:

    • Text を H に

    • Font Family を Arial に

    • Font Size から 36 まで

  • HTML マークアップ

    <p style="font-family:arial; font-size:36px;">H</p>
    

DPIスケーリングを制御したり、ピクセル以外の単位でフォントサイズを設定したい場合は、その機能を Kanzi アプリケーションに実装する必要があります。例えば、プロジェクト内の画像やレイアウトがDPI設定に基づいて使用するコンテンツを自動的に選択したい場合は、その機能を Kanzi アプリケーションに実装してください。

プレビューのフォントエンジンを設定する

Kanzi は 2 つのフォントレンダリングバックエンドをサポートしています。

  • FreeType は、Kanzi に含まれているオープンソースベースのフォントエンジンです。ほとんどの一般的なユースケースに適しており、幅広いフォントフォーマットをサポートしています。FreeType ラスタライザー、HarfBuzz シェイパー、ICU バイディレクショナルライブラリ、および改行処理用の libunibreak を使用します。これがデフォルトのフォントエンジンです。

  • iType は、Monotype からの別途ライセンスが必要な商用ソフトウェアベースのフォントエンジンです。高度なフォントレンダリング機能と最適化を提供します。ラスタライズには Monotype iType ラスタライザーを、シェーピングには WorldType® Shaper™ を使用します。iType フォントエンジンのインストール を参照してください。

Preview のフォントエンジンを設定するには、

  1. メインメニューで Project > Properties を選択します。

    ../../_images/project-properties.png
  2. Properties の Profile で、Font Engine プロパティを以下に設定します。

    • FreeType: FreeType フォントエンジンを使用します。

    • iType: iType フォントエンジンを使用します。

    • None: フォントエンジンをロードしません。フォントエンジンをロードしない場合、Kanzi はアプリケーション内のテキストをレンダリングしません。

    ../../_images/font-engine.png

アプリケーションの起動時にどのフォントエンジンをロードするかを設定する方法については、フォントエンジン を参照してください。

注釈

iType フォントエンジンと FreeType フォントエンジンは、異なるレンダリングおよびシェーピングのアルゴリズムを使用します。そのため、テキストのレンダリングとレイアウトに多少の違いが生じることが想定されます。場合によっては、これらのフォントエンジンがフォントファイルの異なる部分を解釈することもあります。

一方の Font Engine からもう一方に切り替える場合、これらの違いを最小限に抑えるか解消するために、フォントファイル自体の更新または調整が必要になることがあります。

フォントヒンティングの設定

フォントヒンティングは、フォントのアウトラインを画面のピクセルにマッピングするためのラスタライズ指示を提供します。フォントヒンティングの目的は、フォントのデザイン美を維持しつつ、異なるサイズでのフォントの可読性を最適化することです。

Kanzi のテキストノードは、デフォルトでフォントに含まれるフォントヒンティングデータを使用します。

例えば、フォントヒンティングは、文字の高さと幅、行の幅、エッジのコントラスト、文字間のスペースに影響を与えることがあります。

Text Block または Text Box ノードのフォントヒンティングを設定するには、Node Tree でそのノードを選択し、Properties で Font Hinting Preference プロパティを追加し、次のように設定します:

  • No hinting をフォントヒンティングなしでテキストをレンダリングします。

  • Native hinting はフォントに含まれるヒンティングデータを使用してテキストをレンダリングします。フォントがヒンティングデータを含まない場合、Kanzi はフォントエンジンラスタライザーのヒンターを使用します。これはデフォルトの値です。

  • Auto hinting はフォントエンジンラスタライザーのヒンターを使用してテキストをレンダリングします。プレビューのフォントエンジンを設定する を参照してください。

../../_images/font-hinting-preference.png

iTypeフォントエンジンを使用したタイ語テキストのワードラッピングのカスタマイズ

Kanzi iTypeフォントエンジンがタイ語テキストで単語を折り返す方法をカスタマイズするには、iTypeフォントエンジンに組み込まれているものの代わりに使用したいタイ語辞書を設定することができます。

WorldType® SDKには、次のものが含まれています。

  • タイ語辞書

  • Pythonユーティリティは、アプリケーションで使用できるタイ語辞書を作成します。

これらのリソースは、wtle/product/tools/language_dictionaries/thai ディレクトリ内の WorldType® SDK にあります。

タイ語テキストで単語を自動的に折り返すには:

  1. iTypeフォントエンジン用のタイ語辞書を作成するには、GenerateThaiDictionary.py に渡します。

    • プレーンテキスト形式のタイ語辞書

    • 生成された辞書を保存したいファイル

    py -2 GenerateThaiDictionary.py thai-dictionary.txt thai-dictionary.wtd
    

    GenerateThaiDictionary.py は、Kanzi アプリケーションのアプリケーション構成で設定する wtd ファイルを作成します。

    Reading lines from file "thai-dictionary.txt"... done.
    Extracting, filtering, and normalizing words... done.
    Adding words to trie... done.
       number of words: 8
       number of characters: 31
       longest word length: 7
       number of trie nodes: 32
       number of trie edges: 31
    Compressing trie into a DAWG (Directed Acyclic Word Graph)... done.
       number of edges in root node: 9
       number of DAWG nodes: 24
       number of DAWG edges: 30
       edges / characters = 96.8 %
       dawgEdges / trieEdges = 96.0 %
       dawgNodes / trieNodes = 75.0 %
       DAWG array elements: 31
    Writing DAWG to file "thai-dictionary.wtd"... done.
       file size: 0 k
    
  2. あなたが作成したタイ語辞書をアプリケーションで使用するように設定するには、テキストエディタで <ProjectName>/Application/bin/application.cfg ファイル内のiTypeフォントエンジン辞書を設定します。

    # Set additional backend dictionaries.
    ITypeDictionaryUrls = file:///usr/share/itype/thai-dictionary.wtd
    

    フォントエンジン辞書 を参照してください。

  3. (オプション) Kanzi Studio Preview を設定して、iTypeフォントエンジンを使用する際にタイ語のテキストを正しくレンダリングするには、Kanzi Studio でプロジェクトを開き、メインメニューで Project > Properties を選択します。Properties で、Preview Working Directory プロパティを、前のステップで作成した application.cfg ファイルを含むディレクトリに設定します。

    ../../_images/project-properties.png ../../_images/properties-preview-working-directory.png

フォントフォールバックの使用

注釈

フォントフォールバックは、FreeType フォントエンジンを使用する場合に使用できます。

複数の書記体系、記号、または絵文字を含むテキストをレンダリングするには、フォントフォールバックを使用します。プライマリのフォントファミリーをテキストノードに割り当てたまま、他のフォントファミリーをその Fallback Font Family プロパティに追加します。Kanzi は、テキストの各部分に対してフォントファミリーを選択します。

下の画像は、フォントフォールバックなしのテキスト (左) とフォントフォールバックありのテキスト (右) を示しています。

../../_images/FreeType-font-fallback-comparison.png

フォントファミリーには、フォントフォールバックを設定するための以下のプロパティがあります。

  • Font UScriptCode は、フォントファミリーに関連付けられた Unicode の書記体系を識別します。

  • Fallback Font Family は、プライマリのフォントファミリーの文字カバー範囲を補うフォントファミリーを列挙します。

../../_images/FreeType-font-fallback-property.png

Font UScriptCode の設定

Font UScriptCode のデフォルト値は Common です。

フォントファミリーの Font UScriptCode を設定するには:

  1. 使用するフォントを Kanzi Studio プロジェクトにインポートします。

  2. Library > Font Families で、インポートしたフォントファミリーを選択します。

  3. Properties で、Font UScriptCode をフォントに対応する Unicode の書記体系に設定します。

    たとえば、日本語のひらがなをレンダリングするために使用するフォントの場合は、Font UScriptCode を Hiragana に設定します。

  4. フォントフォールバックに使用する他のフォントファミリーについても、これらの手順を繰り返します。

../../_images/FreeType-font-fallback-font-UScriptCode.png

Font UScriptCode の値

Font UScriptCode に列挙される Unicode の書記体系は、ICU (International Components for Unicode) の UScriptCode 値に対応しています。有効な Unicode スクリプトについては、対応する ISO 15924 スクリプトコードも表に記載しています。Extended は、このプロパティに列挙されていない書記体系を表す Kanzi のフォントファミリーのラベルであり、ICU のスクリプトではありません。

ディスプレイネーム (Display Name)

UScriptCode

ISO 15924

説明と主な言語

Invalid

USCRIPT_INVALID_CODE

無効または未指定の書記体系。

Common

USCRIPT_COMMON

Zyyy

句読点、数字、数学記号、通貨記号など、特定の書記体系に属さない共通文字。

Inherited

USCRIPT_INHERITED

Zinh

結合記号など、通常は直前の文字の書記体系プロパティを使用する継承文字。

Arabic

USCRIPT_ARABIC

Arab

アラビア語、ペルシャ語、ウルドゥー語、ウイグル語など、アラビア文字を使用する言語。

Bengali

USCRIPT_BENGALI

Beng

ベンガル語、アッサム語など、ベンガル文字を使用する言語。

Cyrillic

USCRIPT_CYRILLIC

Cyrl

ロシア語、ウクライナ語、ブルガリア語、セルビア語など、キリル文字を使用する言語。

Devanagari

USCRIPT_DEVANAGARI

Deva

ヒンディー語、サンスクリット語、ネパール語、マラーティー語など、デーヴァナーガリー文字を使用する言語。

Greek

USCRIPT_GREEK

Grek

ギリシャ語。

Han

USCRIPT_HAN

Hani

中国語、日本語、韓国語で使用される漢字。

Hangul

USCRIPT_HANGUL

Hang

韓国語のハングル。

Hebrew

USCRIPT_HEBREW

Hebr

ヘブライ語。

Hiragana

USCRIPT_HIRAGANA

Hira

日本語のひらがな。

Katakana

USCRIPT_KATAKANA

Kana

日本語のカタカナ。

Latin

USCRIPT_LATIN

Latn

英語、フランス語、ドイツ語、スペイン語、その他ほとんどの西ヨーロッパ言語、ベトナム語、トルコ語、およびラテン文字を使用するその他の言語。

Thai

USCRIPT_THAI

Thai

タイ語。

Extended

このプロパティに記載されていない書記体系用のフォールバックフォント。

フォールバックフォントファミリーの設定

Fallback Font Family を使用すると、プライマリフォントファミリーを補完する 1 つ以上のフォントファミリーを追加できます。

フォールバックフォントファミリーを追加するには、次の手順に従います。

  1. Library > Font Families で、プライマリフォントファミリーとして使用したいフォントファミリーを選択します。

  2. Properties で Fallback Font Family プロパティを見つけます。

  3. <Select to Add> ドロップダウンメニューで、追加したいフォントファミリーを選択します。

  4. 必要に応じてさらにフォントファミリーを追加します。

    各フォールバックフォントファミリーについて、Font UScriptCode をそのフォントに対応する Unicode の書記体系に設定します。

../../_images/FreeType-font-fallback-add_family.png

フォントファミリーの優先順位

Font UScriptCode に記載されている書記体系について、Kanzi は一致する設定を持つフォントファミリーを次の順序で選択します。

  1. プライマリフォントファミリーが最も高い優先順位を持ちます。

  2. Kanzi は Fallback Font Family 内のフォントファミリーをリストの順にチェックし、最初に一致したフォントファミリーを使用します。

たとえば、プライマリフォントファミリーが Font UScriptCode Latin を使用しており、Fallback Font Family に次のフォントファミリーをこの順序で追加したとします。

  1. Font UScriptCode が Han に設定されたフォントファミリー。

  2. Font UScriptCode が Hiragana に設定されたフォントファミリー。

  3. Font UScriptCode が Han に設定された別のフォントファミリー。

漢字の場合、Kanzi はフォールバックリスト内の最初の Han フォントファミリーを使用します。ひらがなの場合、Kanzi はひらがな用に設定されたフォントファミリーを使用します。

以下のセクションでは、Extended フォント、絵文字、および私用領域 (Private Use Area) の文字に対する個別の選択ルールについて説明します。

Extended フォントの使用

チベット文字、ミャンマー文字、クメール文字、古代ペルシア文字など、Font UScriptCode に記載されていない文字体系をサポートするフォントには Extended を使用します。Font UScriptCode を Extended に設定したフォントファミリーは、1 つ以上追加できます。

Kanzi は、Extended フォントファミリーを、記載されていない文字体系のテキストにのみ使用します。以下には使用しません。

  • Latin、Han、Arabic、Thai などの記載されている文字体系。Fallback Font Family でその文字体系用のフォントファミリーが設定されていない場合も同様です。

  • 絵文字。

  • 私用領域 (PUA) の文字。

同じ未記載の文字体系の各テキストランについて、Kanzi は Extended フォントファミリーをリストの順にチェックし、ラン内のすべての文字を含む最初のフォントファミリーを選択します。ラン全体に 1 つのフォントファミリーを使用することで、複雑な文字体系の音節が複数のフォントに分割されるのを防ぎます。

ランをカバーする Extended フォントファミリーがない場合、Kanzi はプライマリフォントを使用します。そのフォントにない文字は、欠落グリフのプレースホルダーとして表示されます。

Extended フォントファミリーを設定するには、以下の手順に従います。

  1. Library > Font Families で、必要な未記載の文字体系ごとにフォントファミリーを作成します。

    例えば、Tibetan および Old Persian という名前のフォントファミリーを作成します。

  2. 対応するフォントファイルをそれらのフォントファミリーに追加します。

  3. テキストブロック (Text Block) が使用するプライマリフォントファミリーを選択し、新しいフォントファミリーを Fallback Font Family に追加します。

  4. これらの各フォントファミリーの Font UScriptCode を Extended に設定します。

    ../../_images/FreeType-font-fallback-font-Extended.png
  5. 使用頻度の高い Extended フォントファミリーや、より特化した Extended フォントファミリーは、フォールバックリストの前の方に配置します。

注釈

Extended フォントファミリーは、記載されている文字体系のグリフカバレッジの不足を補いません。例えば、設定された Han フォントファミリーに漢字が欠けている場合、Kanzi はその文字を Extended フォントファミリーから検索しません。必要なグリフを含む漢字フォントを使用するか、そのフォントにグリフを追加してください。

絵文字フォントの使用

本文テキストと一緒に絵文字を表示するには、フォントフォールバックを使用します。テキストブロックはプライマリフォントファミリーに設定したまま、絵文字を含むフォントファミリーを Fallback Font Family に追加し、その Font UScriptCode を Common に設定します。

FreeType フォントエンジンでは、フォントファミリーにモノクロまたはカラーの絵文字フォントを含めることができます。絵文字をカラーでレンダリングする方法については、FreeType でカラー絵文字を表示 を参照してください。

Kanzi は絵文字を個別のテキストランとして扱います。絵文字は、隣接するラテン文字や漢字のテキストのフォントファミリーを継承しません。絵文字の場合、Kanzi は以下の順序で検索します。

  1. プライマリフォントファミリー内の、絵文字を含む別のフォントファイル (本文テキストのフォントファイルを除く)。

  2. Fallback Font Family 内の、Font UScriptCode が Common で、かつ絵文字を含むフォントファミリー。

    ../../_images/FreeType-font-fallback-font-emoji.png
  3. プライマリフォント。絵文字のグリフが含まれていない場合、欠落グリフのプレースホルダーや誤った文字が表示されることがあります。

絵文字フォントを使用するには、以下の手順に従います。

  1. Library > Font Families で、絵文字フォントファイルのみを含むフォントファミリーを作成します。

    例えば、Emoji と名付けます。

  2. テキストブロックが使用するプライマリフォントファミリーを選択します。

  3. 絵文字を含むフォントファミリーを Fallback Font Family に追加します。

  4. そのフォントファミリーの Font UScriptCode を Common に設定します。

Kanzi は以下に対して絵文字フォントの選択を使用します。

  • 😀 など、デフォルトで絵文字表示となる文字。

  • 👨‍💻 や 👨‍👩‍👧 などのゼロ幅接合子シーケンス。

  • 地域指示記号のペアで構成される国旗シーケンス。

  • 肌の色の修飾子。

  • 1️⃣ などのキーキャップシーケンス。

通常の数字、#、* には絵文字フォントの選択は使用されません。例えば、1111 は、絵文字フォントに数字のグリフが含まれている場合でも、本文テキストのフォントを引き続き使用します。

私用文字の使用

私用領域 (PUA) のコードポイントは、カスタムアイコンによく使用されます。Kanzi はこれらを不明な文字体系として扱い、これらの文字には Extended と絵文字のどちらのフォント選択も使用しません。

PUA 文字には、Kanzi はテキストブロックのプライマリフォント、またはそのフォントファミリーがそのノードに対して選択できる別のフォントファイルを使用します。

PUA アイコンを表示するには、以下の手順に従います。

  1. アイコンのグリフを、プライマリフォントファイル、またはテキストブロックに割り当てられたフォントファミリー内のフォントファイルに含めます。

  2. Text プロパティに、フォント内でそれらのグリフにマッピングされている PUA コードポイントを入力します。

注釈

PUA コードポイントは、フォント間で共通の意味を持ちません。使用するアイコンフォントで定義されているコードポイントのマッピングを使用してください。選択したフォントに PUA コードポイントのグリフがない場合、Kanzi は欠落グリフのプレースホルダーを表示します。

FreeType によるカラー絵文字の表示

../../_images/FreeType-color-emoji.png

絵文字を本来の色で表示するには、サポートされているカラー絵文字フォントを FreeType フォントエンジンで使用します。まず、絵文字フォントを使用する の説明に従ってフォントファミリー (Font Family) を設定します。

本文テキストでカラー絵文字を表示するには:

  1. 絵文字を含むフォントファミリー (Font Family) で、カラー絵文字フォントファイルを使用します。

  2. テキストブロック 2D (Text Block 2D) の Foreground を Color Brush に設定するか、デフォルト設定のままにします。

    Foreground が Color Brush の場合、その色は本文テキストにのみ影響します。ただし、Color Brush とノードのオパシティはカラーグリフにも影響します。

サポートされているカラー絵文字フォントの形式

Kanzi は、次のフォント形式の絵文字グリフをカラーでレンダリングします。

  • CBDT

  • SBIX

  • COLRv0

Kanzi は SVG または COLRv1 を使用するフォントのインポートをサポートしていますが、これらの形式をカラーでレンダリングすることはできません。これらのフォントでは、Kanzi はグレースケールのアウトラインを使用します。

カラー絵文字のレンダリングの制限事項

  • カラー絵文字は FreeType フォントエンジンでのみ使用できます。iType はカラーグリフをレンダリングしません。

  • テキストブロック 2D (Text Block 2D) またはテキストボックス 2D (Text Box 2D) の Foreground が Color Brush の場合、Kanzi はカラーグリフ本来の色を保持します。他のブラシ、テキストブロック 3D (Text Block 3D)、またはテキストボックス 3D (Text Box 3D) を使用すると、グリフに色合いが付くことがあります。

  • Color Workflow は、他のカラーコンテンツと同じようにカラーグリフに影響します。Legacy ワークフローでは色の彩度が高くなり、Linear ワークフローでは色が明るくなります。

  • カラーグリフは 2048 × 2048 ピクセル以上の RGBA グリフキャッシュを使用するため、グレースケールの本文テキストよりも多くのメモリを使用します。キャッシュがいっぱいになると、Kanzi は使用頻度の低いグリフを削除します。本文テキストは表示されているのに一部の絵文字が表示されない場合は、GlyphCacheWidth と GlyphCacheHeight の値を大きくしてください。

  • 一部の絵文字フォントでは、スペース文字に絵文字と同じ送り幅が設定されています。送り幅が 0.5 em を超える場合、Kanzi はスペースの幅を約 0.25 em に設定します。

  • ターゲットデバイスで CBDT ビットマップをデコードするには、FreeType で FT_CONFIG_OPTION_USE_PNG が有効になっていて、libpng とリンクされている必要があります。プレビュー (Preview) では絵文字がカラーで表示されるのにターゲットデバイスではグレースケールで表示される場合は、PNG をサポートするバージョンの FreeType を使用してフォントエンジンプラグインを再ビルドしてください。

関連項目

Text Block ノードを使用する

Text Box ノードを使用する

フォントのインポート

グリフキャッシュテクスチャのサイズ