設定部分の書き方

設定部分の記述方法
設定部分で使われる記述方法は、以下のようになります。

「'@' + 名前」でコマンドを指定して、続く { } 内に値を記述していきます。
@start-body; の行までが設定部分になります。

設定コマンド@ の後に、「アルファベット小文字・数字・'-'」の文字でコマンド名を指定します。
コマンド名は、アルファベットの大文字小文字を区別します。

値を指定しないコマンド (@start-body) は、; で終了します。
値が必要なコマンドは、コマンド名 (または []) の後に、{} を記述して、その中で値を指定します。

コマンドに任意の定義名を指定する場合は、コマンド名の後に、[ ] で囲んで、名前を指定します。

@command;
@command{ ... }
@command[test] { ... }
# 大文字はコマンド名として使われません
@Command;
区切り文字空白・改行・'@ {} [] : ;' などの文字は、区切りとして扱われます。

区切り文字から区切り文字までの間の文字列は、1つのトークン (意味を持つ最小の単位) として扱われます。
※改行は、空白として扱います。
※空白と改行は無視されます。

設定部分では、ほとんどの箇所で任意の空白・改行を置くことができますが、一部の箇所では、余分な空白を付けられない場合があります。

/* @command の前後、{} の前後などは空白を付けてもよいが、[] 内には付けられない。 */
@command [test] {
  name : value ;
  # これはエラー。name の値は aa のみで、bb が来た時に構文エラーになる
  name: aa bb cc;
}
複数項目{ } 内で複数の項目値を指定する場合、<項目名>:<値> で記述します。

複数の項目がある場合は、値の後に ; で、項目を区切ることができます。
ただし、{} 内の最後の項目の場合は、なくても構いません。

「項目名、':'、';'」の前後には、空白があっても構いません。

項目名はアルファベットの大文字小文字を区別しますが、値の文字列で定義済みの名前を指定する場合、基本的に大文字小文字は区別しません。

@command {
  name: abcd;
  size: 10;
  # 最後の項目に ';' はなくても良い
  last:20
}
定義名フォントを定義する場合など、各コマンドで任意の名前を指定する場合、@command[name]{...} という形で指定してください。

  • 名前には、「半角の英数字、- (ハイフン)、_ (アンダーライン)、: (コロン)」の文字が使えます。
    最大で 31 文字までです。
  • @layout 時のみ、: は特別な用途で使われます。
  • アルファベットの大文字小文字は区別されます。
  • 先頭文字は何でも構いません。数字や記号だけでも名前として使えます。
  • 定義名は、各コマンドごとに管理されるので、異なるコマンドでは、同じ名前を使っても構いません。
  • [ ] 内では、余分な空白は付けられません。空白を記述すると、エラーになります。

@font[abc]{...}
@font[ABC]{...}
@font[1-2]{...}
# エラー
@font[ aa ]{...}
コマンドの複数回設定同じコマンドで値を複数回設定した場合は、基本的に新しい値に上書きされます。

※定義名が必要なコマンドでは、すでに使用されている定義名を指定すると、エラーになる場合もあります。

@command{ size:10; }
# 20 に上書きする
@command{ size:20 }
区切り文字を含む文字列値で文字列を指定する際、空白などの区切り文字を含む文字列を指定したい場合は、' で囲むと、1つの文字列にすることができます。
(' ' の中でも、\+1文字 は有効です)

他の方法としては、各区切り文字ごとに、前に \ を置くことで、通常文字として扱わせることもできます。

'空白を 含む'
'\' abcd'
# '' で囲まなくても、\+空白でも記述できる
空白を\ 含む
値の指定
コマンドの解説時、指定する値のタイプは、[STR] といった形で指定されています。
ここでは、各タイプごとに、どのような形で値を記述するかを解説しています。
[STR] 文字列
1つの文字列を指定します。
区切り文字までの範囲が文字列となるので、日本語などもそのまま記述できます。

対象となる文字列に、空白などの区切り文字が含まれていて、それらを一体で扱いたい場合は、' で囲んでください。
各区切り文字ごとに \+1文字 で記述することもできます。

あらかじめ定義された名前を指定する場合は、基本的にアルファベットの大文字小文字は区別しません。

name: ; または name:''; というような形で、値を指定しなかった場合は、空文字列になります。
[Yes/No] はい/いいえ
「はい」か「いいえ」を指定します。
文字列で、以下のいずれかを指定できます。
※アルファベットの大文字小文字は区別しません。

yes, y, 1はい ('1' 以外の数字には対応していません)
no, n, 0いいえ
[N] 数値
数値で値を指定します。
整数値が明示されているもの以外は、小数点以下の値を指定できます。

単位
数値の後には、単位を付けることができる場合があります。
各項目ごとに、使用できる単位は異なります。

単位は、空白を空けずに記述してください。大文字小文字は区別されます。
値が 0 の場合、単位はなくても構いません。

mmミリメートル
ptポイント。
1 pt = 1/72 inch = 約 0.3528 mm。
フォントサイズの指定時は、単位を省略すると、pt になります。
Q(フォント指定時) 級単位。
1 Q = 0.25 mm = 0.70866.. pt
x(フォント指定時) 基準のフォントサイズに対する倍率。
フォントサイズの基準は、各項目ごとに異なります。

1x (1.0x) で、基準のサイズと同じになります。
0.5x で、半分のサイズになります。
wフォントの全角幅に対する倍率。
基準となるフォントサイズは、各項目ごとに異なります。

1w で、フォントの全角幅 x 1.0 となります。
文字数分の長さを指定したい時に使います。

10mm
9.2pt
0.5x
12w
[PATH] ファイルパス
ファイルパスは、絶対パスまたは相対パスで指定できます。
相対パスの場合は、コマンドの引数で指定されたテキストファイルが存在するディレクトリが基準となります。
[FONTNAME] フォントの指定
フォントを指定する場合は、@font[] の [] 内で指定した定義名を指定します。
※フォントは、あらかじめ定義されている必要があります。

# フォントの定義
@font[base]{ file:font.otf }
# base フォントを指定
@page-title{ font:base }

なお、単位 x,w を使って、フォントサイズを基準とした数値を指定する場合は、その値の設定時点で、基準となるフォントのサイズが決まっていなくても、問題ありません。
設定項目をすべて処理した後に、まとめて単位の確定を行います。
[RGB] 色の指定
RGB 色を指定する場合、以下の2通りで記述できます。

#RRGGBBHTML で使われるのと同じで、'#' + 16進数数値で指定します。
最大で6桁、RRGGBB の順で、各 RGB 値 (0〜255) を、00〜FF で指定してください。
桁数は自由です。大文字小文字は区別しません。
上の桁を省略した場合、0 として扱われます。

#0: 黒
#FFFFFF: 白
#FF0000: 赤
rgb(R,G,B)rgb() の中で、RGB 値を 0〜255 の10進数数値で指定します。
値はカンマで区切り、余分な空白は付けないでください。

rgb(0,0,0): 黒
rgb(255,255,255): 白
[CHAR] 1文字指定
任意の1文字を指定する場合、そのまま文字を記述するか、以下のフォーマットを使います。

U+XXXXUnicode のコード値を指定します。
XXXX で、16進数の値を指定してください。

桁数は自由です。4桁以上も可能。
アルファベットの大文字小文字は区別しません。
※異体字は使えません。
CID+NCID 番号(または GID)を指定します。
N で、10進数の値を指定してください。桁数は自由です。

※それぞれのフォントによって、実際に使用されるグリフは異なります。
Adobe-Japan1-N の CID フォントであれば、CID 番号は共通となります。
ただし、フォントによっては、CID 番号自体はフォントに含まれていても、実際にはその CID のグリフがない (アウトラインが空) 場合もあります。
主にフリーフォントの場合に、定義自体は Adobe-Japan1-N に準拠しているが、すべてのグリフは作成していない、というケースがあります。

フォントが TrueType など、CID フォントでない場合は、GID (グリフインデックス) の番号として扱われます。
GID はフォントによって異なるので、直接使うことはあまりありませんが、使用したいグリフの GID が分かっているのであれば、使えます。

@com{ char:U+6F22 }
@com{ char:CID+123 }