# FontForge でフォントを変更するためのスクリプトの書き方

FontForge はインタプリタを内蔵しているので、フォントを変更するためのスクリプトを書くことができます。

- スクリプトの起動法
- スクリプト言語
  - 組み込み変数
  - 組み込み手続き
  - 例
- 「スクリプトを実行」ダイアログ
- 「スクリプト」メニュー

## スクリプトの起動

スクリプトを指定して FontForge をコマンドラインから起動したときはウィンドウは表示されず、スクリプトが終了した時にプログラムの終了となります。

>     $ fontforge -script scriptfile.pe {fontnames}

FontForge は、シェルが自動的にスクリプトを渡すようなインタプリタとして使うこともできます。 スクリプトファイルが実行可能になるように
`$ chmod +x scriptfile.pe`
として、それらのファイルの先頭の行に
`#!/usr/local/bin/fontforge`
(または、システム上で FontForge が置かれているどこか別の場所) を書き加えることにより、 `$ scriptfile.pe {fontnames}`
と打つだけでスクリプトを起動できるようになります。

FontForge に標準入力からスクリプトを読み込ませたい場合は、“-”を標準入力を表すファイル名として使用することができます。 (もし FontForge を X11 無しで作成した場合、コマンドラインに何も指定しなければ、FontForge はスクリプトを標準入力から読もうと試みます。)

また、FontForge を使用中に、`ファイル(F)`→`スクリプトを実行(X)...` メニューを用いてスクリプトを起動することもできますし、頻繁に用いるスクリプトをプリファレンスダイアログで登録してメニューから直接起動可能なように設定することもできます。

スクリプト言語により、フォント表示画面のメニューに見られる機能の多くを使用することができます。 現在のところ (将来もそうでしょうが) 全ての対象にアクセスできるわけではありません。 (もし何か欠けている機能があったら作者に知らせてください。それを追加しましょう)。 スクリプト言語は曲線からグリフを組み立てるコマンドを提供する物ではなく、グリフに対する高レベルな修正を可能にするための物です。

環境変数 `PFAEDIT_VERBOSE` が定義されている場合 (値を設定する必要はなく、定義するだけで十分です) FontForge は、スクリプトを実行するごとにその内容を標準出力に書き出します。

一般的に言って、作者はこの機能を例えばラテン文字フォントを入力としてキリル文字のグリフを含むように拡張するような作業に役立つことを思い描いています。この場合、スクリプトはこのような物になるでしょう:

- フォントのコード変換を行う。
- ラテン文字“A”への参照をキリル文字“А”に配置する
- ラテン文字“R”をキリル文字“Я”にコピーする
- “Я”を水平方向に反転する
- パスの向きを修正する
- ……等々

## スクリプト言語

スクリプトの構文は、C とシェルコマンドを混ぜ合わせた物にかなり似ています。 各ファイルは手続きに対応します。 シェルスクリプトと同様に、スクリプトファイルに渡された引数は $1, $2, …, $n という識別子で用いることができます。 $0 はスクリプトそれ自身です。 $argc は引数の個数を表します。 $argv[<式>] の形で、コマンドの引数を配列としてアクセスすることができます。

項は以下のいずれかを取ることができます。

- 変数名 (例えば“$1”や“i”や“@fontvar”や“_global”のような)
  変数のスコープは、名前の 1 文字目によって決まります。
  - ‘$’は組み込み変数を示します。ユーザは‘$’で始まる変数を新しく作ることはできません。それらの一部 (全部ではありません) は、値を代入することができます。
  - ‘_’はグローバル変数を示します。これは常に利用可能です。これらは、異なるスクリプトファイル間で (または、ネストしたスクリプトファイル内で) 共通のコンテキストを格納するのに用いることができます。
  - ‘@’は、変数がフォントに固有の物であることを示します。同じフォントを参照する 2 つのスクリプトは常に同じ変数にアクセスします。
  - 英文字で始まる変数はローカル変数です。それらは現在のスクリプトファイルの中でしか意味を持ちません。ネストしたスクリプトファイルの中では同じ名前の異なる変数を使用することができます。
- 10 進, 8 進または 16 進表記の整数
- Unicode のコードポイント (プレフィクス“0u”または“0U”の後ろに 16 進数表をつないだもの)。これは Select() コマンドでのみ使うことができます。
- 実数 (“C”ロケールの書式 ― 小数点は“.”)
- 二重引用符または一重引用符で囲まれた文字列。文字列トークンは 256 バイトまでに制限されています。改行文字を表すのに "\n" を使用することができます。(より長い文字列が必要な場合、連結演算子を使用してください)。
- 手続きの呼び出しまたは実行するファイル
- 括弧に囲まれた式
- 以下の 3 種類のコメント形式がサポートされています:
  - 文字“#”から行末まで
  - “//”から行末まで
  - “/*”から“*/”まで

  式は C とほぼ同じですが、二、三の演算子は省かれ、二、三がシェルスクリプトから追加されています。演算子の優先順位はわずかに単純化されています。 その結果、演算子 (とそれらの優先順位) は以下のようになっています:

  - 単項演算子 (+, -, !, ~, ++ (前置および後置), -- (前置および後置), () (手続き呼び出し), [] (配列インデックス), :h, :t, :r, :e
    これらの殆んどは、C と同じ意味です。最後の 4 個はシェルスクリプトから借りてきた物で、数式に以下のように適用されます。
    - :h は、パス指定の先頭部分 (ディレクトリ) を返します。
    - :t は、パス指定の末尾 (ファイル名) を返します。
    - :r は、パス指定から拡張子 (があれば) を取り除いたものを返します。
    - :e は、拡張子を返します。
  - *, /, % (二項乗法演算子)
  - +, - (二項算術演算子)
    + の最初の引数が文字列ならば、+ は加算ではなく文字列連結として働きます。2 番目の文字列が数なら文字列 (10 進表記) に変換されてから結合されます。
  - ==, !=, >, <, >=, <= (比較演算子。2 個の整数または 2 個の文字列に適用できます)
  - &&, & (論理的 AND とビット毎の AND。(論理的 AND は、短絡評価を行います))
  - ||, |, ^ (論理的 OR とビット毎の OR, 排他的論理 OR。(論理的 OR は、短絡評価を行います))
  - =, +=, -=, *=, /=, %= (C と同様の代入演算子。最初の引数が文字列である場合、+= は文字列を結合します)

  カンマ演算子、"?:" 演算子が存在しないことに注意してください。 “AND”,“OR”と、代入演算子の優先順位は単純化されています。

  手続き呼び出しは名前トークンまたは文字列に対して適用することができます。 名前または文字列が FontForge の内部手続きのどれかと認識された場合、それが実行されます。それ以外の場合は実行するファイルの名前であると見なされ、そのファイルが呼び出されます (ファイル名には、トークンとして使用できない文字を含むことができるため、ファイル名を指定するために文字列一般を指定できるのは肝要です)。 手続き名がディレクトリを含まない場合、現在のスクリプトファイルと同じディレクトリにある物と見なされます。手続きに渡すことのできる引数は最大で 25 個です。

  配列は参照渡しされます。文字列と整数は値渡しされます。

  変数は、値を代入することによって (“=”のみで) 作成することができます。 ですから
  `i=3`
  によって、“i”の変数定義を行うことができます。変数のスコープは現在のファイルのみに限定されているので、呼び出された手続きには引き継がれません。

  文は以下のいずれかをとることができます。

  - 1 個の式
  - `if ( 式 )
    文の並び
    {elseif ( 式 )
    文の並び}
    [else
    文の並び]
    endif`
  - `while ( 式 )
    文の並び
    endloop`
  - `foreach
    文の並び
    endloop`
  - `return [ 式 ]`
  - `shift`

  C と同様に、非ゼロとなる式は真であると定義されています。
  return 文は、その後ろに返り値 (式) を指定するか、または手続きは何も値を返さずに return で終了することも可能です。
  shift 文はシェルスクリプトから拝借した構文で、全ての引数を 1 個ずつシフトします。 (引数 0 のスクリプトファイル名は変更されません。)
  foreach 文は、カレントフォントが存在する時のみ使用できます。 foreach 文は、選択したグリフ群に含まれる各グリフに対して 1 回ずつ実行されます。 文の内部では、一度に 1 個のグリフのみが選択されます。 実行が完了すると、最初に選択されていたグリフ群が元通りに戻されます。 (警告: foreach 文の内部でフォントのコード変換を行ってはいけません)。
  文は改行 (改行の前にバックスラッシュを置くことによって、長い行を分割することができます) またはセミコロンで完結します。

  つまらない例:

  >     i=0;	# このセミコロンは不要ですが、あっても構いません
  >     while ( i<3 )
  >        if ( i==1 /* 無意味なコメント */ )
  >     	Print( "Got to one" )	// もう一つコメント
  >        endif
  >        ++i
  >     endloop

  FontForge には「カレントフォント」という概念があります――ほぼ全てのコマンドはカレントフォントのみを参照します (ですから、カレントフォントが定義されている必要があります)。 `ファイル(F)`→`スクリプトを実行(X)...` でスクリプトを起動した場合、現在編集中のフォントがカレントフォントとなり、そうでなければ初期状態ではカレントフォントは存在しません。 カレントフォントを変更するには Open() と New(), Close() の各コマンドを使います。 FontForge は、現在開かれたフォントのリストも保持しています。 このリストの並び順にはとくに意味はありません。 リスト内の最初のフォントは $firstfont です。

  同様に、CID キー指定フォントを操作する時には、FontForge の操作対象は「現在のサブフォント」であり、ほとんどのコマンドはそのフォントを参照します。それを変更するのには CIDChageSubFont() を使うことができます。

  全ての組み込み変数 は“$”で始まるので、自分で新しく“$”で始まる変数を作ることはできません (既存の変数 (の一部) に値を代入することはできますが)。

  - `$0` 現在実行中のスクリプトファイルの名前
  - `$1` スクリプトファイルに渡された最初の引数
  - `$2` スクリプトファイルに渡された 2 番目の引数
  - ...
  - `$argc` スクリプトファイルに渡された引数の個数 ($0 は常に存在するので、 最小値は 1 となります)
  - `$argv` により、全ての引数を配列としてアクセスすることができます
  - `$curfont` カレントフォントが含まれているファイルの名前
  - `$firstfont` フォントリスト (Open() により作成可能です) の最初に位置するフォントのファイル名。 フォントを読み込んでいなければ、この値は空文字列となります。 この値によって、FontForge がフォントを読み込み済みかどうかを判別できます。
  - `$nextfont` リスト内でカレントフォントの次に位置するファイルの名前。 (カレントフォントがリストの最後である場合は、空文字列)
  - `$fontchanged` カレントフォントが変更されていれば 1, フォントを読み込んでから (または保存してから) 変更が無ければ 0。
  - `$fontname` postscript の FontName フィールドに含まれる名前
  - `$familyname` postscript の FamilyName フィールドに含まれる名前
  - `$fullname` postscript の FullName フィールドに含まれる名前
  - `$fondname` これがセットされている場合、カレントフォントを `Macファミリーを出力(F)` で出力したときの FOND の名前
  - `$weight` postscript の Weight フィールドに含まれる名前
  - `$copyright` postscript の Notice フィールドに含まれる名前
  - `$filename` フォントが含まれるファイルの名前
  - `$fontversion` フォントのバージョンを示す文字列
  - `$cidfontname` はトップレベルの CID-Keyed フォントの名前 (存在しない場合は空文字列) を返します。
    フォントが CID-Keyed フォントであるの判別に利用できます。
  - `$cidfamilyname, $cidfullname, $cidweight, $cidcopyright` 上記の各項目と同様です。
  - `$mmcount` マルチプルマスターフォントに含まれるインスタンスの個数 (マルチプルマスターフォントでない場合は 0)
  - `$italicangle` PostScript の italic angle フィールドの値
  - `$curcid` カレントフォントのフォント名を返します。
  - `$firstcid` 現在の CID フォントに含まれる最初のフォントの名前を返します。
  - `$nextcid` 現在の CID フォントに含まれる次のフォントの名前 (現在のサブフォントが最後の 1 個である場合は空文字列) を返します
  - `$macstyle` MacStyle フィールド (フォントがボールド・イタリック・コンデスト等であるかどうかを示すビットの集まり) を返します。
  - `$bitmaps` このフォントにおいて作成されたビットマップのピクセルサイズを全て含む配列を返します (フォントデータベースにグレイマップが含まれる場合、その値は `(<BitmapDepth><<16)|<PixelSize>` という配列で表されます)。
  - `$selection` カレントフォントの各グリフが 1 項目に対応し、そのグリフが選択されているか否か (0=>非選択, 1=>選択)を示す配列を返します。
  - `$panose` カレントフォントの 10 要素の panose 値を含む配列を返します。
  - `$trace` この値が (訳註: 非 0 に) セットされていると、FontForge は、手続きを呼び出すごとにトレース表示を行います。
  - `$version` 現在実行中の FontForge のバージョンを含む文字列を返します。 この値は“020817”のような書式です。
  - `$`<プリファレンスの項目> (例えば `$AutoHint`) により、そのプリファレンスの項目に対応する値を調べることができます (値の設定には `SetPref` を使用してください)

  以下の例では、読込み済みの全フォントに対して同じ操作を実行します。

  >     file = $firstfont
  >     while ( file != "" )
  >        Open(file)
  >        /* 操作を実行 */
  >        file = $nextfont
  >     endloop

  組み込み 手続き の動作は、同じ名前のメニュー項目とほとんど同じです。ここでの説明はしばしば概要しか示されていませんので、より詳しい情報は当該のメニュー項目を調べてください。

  Print(arg1,arg2,arg3,...)
    メニュー項目には対応する項目はありません。与えられた全ての引数を標準出力へ印字します。 カレントフォントが定義されていない時にも実行することができます。
  PostNotice(str)
    UI から実行した時は、文字列を表示するウィンドウを開きます (ウィンドウはプログラムを停止せず、1 分ほど経過すると消滅します)。 コマンドラインから起動した時は、文字列を標準エラー出力に書き出します。
  Error(str)
    str をエラーメッセージとして出力し、現在のスクリプトを中断します。
  AskUser(question[,default-answer])
    ユーザに question を質問し、答え (文字列) を返します。デフォルトの答えを指定することもできます。
  Array(size)
    指定したサイズの配列を割り付けます。

    >     a = Array(10)
    >     i = 0;
    >     while ( i<10 )
    >        a[i] = i++
    >     endloop
    >     a[3] = "string"
    >     a[4] = Array(10)
    >     a[4][0] = "Nested array";

  SizeOf(arr)
    配列に含まれる要素数を返します。
  TypeOf(any)
    引数の型を表す文字列を返します:
    - "Integer"
    - "Real"
    - "Unicode"
    - "String"
    - "Array"
    - "Void"
      (以下の型は内部的に用いられますが、ユーザがこれを見ることは決してないと思います。完璧を期すためにここに入れています)。
    - "LValue"
  Strsub(str,start[,end])
    文字列引数の部分文字列を返します。部分文字列は start で指定された位置から始まり、end で指定された位置の前で終わります (end が省略された場合、文字列の終りが使用されます。文字列の先頭は位置 0 です)。ですから `Strsub("abcdef",2,3) == "c"` かつ `Strsub("abcdef",2) == "cdef"` となります。
  Strlen(str)
    文字列の長さを返します。
  Strstr(haystack,needle)
    文字列 needle が、文字列 haystack の中で最初に出現する位置を返します (ない場合は -1 を返します)
  Strrstr(haystack,needle)
    文字列 needle が、文字列 haystack の中で最後に出現する位置を返します (ない場合は -1 を返します)
  Strcasestr(haystack,needle)
    大文字と小文字の区別を無視して検索を行い、文字列 needle が文字列 haystack の中で最初に出現する位置を返します (ない場合は -1 を返します)
  Strcasecmp(str1,str2)
    大文字と小文字の区別を無視して 2 つの文字列を比較し、等しければ 0 を、str1<str2 ならば負の数を、str1>str2 ならば 正の数を返します。
  Strtol(str[,base])
    文字列 str をできるだけ長く字句解析して、str が表す整数値を返します。 変換の基数を表す 2 番目の引数を与えることができます (デフォルトでは 10 進数です)。この手続きの振舞いは strtol(3) に従います。
  Strskipint(str[,base])
    文字列 str をできるだけ長く字句解析して、解析不可能な最初の文字のオフセットを返します。
  Strtod(str)
    文字列を実数に変換します。
  LoadPrefs()
    ユーザのプリファレンスを読み込みます。これはかつてはスクリプトの開始時に自動的に行われていましたが、現在では UI から起動されたときのみに自動的に実行されます。スクリプトからは、この手続きを実行しなければなりません。
  SavePrefs()
    現在のプリファレンスを保存します。以前は SetPref を呼び出したときに自動的に行われていましたが、現在はスクリプトは明示的に実行する必要があります。
  GetPref(str)
    名前 str を持つプリファレンスの項目値を取り出します。返すことができる項目の型は、ブール型、整数、実数、文字列およびファイル型のみです。 ブール型と実数型の項目は整数型に変換され、ファイル項目は文字列型に変換されます。 エンコーディング (NewCharset) がマジックナンバーとして返されます。これは get/set Pref の文脈の外では無意味な数値です。
  SetPrefs(str,val[,val2])
    名前 str をもつプリファレンスの項目値を設定します。プリファレンスの項目が実数型ならば、2 番目の引数を指定することができ、設定される値は val/val2 となります。
  LoadPlugin(filename)
    指定されたファイル (これは共有ライブラリでなければなりません) に格納されている FontForge プラグインを読み込みます。
  LoadPluginDir([directory-name])
    指定されたディレクトリを検索し、FontForge プラグインらしき物を探して読み込みます。ディレクトリを指定しない場合、以下の 2 つのデフォルトディレクトリを読み込みます。
    - /usr/local/share/fontforge/plugins
    - ~/.PfaEdit/plugins
  DefaultOtherSubrs()
    Adobe 版の OtherSubrs サブルーチンを使うように設定を戻します。
  ReadOtherSubrsFile(filename)
    Type 1 フォントのOtherSubrs 配列で使用するための新しい PostScript サブルーチンを読み込みます。ファイルフォーマットは必要以上に複雑になっているところが少々あります (なぜなら、OtherSubrs 配列を個々のサブルーチン毎に解析する方法が思いつかないからです)。
    - サブルーチンリストは [ ] で囲まれていてはならない。
    - 各サブルーチンの前には‘%%%%’(この後ろにさらに文字があってもよい) で始まる行がついていなければならない。
    - サブルーチンは自明な順序で配置せねばならず、期待される意味をもっていなければならない。
    - flex ヒントを使いたくない場合、最初の 3 個のサブルーチンは "{}" にセットすること。
    - 最大 14 個のサブルーチン (0〜13) が指定できる。
    - 最初のサブルーチンの前の任意のテキストは著作権表示として扱われる。

    >     % Copyright (c) 1987-1990 Adobe Systems Incorporated.
    >     % All Rights Reserved
    >     % This code to be used for Flex and Hint Replacement
    >     % Version 1.1
    >     %%%%%%
    >     {systemdict /internaldict known
    >     1183615869 systemdict /internaldict get exec
    >     ...
    >     %%%%%%
    >     {gsave currentpoint newpath moveto} executeonly
    >     %%%%%%
    >     {currentpoint grestore gsave currentpoint newpath moveto} executeonly
    >     %%%%%%
    >     {systemdict /internaldict known not
    >     {pop 3}
    >     ...

  GetEnv(str)
    名前 str をもつ環境変数の値を返します。
  FileAccess(filename[,prot])
    Unix の access システムコールと同様にふるまいます。ファイルが存在する場合 0 を返し、存在しない場合 -1 を返します。prot が省略された時は、読み込みアクセスをチェックします。
  WriteStringToFile("文字列","Filename"[,append])
    "Filename" で指定した名前をもつファイルを作成し、文字列をそのファイルへ書き出します。append フラグが指定されていて 0 でない値の場合は、文字列はファイルの末尾に追加されます。この関数は null で終端された文字列を扱うものであり、バイト配列を扱いません。失敗時には -1 を返し、成功時には書き出されたバイト数を返します。
  LoadStringFromFile("filename")
    ファイル全体を文字列に読み込みます。ファイルが存在しないか空である場合は空文字列を返します。返り値の文字列はファイル全体を保持するのに十分なバイト数に加えて末尾の NUL バイトを含むのに十分なバイト数が割り当てられます。もしファイルに NUL 文字そのものが含まれていた場合、FontForge はそこが文字列の終端であると判断します。
  UnicodeFromName(name)
    文字列 "name" を、一般に使用されるグリフ名を格納した FontForge のデータベースから検索して、その名前がもつ Unicode 値を (見つからなければ -1 を) 返します。 これは、カレントフォント (があれば) を検査しません。
  Chr(int)
  Chr(array)
    文字列内に含まれる各文字のエンコーディングを表す整数の配列を返します。 pos を指定する場合は、string の長さより小さい整数でなくてはならず、 関数は文字列 string 内の位置 pos にある文字の文字コードを整数で返します。
  Real(int)
    整数を実数に変換します。
  Round(real)
    実数を最も近い整数値に丸めて、整数に変換します。
  Floor(real)
    real を、それを超えない最大の整数に変換します。
  Ceil(real)
    real を、それを下回らない最小の整数に変換します。
  Int(real)
    標準 C の型変換を使用して実数から整数への変換を行います。
  UCodePoint(int)
    引数を Unicode のコードポイント (いくつかのコマンドで使用される特殊なデータ型) に変換します
  ToString(arg)
    引数を文字列に変換します。(この出力は Print() コマンドの印字と同じです)
  IsNan(real)
    値が NaN であるかどうかを返します。
  IsFinite(real)
    値が有限値である (無限大/小でも NaN でもない) かどうかを返します。
  Sqrt(val)
    平方根を返します。
  Exp(val)
    e の val 乗を返します。
  Log(val)
    val の自然対数を返します。
  Pow(val1,val2)
    val1 の val2 乗を返します。
  Sin(val)
    val の正弦を返します。
  Cos(val)
    val の余弦を返します。
  Tan(val)
    val の正接を返します。
  ATan2(val1,val2)
    逆正接を返します。より詳しい情報は atan2(3) を参照してください。
  Utf8(int)
    整数 [0,0x10ffff] をとり、その Unicode コードポイントが指す文字を UTF-8 文字列で返します。 整数の配列を渡した場合、それら全ての Unicode コードポイントを含む UTF-8 文字列を生成します。 (サロゲートの値を渡されることは想定していません)。
  Rand()
    ランダムな整数を返します。

  FontsInFile(filename)
    ファイル内に含まれる全てのフォント名を含む文字列の配列を返します。ほとんどのファイルはフォント 1 個のみを含みますが、物によって (Mac のフォントスーツケース、dfont, TTC ファイル、SVG ファイルなど) は複数のフォントを含むことができます。ファイルにフォントが含まれていない場合 (またはファイルが存在しないか、フォントに名前がついていない場合) 長さ 0 の配列が返されます。これはフォントを開きません。カレントフォントが無くても実行可能です。
  Open(filename[,flags])
    この手続きは、名前 filename をもつフォントをカレントフォントにします。 filename がまだメモリに読み込まれていないならば、この時読み込まれます。 カレントフォントが無い場合でもこれは実行可能です。
    TTC ファイル (Mac のフォントスーツケース、.dfont, SVG など) から読み込む時は、フォント名を括弧で囲んで、ファイル名の後ろに付け加えて `Open("gulim.ttc(Dotum)")` のように指定すれば、 特定のフォントを選択することができます。
    現時点で存在する省略可能なフラグ引数は、以下の 1 個のフラグのみを含みます:
    - 1 ⇒ ユーザは fstype の設定に無関係に、フォントを操作することができる合法なライセンスを持っている
  New()
    新しいフォントを作成します。これはカレントフォント無しでも実行できます。
  Close()
    カレントフォントが占有しているメモリを全て解放し、読み込み済みのフォントのリストからカレントフォントを除外します。これを実行した後、カレントフォントは存在しない状態となります。
  Save([filename])
    filename に何も指定しない場合、カレントフォントを元の SFD ファイルに書き戻します (フォントに対応する SFD ファイルが存在しない場合、エラーとなります)。 引数 1 個をつけて実行した場合、「名前をつけて保存」コマンドを実行し、 カレントフォントを filename で指定したファイルに保存します。
  Generate(filename[,bitmaptype[,fmflags[,res[,mult-sfd-file]]]])
    フォントを出力します。フォントの形式は filaname で指定した拡張子で決まります。 利用可能な拡張子は以下のとおりです:
    - .pfa
    - .pfb
    - .bin (Mac のバイナリラッパに格納した Mac の postscript (pfb) リソース)
      .res (Mac 上で実行した場合は、FontForge はフォントスーツケースに直接ファイルを書き出し、拡張子は“.bin”ではなく“.res”となります)

      注意: これと同時にビットマップフォントを NFNT フォーマットで出力しなければなりません。これを行わないと出力した PostScript フォントは Mac に認識されません。

    - *%s*.pf[ab] (ここでは単に拡張子だけでない指定が必要となります。フォント名には“%s”が含まれていなければなりません) (1 個の巨大なフォントを、それぞれ 256 文字を含む複数の pfb フォントに分割します。この時、どのようにこれを行うかは 5 番目の引数によって決まります)。“%s”は、複合 SFD ファイル内で割り当てられるフォント番号に置き換えられます。
    - .mm.pfa (ASCII フォーマットのマルチプルマスターフォント)
    - .mm.pfb (バイナリフォーマットのマルチプルマスターフォント)
    - .pt3 (type 3)
    - .ps (type 0)
    - .t42 (Type 42, PostScript ラッパに格納した TrueType)
    - .cid.t42 (Type 42 CID フォント)
    - .cid (非 OTF の CID フォント)
    - .cff (裸の CFF フォント)
    - .cid.cff (CFF フォーマットの CID フォント)
    - .ttf
    - .sym.ttf (Symbol (カスタム) エンコーディングの TrueType ファイル)
    - .ttf.bin (Mac のバイナリラッパに格納した TrueType リソース)
      suit (Mac 上で実行した場合は、FontForge は結果を直接フォントスーツケースファイルに書き出し、拡張子は“.ttf.bin”ではなく“.suit”になります)
    - .dfont (dfont ファイルに含まれた Mac の TrueType リソース)
    - .otf (CID フォントかどうかは、編集中のフォントの形式に依存します)
    - .otf.dfont (dfont ファイルに含まれた Mac の OpenType リソース)
    - .svg (SVG フォント)
    - <拡張子無し> アウトラインフォントを全く書き出したくない場合 (その代り、ビットマップかメトリックファイルの名前だけを指定する) 空の拡張子を指定してください (つまり、`"Times."` であって `"Times"` ではありません――出力されるビットマップフォントは、その型に応じて適切な拡張子がつけられます。“.”は単なる飾りです)。

    bitmaptype を指定した場合、それは以下のどれかでなければなりません。

    - bdf
    - ttf (TrueType/OpenType フォント内の EBDT/bdat テーブル)
    - sbit (dfont ラッパに包まれたアウトラインフォントを含まない TrueType フォント内の bdat テーブル)
    - bin (MacBinary 内の nfnt リソース)

      注意: Mac OS X は NFNT をサポートしていないようです。 それ自身では使用していないにしろ、リソースベースの PostScript フォントを 使用するには NFNT ビットマップが存在しなければなりません。(より正確に言えば、廃止された FOND が存在する必要があるのは、廃止された NFNT も同時に存在する場合に限られます)。

    - fnt (Windows の FNT フォーマット)
    - otb (X11 の OpenType ビットマップフォーマット)
    - pdb (palm ビットマップフォントのこと)
    - pt3 (PostScript Type3 ビットマップフォント)
    - "" は、ビットマップ無しの指定です。

    注意: ビットマップ出力を指定した場合、現在のフォントデータベースに含まれる全てのサイズが出力されますが、このコマンドはビットマップを作成しませんので、フォントデータベースにビットマップが全く含まれない場合、（ビットマップを出力するように指定したとしても) 全く出力されません。ビットマップの出力を行いたい場合、あらかじめ BitmapsAvail スクリプトコマンドか `エレメント(L)`→`使用するビットマップ(A)` を使ってビットマップを作成する必要があります。

    AFM や PFM ファイルを出力するかどうかは、fmflags で制御できます。

    - -1 ⇒ デフォルト (PostScript フォントが用いる AFM ファイルを出力し、 PFM ファイルは出力せず、完全な‘post’テーブルと TTF のヒントを作成します)
    - fmflags&1 ⇒ AFM ファイルを出力する (マルチプルマスターフォントを出力する場合、このフラグをセットすると、いくつかの AFM ファイル (マスターデザインごとに 1 ファイル、フォントのデフォルトバージョンに対してもう 1 ファイル) と amfm ファイルを出力するという意味になります)
    - fmflags&2 ⇒ PFM ファイルを出力する
    - fmflags&4 ⇒ グリフ名の情報を含まない簡素な‘post’テーブルを出力する
    - fmflags&8 ⇒ TTF のインストラクションを含めない
    - fmflags&0x10 ⇒ Apple と MS/Adobe の間で TrueType/OpenType の定義が異なる場合、Apple の定義を用いる (指定しない場合は MS/Adobe の定義)
      現在のところ、これが影響するのは、フォント内に格納されるビットマップのフォーマット (Apple は‘bdat’というテーブルを、MS/Adobe は‘EBDT’というテーブルを用います)、‘name’テーブル内の PostScript 名 (Apple は、1 回しか出現してはならないと指示しているのに対し、MS/Adobe は最低 2 回は出現するように指示しています) および morx/feat/kern/opbd/prop/lcar テーブルと GSUB/GPOS/GDEF テーブルのどちらを作成するかという点です。
    - fmflags&0x20 ⇒‘PfEd’テーブルを作成し、グリフへのコメントを格納します。
    - fmflags&0x40 ⇒ 'PfEd' テーブルを作成し、グリフの色を格納します。
    - fmflags&0x80 ⇒ Apple と MS のプラットフォームの両方で動作するようにテーブルを作成します。
      Apple は Mac OS X 10.4 (トラー) でこれをぶち壊しにしてしまいました。OpenType テーブルがフォント内に存在すると、AAT テーブルは無視されるようになった――とのことです (自分ではテストできません)。残念ながら Apple は OpenType の全機能を実装していないので、ほぼ確実に間違った結果が得られることになるでしょう。
    - OpenType と Apple のテーブルのどちらも必要ない場合 (昔ながらの‘kern’テーブルだけが必要で他は要らない場合)、0x80 と 0x10 の両方をセットしてください。
    - fmflags&0x100 ⇒ グリフマップファイル (GID=>グリフ名, Unicode への対応表) を作成します。このマップファイルの拡張子は“.g2n”になります。 fmflags&0x200 ⇒ TeX のフォントメトリック情報を含む‘TeX’テーブルを出力します。
    - fmflags&0x400 ⇒ (Omega 用の) OFM ファイルを出力します。
    - fmflags&0x10000 ⇒ TFM ファイルを出力します。
    - fmflags&0x40000 ⇒ flex ヒントを格納しません。
    - fmflags&0x80000 ⇒ PostScript のヒントを一切格納しません。
    - fmflags&0x200000 ⇒ PostScript の座標値を整数に丸めます。

    res により、生成された BDF フォントの解像度が決まります。 -1 を指定すると、FontForge が各サイズに対して自動的に値を推測します。

    filename に“%s”が含まれ、“.pf[ab]”のいずれかの拡張子をもつ場合、“複合 sfd ファイル”が存在するはずです。これは現在のエンコーディングからサブフォントへのマッピングを含むファイルの名前です。一例をここに示します。このファイルが存在しない場合、FontForge はフォントのエンコーディングに対応するファイルを探す標準の探索プロセスを行い、それが失敗した時はフォントは保存されません。

  GenerateFamily(filename,bitmaptype,fmflags,array-of-font-filenames)
    配列 array-of-font-filenames で名前を指定した各フォント (読み込み済みで無ければなりません) から構成される Mac のフォントファミリー (FOND) を生成します。filename, bitmaptype, fmflag は上と同じです。

    >     #!/usr/local/bin/fontforge
    >     a = Array($argc-1)
    >     i = 1
    >     j = 0
    >     while ( i < $argc )
    >     # 各フォントを開く
    >       Open($argv[i], 1)
    >     # 全てのスタイルに対応するファイル名を配列に格納する
    >       a[j] = $filename
    >       j++
    >       i++
    >     endloop

    >     GenerateFamily("All.otf.dfont","dfont",16,a)

  ControlAfmLigatureOutput(script,lang,ligature-tag-list)
    3 つの引数は全て文字列でなければなりません。 最初の 2 個はそれぞれ最大 4 文字を含む文字列、3 個目はカンマで区切られた 4 個以内の文字からなるリストでなければなりません。 以下の条件を満たす場合のみ、AFM ファイル内に合字が作成されます。
    - それらのタグがリスト内のどれか 1 項目に一致すること
    - 指定された用字系の指定された言語においてそれらがアクティブであること (用字系・言語のどちらにおいても "*" はワイルドカードとして解釈されます)

    標準の設定は以下の通りです:

    >     ControlAfmLigatureOutput("*","dflt","liga,rlig")

  Import(filename[,toback[,flags]])
    ビットマップフォントをデータベースに取り込むか、背面の画像をさまざまなグリフに取り込みます。 1 個か 2 個の引数を指定することができます。 最初は、ファイル名を指定する文字列 filename でなければなりません。 ファイルの拡張子によって、取り込みがどのように進行するかが定まります。
    - 拡張子が“.bdf”の場合、BDF フォントを取り込みます。
    - 拡張子が“.pcf”の場合、PCF フォントを取り込みます。
    - 拡張子が“.ttf”の場合、TTF ファイルの EBDT または bdat テーブルからビットマップフォントを検索します。
    - 拡張子が“.pk”の場合、METAFONT から作成された pk (ビットマップフォント) ファイルが取り込まれます。デフォルトでは背面に配置されます。
    - これら以外で、拡張子が画像ファイルに相当する場合、読み込まれた画像が背面に配置されます。
      - filename に“*”が含まれている場合、その文字列はファイル名のテンプレートであると認識され、 それにマッチした全てのファイルが適切に読み込まれ、背面に配置されるでしょう。
      - その他の場合、複数のファイル名を (セミコロンで区切って) 指定することができます。 最初のファイルは選択中の最初のグリフの背面に、2 番目は選択中の 2 番目のグリフの背面に…と配置されます。
    - 拡張子が“.eps”ならば、EPS ファイルが前面にマージされます。ファイルは画像として指定することができます (ファイル名に画像ファイルの拡張子でなく“.eps”がついている点だけが異なります)。 FontForge の EPS ファイル読み込み能力は、非常に制限されています。
    - 拡張子が“svg”ならば SVG ファイルが前面に読み込まれます。

    2 番目の引数が存在する時は、整数でなければならず、最初の引数がビットマップならば 2 番目の引数によって、ビットマップリストに追加するか (0) グリフの背面を埋めるか (1) が定まります。EPS および SVG ファイルでは、スプラインが前面に追加されるか、グリフの背面レイヤに追加するかがこの引数によって決まります。

    3 番目の引数が存在する場合、これも整数でならなければならず、EPS 取り込みのふるまいを制御するフラグの集まりとして扱われます。

    - 8 ⇒ パスの向きを修正します。
    - 4 ⇒ TeX の消しゴム (白ペンによるストローク) を適用しようと試みます。
    - 2 ⇒ パスの重複を除去します。
  Export(format[,bitmap-size])
    このコマンドは、カレントフォント内の選択中の各グリフに対し、カレントディレクトリ内のファイルへそのグリフを書き出します。 format は文字列で、以下のどれかでなければなりません。
    - eps ― 選択中のグリフのアウトラインを EPS ファイルに書き出します。ファイル名は“<グリフ名>_<フォント名>.eps”となります。
    - pdf ― 選択中のグリフのアウトラインを PDF ファイルに書き出します。ファイル名は“<グリフ名>_<フォント名>.pdf”となります。
    - svg ― 選択中のグリフのアウトラインを SVG ファイルに書き出します。ファイル名は“<グリフ名>_<フォント名>.svg”となります。
    - fig ― 選択中のグリフのアウトラインを (不十分に) xfig ファイルに書き出します。ファイル名は“<グリフ名>_<フォント名>.fig”となります。
    - xbm ― 2 番目の引数にビットマップフォントのサイズを指定します。ビットマップフォント内の選択中の文字が XBM ファイルに書き出されます。ファイル名は“<グリフ名>_<フォント名>.xbm”となります。
    - bmp ― 2 番目の引数にビットマップフォントのサイズを指定します。ビットマップフォント内の選択中のグリフが BMP ファイルに書き出されます。ファイル名は“<グリフ名>_<フォント名>.bmp”となります。
    - png ― 2 番目の引数にビットマップフォントのサイズを指定します。ビットマップフォント内の選択中のグリフが PNG ファイルに書き出されます。ファイル名は“<グリフ名>_<フォント名>.png”となります。

    フォーマットは (上記の) ファイルタイプのみからなるか、または、ファイルタイプを拡張子で指定した (いくつかのフォーマット制御文字列を埋め込み可能な) 完全なファイル名のいずれかとすることが可能です。

    > "Glyph %n from font %f.svg"
    > "U+%U.bmp"

    フォーマット文字列中の文字は % 以外はそのままコピーされます。% が含まれている場合、次の文字がふるまいを制御します:

    - %n ― グリフ名を挿入します (名前が長い場合、最初の 40 文字のみ)。
    - %e ― グリフの符号位置を 10 進数で挿入します。
    - %u ― グリフの Unicode コードポイントを小文字 16 進数で挿入します。
    - %U ― グリフの Unicode コードポイントを大文字 16 進数で挿入します。
    - %% ― 1 個の‘%’を挿入します。
  MergeKern(filename)
    カーニング情報を AFM ファイルまたは TFM ファイルから読み出し、カレントフォントにマージします。
  PrintSetup(type,[printer[,width,height]])
    印刷コマンドの環境設定ができます。 type は 0〜4 の範囲の値で、以下のように解釈されます。
    - 0 ⇒ lp で印刷
    - 1 ⇒ lpr で印刷
    - 2 ⇒ ghostview に出力
    - 3 ⇒ PostScript ファイルに出力
    - 4 ⇒ その他の印刷コマンド
    - 5 ⇒ PDF ファイルに出力

    type が 4 (その他) で 2 番目の引数が指定されている場合、2 番目の引数は 「その他の」印刷コマンドを含む文字列でなければなりません。
    type が 0 (lp) または 1 (lpr) で 2 番目の引数が指定されている場合、 2 番目の引数はレーザプリンタの名前を含むものと解釈されます (2 番目の引数が空文字列ならば、何もセットされません)

    3 番目と 4 番目の引数はそれぞれページ幅と高さを指定します。 単位は 1/72 インチ (1 ポイントにほとんど等しい) なので、8.5×11 インチの用紙は 612, 792 となり、A4 の用紙は (約) 595, 842 となります。

  PrintFont(type[,pointsize[,sample-text/filename[,output-file]]])
    カレントフォントを PrintSetup の設定に従って印刷します。 type の値は以下のとおりです (意味は印刷に関するセクションの記述のとおりです)
    - 0 ⇒ pointsize で指定された大きさでフォント全体を印刷します。
    - 1 ⇒ 選択中のグリフの一覧をページに収まるように印刷します。
    - 2 ⇒ 選択中のグリフを、複数のポイントサイズで印刷します。
    - 3 ⇒ ファイルから読み込んだサンプルテキストを pointsize で指定された大きさで印刷します。
    - 3 ⇒ テキストサンプルを印字します。3 番目の引数をファイル名ではなく、(UTF-8 で符号化された) サンプルそのものを表すものとして扱います。

    pointsize は 1 個の整数か、整数からなる配列 1 個のいずれかです。 この値の指定は type が 0, 3 または 4 の時のみに意味を持ちます。 省略時または 0 を指定した時はデフォルト値が使用されます。 フォント表示の時は、値を 1 個しか参照しません。

    type に 3 を指定した時は、サンプルテキストを含むファイルの名前を指定することができます。 このファイルは UCS2 フォーマット (頭に 0xfeff がつきます) か、現在のデフォルトエンコーディングが使用できます。 空の文字列を指定するか、引数を省略した場合には、 FontForge はデフォルト値を使用します。

    環境設定の PrintSetup がファイル (PostScript または PDF) に出力するように指定されている場合、4 番目の引数で出力ファイルのファイル名を指定します。

  Quit(status)
    status を終了ステータスとして FontForge を終了します。(保存していないフォントを保存するように促すことはしません)。カレントフォントが無い状態でも実行可能です。

  Cut
    選択中の全てのグリフのコピーを作成し、クリップボードに保存してから選択していたグリフを削除します。
  Copy
    選択中のすべてのグリフのコピーを作成します。
  CopyReference
    選択中のすべてのグリフへの参照を作成し、それらをクリップボードに格納します。
  CopyWidth
    選択中のすべてのグリフの幅をクリップボードに格納します。
  CopyVWidth
    選択中のすべてのグリフの縦方向の送り幅をクリップボードに格納します。
  CopyLBearing
    選択中のすべてのグリフの左サイドベアリングをクリップボードに格納します。
  CopyRBearing
    選択中のすべてのグリフの右サイドベアリングをクリップボードに格納します。
  CopyGlyphFeatures(arg,...)
    この手続きは現在選択中の文字 (1 文字だけ) の機能をコピーし、クリップボードに格納します。

    arg には文字列か整数値を使用することができ、文字列の場合は 4 文字の OpenType タグ ("kern" など) または Mac の機能設定 ("<1,1>" など) のどちらかを使用することができます。整数の場合、上のいずれかの整数表現でなければなりません。または、arg には文字列か整数からなる配列を指定することもできます。 (この場合、引数はちょうど 1 個でなければなりません)

    機能‘kern’は現在選択中のグリフを 2 文字のうち最初の文字として含む全てのカーニングペアにマッチします。(架空の) 機能‘_krn’は、現在選択中の文字を 2 文字のうち最後の文字として含む全てのカーニングペアにマッチします。‘vkrn’と‘_vkn’も同様です。

  Paste
    クリップボードの内容を、カレントフォントの選択中のグリフにコピーします (そこに今まであった内容は削除されます)
  Paste Into
    クリップボードの内容を、カレントフォントの選択中のグリフにコピーします (今まであった内容に追加されます)
  PasteWithOffset(xoff,yoff)
    PasteInto() を行う前に、クリップボードを (xoff, yoff) だけ平行移動します。アクセントつきグリフを構築するのに使用できます。
  SameGlyphAs
    クリップボードに 1 個のグリフへの参照が含まれているときにこのコマンドを実行すると、選択中のすべてのグリフがそのグリフを参照するようになります。

    Adobe は、それを避けるように勧めています。その代わりに参照を使ってください。いくつかの情況 (PDF がその一例だと思われます) においては 、1 個のグリフが複数の文字符号を持っていると問題が起こります (Acrobat は、Unicode コードポイントを算出するために、グリフから符号位置への逆対応表を使用します。しかし、あるグリフが 2 つの Unicode コードポイントを持っているとそれが失敗します)。

  Clear
    選択中のすべてのグリフを消去します。
  ClearBackground
    選択中のすべてのグリフの背面を消去します。
  CopyFgToBd
    選択中のすべてのグリフに対し、前面のスプラインを背面にコピーします。
  Join([fudge])
    選択中のグリフ内の開いたパスを (重なり合った点の所で) 結合します。 fudge が指定されている場合は、結合する点同士の距離が fudge ユニットより近ければ、一致しなくても重なっていると見なします。
  UnlinkReference
    選択中のすべてのグリフに含まれる参照を解除します。
  SelectAll
    すべてのグリフを選択します。
  SelectNone
    すべてのグリフを選択解除します。
  SelectInvert()
    選択範囲を反転します。
  Select(arg1, arg2, ...)
    このコマンドは、まず現在の参照を解除し、それから引数を 2 個ずつ対にして得られる範囲内 (両端を含む) のどれかに含まれるグリフをすべて選択します。 最後に 1 個だけ余った引数がある場合、その 1 個のグリフも選択します。 引数は以下のいずれかの方法によって指定できます:
    - 現在のフォントの符号化方式における位置を表す整数
    - Unicode の PostScript 名 (現在のフォントのエンコーディングに変換されます)
    - Unicode の符号位置 (例: 0u61) これは、(現在のフォントのエンコーディングに変換されます)
    - Select に与えた引数が 1 個だけで、その引数が配列であるならば、グリフの選択範囲は配列で指定された物となります。array[0] は符号位置 0 にあるグリフの選択を表し、以下の文字も同様です。配列の要素数と、フォント内に含まれるグリフの個数は同じである必要はありませんが、個数が違う場合には、$selection 疑似変数が返すのと同じフォーマットである必要があります。
  SelectMore(arg1, arg2, ...)
    上のコマンドと同じですが、このコマンドは選択中の文字を最初に消去しないので、現在選択中の範囲を拡張します。
  SelectFewer(arg1, arg2, ...)
    上のコマンドと同じですが、指定されたグリフの選択を解除する点が異なります。それにより、現在の選択範囲は縮小されます。
  SelectSingletons(arg1, ...)
    引数で指定された文字だけを選択します。
  SelectMoreSingletons(arg1, ...)
  SelectFewerSingletons(arg1, ...)
  SelectIf(arg1,arg2, ...)
    Select() と同じですが、フォントにグリフが存在しなかった時にエラー表示を出さず、その代りにエラーコードを返すところが異なります。
    - 0 ⇒ エラーが発生していないが、選択されたグリフが 1 個もない。
    - <正の整数> => エラーは発生せず、この値と同じ個数のグリフが選択された。
    - -2 ⇒ エラーが発生し、グリフが 1 個も選択されなかった。
    - -1 ⇒ エラーが発生し、それまでに少なくとも 1 個のグリフが選択された。
  SelectChanged([merge])
    変更されたグリフをすべて選択します。merge が真の場合、新しい選択範囲は、現在の選択範囲との和集合になります。
  SelectHintingNeeded([merge])
    FontForge がヒントを更新する必要があると判断した全グリフを選択します。
  SelectByATT(type,tags,contents,search-type)
    処理に関してはATT メニューコマンドによる選択を参照してください。 type に指定可能な値は以下のとおりです:

    `"Position"` | 単純な位置指定
    `"Pair"` | ペア単位の位置指定 (ただしカーニングは無し)
    `"Substitution"` | 単純な置換
    `"AltSubs"` | 代替文字群からの置換
    `"MultSubs"` | 複数文字への置換
    `"Ligature"` | 合字
    `"LCaret"` | 合字のキャレット位置指定
    `"Kern"` | カーニング
    `"VKern"` | 縦書き用カーニング
    `"Anchor"` | アンカークラス

    search_type の値は以下のとおりです。

    1. 結果を選択する
    2. 現在の選択内容に追加する
    3. 現在の選択内容を絞り込む

  Reencode(encoding-name[,force])
    カレントフォントを、指定された以下のどれかのエンコーディングに並べ替えます。
    compacted,original,
    iso8859-1, isolatin1, latin1, iso8859-2, latin2, iso8859-3, latin3, iso8859-4, latin4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-9, iso8859-10, isothai, iso8859-13, iso8859-14, iso8859-15, latin0, koi8-r, jis201, jisx0201, AdobeStandardEncoding, win, mac, symbol, wansung, big5, johab, jis208, jisx0208, jis212, jisx0212, sjis, gh2312, gb2312packed, unicode, iso10646-1, TeX-Base-Encoding, ユーザ定義の符号化方式のどれか一つ。 現在の文字の並びを、強制的に与えられたエンコーディングとして解釈するように指定することもできます。
    注意: グリフ名によって指定されるエンコーディングがいくつかあります (例えば、ユーザ定義のエンコーディングは PostScript エンコーディング配列として指定されます) が、その他の物は Unicode の符号位置のリストとして指定されます (AdobeStandard および TeX、符号位置で指定したユーザ定義のエンコーディングを除くほとんど全ての組み込みエンコーディングの場合)。 グリフ名によって定義されたエンコーディングを再符号化した時、ff は最初にグリフを適切なスロットに移動し、次に、不正な名前を持つ全てのグリフを強制的に正しい名前に変更します。この最も明らかな例は fi 合字です: AdobeStandard は、これは“fi”と命名しなければならないとしていますが、最近のフォントでは“f_i”と呼ぶのが一般的です。AdobeStandard に符号化変換を行うとグリフは正しい位置に移動され、その後に“fi”という名前に変更されます。
  SetCharCnt(cnt)
    フォントに含まれるエンコーディングスロットの個数を設定します。
  LoadEncodingFile(filename)
  LoadTableFromFile(tag,filename)
    どちらの引数も文字列でなければならず、最初の引数は 4 文字のテーブルタグでなければなりません。ファイルを読み込み、フォント内に tag で指定された名前のテーブルとして保存されます。ff が知っているテーブル名を tag に指定しないでください!
  SaveTableToFile(tag,filename)
    どちらの引数も文字列でなければならず、最初の引数は 4 文字のテーブルタグでなければなりません。ファイルを読み込み、保存されたテーブルのリストから与えられたタグをもつテーブルを検索して、指定したファイルに保存します。
  RemovePreservedTable(tag)
    tag で指定された保存されたテーブルを検索し、フォントから削除します。
  HasPreservedTable(tag)
    保存されたテーブルに名前が tag であるテーブルがあれば真を返します。
  SetFontOrder(order)
    フォントのアウトラインの次数を指定します。 order に指定できる値は 2 か 3 だけです。フォントの以前の次数を返します。
  SetFontHasVerticalMetrics(flag)
    フォントが縦書き用メトリックを含んでいるかどうかを設定します。値が 0 であればメトリックを含まず、 それ以外の値であれば含んでいることを意味します。以前の設定値を返します。
  SetFontNames(fontname[,family[,fullname[,weight[,copyright-notice[,fontversion]]]]])
    フォントにつけられた各種の PostScript 名を指定します。name が存在しない (または空文字列である) 場合、変更されません。
  SetFondName(fondname)
    フォントの FOND 名を設定します。
  SetItalicAngle(angle[,denom])
    イタリック体の傾き角を表す PostScript のフィールドを正しくセットします。 denom が指定されている場合、angle の値はまず denom で割ってから、イタリック角のフィールドに格納されます (実数値を表すための小細工です)。 angle の大きさは度数で表されます。
  SetMacStyle(val)
  SetMacStyle(str)
    引数は整数でも文字列でも構いません。 整数の場合、Mac で定義されているスタイルを表す以下のビットの組合せとなります:

    0x01 | Bold (ボールド)
    0x02 | Italic (イタリック)
    0x04 | Underline (下線)
    0x08 | Outline (縁どり文字)
    0x10 | Shadow (影つき文字)
    0x20 | Condensed (長体)
    0x40 | Extended (平体)
    -1 | FontForge はフォント名から推測を行います。

    ビット 0x20 と 0x40 (長体と平体) は両方同時に指定できません。

    引数が文字列である場合、複数のスタイル名を繋げたものを、例えば "Bold Italic Condensed" のように指定します。

  SetTTFName(lang,nameid,utf8-string)
    MS プラットフォームで使用される、指定された言語・IDの TrueType 名を指定します。 Lang は MS のサポートする 言語/ロケール に含まれていなければならず、名前 ID は 標準の名前指定で用いる小さな整数 のどれかでなければなりません。 空文字列 ("") はエントリを削除するのに使用できます。
    例: アメリカ英語の言語/ロケールで、SubFamily 文字列を指定するには以下のようにします:
    `SetTTFName(0x409,2,"Bold Oblique")`
  GetTTFName(lang,nameid)
    引数 lang および nameid は上と同じ意味です。 現在の値を UTF-8 で符号化された文字列として返します。 値が存在しない引数の組合せに対しては、"" を返します。
  SetPanose(array) SetPanose(index,value)
    フォントの panose 値を設定します。 10 個の整数からなる配列 1 個を引数としてすべての panose 値を設定するか、 2 個の整数を引数として `font.panose[index] = value` とする設定を行うかのどちらかが可能です。
  SetOS2Value(field-name,field-value)
    この関数は field-name で指定した名前をもつ OS/2 テーブルのフィールドに値を設定します。field-name はフィールド名を表す以下のいずれかの文字列でなければなりません:

    `Weight, Width, FSType, IBMFamily, VendorID, Panose,
    WinAscent, WinAscentIsOffset`

    これらは `フォント情報(F)`→`[OS/2]`→`[メトリック]` にある `Win Ascent のオフセット` フィールドと `[] オフセットを指定` チェックボックスと等価です。ここで WinAscentIsOffset は、WinAscent が絶対値として扱われるか、予期される数値に対する相対値かを指定します。

    `WinDescent, WinDescentIsOffset,
    TypoAscent, TypoAscentIsOffset,
    TypoDescent, TypoDescentIsOffset,
    HHeadAscent, HHeadAscentIsOffset,
    HHeadDescent, HHeadDescentIsOffset,
    TypoLineGap, HHeadLineGap, VHeadLineGap,
    SubXSize, SubYSize, SubXOffset, SubYOffset`

    下つき文字の X/Y 方向のサイズ/オフセットを設定します。

    `SupXSize, SupYSize, SupXOffset, SupYOffset`

    上つき文字の X/Y 方向のサイズ/オフセットを設定します。

    `StrikeOutSize, StrikeOutPos`

    第 2 引数は通常整数ですが、`VendorID` の場合は 4 文字の ASCII 文字列、`Panose` の場合は 10 個の整数要素を含んだ 1 個の配列を第 2 引数に指定します。

  GetOS2Value(field-name)
    引数に使用可能な値のセットはは上記のタグ文字列と同じです。`VendorId` は文字列を、`Panose` は配列を返します。その他の場合整数を返します。
  SetMaxpValue(field-name,value)
    引数 field-name は文字列で、以下のいずれかの値をとります: `Zones, TwilightPntCnt, StorageCnt, MaxStackDepth, FDEFs,` または `IDEFs`です。引数 value は整数値でなければなりません。
  GetMaxpValue(field-name)
    引数 field-name は上に挙げた値のどれかでなければなりません。
  SetUniqueID(value)
    PostScript の UniqueID フィールドに指定した値を設定します。 値 0 を与えた場合、FontForge は適正な範囲に含まれる乱数値を自動的に選びます。
  SetTeXParams(type,design-size,slant,space,stretch,shrink,xheight,quad,extraspace[...])
    TeX の (テキスト) フォントパラメータを設定します。
    type は 1, 2, 3 のいずれかで、フォントがテキスト用、数学用または数学用拡張フォントのどれであるかによって変わります。
    design-size は、フォントデザイン時に意図したポイントサイズです。
    残りのパラメータは Knuth の METAFONT ブックの (原書) 98-100 ページに書かれています。
    slant は百分率で表されています。その他のすべての値は em ユニットで表されています。
    type が 1 のときは、上に示した 9 個の引数が必要です。 type が 2 のときは、24 個の引数が必要です (残りの 15 個は METAFONT ブックに説明があります)。 type が 3 のときは、15 個の引数が必要です。
  GetTeXParam(index)
    index == -1 の場合 TeX のフォントタイプが返されます (text=0, math=1, math extended=2)
    それ以外の場合、index はフォントの TeX パラメータ配列のインデックスとして使用されます。
  SetCharName(name[,set-from-name-flag])
    現在選択中の 1 個のグリフに、name で指定した名前を設定します。 set-from-name-flag がないか、true と指定されている場合は、その名前に一致する Unicode 値と合字文字列を指定します。
  SetUnicodeValue(uni[,set-from-value-flag])
    現在選択されている文字に、name で指定した名前を設定します。 set-from-name-flag がないか、true と指定されている場合は、その名前に一致する Unicode 値と合字文字列を指定します。
  SetCharColor(color)
    現在選択されているグリフをすべて、color で指定した色 (24 ビット RGB (0xff0000 が赤) で表す) に設定します。 特別な値として、-2 はデフォルトの色を示します。
  SetCharComment(comment)
    現在選択されているグリフに comment で指定したコメントを設定します。 コメントは現在のエンコーディングから Unicode に変換されます。
  SetGlyphChanged(flag)
    flag が 1 の場合、選択中の全グリフを変更されたものとします。フラグが 0 の場合、変更されていないものと設定します。
  BitmapsAvail(sizes)
    フォントデータベース内に格納されたビットマップフォントのサイズ一覧を制御します。 値は各サイズからなる配列で指定します。 サイズがフォントデータベース内に存在しない場合、ビットマップが生成されます。 フォントデータベースに存在するサイズが指定されなかった場合、削除されます。 指定されたサイズが既にフォントデータベース内に存在する場合、そのまま変更されません。
    グレイマップフォントを指定したい場合、下位 16 ビットをピクセルサイズとして、上位 16 ビットをピクセルごとのビット数として扱います。 例えば 0x8000c は、各ピクセル 8 ビットを持つ 12 ピクセルフォントとなります。 ただし、12 ピクセルのビットマップフォントを指定するのには、0xc と 0x1000c の両方の値を用いることができます。
  BitmapsRegen(sizes)
    既に生成されているビットマップフォント内の特定のビットマップを更新することができます。 選択中のすべてのグリフに対し、指定された各ピクセルサイズを再生成します。
  ApplySubstitution(script,lang,tag)
    3 個の引数はすべて、4 文字を越えない文字列でなくてはなりません (4 文字より短い文字列は、後ろに空白が追加されます)。このコマンドは、選択中の各グリフに対して、そのグリフの置換リストを検索し、tag で指定されたタグを持つ (それに加え、スクリプトと言語の組合せがその置換に一致する) 置換が見つかった場合に置換を実行します ― すなわち、置換によって指定された異体字グリフを探して現在のグリフをそれで置き換え、異体字グリフを消去します。

    FontForge は文字列 "*" をスクリプトや言語の両方で使用できる (ただしタグには使用できません) ワイルドカードとして認識します。 すべての文字を縦書き用の字形に置き換えたい場合は以下のようになります:

    >     SelectAll()
    >     ApplySubstitution("*","*","vrt2")

  Transform(t1,t2,t3,t4,t5,t6)
    各引数は 100 で割られます。その後、選択中のすべてのグリフをこの行列で変換します。
  HFlip([about-x])
    選択中のすべてのグリフを、垂直線 x=about-x を中心にして、水平方向に反転します。 引数を指定しない場合、選択中の各グリフを、その中心軸の周りで反転します。
  VFlip([about-y])
    選択中のすべてのグリフを、水平線 y=about-y を中心にして、垂直方向に反転します。 引数を指定しない場合、選択中の各グリフを、その上下中心線の周りで反転されます。
  Rotate(angle[,ox,oy])
    選択中のすべてのグリフを指定された度数だけ回転します。 最後の 2 個の引数が指定されている場合、その点が回転の中心となります。 指定しない場合、グリフの上下・左右の中心を使用します。
  Scale(factor[,yfactor][,ox,oy])
    選択中のすべてのグリフを拡大・縮小します (拡大率は百分率で指定します)
    - 引数が 1 個の場合、グリフの中心点の周りで一様に拡大・縮小されます。
    - 引数が 2 個の場合、最初の引数が x 方向の拡大率を、第 2 の引数が y 方向の拡大率を指定します。 この場合も拡大・縮小は中心点の周りで行われます。
    - 引数が 3 個の場合、指定された中心の周りで一様に拡大・縮小されます。
    - 引数が 4 個の場合、指定された中心の周りで縦横異なる比率で拡大・縮小されます。
  Skew(angle[,ox,oy])
  Skew(angle-num,angle-denom[,ox,oy])
    選択中のすべてのグリフを指定した角度だけ傾けます。
  Move(delta-x,delta-y)
    選択中のすべてのグリフに含まれる点を、指定した量だけ移動します。
  MoveReference(delta-x,delta-y,[refname/ref-unicode]+)
    参照は、参照されるグリフの名前を含む文字列か、参照されるグリフの Unicode 符号位置を含む整数によって指定できます。(1 個以上の) 任意の個数の参照される参照を指定することができます。選択された各文字に対して、引数で指定した名前または Unicode 値にマッチする参照を検索します。見つかったすべての参照は指定したオフセットだけ移動されます。

    >     MoveReference(300,0,"acute",0xb4)

    > はすべての acute または grave への参照を、現在位置から 300 em ユニットだけ右に移動します。

  PositionReference(x,y,[refname/ref-unicode]+)
    参照は、参照されるグリフの名前を含む文字列か、参照されるグリフの Unicode 符号位置を含む整数によって指定できます。(1 個以上の) 任意の個数の参照される参照を指定することができます。選択された各文字に対して、引数で指定した名前または Unicode 値にマッチする参照を検索します。見つかったすべての参照は指定した位置に変更されます。

    >     PositionReference(0,0,"circumflex")

    > はすべての circumflex への参照を基底文字 circumflex の位置に移動します。

  ScaleToEm(em-size)
  ScaleToEm(ascent,descent)
    フォントの高さと深さを変更し、フォント内のすべての座標値を新しい em 値 (高さと深さの和) と古い値の比に合わせて拡大・縮小します。
  NonLinearTransform(x-expression,y-expression)
    x と y に対する正しい式を含む 2 個の文字列引数をとり、それらの式を用いて選択中のすべてのグリフを変換します。

    >     <e0> := "x" | "y" | "-" <e0> | "!" <e0> | "(" <expr> ")" |
    >     	"sin" "(" <expr> ")" | "cos" "(" <expr> ")" | "tan" "(" <expr> ")" |
    >     	"log" "(" <expr> ")" | "exp" "(" <expr> ")" | "sqrt" "(" <expr> ")" |
    >     	"abs" "(" <expr> ")" |
    >     	"rint" "(" <expr> ")" | "float" "(" <expr> ")" | "ceil" "(" <expr> ")"
    >     <e1> := <e0> "^" <e1>
    >     <e2> := <e1> "*" <e2> | <e1> "/" <e2> | <e1> "%" <e2>
    >     <e3> := <e2> "+" <e3> | <e2> "-" <e3>
    >     <e4> := <e3> "==" <e4> | <e3> "!=" <e4> |
    >     	<e3> ">=" <e4> | <e3> ">" <e4> |
    >     	<e3> "<=" <e4> | <e3> "<" <e4>
    >     <e5> := <e4> "&&" <e5> | <e4> "||" <e5>
    >     <expr> := <e5> "?" <expr> ":"

    >     NonLinearTrans("200+(x-200)*abs(y-300)/300","y")

    このコマンドはデフォルトのビルドでは使用できません。 `configure-fontforge.h` を変更して、FontForge を再構築してください。

  ExpandStroke(width)
  ExpandStroke(width,line cap, line join)
  ExpandStroke(width,line cap, line join,0,removeinternal /external flag)
  ExpandStroke(width,calligraphic-angle,height-numerator,height-denom)
  ExpandStroke(width,calligraphic-angle,height-numerator,height-denom, 0, remove internal/external flag)
    最初のフォーマットでは、線端は "butt", 線の結びは "round" と見なされます。
    “remove internal/external”フラグの値が 1 であれば内側の輪郭を除去し、 2 であれば外側の輪郭を除去します。 最初の 3 つの呼び出しは PostScript の“stroke”コマンドをシミュレートし、後ろ 2 つはカリグラフィ的なペンをシミュレートします。
    Width
      PostScript の "stroke" コマンドでは、width は作成される 2 本の線の間の距離です。より正確に言うと、オリジナルの曲線のすべての点に対して、その点における曲線の向きに垂直なベクトルに沿って width/2 ユニットだけ離れた点が追加されます。カリグラフィ的なペンでは、width は、曲線を描くのに使われるペンの太さです。
    Line-cap
      以下の 3 つのうちいずれかの値です: 0 ⇒ butt, 1 ⇒ round, 2 ⇒ square
    Line-join
      以下の 3 つのうちいずれかの値です: 0 ⇒ miter, 1 ⇒ round, 2 ⇒ bevel
    caligraphic-angle
      ペンを保持する (固定の) 角度です。
    height-numerator/denominator
      これらの 2 つの値は高さと幅のあいだの比率を指定します。
      高さ = numerator * width / denominator
      (スクリプト言語で扱えるのは整数のみなので、分数が必要なときにはこのような彌縫策を使っています)
    remove internal/external contour フラグ
      1 ⇒ 内側の輪郭を削除する
      2 ⇒ 外側の輪郭を削除する
      (両方の輪郭を削除することができます)
      4 ⇒ 結果に重複除去を施す (不安定)
  Outline(width)
    選択中のすべてのグリフを指定された幅で (グリフの内側で) 縁どりします。 グリフのバウンディングボックスは変更されません。 言い替えれば、Mac でいう“Outline Style”を生成します。
  Inline(width,gap)
    上の方法でアウトラインを生成してから、 アウトラインの内側に一致するようにアウトラインを縮小します。 言い替えれば、インライン化したグリフを生成します。
  Shadow(angle,outline-width,shadow-width)
    選択中のすべてのグリフを影つきグリフに変換します。
  Wireframe(angle,outline-width,shadow-width)
    選択中のグリフをワイヤフレーム化したものに変換します。
  RemoveOverlap()
    その名のとおりです。
  OverlapIntersect()
    交差部以外のすべてを除去します。
  FindIntersections()
    曲線が交差するすべての箇所を検出し、そこに点を追加します。
  Simplify()
  Simplify(flags,error[,tan_bounds[,bump_size[,error_denom,line_len_max]]])
    引数が指定されていない時の処理は自明です。flags が -1 の時には、冗長なデータの整理を行います。それ以外の場合、flags の各ビットは以下のように扱われます。
    - 1 ― 端点における傾きが変化することを許す
    - 2 ― 極値にある点を取り除いてよい
    - 4 ― 角の点を滑らかな曲線に近似してよい
    - 8 ― 滑らかにした点が十分水平・垂直に近い場合、水平・垂直に揃える
    - 16 ― 線からコブを取り除く

    引数 error は、変更されたパスがフォント座標系で本来のパスから何ユニットまでかけ離れてよいかを指定します。
    引数 tan_bounds は滑らかにする処理を行わない最大の角度を表します。
    bunp_size は除去して滑らかに変換するコブが、元の線から最大何ピクセル離れて良いかを指定します。
    5 番目の引数が与えられた場合、それは error 項の分母として扱われます (これにより、ユーザは分数ピクセルの距離を指定することができます)。
    一般に、端点の両側で方向が異なる線同士を併合しようとしてもうまくいきません。曲線のセグメントが長くなるほど、不愉快な結果を生み出す可能性は高まります。6 番目の引数を指定すると、併合される線の最大長を指定することができます (それより長い線はすべて併合されずに残ります)。

  NearlyHvCps([error[,err-denom]])
    水平か垂直に非常に近いものの、完全には一致しない位置に制御点があるかどうかをチェックします (これは、(例えば) `abs( (control point).x - point.x ) < error` であることとほとんど同義です。) ここで error は以下のいずれかです;

    0.1 | 引数を指定していない場合
    最初の引数 | 引数を 1 個だけ指定した場合
    (最初の引数) / (2 番目の引数) | 引数を 2 個指定している場合

  NearlyHvLines([error[,err-denom]])
    水平線か垂直線に非常に近いものの、完全には一致しない線があるかどうかをチェックします (これは、(例えば) `abs( (end point).x - (start point).x ) < error` であることとほとんど同義です。) ここで error は以下のいずれかです;

    0.1 | 引数を指定していない場合
    最初の引数 | 引数を 1 個だけ指定した場合
    (最初の引数) / (2 番目の引数) | 引数を 2 個指定している場合

  NearlyLines(error)
    ほとんど直線に近いスプラインを検出し、直線に変換します。スプラインをほとんど直線に近いと判定するのは、端点同士を結ぶ線分との乖離が error よりも小さい場合です。
  AddExtrema()
  RoundToInt([factor])
    すべての点/ヒント/参照オフセットの座標値を整数に丸めます。引数“factor”を指定した場合、`rint(factor * x) / factor` の式に従って丸めを行います。要するに、factor を 100 に設定すると 100 分の 1 単位で座標値を丸めます。
  RoundToCluster([within[,max]])
    最初の 2 個の引数は、近い座標を互いにまとめる値を示します。max は前の点から距離“within”以内に含まれる点の連鎖があるときに、中心点からの何個までの“within”を纏めるかを指定します。

    >      RoundToCluster(.1,.5)

    は、相互に 0.1 em ユニット以内の距離にある座標値をまとめます。`-0.1,-0.05,0,0.05,0.1,0.15` のような並びはすべてまとめられます。これは、各々が次の 0.1 以内にあり、どれも中心から 5 個以上離れていないからです。

  AutoTrace()
  CorrectDirection([unlinkrefs])
    引数がある場合、1 個の整数でなくてはなりません。 その値は、CorrectDirection のコードを実行する前に裏返しの参照をリンク解除するかどうかを制御するフラグとして扱われます。 引数が存在しないか、非ゼロの値が指定された時、裏返しの参照はリンク解除されます。
  DefaultATT(tag)
    選択中のすべてのグリフについて、与えられたタグに対して適切だと思われる値を推測します。 タグが "*" である場合、FontForge は可能なすべての機能に対して推測を行います。
  AddATT(type,script-lang,tag,flags,variant)
  AddATT("Position",script-lang,tag,flags,xoff,yoff,h_adv_off,v_adv_off)
  AddATT("Pair",script-lang,tag,flags,name,xoff,yoff,h_adv_off,v_adv_off,xoff2,yoff2,h_adv_off2,v_adv_off2)
    選択中の 1 個のグリフに対して 1 個のAdvanced Typography 機能を追加します。 最初の引数は Position, Pair, Substitution, AltSubs, MultSubs, Ligature のいずれかです。 2 番目の引数 script-lang は用字系・言語リストで、4 文字のスクリプト名の後ろに、言語名をカンマ区切りで並べたリスト――または特別な値“Nested”――が続きます (言語リストは波括弧 { } で 囲みます)。例:
    `grek{dflt} latn{dflt,VIT ,ROM }`
    3 番目の引数 tag は 4 文字の OpenType 機能タグです。

    4 番目の引数 flags は OTF のフラグです (-1 の時は、FontForge が適切なフラグを推測します)。

    - 0x0001 ⇒ 右から左へ
    - 0x0002 ⇒ 基底文字を無視する
    - 0x0004 ⇒ 合字を無視する
    - 0x0008 ⇒ マークを無視する
    - 0x00F0 ⇒ 未定義
    - 0xFF00 ⇒ 未サポート

    残りの引数は、最初の引数 (type) によって全く異なります。 type に Position を用いる機能タグを指定した場合、その機能がどのようにこのグリフのメトリックを変形するかを指定する 4 個の整数値を指定します。 type が Pair の場合、次の引数はペア中のもう一つのグリフの名前で、8 個の整数引数が後ろに続きます。最初の 4 個は最初のグリフの位置を指定し、次の 4 個は 2 番目のグリフの位置を変更します。 Substitution 型のタグの場合、5 番目の引数は、現在のグリフを置換する別のグリフの名前です。 AltSubs タグの場合、次の引数は現在のグリフを置き換える候補グリフすべてをスペース区切りで並べたリストです。 MultSubs の場合、次の引数は現在のグリフを置き換える一連のグリフをスペース区切りで並べたリストです。 Ligature の場合、引数は、現在のグリフによって置き換えられる一連のグリフ名をスペース区切りで並べたリストです。

  RemoveATT(type,script-lang,tag)
    引数に一致する任意の機能タグを削除します (引数は基本的に上と同じですが、何にでもマッチする "*" を使用できる点が異なります)
  CheckForAnchorClass(name)
    現在のフォントが name で指定した名前 (UTF-8 でなければなりません) と同名のアンカークラスを含む場合、1 を返します。
  AddAnchorClass(name,type,script-lang,tag,flags,merge-with)
    これらは、「エレメント(L)」→「フォント情報(I)」メニューの 「アンカークラス」ダイアログを反映しています。 最初の引数は UTF-8 でエンコードされたアンカークラスの名前です。 2 番目は "default", "mk-mk", または "cursive" のいずれかです。 3 番目はスクリプト-言語の文字列です:
    `grek{dflt} latn{dflt,VIT ,ROM }`
    4 番目の引数は 4 文字の OpenType 機能タグです。 5 番目の引数は OTF フラグ (-1 のときは、FontForge が適切なフラグを推測します) です。 6 番目と最後の引数は、同じ lookup に統合されるもう一つのアンカークラス (このクラスがまだ他のクラスを統合していない場合、空文字列となります) です。
  RemoveAnchorClass(name)
    アンカークラス (および、それに伴うすべての点) をフォントから削除します。
  AddAnchorPoint(name,type,x,y[,lig-index])
    現在選択中のグリフにアンカーポイントを追加します。 最初の引数はアンカークラスの名前です。 2 番目は文字列 "mark", "basechar", "baselig", "basemark", "curseentry" または "cursexit" のどれか 1 つを指定します。 その後ろの 2 つの引数は点の位置を指定します。 最後の引数は、type が "baselig" のときにのみ使用します。
  BuildComposite()
  BuildAccented()
  BuildDuplicate()
  AddAccent(accent[,pos])
    ちょうど 1 個のグリフを選択していなければなりません。そのグリフは最低 1 個の参照を含んでいる必要があります (そして、いちばん最後に追加された参照は基底グリフ――アクセントを置く土台となる文字――でなければなりません) 。最初の引数はアクセントのグリフ名、またはそのアクセントの Unicode のコードポイントです (そのグリフがフォントに存在しなければなりません)。2 番目の引数が存在する場合は、アクセントをどこに置くかを示します……もし省略した場合、アクセントの Unicode 値が使用されます。この引数は以下のフラグの OR を取ったものです。

    0x100 | 上
    0x200 | 下
    0x400 | 重ね打ち
    0x800 | 左
    0x1000 | 右
    0x4000 | 左中央
    0x8000 | 右中央
    0x10000 | 外側の中心
    0x20000 | 外側
    0x40000 | 左端
    0x80000 | 右端
    0x100000 | 接触する

  ReplaceWithReference([fudge])
    選択中のグリフのインラインコピーを含むすべてのグリフを検出し、それらを適切なグリフへの参照に変換します。 実行後、選択中の文字の一覧はコマンドによって変更された文字の一覧に切替えられます。

    引数 fudge を指定すると、座標値の誤差として許される距離を指定することができます。

  MergeFonts(other-font-name[,flags])
    other-font-name で指定したフォントをロードし、そのフォントに含まれているグリフでカレントフォントに含まれていないグリフをすべて取り出してカレントフォントに移動します。 flags 引数の解釈は Open 関数と同じです。 現在意味のあるフラグは、フォントを開くライセンスを持っていることを示す fstype=2 のみです。
  InterpolateFonts(percentage,other-font-name[,flags])
    現在のフォントと、other-font-name で指定された名前のフォントとの間で比率 percentage でフォントを補間します (注意: percentage は負の値や 100 を超える値を使用することができ、その場合はフォントを補外します)。 このコマンドはカレントフォントを新しく作られたフォントに変更します。 注意: この新しいフォントのフォント名を設定する必要があるでしょう。 flag 引数の意味は Open と同じです。
  DefaultUseMyMetrics()
    選択中のすべてのグリフを調べます。参照を含むグリフが存在し、その参照のどれもが“USE-MY-METRICS”ビットを含んでいない場合、もしもそれらの参照のうちのどれかが現在のグリフと幅が同じで、その文字の変換行列が恒等変換行列である場合、その参照にビットをセットします。
  DefaultRoundToGrid()
    選択中のすべてのグリフを調べます。どの参照も点の照合によって位置指定されていない場合、FontForge はその参照に対し、 TrueType の“ROUND-TO-GRID”フラグをセットします。

  AutoHint()
  SubstitutionPoints()
  AutoCounter()
  DontAutoHint()
  AutoInstr()
  AddInstrs(thingamy,replace,instrs)
    引数 thingamy は文字列で、"fpgm", "prep" または何らかのグリフ名、もしくは空文字列でなければなりません。"fpgm" または "prep" の場合、それぞれ同名の TrueType テーブルを参照します (必要に応じて作成されます)。特定のグリフを参照するときにはそのグリフのグリフ名を指定します。選択中の任意の文字を使用する場合には、空文字列を指定します。
    引数 replace は整数です。値が 0 の場合、既に存在する命令の後ろに instr で指定された命令を付け加えます。値が非 0 の場合、既に存在する命令を消去し、指定された命令に置き換えます。 最後の instr は FontForge の人間可読な形式の TrueType 命令文字列で、例えば "`IUP[x]\nIUP[y]`" のような形で指定します。
  ClearInstrs()
    選択中のグリフから命令を削除します。
  ClearTable(tag)
    tag で指定した名前をもつテーブルを削除します。テーブル名として指定できるのは、‘fpgm’,‘prep’,‘cvt ’,‘maxp’またはユーザ定義のテーブルの名前です。テーブルが見つかった (そして削除された) ときには 1 を返し、テーブルが存在しない場合には 0 を返します。
  FindOrAddCvtIndex(value[,sign-matters])
    引数 value で指定した値が cvt テーブル内に含まれるインデックスを返します。テーブル内に value が存在しない場合、それを追加してから、テーブルの末尾要素のインデックスを返します。ほとんどの TrueType 命令は cvt テーブル内の項目の符号を無視しますが、値に意味がある命令がいくつかあります。通常このコマンドは値の絶対値を格納しますが、引数 sign-matters が存在し、0 以外の値の場合、負の値を参照 (または追加) することができます。
  ReplaceCvtAt(index,value)
    cvt テーブルの index 番目の項目に value で指定した新しい値を設定します。
  GetCvtAt(index)
    引数 index で指定した位置にある cvt テーブルの項目値を返します。
  PrivateToCvt()
    Private 辞書情報に含まれる標準の数値項目を cvt テーブルに追加します。
  ClearHints()
  AddHHint(start,width)
    水平ステムヒントを選択中の任意のグリフに追加します。 ヒントは start で指定した位置から始まり、 wide で指定した幅をもちます。 このヒントは選択中のすべてのグリフに追加されます。
  AddVHint(start,width)
    垂直ステムヒントを選択中の任意のグリフに追加します。 ヒントは start で指定した位置から始まり、 wide で指定した幅をもちます。 このヒントは選択中のすべてのグリフに追加されます。
  ClearCharCounterMasks()
    選択中の (1 個の) グリフから、すべてのカウンターマスクを取り除きます。
  SetCharCounterMask(cg,hint-index,hint-index,...)
    列挙したヒントが第 cg 番目のカウンターマスクに含まれるように、 作成または設定を行います。 ヒント番号 0 は最初の水平ステムヒントに対応し、 1 番は 2 番目に…という要領で対応します。 垂直ステムヒントは水平ステムヒントの後に来ます。
  ReplaceCharCounterMasks(array)
    これを呼び出すには、ちょうど 1 個のグリフを選択している必要があります。 そのグリフに対し、一連のカウンターマスクを作成します。 1 個だけ指定できる引数は整数 12 個の配列からなる配列です (C で書けば、int array[][12] となるでしょう)。 これは type2 カウンターマスクのフォーマットです。 トップレベルの配列要素の個数は、設定するカウンターグループの個数です。 ここで内側の配列は、カウンターマスクに対応し、1 個のバイト配列として扱われます。 バイト内の各ビットは、対応するヒントがこのカウンター内でアクティブかどうかを指定します。 (ヒントは最大で 96 個なので、最大 12 バイトとなります)。 Array[i][0]&0x80 は最初の水平ステムヒントに対応し、Array[i][0]&0x40 が 2 番目、Array[i][1]&0x80 が 8 番目という要領で対応します。
  ClearPrivateEntry(key)
    フォントのプライベート辞書から、key をキーにもつ項目を削除します。
  ChangePrivateEntry(key,val)
    プライベート辞書内の key をキーにもつ項目の値を val に変更します (key がまだ存在しない場合、追加されます)。(たとえ、値が PostScript の数値を表す場合であっても、すべての値は文字列でなければなりません。)
  GetPrivateEntry(key)
    プライベート辞書から key をキーにもつ値を返します。 すべての返り値は文字列です。 該当する項目が辞書に存在しない場合、空文字列を返します。
  HasPrivateEntry(key)
    Private 辞書に key で指定した名前のキーが存在するかどうかを返します。
  SelectBitmap(size)
    ビットマップのみのフォントでは、その後で呼び出すメトリックコマンドにおける単位に、どのビットマップの実体を用いるかを選択します。どのビットマップも選択していないときは、単位は em ユニットになり、それ以外の場合、指定したビットマップ実体のピクセル数になります。size はフォントのピクセルサイズでなければなりません。アンチエイリアスフォントを使用しているときは、size は (depth<<16)|pixel_size にセットしなければなりません。value として -1 を選択すると、すべてのビットマップを選択解除します (単位は em ユニットになります)。
  SetWidth(width[,relative])
    2 番目の引数が存在しないか 0 の場合、文字幅を最初の引数にセットします。 2 番目の引数が 1 の場合、文字幅を最初の引数で指定した量だけ増やします。 第 2 引数が 2 の場合、文字幅は比率〈最初の引数〉/100.0 だけ拡大されます。 ビットマップのみのフォントの場合については、SelectBitmap の単位に関するコメントを参照してください。
  SetVWidth(vertical-width[,relative])
    2 番目の引数が存在しないか 0 の場合、文字の全高 (縦書き時の送り幅) を最初の引数にセットします。 2 番目の引数が 1 の場合、文字の高さを最初の引数で指定した量だけ増やします。 2 の場合は、文字の高さは比率〈最初の引数〉/100.0 だけ拡大されます。 ビットマップのみのフォントの場合については、SelectBitmap の単位に関するコメントを参照してください。
  SetLBearing(lbearing[,relative])
    2 番目の引数が存在しないか 0 の場合、左サイドベアリングを最初の引数にセットします。 2 番目の引数が 1 の場合、左サイドベアリングを最初の引数で指定した量だけ増やします。 2 の場合は、左サイドベアリングは比率〈最初の引数〉/100.0 だけ拡大されます。 ビットマップのみのフォントの場合については、SelectBitmap の単位に関するコメントを参照してください。
  SetRBearing(rbearing[,relative])
    2 番目の引数が存在しないか 0 の場合、右サイドベアリングを最初の引数にセットします。 2 番目の引数が 1 の場合、右サイドベアリングを最初の引数で指定した量だけ増やします。 2 の場合は、右サイドベアリングは比率〈最初の引数〉/100.0 だけ拡大されます。 ビットマップのみのフォントの場合については、SelectBitmap の単位に関するコメントを参照してください。
  CenterInWidth()
  AutoWidth(spacing)
    選択中のすべてのグリフの幅を推測します。これにより、2 個の隣り合う“I”の字が spacing ユニットだけ離れて配置されます。 (spacing が em サイズ (アセント(“高さ”)とディセント(“深さ”)の和) の反数の場合、デフォルト値を使用します)
  AutoKern(spacing,threshold[,kernfile])
    (AutoKern は一般的にはあまりよく動作しません)
    選択中のすべてのグリフを調べてカーニングペアを推測します。 kernfile を指定した場合、FontForge はファイル kernfile からカーニングペアを読み込みます。
  SetKern(ch2,offset)
    選択中の各グリフと、グリフ ch との間のカーニング量を offset に設定します。 最初の引数は Select() での指定と同じです。 2 番目の引数は、カーニングのオフセットを表す整数です。
  RemoveAllKerns()
    カレントフォントからすべてのカーニングペアとカーニングクラスを削除します。
  SetVKern(ch2,offset)
    選択中の各グリフと、グリフ ch との間の縦書きカーニング量を offset に設定します。 最初の引数は Select() での指定と同じです。 2 番目の引数は、カーニングのオフセットを表す整数です。
  VKernFromHKern()
    カレントフォントからすべての縦書き用カーニングペアとカーニングクラスを削除し、 次に、それらのグリフの縦書き用に横転したグリフ同士の文字のペアに設定された横書き用カーニングデータをコピーすることによって、新しい縦書きカーニングペアを生成します。
  RemoveAllVKerns()
    カレントフォントからすべての縦書き用のカーニングペアとカーニングクラスを削除します。

  MMInstanceNames()
    マルチプルマスターセットに含まれるすべてのインスタンスフォントの名前を含む 配列を返します。
  MMAxisNames()
    マルチプルマスターセットに含まれるすべての軸の名前を含む配列を返します。
  MMAxisBounds(axis)
    axis は、マルチプルマスターフォントに含まれる軸の数よりも少ない整数です。下限値、デフォルト値と上限値を含む配列を返します。それぞれの値は 65536 倍されていることにご注意ください (それらは Mac では整数値でなくてはならず、FontForge は実数値をサポートしていないからです)。

    デフォルト値は、GX の Var という概念に相当します。FontForge は本物のマルチプルマスターフォントに対しては妥当な値をシミュレートします。

  MMWeightedName()
    マルチプルマスターセットに含まれる重みづけされたフォントの名前を返します。
  MMChangeInstance(instance)
    ここで instance はフォント名か小さな整数のどちらかです。 文字列を渡した場合、FontForge はマルチプルマスターフォントセットから すべてのフォント (インスタンスフォントと重みづけされたフォント) を検索し、 カレントフォントの名前を指定された物に変更します。 小さな整数を渡したときは、-1 が重みづけされたフォントを表し、 [0,$mmcount) の範囲の値はフォントセット内の特定のインスタンスを表します。
  MMChangeWeight(weights)
    weights は整数からなる配列で、1 軸に対し整数 1 個が対応します。それぞれの値は必要な値の 65536 倍でなければなりません (一般に小さな実数となる Mac のブレンドを扱うためです)。このコマンドは現在のマルチプルマスターフォントのデフォルトウェイトを異なる値に変更し、それを現在のインスタンスに設定します。
  MMBlendToNewFont(weights)
    weights は整数からなる配列で、1 軸に対し整数 1 個が対応します。それぞれの値は必要な値の 65536 倍でなければなりません (一般に小さな実数となる Mac のブレンドを扱うためです)。このコマンドはマルチプルマスターフォントをブレンドすることによって全く新規にフォントを作成し、新しいフォントを現在のフォントに設定します。

  CIDChangeSubFont(new-sub-font-name)
    カレントフォントが CID フォントである場合、 このコマンドはアクティブなサブフォントを指定した物に変更します (引数は、サブフォントの PostScript フォント名を表す文字列です)。
  CIDSetFontNames(fontname[,family[,fullname[,weight[,copyright-notice]]]])
    CID フォント本体に付随する各種の PostScript 名を設定します。 名前が欠けている場合 (または空文字列の場合) 変更されません。 (これは SetFontName と同じ働きをしますが、カレントフォントではなく、 それを含むトップレベルの CID フォントに作用することが異なります)。
  CIDFlatten()
    CID フォントを単一化 (すべてのサブフォントを 1 個に統合) します
  CIDFlattenByCMap(cmap-filename)
    CID フォントを単一化し、指定した CMap ファイルによってエンコードした結果を返します。
  ConvertToCID(registry, ordering, supplement)
    引数 registry, ordering および supplement で指定するグリフ集合を用いて カレントフォントを CID フォントに変換します。 registry と ordering は文字列で、supplement は整数でなければなりません。
  ConvertByCMap(cmapfilename)
    カレントフォントを指定された CMap ファイルを用いて CID フォントに変換します。 cmapfilename は、Adobe CMap File Format に適合するファイルのパス名で なければなりません。

  CharCnt()
    カレントフォントに含まれるエンコーディングスロット (またはエンコーディングスロット + 符号化されていない文字) の個数を返します。
  InFont(arg)
    フォント内にグリフ arg が存在するかどうかを返します。 引数が整数の場合、値が >= 0 かつ < フォント内のグリフの総数である場合に真を返します。 それ以外の場合、引数は Unicode のコードポイントか PostScript 文字名であると解釈され、そのグリフがフォント内に存在する時に真を返します。
  WorthOutputting([arg])
    引数が存在しない場合、ちょうど 1 個の引数を選択していなければならず、この関数はそのグリフに適用されます。それ以外の場合、arg は上と同様に解釈されます。この関数は、対象となるグリフが何らかのスプライン、参照、画像を含んでいるか、幅が設定されているときに真を返します。
  DrawsSomething([arg])
    引数 arg の意味は上と同様です。 この関数は、グリフにアウトライン、参照または画像が含まれているときに真を返します。
  GlyphInfo(str)
  GlyphInfo("Kern",glyph-spec)
  GlyphInfo("VKern",glyph-spec)
  GlyphInfo(str,script,lang,tag)
    フォント内の 1 個のグリフだけが選択されていなければなりません。 その時、この関数はそのグリフに関する情報を返します。 返される情報は、文字列 str に依存します (意味は見てのとおりです):
    - “Name”はグリフの名前を返します。
    - “Unicode”はグリフの Unicode エンコーディング値を返します。
    - “Encoding”はグリフのカレントフォント内の符号位置を返します。
    - “Width”はグリフの幅を返します。
    - "VWidth" はグリフの全高 (縦書き時の送り幅) を返します。
    - “TeXHeight”は tex_height フィールドを返します (値 0x7fff は、デフォルト値が使用されることを表します)。
    - “TeXDepth”は tex_depth フィールドを返します (値 0x7fff は、デフォルト値が使用されることを表します)。
    - “TeXSubPos”は tex_sub_pos フィールドを返します (値 0x7fff は、デフォルト値が使用されることを表します)。
    - “TeXSuperPos”は tex_super_pos フィールドを返します (値 0x7fff は、デフォルト値が使用されることを表します)。
    - “LBearing”はグリフの左サイドベアリングを返します。
    - “RBearing”はグリフの右サイドベアリングを返します。
    - “BBox”はグリフアウトラインの [xの最小値, yの最小値, xの最大値, yの最大値] を含む 4 要素の配列を返します。
    - “Kern”(この場合、もう一つのグリフを 2 番目の引数として Select() と同じ方法で指定しなければなりません) は、2 個のグリフの間のカーニングオフセット (存在しない場合は 0) を返します。
    - “VKern”(この場合、もう一つのグリフを 2 番目の引数として Select() と同じ方法で指定しなければなりません) は、2 個のグリフの間の縦書き用カーニングオフセット (存在しない場合は 0) を返します。
    - “Xextrema”(垂直方向の位置を指定する 2 番目の引数が存在しなければなりません) は、指定した垂直方向の位置における、グリフの輪郭の水平方向の最小値と最大値の 2 要素を含む配列を返します。指定した位置がグリフのバウンディングボックスの外側にあるときは、最小値が 1・最大値が 0 (つまり、最大値<最小値 という現実にありえない結果) となります。
    - “Xextrema”(水平方向の位置を指定する 2 番目の引数が存在しなければなりません) は、指定した水平方向の位置における、グリフの輪郭の垂直方向の最小値と最大値の 2 要素を含む配列を返します。指定した位置がグリフのバウンディングボックスの外側にあるときは、最小値が 1・最大値が 0 (つまり、最大値<最小値 という現実にありえない結果) となります。
    - “Color”はグリフの色を 24 ビット RGB 値 (そのグリフに色が設定されていない場合は -2) で返します。
    - “Comment”はグリフに設定されたコメントを返します (Unicode からデフォルトエンコーディングに変換されます)。
    - “Changed”は、最後に保存または読み込みを行った後でグリフが変更されたかどうかを返します。
    - “DontAutoHint”は、"Don't AutoHint" フラグの状態を返します。
    - “Position”は 3 個の追加の引数 script, language と tag (これらはすべて 4 文字からなる文字列です) をとり、そのグリフに tag で指定されたタグをもつ位置変更が存在するかどうかを返します。
    - “Pair”は 3 個の追加の引数 script, language と tag (これらはすべて 4 文字からなる文字列です) をとり、そのグリフに、tag で指定されたタグをもつペア単位の位置変更が存在するかどうかを返します。
    - “Substitution”は 3 個の追加の引数 script, language と tag (これらはすべて 4 文字からなる文字列です) をとり、選択中の文字の単純置換文字で tag で指定されたタグをもつものの名前を返します (存在しない場合は空文字列を返します)。
    - “AltSubs”は 3 個の追加の引数 script, language と tag (これらはすべて 4 文字からなる文字列です) をとり、選択中のグリフの tag で指定されたタグをもつ選択型置換文字の名前を空白で区切って列挙したリストとして返します (存在しない場合は空文字列を返します)。
    - “MultSubs”は 3 個の追加の引数 script, language と tag (これらはすべて 4 文字からなる文字列です) をとり、選択中のグリフを tag で指定されたタグで分解した時の文字の名前を順番に並べた空白区切りのリストとして返します (存在しない場合は空文字列を返します)。
    - “Ligature”は 3 個の追加の引数 script, language と tag (これらはすべて 4 文字からなる文字列です) をとり、選択中のグリフの全構成要素を順番に並べた空白区切りリストとして返します (存在しない場合は空文字列を返します)。
    - “GlyphIndex”は、TrueType フォントの 'glyf' 内で選択中のグリフが位置するインデックスを返します。グリフが後から作成された場合は -1 を返します。 この値は、TrueType/OpenType フォントが生成された時には (生成されたフォント内のインデックスに) 変更される可能性があります。
    - “LayerCount”はグリフに含まれるレイヤの個数を返します。マルチレイヤフォント以外では、この値は常に (前面と背面で) 2 が返されます。
    - “RefCount”はグリフ内の参照の個数を返します。
    - “RefNames”は、参照している全グリフの名前を含む 1 個の配列を返します。この配列の要素数が 0 であることもあります。この配列には同一のグリフを 2 回含むことがあります ("colon" はピリオドを 2 回参照するでしょう)。
    - “RefTransform”は配列の配列を返します。いちばん下の配列は、それぞれ対応するグリフに適用される 6 要素の (実数値) 変換行列です。

    例:

    >     Select("A")
    >     lbearing = CharInfo("LBearing")
    >     kern = CharInfo("Kern","O")
    >     Select(0u410)
    >     SetLBearing(lbearing)
    >     SetKern(0u41e,kern)
    >     Select("a")
    >     verta = CharInfo("Substitution","*","dflt","vrt2")

  CharInfo(str)
    GlyphInfo の廃止された名前です。
  SetGlyphTeX(height,depth[,subpos,suppos])
    このグリフの tex_height および tex_depth フィールドを設定します。また、数学フォントにでは下つき文字の位置と上つき文字の位置も設定します。
  GetPosSub(feature-tag,script,lang)
    あらかじめグリフを 1 個だけ選択しておく必要があります。そのグリフに付随する GPOS/GSUB 機能に関する情報を返します (クラスベースのカーニングや文脈依存の機能に関する情報は返しません――フォント全体に適用される情報は何も表示しません――選択中のグリフに関連する物のみです)。引数は 4 文字の文字列 (またはワイルドカードとして用いられる“*”) でなければなりません。この関数は配列の配列を返します (引数にマッチした各機能ごとに配列の 1 項目が割り当てられます)。何もマッチしなければ、長さ 0 の配列が返されます。

    それぞれの部分配列には以下の情報が含まれています。

    - 機能タグ (文字列)
    - この機能の用字系/言語文字列
    - タイプ (`Position, Pair, Substitution, AltSubs, MultSubs` または `Ligature` のどれかの文字列)

    以下の項目はタイプによって異なります。

    “Position”の場合
      それぞれが GPOS 値レコードの内容を表す 4 個の数値 (dx,dy,d_horizontal_advance,d_vertical_advance)
    “Pair”の場合
      ペアに含まれるもう片方のグリフの名前を含む 1 個の文字列

      それぞれが GPOS 値レコードの内容を表す 8 個の数値 (最初の 4 個は現在のグリフを制御し、その後ろの 4 個の数値は 2 番目のグリフを制御します)

    “Substitution”の場合
      現在のグリフを置き換えるべきグリフ名を含む 1 個の文字列
    その他の場合
      各要素に 1 個ずつグリフ名が格納されます。

    例:

    >     >Select("ffl")
    >     >Print( GetPosSub("liga","*","*"))
    >     [[liga,latn{dflt} ,Ligature,f,f,l],
    >     [liga,latn{dflt} ,Ligature,ff,l]]
    >     >Select("T")
    >     >Print( GetPosSub("*","*","*"))
    >     [[kern,latn{dflt} ,Pair,u,0,0,-76,0,0,0,0,0],
    >     [kern,latn{dflt} ,Pair,e,0,0,-92,0,0,0,0,0],
    >     [kern,latn{dflt} ,Pair,a,0,0,-92,0,0,0,0,0],
    >     [kern,latn{dflt} ,Pair,o,0,0,-76,0,0,0,0,0]]
    >     >Select("onehalf")
    >     >Print( GetPosSub("frac","latn","dflt"))
    >     [[frac,latn{dflt} ,Ligature,one,slash,two],
    >     [frac,latn{dflt} ,Ligature,one,fraction,two]]

  ## 例

  - FontForge のテストスイート (という程の物ではないが)
  - 寄贈されたスクリプトのディレクトリ
  - その他のプロジェクトで使用されているスクリプト
    - x-symbol

  ### 例 1:

  >     # 選択中のすべてのグリフの色を黄色に設定する。
  >     # FontForge の対話的なセッション中で動かすように作られている。
  >     foreach
  >       SetCharColor(0xffff00)
  >     endloop

  ### 例 2:

  >     #!/usr/local/bin/fontforge
  >     # ラテン文字のフォントをとり、キリル文字の追加に先だって、
  >     # いくつかの単純な変形を適用する。
  >     # 非対話的な FontForge のセッションからも実行可能。
  >     Open($1);
  >     Reencode("KOI8-R");
  >     Select(0xa0,0xff);
  >     // ラテン文字と同じと思われるこれらの文字をコピーする
  >     BuildComposit();
  >     BuildAccented();

  >     // "R" を裏返しにしたように見える "Я"(Ya) を処理する
  >     Select("R");
  >     Copy();
  >     Select("afii10049");
  >     Paste();
  >     HFlip();
  >     CorrectDirection();
  >     Copy();
  >     Select(0u044f);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     // "Г"(Gamma) は "L" を上下逆さまにしたように見える
  >     Select("L");
  >     Copy();
  >     Select(0u0413);
  >     Paste();
  >     VFlip();
  >     CorrectDirection();
  >     Copy();
  >     Select(0u0433);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     // 小型大文字の "K" などの編集の準備をする
  >     Select("K");
  >     Copy();
  >     Select(0u043a);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     Select("H");
  >     Copy();
  >     Select(0u043d);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     Select("T");
  >     Copy();
  >     Select(0u0442);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     Select("B");
  >     Copy();
  >     Select(0u0432);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     Select("M");
  >     Copy();
  >     Select(0u043C);
  >     Paste();
  >     CopyFgToBg();
  >     Clear();

  >     Save($1:r+"-koi8-r.sfd");
  >     Quit(0);

  ## 「スクリプトを実行」ダイアログ

  このダイアログにより、FontForge の中でスクリプトを直接打ち込んで実行することができます。 もちろん、一番多いケースは、実行したいスクリプトが既にどこかに存在する場合でしょう。そのために `[呼び出す(A)]` ボタンがダイアログの下についています。 `[呼び出す(A)]` ボタンを押すと、*.pe の拡張子を持つファイルを探すためのファイル選択ダイアログが現れます (ワイルドカードシーケンスを入力して `[フィルタ]` ボタンを押すことにより、これを変更することができます)。 スクリプトを選択すると、そのスクリプトを起動するためのコマンドがダイアログのテキストエリアに挿入されます。

  スクリプトのカレントフォントは、つねにスクリプトの呼び出し元のフォントに設定されます。

  ## スクリプトメニュー

  頻繁に使うスクリプトのリストを、プリファレンスダイアログを用いて作成することができます。`ファイル(F)`→`環境設定(E)...` を起動し、`[スクリプトメニュー]` タブを選択してください。このダイアログには、10 個の入力可能な項目があり、それぞれに名前 (これがメニュー内に表示されます) と、それを指定した時に実行されるスクリプトファイル名の入力欄が含まれています。

  プリファレンスを設定した後、フォントビューからスクリプトを起動することができます。起動には、メニューから直接 (`ファイル(F)`→`スクリプトメニュー`→`(設定した名前)`) 起動するか、ホットキーを使用することができます。 最初に追加したスクリプトは Ctl-Alt-1, 2 番目は Ctl-Alt-2 で起動でき、10 番目は Ctl-Alt-0 となります。

  スクリプト内でのカレントフォントは、常に、それを呼び出したフォントにセットされます。

  ― 前 ― 目次 ― 次 ―