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" ロケールの書式 -- 小数点は ".")
-
二重引用符または一重引用符で囲まれた文字列
-
手続きの呼び出しまたは実行するファイル
-
括弧に囲まれた式
以下の 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)
-
配列に含まれる要素数を返します。
-
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 が省略された時は、読み込みアクセスをチェックします。
-
UnicodeFromName(name)
-
文字列 "name" を、一般に使用されるグリフ名を格納した FontForge のデータベースから検索して、その名前がもつ Unicode 値を (見つからなければ -1 を) 返します。
これは、カレントフォント (があれば) を検査しません。
-
Chr(int)
Chr(array)
-
文字列内に含まれる各文字のエンコーディングを表す整数の配列を返します。
pos を指定する場合は、string の長さより小さい整数でなくてはならず、
関数は文字列 string 内の位置 pos にある文字の文字コードを整数で返します。
-
Real(int)
-
整数を実数に変換します。
-
Round(real)
-
実数を最も近い整数値に丸めて、整数に変換します。
-
Floor(real)
-
real を、それを超えない最大の整数に変換します。
-
Ceil(real)
-
real を、それを下回らない最小の整数に変換します。
-
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 を指定した場合、それは以下のどれかでなければなりません。
アウトラインフォントを出力したくない場合、拡張子 ".bdf" を
filename に指定してください。
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 のプラットフォームの両方で動作するようにテーブルを作成します。
-
fmflags&0x100 => グリフマップファイル (GID=>グリフ名, Unicode への対応表) を作成します
fmflags&0x200 => TeX のフォントメトリック情報を含む 'TeX' テーブルを生成します。
-
-
fmflags&0x10000 => TFM ファイルを出力します。
-
fmflags&0x40000 => flex ヒントを格納しません。
-
fmflags&0x80000 => PostScript のヒントを一切格納しません。
-
fmflags&0x200000 => PostScript の座標値を整数に丸めます。
res により、生成された BDF フォントの解像度が決まります。
-1 を指定すると、FontForge が各サイズに対して自動的に値を推測します。
filename に ".mult" 拡張子を指定した場合、
"mult-sfd-file" が既に存在することでしょう。
これは、現在のエンコーディングからサブフォントへのマッピングを含むファイルの名前です。
一例をここに示します。
このファイルが存在しない場合、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 個のグリフへの参照が含まれているときにこのコマンドを実行すると、選択中のすべてのグリフがそのグリフを参照するようになります。
-
Clear
-
選択中のすべてのグリフを消去します。
-
ClearBackground
-
選択中のすべてのグリフの背面を消去します。
-
CopyFgToBd
-
選択中のすべてのグリフに対し、前面のスプラインを背面にコピーします。
-
Join([fudge])
-
選択中のグリフ内の開いたパスを (重なり合った点の所で) 結合します。
fudge が指定されている場合は、結合する点同士の距離が fudge ユニットより近ければ、一致しなくても重なっていると見なします。
-
UnlinkReference
-
選択中のすべてのグリフに含まれる参照を解除します。
-
SelectAll
-
すべてのグリフを選択します。
-
SelectNone
-
すべてのグリフを選択解除します。
-
Select(arg1, arg2, ...)
-
このコマンドは、まず現在の参照を解除し、それから引数を 2 個ずつ対にして得られる範囲内 (両端を含む) のどれかに含まれるグリフをすべて選択します。
最後に 1 個だけ余った引数がある場合、その 1 個のグリフも選択します。
引数は以下のいずれかの方法によって指定できます:
-
現在のフォントの符号化方式における位置を表す整数
-
Unicode の PostScript 名 (現在のフォントのエンコーディングに変換されます)
-
Unicode のコードポイント (例: 0u61) これは、(現在のフォントのエンコーディングに変換されます)
-
Select に与えた引数が 1 個だけで、その引数が配列であるならば、グリフの選択範囲は配列で指定された物となります。
array[0] は符号位置 0 にあるグリフの選択を表し、以下の文字も同様です。
配列の要素数と、フォント内に含まれるグリフの個数は同じである必要はありません。
-
SelectMore(arg1, arg2, ...)
-
上のコマンドと同じですが、このコマンドは選択中の文字を消去せずに、現在選択中の文字に上書きします。
-
SelectIf(arg1,arg2, ...)
-
Select() と同じですが、フォントにグリフが存在しなかった時にエラー表示を出さず、その代りにエラーコードを返すところが異なります。
-
0 => エラーが発生していないが、選択されたグリフが 1 個もない。
-
<正の整数> => エラーは発生せず、この値と同じ個数のグリフが選択された。
-
-2 => エラーが発生し、グリフが 1 個も選択されなかった。
-
-1 => エラーが発生し、それまでに少なくとも 1 個のグリフが選択された。
-
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, ユーザ定義の符号化方式のどれか一つ。
現在の文字の並びを、強制的に与えられたエンコーディングとして解釈するように指定することもできます。
-
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
とする設定を行うかのどちらかが可能です。
-
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 個の引数が必要です。
-
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)
-
選択中のすべてのグリフに含まれる点を、指定した量だけ移動します。
-
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 pixels by which the modified path is
allowed to stray from the true path.
引数 error は、変更されたパスが本来のパスから何ピクセルまでかけ離れてよいかを指定します。
引数 tan_bounds は滑らかにする処理を行わない最大の角度を表します。
bunp_size は除去して滑らかに変換するコブが、元の線から最大何ピクセル離れて良いかを指定します。
5 番目の引数が与えられた場合、それは error 項の分母として扱われます (これにより、ユーザは分数ピクセルの距離を指定することができます)。
一般に、端点の両側で方向が異なる線同士を併合しようとしてもうまくいきません。曲線のセグメントが長くなるほど、不愉快な結果を生み出す可能性は高まります。6 番目の引数を指定すると、併合される線の最大長を指定することができます (それより長い線はすべて併合されずに残ります)。
-
NearlyHvCps([error[,err-denom]])
-
水平か垂直に非常に近いものの、完全には一致しない位置に制御点があるかどうかをチェックします (これは、(例えば)
abs( (control point).x - point.x ) < error
であることとほとんど同義です。) ここで error は以下のいずれかです;
引数を指定していない場合 |
最初の引数 |
引数を 1 個だけ指定した場合 |
(最初の引数) / (2 番目の引数) |
引数を 2 個指定している場合 |
-
NearlyHvLines([error[,err-denom]])
-
Checks for lines which are almost, but not quite horzontal or vertical (where
almost means (say) that
abs( (end point).x - (start point).x ) <
error
, where error is either:
水平線か垂直線に非常に近いものの、完全には一致しない線があるかどうかをチェックします (これは、(例えば) abs( (end point).x - (start point).x ) < error
であることとほとんど同義です。) ここで error は以下のいずれかです;
引数を指定していない場合 |
最初の引数 |
引数を 1 個だけ指定した場合 |
(最初の引数) / (2 番目の引数) |
引数を 2 個指定している場合 |
-
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 以内にあり、どれも中心から 0.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 個のグリフを選択していなければなりません。最初の引数はアクセントのグリフ名、またはそのアクセントの 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 と同じです。
-
-
AutoHint()
-
-
SubstitutionPoints()
-
-
AutoCounter()
-
-
DontAutoHint()
-
-
AutoInstr()
-
-
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 をキーにもつ値を返します。
すべての返り値は文字列です。
該当する項目が辞書に存在しない場合、空文字列を返します。
-
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)
-
引数 arg の意味は InFont と同様です。
この関数は、グリフにアウトラインまたは参照が含まれているか、または幅が設定されているときに真を返します。
-
DrawsSomething(arg)
-
引数 arg の意味は InFont と同様です。
この関数は、グリフにアウトラインまたは参照が含まれているときに真を返します。
-
CharInfo(str)
CharInfo("Kern",glyph-spec)
CharInfo("VKern",glyph-spec)
CharInfo(str,script,lang,tag)
-
フォント内の 1 個のグリフだけが選択されていなければなりません。
その時、この関数はそのグリフに関する情報を返します。
返される情報は、文字列 str に依存します (意味は見てのとおりです):
-
"Name" はグリフの名前を返します。
-
"Unicode" はグリフの Unicode エンコーディング値を返します。
-
"Encoding" はグリフのカレントフォント内の符号位置を返します。
-
"Width" はグリフの幅を返します。
-
"VWidth" はグリフの全高 (縦書き時の送り幅) を返します。
-
"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 フォントが生成された時には (生成されたフォント内のインデックスに) 変更される可能性があります。
Examples:
Select("A")
lbearing = CharInfo("LBearing")
kern = CharInfo("Kern","O")
Select(0u410)
SetLBearing(lbearing)
SetKern(0u41e,kern)
Select("a")
verta = CharInfo("Substitution","*","dflt","vrt2")
Example 1:
# 選択中のすべてのグリフの色を黄色に設定する。
# FontForge の対話的なセッション中で動かすように作られている。
foreach
SetCharColor(0xffff00)
endloop
Example 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 となります。
スクリプト内でのカレントフォントは、常に、それを呼び出したフォントにセットされます。
-- 前 -- 目次 --
次 --