初歩のシェルスクリプトで遊ばない[ぬかみそフォントの制作サポート(7)]

横書き文字・縦書き文字とTrueTypeからOpenTypeへの変換コピー_(1)

今回、シェルスクリプト使いません。

TTeditでTrueTypeを作り、これをOTEditでOpenTypeに変換するときの、ややっこしいポイントの話。
通常の横書き文字に加えて、縦書き用に専用のグリフを持ってる文字。たとえばシフトJISに含まれてる、全角の罫線「│━」です。これをTrueTypeで作り、OpenTypeに変換したときの挙動について。


「u+2500」から「u+2503」は、罫線4文字です。7479、7480、7481、7482、の4文字。
TTEditで、以下のように数字のグリフを作ります。横書きの2500には、横線のゼロ。縦書きの2500には、縦線のゼロ、です。


このTrueTypeを、OTEditの「一括コピー」機能で、OpenTypeに変換コピーします。


まず1文字だけコピーしてみます。「─」、横の細い罫線、u+2500ひとつだけを指定して、新規にOpenTypeを作成する。


横書きのu+2500がCID7479にコピーされるだけでなく、縦書きのu+2500が7481にコピーされました。
このへんのことは武蔵システムにも解説があります。引用させてもらっちゃおう。
OTEdit for Windows Q&A | OpenTypeフォントエディタ なら OTEdit

Q29 TTEditで作成したフォントをOTEditの[一括コピー]コマンドで罫線部分(シフトJIS 849F~84BE)をコピーすると、TTEditの場合とは異なるグリフがコピーされてしまう。
TTEditの場合、罫線部分に関しては縦書き用と横書き用のグリフをまったく別に持っていますが、OTEditでは、縦書き用と横書き用のグリフが兼用されている部分があります(例.CID 7479はシフトJIS 849Fの横書き用でもあり、シフトJIS 84A0の縦書き用でもあります)。
一括コピーでは各文字毎に横書き用と縦書き用をコピーします。そのため、シフトJIS 84A0の縦書き用をコピーする時に、CID 7479(シフトJIS 849Fの横書き用でもあります。)に上書きコピーしてしまいます。
罫線部分を本来の罫線グリフとして作成していれば問題ありませんが、そこに独自の絵文字を入れていると、絵文字の縦書きグリフが横書きグリフにコピーされるため、TTEditのフォントとは異なる結果となってしまいます。

ということで、この話っすね。続けて2文字目、3文字目、4文字目も、一つずつコピーしてみます。


「0」と同様に、横書き文字だけでなく、縦書き文字もコピーされました。
以上のコピー作業が、2文字以上、連続して実行されると、どうなるか。まず「0」と「1」を指定します。文字コード範囲を「2500-2501」と指定。


「0」と「1」のコピー分が残ります。罫線が4文字分、ぜんぶ埋まってしまいました。
ここからさらに、「2」「3」とコピーしていくと、既にグリフが作られたところに、さらに上書きコピーされていきます。
↓「0-2」を指定

↓「0-3」を指定

「0」と「1」から作られたグリフは消えて、結果的には「2」と「3」の横書き、縦書きグリフが残る。
たとえば「0」の、「─」細い横罫線についてみると、まず2500「─」の横書きが書き込まれ、次に2502「│」の縦書き、つまり90度回転された横線、が上書きされる。このふたつのグリフが、全く同じ形のグリフならば、「問題ありません」ってことが、QandAでは書かれてるわけですね。


以上のことから、縦書き文字と横書き文字を持っていて、これらをCIDでそれぞれ別の文字に書き込む文字について、どのように対応するか。

  • (簡単には) 縦書き文字は、横書き文字を、コピーして回転させて作っておけばよい。上書きされても同じ結果になる。
  • (トラブルを避けることを最優先するなら) 縦書きをあきらめる。縦書き文字は、作らない。空っぽにしておく。

まだつづく

今回は、縦書き文字と横書き文字が両方ともある文字について。
ただ、これ以外にも、よく分からんところが有ってですね。
縦書き文字が無いところの、シフトJISに含まれない、Unicodeの罫線や、絵文字の鋏、「✂」なんかが……よく分からん。このあたり、私は2007年頃には大雑把に把握してたんですが、原因や挙動の細かいことが分からないまま、対策だけをしてました。
バグっちゅうよりは処理上の結果、仕様に近い気がする。現象を把握してから、対策だけ取るのが、いちばん簡単なような。

余談

最初にスクリーンショットを引用したPDFファイルについて。
https://web.archive.org/web/20050125221954/http://partners.adobe.com/public/developer/en/font/5078.Adobe-Japan1-6.pdf

7,744,949 バイト
fbe2b91abb9d89cc3703ded654de2c20

Adobe-Japan1-6の仕様書、テクニカルノートの5078番です。私はこれが普通に公開されてた頃にダウンロードしていたんですが、これ、検索ができるんすよ。文字で。並びも10文字ずつなんで、OTEditと比較して見やすい。


https://ja.wikipedia.org/wiki/Adobe-Japan1
https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5078.Adobe-Japan1-6.pdf
https://github.com/adobe-type-tools/Adobe-Japan1/raw/master/Adobe-Japan1-7.pdf

wikipediaのリンクにも載ってるバージョンなら普通に手に入ります。こっちはなんか、検索ができないような気が。なんでだ。