coteditor/CotEditor — pull request #200 by 1024jp (2014-08-02 16:51:40+00:00)
Title: Fix/issue193 invisibles fallback

#193 の修正です。

#### #193の問題点
#175 の不可視文字描画方法はコンテクストで設定したフォント内のグリフを指定して描画するので、ユーザの指定したフォントが該当グリフを持っていなかったときに豆腐が表示されてしまう。

#### 解決法
CGGlyphを直接描画させるのではなく、先にグリフからアウトラインパスを抽出しそれをコンテクストに描画させる。これにより複数フォントが混在した描画が可能となる。ユーザ指定のフォントが当該グリフを持っていなかった場合は、CotEditorであらかじめ準備しておいたフォント（Lucida Grandeとヒラギノ角ゴシックProN W3）からアウトラインを生成する。

#### 副作用
- #175 に比べると若干パフォーマンスが落ちる（が CotEditor 1.5.4 から比べれば依然として圧倒的に高い）
- プリントパネルからPDFを生成した際に、不可視文字のデータが文字データではなくアウトラインとなってしまう（逆に文字として選択できないから良いという考え方もある）

#### ディスカッション
正直なところ本当は不可視文字を描画するフォントはユーザの指定したテキスト用のフォントとは別で固定してしまいたい。

1. CGGlyph で描画する方がロジックとしてはシンプルでパフォーマンスも高い
2. フォントによっては環境設定でのポップアップの表示とは見た目が大きく異なり、期待した出力が得られない。
- もっと言うと、テキスト用フォントとしてMenloを指定しているのだが、等幅フォントなこともあり不可視文字が小さくて見づらい（これは #193 の問題とは別件）

しかし、OS X バンドルの標準的なフォントには CotEditor で選べる不可視文字用文字を全て収まりよく描画できるフォントが存在しない。以下は、代表的なフォントの対応状況である（グレーアウトしているものは非対応）。

![screen shot 2014-08-02 at 18 44 37](https://cloud.githubusercontent.com/assets/1165044/3788400/96d91b56-1a64-11e4-848b-a165a9f83b3f.png)

強いて挙げればMenloは全て対応しているが先に挙げたとおり小さいので不可視文字描画としてはふさわしくない。

それをふまえて以下は提案です（現時点では修正には含まれていません。

##### 提案1
不可視文字描画のフォントをLucida Grande（ない場合はヒラギノ角ゴ）に固定する。描画方法は依然としてアウトラインパスから行なうことになるが、ユーザのフォントに関わらず環境設定のポップアップと同等の画が得られるようになる。懸念としては、Lucida Grande の四角類はサイズが小さいので全角空白の代替表示としては少し不格好かもしれない（白抜きの四角に関してはわざとLucida Grande が所持しておらずヒラギノだけが表示できる文字（▢）に変更することによって、ヒラギノでの描画を強制することもできそう）。

##### 提案2
提案1にくわえ、CotEditorの不可視文字代替文字の選択肢から「⏎」（白抜き矢印）と「⊠」（四角にバツ）をドロップすると、Lucida Grande で全ての描画が可能となる。しかし、「⏎」は将にリターンを表す文字なので失くすには少し惜しい気もする。

提案2は本末転倒かもしれませんが、とくに提案1に関していかがでしょうか？