行頭、行末の禁則処理の指定である。
LEN: 〜 SUBID: 8 -行頭禁則指定 ATTR: BYTE kind -行頭禁則タイプ [DATA: CHAR ch[]] -行頭禁則対象文字 LEN: 〜 SUBID: 9 -行末禁則指定 ATTR: BYTE kind -行末禁則タイプ [DATA: CHAR ch[]] -行末禁則対象文字
禁則とは何か。これは行折り返しを行うにあたって、折り返してはいけない文字間のことである。折り返しは文字と文字の間で行われるから、当然禁則は文字間の属性である(ここでいう文字とは、スクリプト層で指定され、フォント層から画像として取り出される表記処理上のひとかたまりのことである)。
一つの文字は、直前、あるいは直後で折り返される可能性がある。しかし文字によっては直前、あるいは直後での折り返しが許されない文字がある。
これが禁則文字である。
行頭禁則文字=直前での折り返しが禁止される文字
行末禁則文字=直後での折り返しが禁止される文字
文字は、「直前折り返し=可/不可」「直後折り返し=可/不可」という属性を持っている、という見方が出来るのである。さらに、「追い出し」「追い込み」「ぶら下げ」のいずれかによって折り返し位置の次候補を順行して捜すのか遡行して捜すのか、その後の処理が規定されるが、今回についてはこれを省略する。
直前と直後は両方とも有するので、ある文字が持つ折り返し情報の組み合わせは2×2=4通りである。
文字間は当然二つの文字に挟まれているので、ある文字間について、直前の文字の「直後折り返し」と直後の文字の「直前折り返し」の二つの属性を参照する。組み合わせはこれまた2×2=4通りである。両方が「可」であるときのみ、その文字間で折り返すことができる。
ある文字間が取りうる状態を下に表で示す。
直前 | |||
---|---|---|---|
折り返し可 | 折り返し不可 | ||
直後 | 折り返し可 | [1] | [2] |
折り返し不可 | [3] | [4] |
さて、禁則処理の理論的枠組みを掴んだところで、英文word wrappingに移ろう。
Word wrappingとは、欧文において単語内での折り返しを禁じる禁則処理のことである。単語とは、大小アルファベットの羅列であり、一般的に空白によって区切られる。今回は単語をハイフンで区切って折り返すハイフネーションについては考えない。
ここまで来れば、殆ど答えは見えているようなものだが、要するに、アルファベット―アルファベット間での折り返しを禁じれば、word wrappingが粗方完成である。
問題は、上の表の[2]〜[4]のうち、word wrappingに適したものはどれであるかということである。
空白で区切られた直後、つまり単語の先頭は、行の先頭にくることができる。よって、アルファベットの直前での折り返しは「可」である。[2]〜[4]の中で「直前折り返し=可」なのは[3]である。よって、word wrappingのためのアルファベットの禁則は「直前折り返し=可」かつ「直後折り返し=不可」であるということになる。
「直前折り返し=不可」は即ち「行末禁則」であるので、禁則指定付箋で行末禁則文字列としてアルファベット26文字×大小2セットと数字を入れておけば、理論上はword wrappingが実現するはずである。