【要望】拡大/縮小リセットコマンドの追加希望、一部記号の等幅保持希望

  1. 先日の修正(ディスカッション2643)では大変お世話になりました。
    同修正についてはその後も問題も出ず、快適に使えております。

    最新ベータ版も大幅な機能盛り込み、お疲れ様でした。
    今回のベータ版ではDirectWriteによるアンチエイリアス対応が入り、
    待望の機能の実装に浮かれつつ、早速試用させていただきました。
    新機能追加に伴いいくつか要望が出来ましたので、報告を上げさせていただきます。

    【要望】拡大/縮小リセットコマンドの追加希望
    設定の『キーボード → コマンド:表示』に『フォントサイズのリセット』コマンドを
    追加できないでしょうか(リセットはユーザーの指定サイズへ戻すことを指します)。

    主にブラウザでは拡大/縮小リセットに『Ctrl+0』を使うのですが、
    現在のMeryにはコマンド自体が無いのでショートカットを割り振ることが出来ません。
    なので、現状指定サイズぴったりに戻すには深い階層のダイアログを開いて指定しないと
    普段使いのサイズに確実に戻せないので、ちょっと拡大/縮小したい程度だと諦めて、
    どうしてもフォントサイズ変更を避けてしまいます。

    せめて代替手段としてフォントのサイズ変更中に、ステータスバーやAndroidのトースト
    のような表示で現在のフォントサイズがリアルタイム確認できる機能だけでもあれば、
    最悪リセットが無くても自分の標準サイズに戻しやすくなります。

    【要望】一部記号の等幅保持希望
    シングルクォート/ダブルクォートが等幅フォントにもかかわらず
    全角幅ではなく半角幅で表示されてしまい、判別が極端に困難になります。
    全角スペースも半角より短い幅で表示されているようで、
    たくさん連ねてみるとズレてくるようです。
    クォートなどは主にM+を含んでいる派生フォントで起きるようですが、
    確認してみたら『Mery 2.2.6.5031』でも既にその仕様でした。
    参考画像(最新ベータ):https://misogiyuki.net/150713_sample.jpg

    このことに気付いたのは、HTML属性の文字列を括るクォートで全角/半角を混ぜ込んでしまい、
    クォート幅がどちらもほぼ半角な為に全角交じりに気付かず、いくらコード変更しても属性値が
    反映されないなぁと他の部分を延々と調べ直し続けてしまいました。

    別のDirectWrite対応エディタではM+系のフォントを使っても
    クォーテーションは全角で表示されるものも有るようです。
    フォント側の不具合や仕様も影響している気がするのですが、
    出来れば対応して頂けるとこのような凡ミスに直ぐ気付けて嬉しいかなと。

    今回の要望については以上です。

    実は濁点/半濁点の合成文字についても気になる点があるのですが、
    『既知の問題』か、Unicodeの仕様か、フォントの問題かの判断も付かず、
    用途もニッチかつ現状はブラウザ側もまともに表示出来ない用途なので、
    こちらは要請があるようであれば追って報告したいと思います。

    新機能は色々な仕様や環境依存問題が多くなってきて複雑かつ
    困難も多いかと思いますが、ご検討宜しくお願い致します。

    使用環境
    Windows 8.1 Pro
    Mery 2.4.0.5701 (beta)
     Migu 1M http://mix-mplus-ipa.osdn.jp/migu/
     Mgen+ 1m http://jikasei.me/font/mgenplus/
     Ricty Diminished 

     |  みじゅい  |  返信
  2. ベータ版のご試用ありがとうございます。
    DirectWrite は本当に苦労しました^^;

    > 【要望】拡大/縮小リセットコマンドの追加希望

    そうですね。
    ブラウザのようにフォントサイズのリセットができたほうがより便利ですね。
    検討してみます。

    > シングルクォート/ダブルクォートが等幅フォントにもかかわらず
    > 全角幅ではなく半角幅で表示されてしまい、判別が極端に困難になります。

    残念ながらこれは仕様上、対応不能だと思われます。恐らくフォントの仕様でしょう。
    Mery はフォントの幅は一文字ずつそれぞれ Windows が推奨する幅をフォントから取得しています。

    別のエディタ (秀丸さん?) の動作は固定ピッチフォントの幅を完全に固定している仕様のようで、確かに全角ダブルクォートの幅は全角幅で表示されます。この仕様ですと副作用として、固定ピッチのフォントに可変ピッチのフォントをフォントリンクさせた場合に可変ピッチフォントの文字も固定幅で表示されてしまうという問題が発生します。(たぶん)

    つまり幅を完全固定して「Consolas + メイリオ 」のような組み合わせで日本語部分の幅がおかしくなってしまうのは好ましくないと考え、一文字ずつフォントが返してくる幅を使用する、という仕様にしています。

    > 全角スペースも半角より短い幅で表示されているようで、

    半角より短い幅で表示、という現象は私の環境では再現できませんでした。
    全角文字の幅が半角文字と合わないのはフォントの仕様のようです。

    ↓こちらに注意書きがあります。
    https://github.com/yascentur/Ricty

    ▼引用
    --------
    一部のフォントサイズで半角文字と全角文字の横幅比が 1:2 にならないことがあります。
    ピクセル値 (px) が偶数でないとき、どのフォントにおいても起こりうる問題です。
    一般的な 96 DPI のフォントレンダリングでは、9 pt、10.5 pt、12 pt、13.5 pt、15 pt など、1.5 の倍数を指定すると 1:2 で表示されると思います。
    --------

    フォントサイズを 1.5 の倍数にすると幅が揃うのは確認しました。

    > 実は濁点/半濁点の合成文字についても気になる点があるのですが、
    > 『既知の問題』か、Unicodeの仕様か、フォントの問題かの判断も付かず、
    > 用途もニッチかつ現状はブラウザ側もまともに表示出来ない用途なので、
    > こちらは要請があるようであれば追って報告したいと思います。

    ベータ版リリースの記事にて触れていますが DirectWrite では描画できない結合文字も結構あるようです。
    ブラウザが表示できないものは Mery で対応するのは厳しいような気がしますが、現象を教えて下さいますとこちらでも調べてみたいと思います。

    > 新機能は色々な仕様や環境依存問題が多くなってきて複雑かつ
    > 困難も多いかと思いますが、ご検討宜しくお願い致します。

    ありがとうございます。
    DirectWrite 対応時に情報集めで FireFox の開発者フォーラムとかを覗いたりしていましたが、皆さん苦労されているようでした。秀丸さんレベルできちんと対応されているエディタは他に無いんじゃないかと思いました。

     |  Kuro  |  返信
  3. ご無沙汰しております。まとめと返答が遅くなり申し訳ないです。
    丁寧な検証とご回答ありがとうございます。

    ○【要望】拡大/縮小リセットコマンドの追加希望
    > 検討してみます。
    ありがとうございます。

    ○ダブルクォート判別
    やはりフォント仕様ではないか、ということですね。
    試したものは大体M+やIPA系だったので、その辺の合成元フォントの問題っぽいなとは感じており、
    レスを頂いた後にも報告の為にフォントを再調査していたところ、
    Mgen+ 1mの公開元の紹介にて、NasuMというフォントを見つけました。
    内容的にもMigu 1MやMgen+ 1mのようなフォントで等幅も有り、
    ダブルクォートもきちんと全角幅になるので、
    やはりご指摘の通りフォントの仕様に引きずられているものと思われます。
    仕様上エディタ側では対応難しそうなので、
    とりあえず対応出来ているNasuMをメインで使おうかと思います。

    NasuM http://itouhiro.hatenablog.com/entry/20140917/font

    > 別のエディタ
    はい、秀丸エディタですね。
    早いうちからDirectWriteに対応されたりと機能的にはいつも気にしているのですが、
    Meryほどフィーリングが合わないので試用をしては常用は考えてしまう感じです。

    ○全角スペース幅
    引用をご紹介頂くまで知らなかったのですが、
    まさにフォントサイズを 1.5 の倍数にする必要がある問題によるもののようです。
    この問題はおそらくどのフォントでもなるようで、
    先ほど見つけたNasuMでもなってしまいました。
    フォントに左右される問題は如何ともし難いですね。

    もっとも前述の要望のフォントサイズリセットが実装して頂けるとなれば、
    拡大縮小時に幅ズレしたとしても基準を1.5の倍数にしてリセットすれば
    幅ズレが無い状態を確認できるので、気にならないかなと思います。

    ○濁点半濁点の合成文字
    こちらは一応報告を見ていただけるとのことなので
    報告主要ブラウザ、メモ帳、秀丸エディタ辺りだけですが調べ直して、
    ちょっと雑ですがスクリーンショット付きの表にしてみました。

    https://misogiyuki.net/150727_sample.jpg
    ※上記URL内の濁点半濁点は全て合成文字の『濁点(U+3099)』『半濁点(U+309A)』のことです。

    例によってフォント自体の仕様や実装に左右されるようですが、
    ソフトやフォントにより有効とみなされるものは正しく表示され、
    無効とみなしているものは合成しない、もしくは表示がおかしくなるようです。

    要望としてはMeryでは非対応文字を重ねると文字幅の誤認というか、
    他の描画の裏に回っているような現象が起きて
    内容が視認できず編集自体が困難になるので、
    せめてメモ帳などのように対応してない場合は1文字として扱い、
    『濁点(U+3099)』『半濁点(U+309A)』の合成文字だけでも
    編集を出来るようにして欲しいなというものです。

    ※NasuMでは平仮名と片仮名の濁点/半濁点合成が網羅されています。
    http://itouhiro.hatenablog.com/entry/20140925/font

    流石に合成文字の中でもフォント対応もブラウザ対応も更によろしくない
    他の囲み文字『丸囲み(U+20DD)』『四角囲み(U+20DE)』『キーキャップ囲み(U+20E3)』や、
    まず使わない外国語のアクセント記号的なものはそこまで必要ではなく、
    『あ゛』『う゛』位はブラウザ対応次第で使ってみようかなと思っている程度で、
    正直労力に見合わないことは自分でも理解しておりますので、
    気が向いたら気に留めていただければ程度で宜しくお願い致します。

    ○合成文字余談
    さらに余談兼補足で、Meryでもメモ帳でもBSとDELについては
    『バックスペースでは合成文字が1字消える』『削除ではその合成文字以降が消える』
    という仕様ですが、キーボードやマウスでのカーソル移動については違いが有り、
    Meryは合成文字の移動も1字単位、メモ帳は連続する合成文字はBS/DEL同様1字扱いでした。

    これについては合成文字対応ソフトが少ない上に
    現状セオリーと呼べるものが無いと思いますので
    要望としても何とも言えないところです。

     |  みじゅい  |  返信
  4. 詳細なご連絡ありがとうございます。
    拡大縮小リセットの件は、次のバージョンにて実装する方向で進めたいと思います。

    その他の項目につきましては検証作業をしており、完了次第、ご報告させていただきたいと思います。
    今しばらくお待ちくださいませ。

     |  Kuro  |  返信
  5. > ○【要望】拡大/縮小リセットコマンドの追加希望

    これは現在の仕様上、ブラウザとは若干方式が異なりますが実装できそうです。
    (仕様上の都合により、「既定のフォントサイズとして設定」のようなコマンドを選択することで記憶したフォントサイズに戻るような仕組みになりそうです)

    > ○ダブルクォート判別
    > Meryほどフィーリングが合わないので試用をしては常用は考えてしまう感じです。

    ありがとうございます、ご要望に沿えず申し訳ございません。

    > ○全角スペース幅

    フォントサイズのリセットは実装しようと思っていますので、そちらでご対処いただければ助かります。
    DirectWrite 無効の場合はフォントサイズに関係なくきちんと描画できるみたいなんですけどね…

    > ○濁点半濁点の合成文字

    詳しい資料、ありがとうございます。

    まず用語の確認をさせてください。ここでいう「合成文字」というのは「基底文字 + 結合文字」で表わされる「結合文字列」のことと解釈しています。(1 つの文字コードで記号を含めて 1 つの文字を表すいわゆる『合成文字』とは別ですよね)

    表示のズレは DirectWrite が原因のようです。単純に DirectWrite を使用して例文を画面に表示させるだけのプログラムでも見事にズレてしまいました。

    秀丸さんで DirectWrite 有効、「高度な編集2」→「結合文字を 1 つの文字として扱う」にチェックを入れた状態で確認しましたところ、Mery と同じような描画になりました。(初期状態では、いただいた資料の通り描画されていた気がするのですが、一度この設定をしたところ、設定を戻してもなぜか元に戻らなくなってしまいました…)

    ただし、いただいた資料の Mery + MS ゴシック使用時、濁点に続く文字のひどいズレに関しては秀丸さんでは発生しませんでしたので、恐らく内部的に対策をしているのだと思います。Mery でも『濁点(U+3099)』『半濁点(U+309A)』で DirectWrite の描画をいったん切り離すことで、MS ゴシック使用時の描画のズレには対応できそうです。

    > せめてメモ帳などのように対応してない場合は1文字として扱い

    残念ながら現状、フォントによって結合されたり、されなかったりするケースへの対応は難しそうです。結合されているかどうかはそのフォントで描画してみないと分からないということもあり、対応するとなるとかなり大幅な修正が必要になりそうですので、今のところは対応できそうにありませんでした。

    > ○合成文字余談
    > Meryは合成文字の移動も1字単位、メモ帳は連続する合成文字はBS/DEL同様1字扱いでした。

    Mery の仕様はメモ帳に準拠させています。

    ・BS では結合文字がひとつ消えます。(基底文字 + 結合文字 の場合は基底文字だけが残ります)
    ・DEL では基底文字とそれに続く結合文字がすべて消えます。
    ・キーボードやマウスでの移動は DEL と同様で、基底文字と結合文字の隙間にはキャレットが移動しないようにしています。(メモ帳も同様だと思います)

    > Meryは合成文字の移動も1字単位、メモ帳は連続する合成文字はBS/DEL同様1字扱いでした。

    基本的にはメモ帳と同様の挙動をするように作っていますが、メモ帳のようにフォントによって結合文字とみなされるケースや、基底文字とそれに続く結合文字の並び順によって結合されたりされなかったりするケースには対応できていません。Mery とメモ帳で挙動が違うと思われたのは、このケースかもしれません。

    結合文字への対応はかなり闇が深く、さらに DirectWrite と組み合わせると問題も多く非常に困難です。秀○さんのサポート掲示板を拝見していても非常に苦労されているようで… 問題が見つかればその一つ一つに対処療法的な処置を施していくしかないという状態ですので、Mery でも今後、地道な対応が必要になってきそうですね。

     |  Kuro  |  返信
  6. 諸々理想的な対応ありがとうございました。
    コメントには書いた通り、いくつか気づきがありましたので
    こちらで報告上げておきます。

    ■濁点と半濁点の結合
    DirectWriteオンの時で問題が無いのを確認しました。
    ただDirectWriteがONでない時に、濁点/半濁点が文字に結合したように見えるのに、
    その結合した文字の後ろに1文字分のスペースが出来てしまうようです。
    ※確認フォントはNasuMのみです。

    例:
    ○(半)濁点通常文字に結合用(半)濁点
      → 結合せず結合用(半)濁点は1文字として扱われる。
    × 通常文字に結合(半)濁点
      → 結合用(半)濁点は結合するが後ろに1文字分の余白が残る。
       (『た゛』で『だ 』という状態)
    ○ 上記『通常文字に結合(半)濁点』の後ろにさらに結合用(半)濁点
      → 結合せず結合用(半)濁点が1文字として扱われる。
       ただし上記結合した分自体の余白はその直後に残る。
       (『た゛゛』で『だ ゛』という状態)

    結合文字はDirectWrite利用が必須という仕様であれば
    Readme辺りに書いておいた方が良いのではのという程度のおせっかいです。
    (ユニコード対応→「結合文字にも対応」にその注釈は無いので)

    余談ですがカラーフォントでKuroさんも『何に使うの?というツッコミはなしの方向で。』と
    おっしゃったように自分もをそれを使うかは分からないのですが、
    Unicode関連だとは思いながらも自分の直前の要望が結合文字の話だったので
    少し前に話題になっていた

    これからの絵文字の実装指針、UTR #51“Unicode Emoji”とはなにか  - INTERNET Watch
    http://internet.watch.impress.co.jp/docs/special/20150131_686161.html#contents-section-3-2

    の絵文字の肌の色を変更する結合の実装をしたのかと最初思ってしまいました(笑)。
    カラーフォントなんて仕様もあったんですね。
    Webに使われだしたら仕事で死ねそうです(汗)。

    ■『【要望】拡大/縮小リセットコマンドの追加希望』への補足提案と要望
    こちらは標準設定に含まれてなかったので提案と、
    出来るキーと出来ないキーで法則が無いものがあったので要望です。

    ○提案:次のキーも他で利用していないならば標準設定で良さそうです。
    『Ctrl+Num 0』
    大きい/小さいフォントサイズの標準キーがNumキー側なので。

    『Ctrl+-、Ctrl+;』
    ブラウザだとNumキー側でなくても反応するので。

    ○要望(希望度・低):
    『Shift+Ctrl+0、Shift+Ctrl+Num 0(~9)』
     Ctrl+~機能の内容反転や付随機能という形で覚えることが多いので
     こちらも設定出来ると嬉しいです。

     前者は他のキーで『Shift+Ctrl+~』設定出来るのに『Shift+Ctrl+0』だけ
     設定出来ないようです。

     後者もShiftと『Num +、Num -、Num *、Num /』との組み合わせは出来ますが
     Shiftで他の機能が設定されているものと『Num 5』については
     設定出来ないようです。

     無ければ別キーで覚えるだけなのですが、
     難しくないようであれば対応を宜しくお願い致します。

    以上で、Ver2.4.5.5910への報告とさせていただきます。
    ありがとうございました。これからも愛用させていただきます。

     |  みじゅい  |  返信
  7. ご報告ありがとうございます。

    > ■濁点と半濁点の結合

    NasuM フォントで現象を確認しました。
    他のフォントでは正常に描画できているようなので、フォント独自の問題のようです。結合文字はフォントによって挙動が異なるケースがあり、それに完全に対応することは非常に難しいです。(今回の濁点ぐらいなら対応可能だと思います)

    > 結合文字はDirectWrite利用が必須という仕様であれば
    > Readme辺りに書いておいた方が良いのではのという程度のおせっかいです。

    結合文字はどちらかというと DirectWrite なしのほうが対応範囲が広いと思います。結合文字の対応状況につきましては、以前に同様の指摘をいただいたため MeryWiki の機能紹介からは「結合文字対応」の文言を外しましたが、Readme のほうは残ったままでしたね。削除しときます^^; (結合文字はツッコまれると正直、ツライ…)

    > カラーフォントなんて仕様もあったんですね。
    > Webに使われだしたら仕事で死ねそうです(汗)。

    私も秀○エディタの新機能紹介で初めて知りました。
    スマホ向けのサイトなどにおいて Web で使われる可能性は大いにありそうですね…w

    > ○提案:次のキーも他で利用していないならば標準設定で良さそうです。
    > 『Ctrl+Num 0』
    > 大きい/小さいフォントサイズの標準キーがNumキー側なので。

    できればテンキーの方もでも行けるようにしたかったのですが、現状、仕様上の都合により、ショートカットキーの割り当ての初期値は 1 つしか割り当てられませんので、とりあえずブラウザなどのデフォルト「CTRL + 0」にしています。

    大きい / 小さいフォントサイズのキーが Num キー側なのを考慮すると、「CTRL + Num 0」をデフォルトにした方が良いかもですね。

    > 『Ctrl+-、Ctrl+;』
    > ブラウザだとNumキー側でなくても反応するので。

    こちらも同様の理由により。お手数ですが必要に応じて手動で割り当ててください。

    > ○要望(希望度・低):
    > 『Shift+Ctrl+0、Shift+Ctrl+Num 0(~9)』

    これは Windows の仕様でしょうかね、他のアプリで試してみても割り当てが不可能のようです。CTRL + SHIFT と組み合わせると別の役割のキーになってしまうようで…

    以上、今後ともよろしくお願いします。

     |  Kuro  |  返信
  8. 早速のご検証ありがとうございます。

    > 他のフォントでは正常に描画できているようなので、フォント独自の問題のようです。
    フォント固有問題でしたか。検証のお手間をお掛けして申し訳ないです。
    フォント側も仕様や対応がまちまちで困ったものですね。
    もっともDirectWriteがONの時はNasuMでも普通に動いているので、
    自分の使用範囲では現状問題無いので報告だけしておこうかなというものでした。
    気が向いたらDirectWriteを切って別のフォントも試したりと、
    良いフォントとの出会いを探してみます!

    > 結合文字はフォントによって挙動が異なるケースがあり、それに完全に対応することは非常に難しいです。
    濁点は『あ゛』を一字で表してみたかったので軽い希望として出したのに
    対応してみていただいたりと感謝しきりです。
    IVSだの異体字だの、これ以上かじりかけの文字コード知識あれこれは
    流石にもう言いませんのでご安心ください(;_;)

    > カラーフォント
    > スマホ向けのサイトなどにおいて Web で使われる可能性は大いにありそうですね…w
    Web制作初心者の時にガラケー関連の絵文字対応に悩んでいたのを思い出しますねw

    > ショートカットキーの割り当ての初期値
    > 別の役割のキー
    初期値は一つだけだったのですね。
    別の役割のキーについてもそういうことかなとは薄々感じておりました。
    Ctrl+ShiftなどはCtrl+Altで代用は出来ているので仕様ということであれば
    こちらも全然お気になさらぬよう。

    諸々仕様等の詳細な説明ありがとうございました。疑問も晴れてすっきり致しました。
    こちらこそ今後とも宜しくお願い致します。

     |  みじゅい  |  返信