西洋の慣習に従って正当化されるアラビア語のコンテンツがいくつかあります。
それが古代の情報源で正当化されているので、私はそれを正当化しました:
ただし、アラビア語のテキストの位置揃えは、空白ではなく 筆記体の単語を伸ばす による方法です。
だから私がしたいのは、フォントソースに行き、それをSVGに変換して、個々のグリフを選択することです。 (つまり)ヘブライ語の場合は簡単ですが、今ではアラビア語に迷い始めています。
すべてのアラビア文字は 複数の形式 を持つことができます(つまり、孤立した、最初の、中間の、最後の、すべてのあるもの、いくつかのあるもの)。上記の画像からの初期のコーランがそれらを使用しなかったので、今のところ私は発音区別符号を無視しています。
私がアラビア語のフォントレンダリングで気付いたのは(そしてアラビア語についてはあまり知りません)、筆記体の文字がWordのさまざまな場所で使用されると形が大きく変化することです。多分それはすべて初期/中間/最終的なビジネスによって定義されます。よく分かりません。
アラビア語のフォントを見ると、個々のグリフが分離した形で表示されています。フォント内の最初/中間/最終形式でそれらをどのように表示しますか?フォントをSVGに正確に変換するとき
すべての場合、各文字は2〜4の形式をとることができ、私は発音区別符号を無視しています。そして、アルファベットに28文字(たとえば、すべての発音区別符号を削除するとさらに少ない)があるとすると、SVGで2が表示されます。 4 * 28グリフ、正しい?
次に、レイアウトのルールについて。グリフごとにSVGパスを描画する場合、グリフのエッジを接続するために特別に何かする必要があるので、連続した筆記体を形成しますか?文字のすべての組み合わせをテストする必要がありますか?それとも何らかの方法で構築されているので、私は各文字のバリアントを独自に処理します。そして、どういうわけか、ストロークの配置により、すべてが「接続」されますか?
そのため、フォントレンダリングエンジンがアラビア語のテキストをどのようにレンダリングするかについて簡単に説明します。このプロジェクトの方法をよりよく理解するのに役立つフードの内部で何が起こっていますか?文字間のシームレスな接続をどのようにしていますか?バリアントはどのように選択されますか(単純に、「途中にある場合は内側を使用し、それ以外の場合は最後に使用し、それ以外の場合は最初に使用し、それ以外の場合は最初に使用し、それ以外の場合は分離して使用する」タイプのことですか?
私はそれを考え出した。私は一日中私を取りましたが、それについてかなりまともな調整を得ました。
フォントをSVGに変換し、グリフをJavaScriptに手動でコピーして貼り付けました。それぞれを個別にIllustratorにインポートし、適切な位置に配置してエクスポートします(そして、Illustratorエクスポートは、何らかの方法で提供したものとはまったく異なるSVGパスを生成します)。 Illustratorのエクスポートを受け取り、 この救命SVGパスエディタに入れます ;各パスを絶対座標に変換します。グリフのSVGが水平方向に簡単に伸びるように見える場合は、Illustratorで伸ばし、再度エクスポートして、SVGパスエディターに貼り付け、その絶対座標を取得しました。ストレッチされたSVGパスとストレッチされていないSVGパスの座標を比較して、可動部分を見つけ、JavaScript SVGグリフを、スケールファクターによってパラメーター化された可変部分を持つテンプレート文字列に変換しました。
これにより、スケーラブルなグリフを作成できるようになりました。次に、次のWordが行を超えるまで文字をサイズ変更せずに、その行内のすべての伸縮可能な文字をランダムな順序で引き伸ばしてスペースを埋めました。ここでは、伸ばされた各グリフのデザインと配置を最適化するためにトンを実行できますが、おそらくそれ自体、研究論文自体を理解するのに長い時間がかかります。
さまざまなキャラクターに少し調整を加えて、ぎこちないギャップなしで適切にマージされるようにしましたが、全体的には、グリフ自体をあまりいじくり回す必要はありませんでした。それらはまだ完璧に見えませんが、最初のドラフトには十分です。
時間があれば、自分でフォントをデザインし、すべての字形がうまく調和するようにします。
私が学んだことは、アラビア語のスクリプトでは、ブラウザーで、SVGのような静的サイズのベクトルパス(他のフォント、英語、ヘブライ語、中国語など)を扱っているということです。 SVGは、グリフ上で「初期」、「中間」、「最終」などのマークが付けられていたため、フォントエンジンがこの特定の言語のこれらの特定の機能を探しています。私はこれを探す必要はありませんでしたが、それがどのように機能するのかまだわかりません。ただし、基本的には、分離/初期/中間/最終であるかどうかを確認し、そのセットからグリフを選択するか、分離にフォールバックします。グリフは水滴のように魔法のように接着するのではなく、フォントファイル(またはSVG)内で適切に位置合わせされているため、適切な文字間隔が与えられると、「マージ」しているように見えます。それは静的なグリフであり、派手なものではありません。
JavaScriptのサンプルグリフは次のようになります。
const glyph = (p = 0) => `
M ${915 + p} 81
C ${915 + p} 44 ${890 + p} 0 ${828 + p} 0
H 0
C 20 20 68 72 85 100
C 144 94 ${419 + p} 85 ${738 + p} 85
C ${749 + p} 85 ${767 + p} 86 ${767 + p} 95
S ${713 + p} 112 ${682 + p} 113
C ${709 + p} 139 ${750 + p} 199 ${773 + p} 236
C ${847 + p} 205 ${915 + p} 135 ${915 + p} 81
Z
`
アラビア語の文字は、見たとおりに別のグリフを使用でき(他の文字ときれいに接続できるようにするため)、グリフの形状は固定されていません。特定のグリフは、位置合わせの目的で伸縮できます。これは、「グリフを描く」と言っても意味がありません。正確な形をしていないからです。
あなたが取ることができる最も有望なアプローチは、オペレーティングシステムが提供する組版を何らかの方法で受け取り、それを何らかの目的で使用することです。