# 変更点 (拡張とバグ修正)

最新のリリース以降の変更点は、ファイル stamp.c を“cvs log”コマンドで調べれば分かります。

- ???
  - TrueType 用の新メニューコマンド“`点(P)`→`制御点の中間に移動(B)`”を追加。
  - メニューを (マウスでなく) キーで操作している時にクラッシュが起こることを Werner が指摘しました。
- 2005年12月5日
  - 最初にビットマップビューを作成するとクラッシュしていました (リンカがどのようにメモリを構成しているかに依存します)。
  - SFD ファイルの読み込み時に、スプラインが含まれる文字があるかどうかをチェックし、それがある場合は onlybitmaps フラグをオンにしないようにしました。誰かが指摘したところによると、アウトラインビューをうっかり編集してしまった場合――それが何も有効な変更を行っていないとしても、フォントは永遠にアウトラインフォントであると印づけられてしまいます。これは完璧な修正ではありませんが、ハプニングがあった時に最悪の状態になるのを避けることができます。
- 2005年12月1日
  - UI 翻訳の取り扱いに、私が自作した nomen ルーチンでなく GNU gettext を用いるようにしました。
  - プラグインのサポートを追加。
  - TFM ファイルの解析に、kern テーブルの教会の外側から読み込みを行っていないことを確かめるためのチェックを追加しました。しかし、テーブルサイズは int 型 (32 ビット単位) で表されており、私はインデックスをバイトで表現していたので、それを超えることがありました。
  - TTF フォント内の参照で `情報を得る` を使用したとき、その参照が点のマッチングを行わなかった場合、不適切なエラーメッセージを出していました。
  - Type2 フォント内で endchar を seac として使用するための処理は裸の CFF フォントでのみ動作しており、CFF が SFNT ラッパの中に含まれる (すなわち OpenType フォント) ときにはうまく動作していませんでした。
  - 全ての PostScript 文字列 (著作権表示、ウェイト、ファミリー名など) を UTF-8 で保存することに決めました。これらは全て ASCII で書かなければなりません。しかし、著作権記号が紛れ込むことはよくあります。これは UTF-8 文字列として正しくないために、今までは無限ループを引き起こす原因となっていました。そういうわけで、これに関する多数の問題が解決しました。
  - TTF 命令デバッグ時の白黒 2 色のビットマップのラスタライズを内部ルーチンから FreeType に切替えました。
  - グリッド合わせ/デバッグの設定を、次回プログラム終了時のために (環境設定ファイルに) 保存するようにしました。
  - アンチエイリアスモードでデバッグされている TrueType フォントの灰色の濃淡を見るためのポップアップ情報ダイアログを追加。
  - Werner の示唆により、charview 内でアンチエイリアス表示されているラスタ表示のダイナミックレンジを変更し、背景にあるアウトラインが透けて見えるようにしました。
  - デバッガのラスタウィンドウの背景色をユーザが変更可能に。
  - 曲線上の点が、片方に制御点をもたないと、その時 ff はその点のそちら側の方向は不定であり、好きに変更してよい物と考えます。その方向は、その点のもう片方の向きを受け継ぐものとされます。その結果として、点をまず単純化により片側を直線に変更し (制御点が失われる)、次に線を単純化によって取り除く (方向が失われる) という 2 段階に分かれた処理によって混乱した結果となっていました。
  - (デバッグウィンドウ内で) 変更されたピクセルを識別するためのアルゴリズムを改良。
  - 白黒モードでの `表示(V)`→`グリッド合わせを表示(W)` が壊れていました。
  - グレイスケールのラスタ表示を TrueType のデバッグ中に表示できるように Werner が要望しました。彼はまた、最後以外の命令がピクセル変更を行うと、ff は命令処理が終わっていないうちから 〔changed〕マークをつけていることを指摘しました。
  - エラーウィンドウが複数表示されていました。
  - ユーザが、参照と輪郭の両方を含むグリフや、200% よりも拡大された参照を含むグリフに対して TrueType 命令を追加できないようにしました (TrueType ではこれらの組合せを使用できないので、参照はインラインでコピーしなければなりません)。
  - 重複除去処理の中の Typo がバグを引き起こしていました。エラーは9月15日に加わった物です。
  - スプラインを直線に変換する条件処理を追加。
  - SFD ファイル内の UTF-7 出力ルーチンは、UTF-8 を正しく変換していませんでした。
  - Panov は、単純化処理にまたエラーを発見しました。直線を描いているスプラインを直線に変換するのを本当に積極的にするようにしました。
  - Panov の報告した他のバグ:
    - あるグリフの Unicode 値を変更すると、そのグリフへの全ての参照を変更する必要がある。
  - Panov が提示したさらに 4 つのバグ:
    - SFD ファイルに符号値をもたないグリフが存在すると、クラッシュを引き起こす。
    - いくつかの文字が欠けている BDF フォント (つまり、部分的なディスプレイフォント) があると `エンコーディングを強制(F)`→`オリジナル` がクラッシュしていました。
    - `移動(G)` ダイアログが未初期化値を解放しようとしていました。
    - `移動(G)` ダイアログに、UTF-8 でなく Latin1 で初期化された文字列が含まれていました。
  - うーん。changedsincelasthinted フラグは TrueType には当てはまらないようです。それに相当する (と思われる) のは、スプラインを含んでいるものの、命令が含まれていないグリフに該当します。
  - Panov の要望により、より簡便な構文 (配列を作成し各要素を代入する) で配列を構築する方法を追加。
  - 時々、`エンコーディング(E)` メニューに EUC-CN と GB2312packed という項目が両方とも表示されることがありました。
  - GB12345 のためのプラグインを作成し、(SFNT テーブル内で) GB2312 と同様に扱えるようにしました。
  - ほとんど直線に近いスプラインを直線に変換するスクリプト関数 NearlyLines() を追加。
  - AddExtrema() を調整し、既存の端点に非常に近い極値を追加しないように変更しました。
  - 質問ダイアログへの答えを収めた配列を終端していない箇所がありました。
  - ステムデータベース内でのクラッシュを修正。
  2005年10月28日
  - Mac のインストール手順に関する追加作業。
  - Web サイトと README の類のインストール文書を書き直し。
  - cygwin では、"/" をリストアップすると (実体の無い) 特殊ディレクトリ /cygdrive を含めるようにするようなハックをディレクトリブラウザへに追加 (これにより、PC でディスク全体へのアクセスが可能になります)。
  - スクリプト関数 NearlyLines() を追加。ほとんど直線に近いスプラインを直線に変換します。
  - 今までは、すべての OpenType 合字を OFM (TFM) ファイルに書き出していました。しかし、おそらく 'liga' と 'rlig' 合字のみを追加するべきでしょう。
  - Omega には、幅 0 のグリフが存在しないと考えるバグがありました。その結果、結合アクセントなどをすべて存在しないと誤認することになります。そういうわけで、全ての 0 幅グリフを最小の正の値をもっているものと強制することにしました。
  - TTF/OTF フォントを読み込むとき、FF は選択型置換 (および複数置換にも?) に 0 番目のタグを付与していました。
  - ファイルからの文字列を読み込み・書き出しを可能にするための 2 つのスクリプト処理ルーチンを追加しました。
  - ClearTable() スクリプトコマンドにおけるテーブルタグの解析が間違っていました。
- 2005年10月23日
  - FontForge をコマンドラインから起動させるのではなく、X11 Applications メニューに項目を追加することにより、Mac 版に Mac らしさをちょっと付け加えました。
  - 数年前から cvexport.c にあった範囲外の配列参照を David Binderman が指摘しました。うがっ。
  - TTF 命令を操作するためのいくつかのスクリプトコマンドを追加しました。

    以下の新規スクリプト関数を追加:

    - SetMaxpValue("item-name", value)
    - GetMaxpValue("item-name")
    - ClearInstrs()
    - ClearTable(tag)
    - AddInstrs(thingamy,replace,instrs)
    - FindOrAddCvtIndex(value[,sign-matters])
    - ReplaceCvtAt(index,value)
    - GetCvtAt(index)
    - PrivateToCvt()
  - OS/2 Width フィールドをスクリプトから参照する方法がないことを Daniel Gillmor が指摘しました。彼はそれを行う 2 つの新しい関数を追加するパッチを提供しました。私は、(panose 以外の) OS/2 の値を設定する方法が無く、それ (と値を取り出す方法も) が用意されてあるべきだということに気づきました。

    以下の新規スクリプト関数を追加:

    - SetOS2Value("item-name", value)
    - GetOS2Value("item-name")
    - SetPrivateValue("item-key","item-value")
    - GetPrivateValue("item-key")
    - HasPrivateValue("item-key")
    - RemovePrivateValue("item-key")
  - OFM ファイルに関する多数の修正。
  - マークから基底グリフへの照合を複数のアンカークラスとともに出力するとき、それがいくつかの基底クラスから使用されていると ff は基底グリフを範囲テーブルに何回か出力していました。間違い。
- 2005年10月18日
  - SVG の polygon 要素の読み込みに厳格すぎていたことを狩野が指摘しました。
  - 多数のカーニングの組み合わせをもつフォントでは、OFM 出力が動いていませんでした。
- 2005年10月16日
  - OFM ファイルに関する多数の修正。
  - 'nukt'「合字」置換のデーヴァーナーガリー文字に対する適切なデフォルトを追加。
- 2005年10月15日
  - どのグリフが出力されたかを決定するルーチンへのパッチは、ビットマップのみのフォントを破壊していました。
  - OFM ファイルには合字は含まれません。
  - OFM パッチが TFM 出力を破壊していました。
- 2005年10月12日
  - OFM ファイルの出力と解析のサポートを追加 (できたと思います)
  - 完全に空の (つまり、新規作成直後の) フォントデータベースからフォントを出力しようとしたとき、「なぜ .notdef の符号位置が -1 なのか」という馬鹿げたエラーを出していましたが、これはよくないアイディアでした。
  - スクリプトの GlyphInfo 関数に 4 つの新しい情報型を追加。
    * LayerCount
      グリフ内のレイヤの個数 (ふつう 2)
    * RefCount
      グリフ内の参照の個数
    * RefNames
      すべての参照名を含む配列を返します (長さ 0 になることもあります)
    * RefTransform
      すべての参照の変換行列からなる配列を返します
  - 1em 以外の幅をもつグリフを、「出力に値する」とするのはやめました (widthset を必要とします)。以前は両方を使用していました (大昔、PfaEdit が sourceforge に移行するよりも昔には、widthset ビットは存在しなかったからです)。今となっては、で幅が 1 em でないグリフが作成される機会 (マークや、(幅が 1 em以外の任意の値を取る) 固定幅のフォントの場合) があまりにも多くなりすぎました。
  - Type3 PDF フォントを印字するときに名前をつけるようにしました。
  - Michal Nowakowski からのパッチ。私の考案した数字による前置記法で TrueType 命令を編集するとき、数字が (1 バイトではなく) 1 ワードを必要とするときにクラッシュしていました。
  - PDF ファイルからのフォントの読み込みをいくつかサポート。
    - PDF Type3 の限定されたサポート (画像を除く)
    - (Hex, 85, Flate, RLE の) 4 種のデコードフィルタのみをサポート (lzw, fax, JBIG, DCT のサポートは無し)。
  - ステムデータベース (自動ヒント) を構築するためのルーチンは点データベースを準備し、それからすべてのスプラインを単調増加/減少する線の集合に変換するためのルーチンを呼び出します。しかしそのルーチンは長さ 0 のスプライン (と、それに付随する点) を削除してしまい、その結果点 DB が間違ったものになる可能性がありました。
  - メモリリークを修正するいくつかのパッチを Stefan Wagner が提案しました。
  - (othersubrs を呼び出すなどの) Type1 の flex の慣習を使用している Type2 フォントを Stefan Wagner が送ってくれました。Type2 には othersubrs 演算子は無いし、othersubrs サブルーチンを格納する場所もありません。しかし、それをサポートするのは簡単なので、なぜしないことがあるでしょう。もちろん、それが不正なフォントである旨の警告はします。
  - Stefan Wagner は (CFF 名前インデックス内の) フォント名に UTF-8 バイトオーダマークの入ったフォントを送ってくれました。PostScript は、FontName は ASCII の印字可能文字でなければならないとしていますが、読み飛ばすのは簡単なことです。
  - プロポーショナルフォントでは結合文字の幅のデフォルト値が 0 とする (さもなければ、古いお馬鹿な各種のウィンドウシステムとの互換性のために 1 em ユニットとする) べきであるのに対し、固定幅のフォントでは単一の幅をデフォルトとするべきであるという事実を Stepan Roh が指摘しました。フォントが固定幅か同かを判断するのには panose フィールドを使用します。 結合グリフの幅が

    実際には固定幅フォント内の す べ て の グリフは 1em ではなくて所定の固定幅をデフォルトとすべきです。

  - 新しいダイアログ「ヒント→'maxp'を編集...」を追加。ユーザが定義された関数個数、スタックの深さ、ストレージの用法、トワイライトポイントの個数という ff が算出することのできない値にアクセスできます。
  - cygwin で透明画像がうまく動くようにする方法が分かりました。
  - Michal Nowakowski が、負の値が cvt 内で重複していることを指摘しました。
  - cvt テーブルのサイズを 0 にセットするとクラッシュするのを直すパッチを Michal Nowakowski が提供しました。
- 2005年9月29日
  - 多くの (ucs2) ルーチンに、utf8 入力を追加。BMP 外の面のグリフを *-UnicodePlane-1 (第 1 面)、*-UnicodePlane-2 (第 2 面) などの符号化方式の BDF フォントで描画する最低限の機能を追加。
  - Private 辞書からの値 (BlueValues, StemSnaps) を cvt テーブルに追加するコマンドを追加。
  - 「cvt を編集」ウィンドウは、ポップアップ直後に何かを描画しようとしたときに失敗していました (その後の再描画は正しくできていました)。
  - 自動命令づけコードのメモリ使用を改良するための Mical Nowakowski からのパッチ。
  - カーニングクラスを含まないフォントにおいて、サンプルテキストの印字が壊れていました。
  - cygwin はとても変な共有ライブラリの扱いを行っており、それをまったくサポートしていませんでした。
  - Type2 charstring 内の endchar が (ほとんど) seac を意味すると言う廃止された用法をサポートしていませんでした。今はしているはずです。
  - OS/2 テーブルの「組版上の行間」の値が SFD ファイルか間読み込まれていませんでした。
  - フォントを開くダイアログで 'gai' ファイルを表示するようにしました。
  - いくつかのニモニックを間違えていました。修正。
  - bdftopcf は、DEFAULT_CHAR が明示的に指定されていないときは符号値 0 をもつグリフをデフォルトグリフとして使用します。デフォルトが存在しないことを示すためには DEFAULT_CHAR を -1 とするとうまく動くようですので、グリフ 0 をデフォルトとしたくない場合にはそれを使うようにしました。
  - BDF の出力時に、アウトラインフォントを出力せずに fnt または pt3 のビットマップフォントを出力した場合、foo-*-13.bdf のようなファイル名が使われていました。"-*" を削除しました。
  - デバッグ以外のときにも複合グリフの点の番号づけをサポート。
  - cvt エディタが、テーブルの長さを変更したときにクラッシュすることを Michal Nowakowski が指摘しました。
  - 新しいスクリプト関数を 2 個追加:
    - MoveReference(xoff,yoff,[ref-name/ref-unicode]+)
    - PositionReference(x,y,[ref-name/ref-unicode]+)

    これらは選択中の全グリフから、指定されたグリフのどれかへの参照を含むグリフを検索し、見つかった参照を (xoff,yoff) だけ平行移動するか、その参照を絶対位置 (x,y) に配置するかのどちらかを行います。

  - Type2 CFF CID フォントからの横書き用メトリックの読み込みが正しくありませんでした。ほとんどの場合、それは hmtx テーブルを読むことによって得られた間違った幅の値を FF が補正してしまうという事実によって隠蔽されていました。しかし裸の CFF フォントの場合、または幅に関する外部のソースの存在しない 'gai' フォントの場合、ff は失敗していました。
  - ScaleToEm を呼び出したときには Private 辞書内のほとんどの項目を拡大・縮小する必要があることを Alexej Kryukov が指摘しました。
  - "gai" フォントにより明らかになった CID フォント表示の 2 つの問題点を修正。
  - Michal Nowakowski は、私の生成した TrueType 命令の問題点を指摘しました――さらに、それにグリフを添付し忘れていることも。ふんげあ。
  - 拡張可能なグリフ情報を TFM ファイルから読み込む処理が、エンコーディングの変更以来壊れていました。
- 2005年9月19日
  - ff は AAT クラス (カーニングクラス等) を正しく読み込んでいませんでした。1 個余分に要素を読み込んでおり、問題を起こす可能性がありました。
  - SVG 出力にメンバーを含まないカーニングクラスがあるときの処理を修正。
  - OS2FigureCodePages 内で境界を外れた配列参照を行い、Mac でクラッシュしていました。
  - Type1 フォントの読み込み時に、seac 参照の Unicode 符号位置を正しく設定していませんでした。これはおそらくさまざまな処理を失敗させるでしょう。少なくとも「参照で置換」は間違いなく失敗します。
  - TrueType の参照に含まれる Round-to-Grid ビット (点がマッチしない参照がある場合は基本的に常にセットする) をセットするための DefaultRoundToGrid() スクリプト関数を追加。
  - 参照およびアンカーポイントに含まれる TrueType 点のマッチ処理のサポートを追加。
  - 新しいルーチンにジャンプするときに注意を喚起するデバッグルーチンのヒューリスティックを、複合グリフでより良く動作するように改善。
  - 命令を含まないグリフをデバッグしようと試みたとき、競合状態が発生し、その競合が片方に優位であった場合に ff はハングしていました。
  - 複合グリフ内の点に番号づけを行っていませんでした。これを見ることができるのは、複合グリフ上で「表示→グリッド合わせを表示」を行ったときだけでした。
  - 複合グリフのデバッグ時に、ff はいくつかの参照が平行移動 (または拡大・縮小・回転) していることを忘れており、表示に失敗していました。
  - FF は TrueType の参照に適用される "RoundToGrid" ビットの記録を保持するのに失敗していました。
  - TrueType のデバッグ時に、ある輪郭の最後から 2 番目の点が内挿によって求められている場合、輪郭の境界が間違った位置に描画されていました。
  - デバッグ時に、DPI/ポイントサイズを文字ビュー内に格納していました。Werner は、それをグローバルにする (つまり、異なるグリフがすべて同じデフォルトを共有する) ことを提案しました
  - いくつかの Unicode コードブロックが (それらがパイプライン上にあっただけなのか、何らかの類似の理由により) 別の場所に移動し、別のいくつかがパイプラインに追加されました。
- 2005年9月15日
  - Type1 出力に含まれる flex ヒントを含むグリフを平行移動した物を参照するのにはサブルーチンは使用できません。
  - 重複処理の、丸めエラーに伴う別の問題を隠しました。
  - ローカルエンコーディングに関する警告を 1 個しか出さないようにしました。
  - 2 次フォントでは、重複除去メニュー項目は表示しないようになっていますが、ホットキーを使うとコマンドが呼び出されて (その結果、破滅をもたらして) いました。
  - ヒントマスクが矛盾しているかどうかを決定するための点の情報検知コードにタイプミスがありました (垂直ヒントと水平ヒントをマッチさせていました)。
- 2005年9月12日
  - 古いフォントに含まれるuse_my_metrics をセットするためのスクリプトコマンド DefaultUseMyMetrics() を追加。
- 2005年9月11日
  - FF が参照をあるフォントから別のフォントに貼り付けるとき、参照を含むグリフの幅を、基底グリフとなるグリフの幅から決定するようにしました。(なぜなら、Aacute をあるフォントから別のフォントに貼り付ける場合、"A" グリフの幅は新しいフォントでは全く個となる可能性があるからです。オリジナルのフォントの幅を使うと間違った結果となるでしょう)。

    これに伴う問題が 2 つあります:

    1. これは前方参照を考慮に入れず、参照の変更された幅ではなく、オリジナルの幅を使用します。
    2. Alphatonos の幅は Alpha の幅とは異なるので、(おそらく) Alphatonos では混乱が起こるでしょう。

    すべての貼り付け処理が完了した後に幅を操作するのではなく、物事を正しく行うために use_my_metrics を参照します。

  - 現在のコマンドによって貼り付けられるグリフへの前方参照を取り扱います (かつて動いていましたが、エンコーディング処理の変更により壊れていました)。
  - 既に閉じられたフォントからの参照を貼り付けるための多数の修正。
  - 複合グリフにおける TTF の "_USE_MY_METRICS" ビットのサポート。これには以下の処理が伴います:
    - TrueType フォントの読み込み時に値を保持
    - 出力時に適切な値を設定
    - SFD ファイルに値を格納
    - 「エレメント(L)→情報を得る(I)」コマンドで変更方法をユーザに提供
- 2005年9月9日
  - FF は、複数のグリフが同じ名前をもつ BDF フォントを与えるとクラッシュしていました。
  - 複数のグリフが同じ名前をもった BDF フォントの出力を避けようと試みるようにしました。これにより、1 個のグリフに複数の符号位置を割り当てるという、BDF がサポートしていない概念に伴って起こります。そのような事態を発見したときにはグリフ名を変更するようにしました。
  - 依存するサブメニュー内の未初期化変数 (符号化の変更以来壊れていました)。
  - 参照されたグリフを含んでいないフォントへ参照を貼り付けたとき、オリジナルのアウトラインをコピーすると言う選択肢が出力されなくなっていました (符号化方式の変更以来壊れていました)。
  - グリフに重複符号化されたグリフを含むフォントを併合するとクラッシュしていました。
  - 私は非常に古風です。私はエラーメッセージを好んで stderr に出力していました。しかし、それらを見ない人がたくさんいます。おそらく、彼らは X からそれらを起動し、標準エラー出力がどこか見えないコンソールウィンドウに出力されているのでしょう。よし、フォントエラーに関する警告メッセージを出力するための小さなウィンドウを作ることにしましょう (例えば、OTF フォントを読み込むとき、範囲外のグリフについて文句を言うなどのため)。
  - PostScript ビットマップフォントのサポート。以下の修正が含まれます:
    - (単純な形の) imagemask PS 演算子を解析する機能
    - Type3 が PS ビットマップであることを検出し、それを人々が編集できる通常のビットマップに変換するためのコード
    - ビットマップへの (imagemask を使用した) PS Type3 フォントへの書き出し。
    - EPS ファイル内の画像に対しては正しく動いていたものの、同じコードが charproc に詰め込まれてオンデマンドで実行されたときに恐ろしい結果を招いていた、出力ルーチンのバグを修正。
  - FF は 1 個の単純配列として指定されたエンコーディングを扱えませんでした (Type1 の使用では許されませんが、Type3 では自明です)。
  - また、エンコーディングパッチ以来、ff の Type3 処理は壊れていました。
  - フォントが 256 個よりも少ないグリフしか含んでいない場合、ff は format 0 cmap サブテーブルを正しく出力できていませんでした。
- 2005年9月4日
  - フォント情報ダイアログの [TTF 値] を [OS/2] に名称変更し、その下に含まれていた [Panose] をタブに分離。更に多くのフィールドを追加し、OS/2 のほとんどすべてをカバーします。
  - Pavel Roskin の教唆により、未初期化変数の数値を固定。
  - Pavel Roskin よりのいくつかのパッチを適用。
  - WorthOutputting() スクリプトコマンドは、必要ない場合でも 1 個の引数を必要としていました。
  - SetCharCnt() コマンドはエンコーディングの変更以来壊れていました。

これ以前の変更点
PfaEdit (FontForge の旧名称) への変更点