2013年12月30日月曜日

Windows 7:CJKフォント変化とフォントリンク

代替表示でのフォントリンクの働きについて、気づいていなかった部分があるようなので。
あらためて「CJKフォント変化」が何を指しているのか書いておくと、

  1. ニコニコのコメント表示において、ArialがサポートするWindowsコードページ1250~1258に定義がある文字はArialで表示される(と思われる)。
  2. 1.を除いた文字のうち、CJKコードページ932(日本語)・936(簡体字中国語)・949(韓国語)・950(繁体字中国語)のいずれかに定義がある文字は、CJKフォント=MS Pゴシック・SimSun・Gulim・PMingLiUで表示される。932に定義がある文字はデフォルトがMS Pゴシック(と思われる)。

2.のグループの文字で、デフォルトのフォントから他のCJKフォントに変化する現象、およびその変化を無効にする現象を個人的に「CJKフォント変化」と呼んでいます。
ここでは2.のグループを、フォント変化的な意味で仮に「CJK文字」と呼んでおきます。

ついでに言うと、このCJK文字における「フォント変化文字」という表現はあまり正しくないように思います。
例えば下図のコメントにおいて、下段先頭の「あ」が無ければ末尾の「あ」は上段のようにU+2588によってSimSun化されます。つまり下段先頭の「あ」は「ゴシック化(ゴシック保護)文字」であると言えます。
 

U+2588のような「SimSun化文字」に限らず、CJK文字はいずれも上の「あ」のようにフォント状態の決定に関わることがあると考えられます。すべて「フォント変化文字」と言えてしまうのであって、実のところはそれぞれの文字のフォント変化に与える影響の強弱なんだろうと思います。

さて、このCJKフォント変化においてWindows XPと7(おそらくVistaも)とでは特徴的な違いがありました。XPでは同一コメント内でMS Pゴシック以外のCJKフォントが複数混在できるのに対して、7ではできません。
 

※間に制御文字U+0009(タブ)またはU+000A(改行)が入ると、7でも混在できるという例外があります。

この違いはフォントリンクによるものだろうと考えていました。XPではSimSunやGulimのフォントリンクは登録されていませんが、7ではされています。
下図はU+249C(丸かっこ付き小文字a)を例にしています。この文字は1段目の通りGulim化文字です。そしてSimSunにこの文字はありません。コメントがSimSun化された場合、フォントリンクによる代替表示が起こると考えられます。
 

SimSunのフォントリンク先でU+249Cを持っているのはMS P明朝とBatangです。
 

フォントリンクが参照された場合、リストの上から順に該当する文字があるか検索されるそうです。またフォントリンクから他のフォントリンクを参照することは無いとされています。
上の図2・3段目のU+249Cは、リストでBatangより上にあるMS P明朝らしき字形で表示されています。そして3段目の「あ」は先頭のU+2588によりSimSun化されています。

SimSunのフォントリンクからMS P明朝を削除してOSを再起動すると、下図のような表示になります。
 

2・3段目のU+249CがBatangらしき字形に変わりました。
さらにフォントリンクからBatangを削除してみます。
 

2・3段目のU+249Cが1段目と同じGulimの字形になりました。
U+249CがCJK文字ではなければ、ここは全角幅の空白(表示するものが無い)になります。CJK文字の場合は、このようにそのフォントリンク自体を参照しなくなるようです。
3段目の「あ」は、GulimのU+249CによってGulim化された表示に変わりました。これは「CJKフォントが複数混在できる」XPの表示と同じです。

以上がXPと7とで表示に違いを生み出す、「CJKフォント変化」とフォントリンクの関係だと思っていました。ところがこれだけでは説明できない挙動があることに気づきました。

下図はU+249CをU+2661に変えたところです。U+2661はU+249Cと同様にGulim化文字で、SimSunにはありません。
 

SimSunのフォントリンク先でU+2661を持っているのはMICROSS(Microsoft Sans Serif)・MS P明朝・Batangです。
 

2・3段目のU+2661は、リストの最初にあるMicrosoft Sans Serifで代替表示されているようです。
ハートマークではなくこんな字形なのは、以前にも書きましたが誤ってU+2661に割り当てられているためではないかと思われます。これは本来U+2261(合同記号)の字形です。

SimSunのフォントリンクからMicrosoft Sans Serifを削除すると下図のような表示に変わります。
 

2段目のU+2661は予想通りMS P明朝の字形です。しかし3段目が変わっていません。3段目のU+2661はSimSunのフォントリンクを参照していないことになります。
「あ」の有無で変わるこの挙動は、Windows 8の「Segoe化」のケースで見ました。7で既に起きていたことを今回初めて知りました。理由はわかりません。

フォントリンクからMS P明朝も削除してみます。
 

2段目のU+2661はGulimに似ていますがBatangに変わったのだと思います。3段目は変わりません。
Batangも削除すると3段目にも変化が見られました。
 

これはなぜかU+249Cと同じ結果です。
ここで思いついて、今度はBatangのみを削除した状態にしてみました。
 

これだけで2段目も3段目もU+2661はGulimに変わりました。ちなみにU+249Cでやっても同じでした。
どうもフォントリンクは、単に上から順に探す以外の意味があるようです。

Windows 8でも試しました。8の場合、3段目の「あ」をつけたパターンではU+2661がSegoe UI Symbolになっています。
 

Batangを削除後は7と同じ結果です。
フォントリンクとは別の代替表示のプロセスが、ここにBatangがあるかどうか見ているんでしょうか。

2013年12月12日木曜日

Cyberfox 26:言語パックの有効化

Cyberfox 26が公開されていました。

Cyberfox | Free software downloads at SourceForge.net

25.01の言語パックが入っていましたが、前に書いた互換性の確認の件はやはりスキップすることで解決しているようでした。

ただし今回、いつもの通りに言語パックを入れて再起動しても表示が英語のままでした。Add-onsからLanguagesを開いてみると、インストールはされているものの無効になっていました。


既定を無効にすることで互換性の確認をスキップしているんでしょうか。
右の「Enable」ボタンをクリックして再起動しました。


Cyberfoxは「Restart Browser」という独自のメニューが追加されており、こういう時便利です。


再起動後。ちゃんと日本語表示が有効になりました(独自のメニューは英語のままです)。


ちなみにWaterfoxも先日26のテスト版が公開されていたので、安定版も間もなくかもしれません(以前とホームページが変わったようです)。

2013年11月27日水曜日

Windows 8.1:CJKフォント変化とU+200Xの空白文字

まだ8がCP版だった頃、コメントのU+2001に未知の幅があるという話を書きました。
他の特殊文字と同様、これもSegoe UI Symbolなのでは?とその時は思ったのですが、どうも違うようです。

下図は上段がSimSun化したコメント、下段がGulim化したコメントです。フォント変化文字の間に幅の異なる空白文字、U+2001・U+2002・U+2009を挟んでいます。8.1と7で表示に差異はありません。


これらの空白文字はSimSunにもGulimにもありません。フォントリンクにより代替表示がされていると思われます。フォントリンクは8.1も7も同じで、MICROSS.TTF(Microsoft Sans Serif)が参照されているはずです。


このコメントの最後の文字を罫線記号のU+2500に変更してみます。8.1と7とで表示が変わりました。


ここでなぜU+2500を使用したかは、話が長くなるので割愛します。
8.1の方では、幅が異なる空白文字が同じ幅に変わってしまったように見えます。似たような現象をXPで見たことがあります。


しかし8.1とXPでは状況が異なります。XPのMicrosoft Sans SerifにU+200Xの空白文字はありません。と言うか、フォントリンクの登録もありません。XPで表示されているSimSunの全角幅の空白、およびGulimの「は未定義(表示するものが無い)を表していると思われます。

試しに8.1でもXPと同じ状況にしてみます。8.1・7のフォントリンク先でU+200Xを持っているのは、Microsoft Sans SerifとMS P明朝(SimSun)/MS UI Gothic(Gulim)です。これらをフォントリンク先から削除してOSを再起動すると、XPと同じ表示になります。


8.1で空白文字が同じ幅になったのはXPのような未定義ではなく、元々U+200Xが同じ幅で定義されているフォントにフォールバックされたのではないか?と思いました。もっとも、それはSegoe UI Symbolではないようです。

Export Font Glyphs - BabelMap

調べてみると、他のフォントではそういうケースもあるようでした。このコメントの話とは直接関係ないと思いますが、例えば下図はConsolasというフォントの場合です。

Export Font Glyphs - BabelMap

MS ゴシックやMS 明朝でもU+2002とU+2009が同じだったりしました。なんなのか特定には至りませんでした。

さて、このように8.1と7で表示に違いが出てしまう場合の対処です。
トリガーとなったU+2500とその前の文字との間にArialを挟むだけで直ります。下図はゼロ幅のU+200Cを挟んでいます。


とは言うものの、そもそもCJKフォント変化させたコメントでU+200Xの空白文字を使うのはChromeとの互換性で問題が発生します。下図はSimSun化のコメントについて、Chromeで縮むU+2588をU+2587に、U+2500をU+2501に変えてIEの表示と比較しているところです。


IEのU+200XがMicrosoft Sans Serifなのに対して、ChromeはArialだと思われます。Arialの方が幅が広いようです。互換性を図るのであれば各フォント変化文字とU+200Xの間にArialを挟み、IEのU+200XもArialにする必要があるでしょう。


上のコメントはXPではU+200Xが豆腐になりますが。


これはXPのArialにU+200Xが無いためでしょう。例えばU+2001のあるフォントを調べると、8.1とXPとでは下図のような差があります。

Font Coverage - BabelMap

XPを考慮する必要がなくなれば、上のようなやり方もアリだろうと思います。

2013年11月14日木曜日

Chrome 31:PepperFlashの手動アップデートについて

Chrome 31ではFlash Player(PepperFlash)が手動でアップデートができるようになったそうです。

“PNaCl”をサポートした「Google Chrome 31」がベータ版に - 窓の杜

自動アップデートではなかなか更新されなかったのも、これで解決するなと思いました。ところが31にアップデートしてchrome://components/を開いてみると、なんか変です。


31への更新でPepperFlashも最新の11.9.900.152に上がっています。


しかし、コンポーネントで表示されているのは前のバージョンです。「アップデートを確認」をクリックしてみましたが、グレー表示になったまま何も起こりません。
どうもProgram Files (x86)ではなく、ユーザープロファイルのフォルダにある以前のpepflashplayer.dllを参照しているようです。Windows 7では以下の場所にありました。

C:\Users\<ユーザー名>\AppData\Local\Google\Chrome\User Data\PepperFlash\11.9.900.117

試しに上のフォルダを削除してChromeを再起動してみたところ、表示が変わりました。


もう一度「アップデートを確認」をクリックしてみましたが、やはり何も起こりませんでした。バグですかね。

ちなみにこの状態で実際にFlash Playerを表示しても、特に問題はありません。使われているのはProgram Files (x86)にあるpepflashplayer.dllだからです。


いくつかのPCで試して同様でした。
ChromeのFlash PlayerはこのPepperだけになるみたいですし、ちゃんと機能するところが見てみたいです。

2013年11月8日金曜日

GINZAちょっとだけ改変

ニコニコがGINZAになってからStylish使ってませんでした。ZeroWatch以来不満だったことがだいたい解消されたからです。でもやっぱり再生リストは邪魔です。間違ってクリックすると他の動画に飛ばされてしまいます。
その部分だけ改変しました。


図はFirefox(Cyberfox)です。
Stylishを使うと言っても実はCSSがよくわかってるわけではないので、今までここに具体的なことは書いてませんでした。この件は簡単なので書いておきます。

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document url-prefix("http://www.nicovideo.jp/watch/")

1行目はお約束です。2行目で適用するURLを指定しています。Chromeの場合、この記述は要りません。かわりに「適用先」の欄でURLを指定します。

さて、わかるのは「!important」というキーワードで元のプロパティの値を強制的に上書きできるということだけです。パーツの名前は「要素を調査」で当たりをつけています。
再生リストを非表示にします。

{
    #playlist {
        display: none !important;
    }
}

適用後:


まだ「動画をもっと見る」が残っています。同じように非表示にもできますが、これは使いたいので縮小して残します。


動画プレイヤーを再読み込みせずに任意の動画へ移動できるのは、やはり便利です。
以前はサムネを選択しないと表示されなかった再生数やマイリス数などの数字も、現在はタグ検索のページと同じように表示されています。

{
    #playlist {
        display: none !important;
    }
    #videoExplorerExpand {
        margin-left : auto !important;
        width : 170px !important;
        }
}

適用後:


右寄せで縮小しています。右寄せは「margin-left : auto」と書くそうです。
まぁ正直かっこよくはないものの、実用的な形にはなりました。再生リストと同じように広告も非表示にできるはずですが、あえてやっていません。広告をブロックするのは営業妨害だと思ってるので。

こんなんじゃ使えねえ!という方には、すばらしいユーザースタイルが配布されています。ご紹介まで:

CompactGINZAPlayer CSS for ニコニコ動画:GINZA  - Themes and Skins for Nicovideo - userstyles.org

2013年11月7日木曜日

Cyberfoxの日本語化(補足:「XMLパースエラー」について)

2013/11/28追記
下記の件は25.01の言語パックで対応した模様です。

[Update] Cyberfox Language Packs 25.0.1 - 8pecxstudios Support Forums

次回更新時に様子を見てみたいと思います。

2013/12/12追記
26のインストール時、言語パックで互換性の確認は出ませんでした。


前にも書きましたが、現在のCyberfoxに公式の言語パックをインストールしてしまうとエラーになります。先日25に更新する際、うっかり互換性の確認で言語パックも更新してしまいました。


これでは公式の言語パックが入ってしまいます。
このまま起動しようとしても「XMLパースエラー」が表示され、Cyberfoxは開きません。


ちなみに「browser.xul」というのはFirefoxのインターフェースのことだそうです。
引っ掛かっている「appmenu_minimizeMemoryUsage」は、名前からしてCyberfoxで独自に追加されている「Clean Ram Cashe」のことではないかと思われます。


公式のFirefoxには存在しない名前が記述されているため、エラーになるんじゃないでしょうか。

この場合、インストールしてしまった言語パックをいったん削除します。Windows 8・7であれば以下の場所にファイルがあります。

C:\Users\<ユーザー名>\AppData\Roaming\Mozilla\Firefox\Profiles\○○○.default\extensions

※AppDataは隠しフォルダです。

ファイル名:langpack-ja@firefox.mozilla.org.xpi

削除後、Cyberfoxを起動して以前の記事に書いたように手動で言語パックをインストールします。

なお同じプロファイルを使っているFirefoxがあれば、言語パックはアドオンマネージャの「言語パック」からも削除できます。

2013年10月21日月曜日

Windows 8.1で引っかかったもの

先週木曜日、Windowsストアで配信が始まった8.1へアップデートしました。
数時間かかったという方もいたようですが、うちでは配信直後に始めたのがよかったのか再起動を求められるまで1時間ちょっと(その間PCはふつうに使用)、再起動に20分ちょっとくらいで済みました。

8.1になって真っ先にやったのは、タスクバーのプロパティへ新たに追加された「ナビゲーション」タブで2つの項目を変更することでした。


「右上隅をポイントしたときにチャームを表示する」→オフ
「・・・スタート画面ではなくデスクトップに移動する」→オン

これで8のデスクトップを使う上での不満は、おおかた解消するようなものでした。特に右上隅のオプションは、チャームがチラチラ出なくなってありがたいです。

8.1Previewの時はノートンを入れても削除されて、Windows Defenderが有効になってしまいました。その後対応したようだったので、最新版への更新を確認した上で8.1にアップデートしたら通常通り起動しました。その他大きな問題はなく、アプリケーションの起動も早くなって快適でした。
と言っても、幾つか引っかかったものもありました。

  • ディスプレイドライバ
グラボはRadeonです。CCCを起動したところ追加したプリセットが有効にできなかったり、フルスクリーンにしたゲームでカーソルがちゃんと動かなかったりといった不具合がありました。
これは既存のディスプレイドライバが8.1に対応していなかったようで、新しいものを入れたら解決しました。

AMD Catalyst Display Driver

ただしふつうにインストールしたら、途中で画面が真っ暗になったまま戻らなくなりました(止むを得ず電源を落として再起動)。再度のインストール時に一度「アンインストール」でコンポーネントを削除、あらためてインストールしたら大丈夫でした。


  • デスクトップのコンテキストメニュー
デスクトップ上だけ、右クリックメニューがマウスカーソルの左側に表示されるようになってしまいました。


タッチパネル向けの仕様です。「タブレットPCの設定」で左利き用に変更すると右側に表示されるらしいのですが、そもそもタッチパネルではないので検索してもそんなメニューは出てきません。以前にタッチ操作をエミュレートできるマウスを入れていたせいでしょうか。
調べたところ、これはレジストリで変更できました。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\WindowsにMenuDropAlignmentというエントリがあり、この値を1から0に変更してシステムを再起動しました。


ちゃんと右側に表示されるように直りました。

レジストリ変更・再起動後

  • スタートメニュー「復活」ソフト
以前ここで書いたStart Menu 8が動かなくなりました。アンインストールしてホームページからあらためてダウンロード、インストールしてもだめでした。8.1対応と書いてあるので、うちのPC固有の問題かもしれません。
かわりにClassic Shellを入れてみたら、問題なくスタートメニューが動作しました。


8.1で追加された「スタートボタン(のようなもの)」からこのメニューを開くこともできますが、図のように独自のボタンに置き換えることも可能です。この状態だと、一番左下隅で右クリックすればWindowsの管理系メニューも表示されました。



  • その他
8では動いていた魔法使いの夜でディスクチェックが通らなくなってしまいました。通らないとサポートツールが起動して「プロテクト誤動作対応」を実行するように促されるのですが、やっても変わりませんでした。
これはサポートツールを「管理者として実行」で起動したら解決しました。


その他ブラウザやOffice、PowerDVDやふだんよく使うフリーのソフトなどは問題ありませんでした。エラーが出たものでも、最新版に更新したら大丈夫だったりしました。ただしWindows 8向けのマウスのドライバを入れようとしたら、OSを8として認識しないというケースもありました。


まだ8.1に対応していなかっただけでしょうが、無いと困るソフトや高価なソフトなどは事前に対応状況を確認した方がよさそうです。

なお、いつもここに書いているニコニコのコメント表示については、今見ている限り8での挙動と変わらないようでした。何か気づいたら調べてみたいと思います。