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)→スクリプトの実行(M)」でスクリプトを起動した場合、現在編集中のフォントがカレントフォントとなり、そうでなければ初期状態ではカレントフォントは存在しません。
カレントフォントを変更するには Open() と New(), Close() の各コマンドを使います。
FontForge は、現在開かれたフォントのリストも保持しています。
このリストの並び順にはとくに意味はありません。
リスト内の最初のフォントは $firstfont です。
同様に、CID-Keyed フォントを操作する時には、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ファミリーを出力(G) で出力したときの 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 となります。
-
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 を返し、成功時には書き出されたバイト数を返します。
-
ファイル全体を文字列に読み込みます。ファイルが存在しないか空である場合は空文字列を返します。返り値の文字列はファイル全体を保持するのに十分なバイト数に加えて末尾の 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 で指定した拡張子で決まります。
利用可能な拡張子は以下のとおりです:
bitmaptype を指定した場合、それは以下のどれかでなければなりません。
注意: ビットマップ出力を指定した場合、現在のフォントデータベースに含まれる全てのサイズが出力されますが、このコマンドはビットマップを作成しませんので、フォントデータベースにビットマップが全く含まれない場合、(ビットマップを出力するように指定したとしても) 全く出力されません。ビットマップの出力を行いたい場合、あらかじめ 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&16 => 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, ...)
-
so it extends the current selection. -->
上のコマンドと同じですが、このコマンドは選択中の文字を最初に消去しないので、現在選択中の範囲を拡張します。
The same as the previous command except that it does not clear the selection
-
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 の値は以下のとおりです。
-
結果を選択する
-
現在の選択内容に追加する
-
現在の選択内容を絞り込む
-
-
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 に変換されます。
-
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]+)
-
References may be identified either by a string containing the name of the
glyph being refered to, or an integer containing the unicode code point of
the glyph being refered to, there may be an arbetrary (positive) number of
references specified. Each selected glyph will be searched for references
that match the name/unicode-values given, all references found will be moved
by the specified offsets.
参照は、参照されるグリフの名前を含む文字列か、参照されるグリフの 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
-
These two values specify a ratio between the height and the width
height = numerator * width / denominator
(the scripting language only deals in integers, so when fractions are needed
this kludge is used)
これらの 2 つの値は高さと幅のあいだの比率を指定します。
高さ = numerator * width / denominator
(スクリプト言語で扱えるのは整数のみなので、分数が必要なときにはこのような彌縫策を使っています)
-
remove internal/external contour flags
-
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 ― 線からコブを取り除く
The error argument is the number of font units by which the modified path
is allowed to stray from the true path.
引数 error は、変更されたパスがフォント座標系で本来のパスから何ユニットまでかけ離れてよいかを指定します。
引数 tan_bounds は滑らかにする処理を行わない最大の角度を表します。
bunp_size は除去して滑らかに変換するコブが、元の線から最大何ピクセル離れて良いかを指定します。
5 番目の引数が与えられた場合、それは error 項の分母として扱われます (これにより、ユーザは分数ピクセルの距離を指定することができます)。