FontForge の CLWFK 対応の拡張

CLWFK とは

CLWFK (Common Lisp port of Wadalab Font Kit) は、和田研フォントキットを Common Lisp に移植したもので、 さざなみフォントの作成に使用されています。

和田研フォントキットの使い方については、チュートリアルの付録をごらんください。

このページでは、オープンソースの多機能なフォントエディタである FontForge を改造してスケルトン編集機能をもたせたカスタム版のプログラム (ff+clwfk と呼びます) について説明しています。

FontForge への追加機能

FontForge に、CLWFK のスケルトン定義を編集するための機能を実装中です。 とりあえずスケルトンファイルの読み書きと編集ができるところまでは実装しました。作りかけの機能も含め、以下のような機能を実装しています。

これから実装する予定の機能は以下の通りです。

ダウンロード

パッチ・サンプル

パッチファイルは、sourceforge.jp の efont プロジェクトに移しました。cvs か、CVSweb で取得してください。

サンプルファイル

コンパイル時の注意

スケルトン編集機能はストロークフォントの拡張ですので、configure の引数に --with-multilayer をつけてください。

FreeBSD 用のバイナリと port

FreeBSD-5.3 用の ports と packages を作りました。

バイナリ

ports

自分で再構築したい方はこちらをどうぞ。

  • FontForge+CLWFK の port : ports-fontforge+clwfk.tbz (2006/11/12 更新)
  • CLWFK の port: (CMUCL 版)ports-clwfk.tbz

    Debian 用のバイナリ

    岩井英隆さんが、deb を作ってくださいました。パッケージを取得するための apt-line は以下のとおりです。

     deb http://bozu.sytes.net/~tyuyu/fontforge ./
     deb-src http://bozu.sytes.net/~tyuyu/fontforge ./
    

    人材募集中

    FontForge をハックしたい!という人および、このツールを使ってさざなみフォントを改造したい!という人を募集中です。

    開発者同士の情報交換は Efont-devel メーリングリストで行っています。参加をお待ちしております。

    上に挙げた機能追加の他にも、バグや手抜きの実装を直すとか、使い勝手の向上などたくさんの作業が残っています。最終的にはオリジナルの配布物に取り込んでもらえるようにしたいと思っています。この文書の英語化や、オリジナルのソースとの整合性のある書き方にするなど、やるべき事柄がたくさんあります。

    チュートリアル

    ff+clwfkによる

    スケルトン定義の編集

    拡張子 .l のファイルを読み込むことができます。(文字コードは UTF-8 に変換する必要があります)。スケルトンが、太さのある折れ線で表示されているのがお分かりいただけると思います。

    現在、上の列の「日」から「あめかんむり」までの部品が選択されています。ここで Ctrl + Shift + 4 を押すと、スケルトン

    新規に作成したフォントの場合、Font Info の [General] で 'Stroked Font' を設定します。(.l のファイルを読み込んだ場合、自動的にそうなります)

    Element->FontInfo->[General] のStroke Width に、最も太いストロークの線幅を入力しておいてください。大雑把に言って、gothicwidth の 5 倍が適切な値でしょう (CLWFK の座標系は400×400で、1000×1000 の PS フォントの座標系に変換すると 2.5 倍、中心線から測った幅なので、線幅はその 2 倍になる)。

    曲線は使えません (使っても、書き出しの際には頂点の情報しか書き出されません) ので、Quadratic Spline にチェックを入れられることをお勧めします。

    編集画面

    青く表示されている点は「ロックされた」点を意味します。 通常は閉じていないパスの端にある点を他の開いた端点と重ねると、自動的に 2 本のパスが一体化しますが、どちらかの点がロックされていると、その動作を抑制します。 点を選択しておいてから、[Point]->[Lock/UnLock Line End] を選択すると、その点のロックを外す (またはかける) ことができます。

    この「日」の字は、3 本の 'yoko' エレメントと、2 本の 'tate' エレメントから構成されています。各エレメントの始点 (書き始めの側) の右上に、エレメントの種類が表示されています (左上の点では、文字表示 'yoko' と 'tate' が重なってしまっています)。

    [View]->[Fill] を選択すると、幅のある線として描画したときの図形が灰色で表示されます。線の太さのバランスを調整するときなどには少しは役立つでしょう。

    点の追加

    パレットで点ツール (Corner Point を推奨します) を選択して、charview 上でクリックすると最初の点が置かれます。この状態 (1 本のパス上の点を選択している状態) で、[Point]→[Stroke Info] を選択すると、ストロークの種類と太さを設定できます (パレット上の点ツールをダブルクリックしても、同じメニューが立ち上がります)。

    Point Info にも [CLWFK] タブを追加しました。これもほぼ同じ動作をします。charview 上でダブルクリックするだけでよくなりました。

    上の例では "hidari" を選択しました。2 個目の点を置く位置をクリックすると線が引かれ、選択点が移動します。3 個目の場所をクリックすると、線が追加されると同時に点が 1 個も選択されていない状態になります。さらに画面上をクリックすると、次の左払いの開始点が配置されます。これは、各ストロークのもつ点の個数 (ten, tate, yoko では 2 個、hidari, migi, tatehane などは 3 個、magaritate, kokoro などは 4 個) に合わせて自動的に行われます。これにより、複数のストロークを連続して配置するのが (少し) 楽になります。

    リンク点の設定

    リンクというのは、和田研フォントキットの概念で、独立した線の端点ではない点のことを表します。例えば、明朝体では 横画 (yoko) の終りには三角形の鱗がつきますが、端が縦画に隠れるときはそのような処理は必要ありません。リンク点同士がストロークの端で結合するとき (「日」の左上と右上) は、特別な終端処理が行われます。

    緑色の円で囲まれて表示されているのがリンクです。点のリンク設定/解除は、点を選択しておいてから [Point]->[Set/Unset Joint] で行えます。

    プリミティブのパラメータ設定

    プリミティブの名前と、組み合わせたときのふるまいを決定する各種のパラメータをGlyph Info ダイアログの [CLWFK] タブで設定することができます。

    CLWFK の呼び出し

    CLWFK と Lisp インタプリタ (現在のところ CMU Common Lisp のみに対応) がインストールされていると、編集中のスケルトンがどのように肉付けされ、実際のアウトラインとなるかを画面上で確認することができます。

    準備

    環境変数 LISP を CMUCL の実行ファイル名 (デフォルトは /usr/local/bin/lisp) に、環境変数 CLWFKDIR を、和田研フォントキットの置かれているパスに設定します。CLWFKDIR が指定されていない時は ./wadalab-fontkit/ か ./wadalabkit/ のディレクトリを探し、どちらかがあればそれを使用します。

    ${CLWFKDIR}/renderer/ に、レンダリングエンジンのソースをコピーし、ディレクトリ内で make を実行します。

    実行

    [View]->[Show Mincho Outline] で明朝体のアウトラインが、[Show Gothic Outline] でゴシック体のアウトラインが背景に表示されます。または、キーボード上で Ctrl-$, Ctrl-% を押しても同じです。これらのコマンドを実行すると、それ以前に背景に配置したデータは消去されますのでご注意ください。

    太さを調整するには、まずストロークを選択して、次に Ctrl+Shift キーを押しながら矢印キーを押してください。Ctrl+Shift+↑ (または←) でストロークが1単位太くなり、Ctrl+Shift+↓ でストロークが1単位細くなります。Fill(塗りつぶし)表示をしていると、太さの大まかな変化が掴めます。CLWFK の再呼び出しは自動的には行われません。

    [View]->['normkanji' enabled] を呼び出してこの項目にチェックを入れておくと、漢字の大きさの正規化を行った結果に対して肉付けを行います。そのため、スケルトンの中心線の位置とアウトラインの位置が一致しないのが普通です。

    書き出し

    [Save As...] で、フォーマットを選択してフォントを保存します。フォーマットとして、下から 2 番目の[CLWFK Skeleton]を選択してください。

    1文字だけ書き出すには、charview から、[File]->[Export] で、フォーマット [Skeleton] を選択してください (出力ファイル名に使用される文字名のデフォルトは、スケルトン名を UTF-7 エンコードしたものです)。

    1000×1000の座標系から400×400への変換が自動的に行われます (あまり細かい調節をしても、整数への丸めで意図通りの出力が得られない可能性があります。)

    追加機能一覧

    新しい概念

    SFD ファイルフォーマットの拡張

    点のフラグの拡張:

    フラグ 0x100
    ロックされているか否か
    フラグ 0x200
    リンク点か否か

    線のフラグの拡張: 後ろに #xxx (xxx は ten, yoko などのストロークの種類) を付加。

    アウトライングリフビュー

    ファイル(F)メニュー

    付録: CLWFK の使い方

    http://wiki.fdiary.net/font/?CLWFKに、もっと詳しい情報があります。

    データフォーマット

    和田研フォントキットでは、漢字は 1 個以上のエレメント (これ以上分解できない部品) の組合せからなり、エレメントはストローク (単純な線) の配置情報からなります。

    処理の流れ

    最も抽象的なレベルの文字の定義は、(setq 仆 (yoko にんべん 卜)) のような形で表されています。CLWFK では、wadalab-fontkit/jointdata/ の下の alljoint.lに、JIS第一・第二水準の漢字の部品分解データがすべて定義されています。

    これを、実際の座標情報を含むデータに展開して、プリミティブの情報と同じ表現形式にしてやるまでが処理の前半です。