ごっつっつのブロマガ

[コメントアート] Chrome pepflashplayer対応技術:U+2001の漢字幅化

2013/05/18 21:32 投稿

コメント:8

  • タグ:
  • コメントアート
  • CA
  • pepflashplayer
  • GoogleGhrome
  • ニコニコ技術部
2014/2/23 追記
2014/2/20のchromeのバージョンアップにより、こちらの技術は使用できなくなりました。

こんにちは。
ごっつっつと申します。
この度はコメントアート(以後CA)の技術関連のブログを書かせて頂きます。

最近のCA界隈の課題はQwatch大画面やChrome pepflashplayer(以後pep)への対応だと私は考えています。皆さんの中にもそう考えている方は多いのではないでしょうか。
Chromeはニコニコ動画非推奨ブラウザながらも、その使い勝手の良さから使用している方は多いと思います。なので、pep対応を蔑ろにするわけにはいきません。私自身がCheomeユーザーだからということもありますが(笑)
今回はpep対応技術について新たに開発し、検証した結果を述べていきたいと思います。

まず、pepの大きな問題点と言えばこの二つ。

①「フォント変化しない」
     2589+「う」  
   
その他player        pep
 (明朝化)     (ゴシックのまま)


②「U+2001が漢字幅よりもやや小さい」
        「漢字幅」×1+2001×6
        「漢字幅」×7
  
      その他player                  pep
      (2001=漢字幅)               (2001<漢字幅)

①「フォント変化しない」については当初多くの方にとって衝撃だったのではないでしょうか。明朝化はかなり使い勝手のよい技術だったので・・・
②「2001が漢字幅よりもやや小さい」は配置がずれたり、二重リサイズの崩壊を招く危険性があるので、2001を迂闊に使用できなくなりました。代わりに空白に全環境共通の3000や0a00を使えばいいのですが、どちらも幅が小さく文字数が多くなりがちです。また、2001は「漢字幅」だというところも重要なポイントでした。

私はこの二つの問題をどうにか解決できないか、今まで検証してきました。
①については、CAが「なんとか崩壊しない」程度の技術を開発することは出来ましたが、いろいろやることがめんどくさく、どれも対処療法的な技術のため、まだまだ自分の中では実用的なものとはなっていません。次回のブログでこちらの進捗について書いていきたいと思ってます。
②については、検証の結果、根本的な解決策になり得る技術を開発できました。
以下、検証の詳細を述べていきます。

実は、「結合分音記号」などの結合文字を使用することによって、pepにおいても2001を漢字幅にすることができます。
      FB30+0323+2001×6+「漢字幅」×1
      FB30+0323+「漢字幅」×7

                 Windows 7 pep
                 (2001=漢字幅)

この挙動はこちらの動画で知ることが出来ました。→watch/1365251152 (CA制作者 あめんぼ様)
恐らく結合文字を加えることによってフォントが変化しているのだと推測しています。(見ためは完全にゴシックですが)
ちなみにpep以外だとこうなります。
           FB30+0323+2001×6+「漢字幅」×1
        FB30+0323+「漢字幅」×7

                 windows 7 非pep
                  (2001=漢字幅)

もちろん2001は漢字幅です。また、0323がFB30と結合して組み込まれています。

この挙動を知った時、次のように考えました。
「2001を漢字幅化させ、且つ自身は空白文字のように見えず、更にすべての環境下で幅が同じ文字はないのか?」
この考えの下、様々な結合文字の検証を行いました。
が、そんな文字は確認することが出来ませんでした。
どれも、「2001を漢字幅化させるけど、環境によって幅が異なる」とか「空白どころかどえらく見えてる」ものばかり・・・
やはり結合文字1文字だけでは、掲げた要件を満たすことは出来ませんでした。

次に検証しようと思ったのが、ゼロ幅文字+結合文字の組み合わせです。
「結合文字もゼロ幅文字に組み込んでしまえば見えないのではないか?」
と考え、いろんな組み合わせを試しました。
その結果ベストな組み合わせとなったのが、こちらです。

          「202A+0655」

実際に使ってみるとこうなります。

       202A+0655+2001×6+漢字幅×1
       202A+0655+漢字幅×7

   
    Windows 7 非pep               Windows 7 pep
     (2001=漢字幅)                (2001=漢字幅)

202A+0655はゼロ幅文字として機能しており、pepにおいて0655の影響で2001が漢字幅化しています。
主要OS(XP Vista 7 8)で検証した結果、すべて同じ挙動を示しました。今のところ文字化け等の不具合は確認されていません。
(8は ōrz 様、Vistaは monmon@(・ヮ・)ノ 様に検証して頂きました。ありがとうございました!)

したがって、この「202A+0655」によって2001を漢字幅化させる技術は「実用化できる」
と考えています。
やり方は、行頭に「202A+0655」を半角文字感覚で挿入するだけでとても簡単です。
(行末に挿入するとなぜか左側に隣接している2001がキャンセルされることが確認されています。なので行末ではなく、行頭に挿入することをお勧めします。行頭では不具合は確認されていません。)
皆様是非お試しください。
文字化け等の不具合を発見された場合は↓ブログコメント欄等にて報告して頂けると嬉しいです。
よろしくお願い致します。


ちなみにこちらは本検証を簡単に投コメでまとめた動画です。
→watch/sm20882339





コメント

Αν περιμένετε
No.6 (2013/10/21 22:50)
なるほど・・・あまりに複雑で愕然としました( ゚Д゚)
ですが、おかげで疑問が解消されました。ありがとうございました!
それと、ご紹介頂いたブロマガとサイト参考にさせて頂きます。
模範囚
No.7 (2015/02/02 02:16)
そんな御苦労をされていたとは・・・しかもその技術がもう使えない!?ご心痛お察しします。あんまりだ(TдT)
他にもChromeで使われているフォントやXPで2001が化ける理由など、すごく勉強になりました。ありがとうございました!
ごっつっつ (著者)
No.8 (2015/02/08 22:34)
模範囚さん、確かにこれが使えなくったときは結構ショックでしたねw でもflashplayerに依存するコメント機能を使っている限り、しょうがないことなんですね~。 この件で改めてコメント環境の不安定さが身に染みましたw
あと、No.5の私の説明、所々間違ってると思います;; bardielさんのブログでならば、正確な知識を得られると思いますので、是非とも覗いてみてください!
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事