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 は、スクリプトを実行するごとにその内容を標準出力に書き出します。
一般的に言って、作者はこの機能を例えばラテン文字フォントを入力としてキリル文字のグリフを含むように拡張するような作業に役立つことを思い描いています。この場合、スクリプトはこのような物になるでしょう:
スクリプトの構文は、C とシェルコマンドを混ぜ合わせた物にかなり似ています。 各ファイルは手続きに対応します。 シェルスクリプトと同様に、スクリプトファイルに渡された引数は $1, $2, …, $n という識別子で用いることができます。 $0 はスクリプトそれ自身です。 $argc は引数の個数を表します。 $argv[<式>] の形で、コマンドの引数を配列としてアクセスすることができます。
項は以下のいずれかを取ることができます。
式は C とほぼ同じですが、二、三の演算子は省かれ、二、三がシェルスクリプトから追加されています。演算子の優先順位はわずかに単純化されています。 その結果、演算子 (とそれらの優先順位) は以下のようになっています:
カンマ演算子、"?:" 演算子が存在しないことに注意してください。 “AND”,“OR”と、代入演算子の優先順位は単純化されています。
手続き呼び出しは名前トークンまたは文字列に対して適用することができます。 名前または文字列が FontForge の内部手続きのどれかと認識された場合、それが実行されます。それ以外の場合は実行するファイルの名前であると見なされ、そのファイルが呼び出されます (ファイル名には、トークンとして使用できない文字を含むことができるため、ファイル名を指定するために文字列一般を指定できるのは肝要です)。 手続き名がディレクトリを含まない場合、現在のスクリプトファイルと同じディレクトリにある物と見なされます。手続きに渡すことのできる引数は最大で 25 個です。
配列は参照渡しされます。文字列と整数は値渡しされます。
変数は、値を代入することによって (“=”のみで) 作成することができます。
ですから
i=3
によって、“i”の変数定義を行うことができます。変数のスコープは現在のファイルのみに限定されているので、呼び出された手続きには引き継がれません。
文は以下のいずれかをとることができます。
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 フォントの名前
(存在しない場合は空文字列) を返します。$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
組み込み 手続き の動作は、同じ名前のメニュー項目とほとんど同じです。ここでの説明はしばしば概要しか示されていませんので、より詳しい情報は当該のメニュー項目を調べてください。
a = Array(10) i = 0; while ( i<10 ) a[i] = i++ endloop a[3] = "string" a[4] = Array(10) a[4][0] = "Nested array";
Strsub("abcdef",2,3) == "c"
かつ Strsub("abcdef",2) ==
"cdef"
となります。
% 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} ...
Open("gulim.ttc(Dotum)")
のように指定すれば、
特定のフォントを選択することができます。注意: これと同時にビットマップフォントを NFNT フォーマットで出力しなければなりません。これを行わないと出力した PostScript フォントは Mac に認識されません。
"Times."
であって
"Times"
ではありません――出力されるビットマップフォントは、その型に応じて適切な拡張子がつけられます。“.”は単なる飾りです)。
bitmaptype を指定した場合、それは以下のどれかでなければなりません。
注意: Mac OS X は NFNT をサポートしていないようです。 それ自身では使用していないにしろ、リソースベースの PostScript フォントを 使用するには NFNT ビットマップが存在しなければなりません。(より正確に言えば、廃止された FOND が存在する必要があるのは、廃止された NFNT も同時に存在する場合に限られます)。
注意: ビットマップ出力を指定した場合、現在のフォントデータベースに含まれる全てのサイズが出力されますが、このコマンドはビットマップを作成しませんので、フォントデータベースにビットマップが全く含まれない場合、(ビットマップを出力するように指定したとしても) 全く出力されません。ビットマップの出力を行いたい場合、あらかじめ BitmapsAvail スクリプトコマンドか エレメント(L)
→使用するビットマップ(A)
を使ってビットマップを作成する必要があります。
AFM や PFM ファイルを出力するかどうかは、fmflags で制御できます。
res により、生成された BDF フォントの解像度が決まります。 -1 を指定すると、FontForge が各サイズに対して自動的に値を推測します。
filename に“%s”が含まれ、“.pf[ab]”のいずれかの拡張子をもつ場合、“複合 sfd ファイル”が存在するはずです。これは現在のエンコーディングからサブフォントへのマッピングを含むファイルの名前です。一例をここに示します。このファイルが存在しない場合、FontForge はフォントのエンコーディングに対応するファイルを探す標準の探索プロセスを行い、それが失敗した時はフォントは保存されません。
#!/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("*","dflt","liga,rlig")
2 番目の引数が存在する時は、整数でなければならず、最初の引数がビットマップならば 2 番目の引数によって、ビットマップリストに追加するか (0) グリフの背面を埋めるか (1) が定まります。EPS および SVG ファイルでは、スプラインが前面に追加されるか、グリフの背面レイヤに追加するかがこの引数によって決まります。
3 番目の引数が存在する場合、これも整数でならなければならず、EPS 取り込みのふるまいを制御するフラグの集まりとして扱われます。
フォーマットは (上記の) ファイルタイプのみからなるか、または、ファイルタイプを拡張子で指定した (いくつかのフォーマット制御文字列を埋め込み可能な) 完全なファイル名のいずれかとすることが可能です。
"Glyph %n from font %f.svg"
"U+%U.bmp"
フォーマット文字列中の文字は % 以外はそのままコピーされます。% が含まれている場合、次の文字がふるまいを制御します:
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 となります。
pointsize は 1 個の整数か、整数からなる配列 1 個のいずれかです。 この値の指定は type が 0, 3 または 4 の時のみに意味を持ちます。 省略時または 0 を指定した時はデフォルト値が使用されます。 フォント表示の時は、値を 1 個しか参照しません。
type に 3 を指定した時は、サンプルテキストを含むファイルの名前を指定することができます。 このファイルは UCS2 フォーマット (頭に 0xfeff がつきます) か、現在のデフォルトエンコーディングが使用できます。 空の文字列を指定するか、引数を省略した場合には、 FontForge はデフォルト値を使用します。
環境設定の PrintSetup がファイル (PostScript または PDF) に出力するように指定されている場合、4 番目の引数で出力ファイルのファイル名を指定します。
arg には文字列か整数値を使用することができ、文字列の場合は 4 文字の OpenType タグ ("kern" など) または Mac の機能設定 ("<1,1>" など) のどちらかを使用することができます。整数の場合、上のいずれかの整数表現でなければなりません。または、arg には文字列か整数からなる配列を指定することもできます。 (この場合、引数はちょうど 1 個でなければなりません)
機能‘kern’は現在選択中のグリフを 2 文字のうち最初の文字として含む全てのカーニングペアにマッチします。(架空の) 機能‘_krn’は、現在選択中の文字を 2 文字のうち最後の文字として含む全てのカーニングペアにマッチします。‘vkrn’と‘_vkn’も同様です。
Adobe は、それを避けるように勧めています。その代わりに参照を使ってください。いくつかの情況 (PDF がその一例だと思われます) においては 、1 個のグリフが複数の文字符号を持っていると問題が起こります (Acrobat は、Unicode コードポイントを算出するために、グリフから符号位置への逆対応表を使用します。しかし、あるグリフが 2 つの Unicode コードポイントを持っているとそれが失敗します)。
"Position" |
単純な位置指定 |
"Pair" |
ペア単位の位置指定 (ただしカーニングは無し) |
"Substitution" |
単純な置換 |
"AltSubs" |
代替文字群からの置換 |
"MultSubs" |
複数文字への置換 |
"Ligature" |
合字 |
"LCaret" |
合字のキャレット位置指定 |
"Kern" |
カーニング |
"VKern" |
縦書き用カーニング |
"Anchor" |
アンカークラス |
search_type の値は以下のとおりです。
0x01 | Bold (ボールド) |
0x02 | Italic (イタリック) |
0x04 | Underline (下線) |
0x08 | Outline (縁どり文字) |
0x10 | Shadow (影つき文字) |
0x20 | Condensed (長体) |
0x40 | Extended (平体) |
-1 | FontForge はフォント名から推測を行います。 |
ビット 0x20 と 0x40 (長体と平体) は両方同時に指定できません。
引数が文字列である場合、複数のスタイル名を繋げたものを、例えば "Bold Italic Condensed" のように指定します。
SetTTFName(0x409,2,"Bold Oblique")
font.panose[index] = value
とする設定を行うかのどちらかが可能です。
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 引数に指定します。
VendorId
は文字列を、Panose
は配列を返します。その他の場合整数を返します。
Zones, TwilightPntCnt, StorageCnt, MaxStackDepth, FDEFs,
または IDEFs
です。引数 value は整数値でなければなりません。
FontForge は文字列 "*" をスクリプトや言語の両方で使用できる (ただしタグには使用できません) ワイルドカードとして認識します。 すべての文字を縦書き用の字形に置き換えたい場合は以下のようになります:
SelectAll() ApplySubstitution("*","*","vrt2")
MoveReference(300,0,"acute",0xb4)はすべての acute または grave への参照を、現在位置から 300 em ユニットだけ右に移動します。
PositionReference(0,0,"circumflex")はすべての circumflex への参照を基底文字 circumflex の位置に移動します。
<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 を再構築してください。
引数 error は、変更されたパスがフォント座標系で本来のパスから何ユニットまでかけ離れてよいかを指定します。
引数 tan_bounds は滑らかにする処理を行わない最大の角度を表します。
bunp_size は除去して滑らかに変換するコブが、元の線から最大何ピクセル離れて良いかを指定します。
5 番目の引数が与えられた場合、それは error 項の分母として扱われます (これにより、ユーザは分数ピクセルの距離を指定することができます)。
一般に、端点の両側で方向が異なる線同士を併合しようとしてもうまくいきません。曲線のセグメントが長くなるほど、不愉快な結果を生み出す可能性は高まります。6 番目の引数を指定すると、併合される線の最大長を指定することができます (それより長い線はすべて併合されずに残ります)。
abs( (control point).x - point.x ) < error
であることとほとんど同義です。) ここで error は以下のいずれかです;
0.1 | 引数を指定していない場合 |
最初の引数 | 引数を 1 個だけ指定した場合 |
(最初の引数) / (2 番目の引数) | 引数を 2 個指定している場合 |
abs( (end point).x - (start point).x ) < error
であることとほとんど同義です。) ここで error は以下のいずれかです;
0.1 | 引数を指定していない場合 |
最初の引数 | 引数を 1 個だけ指定した場合 |
(最初の引数) / (2 番目の引数) | 引数を 2 個指定している場合 |
rint(factor * x) / factor
の式に従って丸めを行います。要するに、factor を 100 に設定すると 100 分の 1 単位で座標値を丸めます。
RoundToCluster(.1,.5)
は、相互に 0.1 em ユニット以内の距離にある座標値をまとめます。-0.1,-0.05,0,0.05,0.1,0.15
のような並びはすべてまとめられます。これは、各々が次の 0.1 以内にあり、どれも中心から 5 個以上離れていないからです。
grek{dflt} latn{dflt,VIT ,ROM }
4 番目の引数 flags は OTF のフラグです (-1 の時は、FontForge が適切なフラグを推測します)。
残りの引数は、最初の引数 (type) によって全く異なります。 type に Position を用いる機能タグを指定した場合、その機能がどのようにこのグリフのメトリックを変形するかを指定する 4 個の整数値を指定します。 type が Pair の場合、次の引数はペア中のもう一つのグリフの名前で、8 個の整数引数が後ろに続きます。最初の 4 個は最初のグリフの位置を指定し、次の 4 個は 2 番目のグリフの位置を変更します。 Substitution 型のタグの場合、5 番目の引数は、現在のグリフを置換する別のグリフの名前です。 AltSubs タグの場合、次の引数は現在のグリフを置き換える候補グリフすべてをスペース区切りで並べたリストです。 MultSubs の場合、次の引数は現在のグリフを置き換える一連のグリフをスペース区切りで並べたリストです。 Ligature の場合、引数は、現在のグリフによって置き換えられる一連のグリフ名をスペース区切りで並べたリストです。
grek{dflt} latn{dflt,VIT ,ROM }
0x100 | 上 |
0x200 | 下 |
0x400 | 重ね打ち |
0x800 | 左 |
0x1000 | 右 |
0x4000 | 左中央 |
0x8000 | 右中央 |
0x10000 | 外側の中心 |
0x20000 | 外側 |
0x40000 | 左端 |
0x80000 | 右端 |
0x100000 | 接触する |
引数 fudge を指定すると、座標値の誤差として許される距離を指定することができます。
IUP[x]\nIUP[y]
" のような形で指定します。
デフォルト値は、GX の Var という概念に相当します。FontForge は本物のマルチプルマスターフォントに対しては妥当な値をシミュレートします。
例:
Select("A") lbearing = CharInfo("LBearing") kern = CharInfo("Kern","O") Select(0u410) SetLBearing(lbearing) SetKern(0u41e,kern) Select("a") verta = CharInfo("Substitution","*","dflt","vrt2")
それぞれの部分配列には以下の情報が含まれています。
Position, Pair, Substitution, AltSubs, MultSubs
または Ligature
のどれかの文字列)
以下の項目はタイプによって異なります。
それぞれが GPOS 値レコードの内容を表す 8 個の数値 (最初の 4 個は現在のグリフを制御し、その後ろの 4 個の数値は 2 番目のグリフを制御します)
例:
>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 の対話的なセッション中で動かすように作られている。 foreach SetCharColor(0xffff00) endloop
#!/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 となります。
スクリプト内でのカレントフォントは、常に、それを呼び出したフォントにセットされます。