ダブルクォートの閉じ忘れ検出方法は?No.33916
いいじま さん 15/01/27 20:34
 
いいじまです。
こちらの部屋でいいのかな?

以前、Web用のスタイルシート(CSS)を編集していて、ダブルクォートの
閉じ忘れでハマったことがあります。

たとえば、下記の例。

BLOCKQUOTE.quote
{
 font-family: "MS 明朝, "MS Mincho", serif;
 font-style: oblique;
 letter-spacing: -1px;
 background-color: #e0e0ff;
 margin-left: 0;
 margin-right: 4em;
 margin-top: 0em;
 margin-bottom: 0em;
}

3行目、「MS 明朝」と次のコンマの間の半角ダブルクォートが
抜けていますが、そのうしろの「font-style:」の行以降は、
文字が赤色(=文字列定数の中身を示す色)になってくれません。

もちろん、こういうことでハマったらLintの類に通すのが正当なのだとは
思いますが、秀丸でも、すぐにわかるように、閉じ忘れ以降は延々と
赤色で表示するようにすることはできないでしょうか。

[ ]
RE:33916 ダブルクォートの閉じ忘れ検出方No.33917
IKKI さん 15/01/27 22:21
 
いいじまさん、こんばんは。

私の環境では、ファイルタイプ別の設定で複数行コメントを「自動判定」、強調表示
を「自動判定」にしています。
すると、このように文字定数が期待通りに色分けされます。
https://dl.dropboxusercontent.com/u/861457/150127-221733.png

> 文字が赤色(=文字列定数の中身を示す色)になってくれません。
とりあえず全部の設定を自動判定に戻してみてはいかがでしょう?

秀丸エディタ v8.51β1です。

[ ]
RE:33917 ダブルクォートの閉じ忘れ検出方No.33918
いいじま さん 15/01/28 01:15
 
いいじまです。
お返事ありがとうございます。

> 私の環境では、ファイルタイプ別の設定で複数行コメントを「自動判定」、強調表示
>
> を「自動判定」にしています。
> すると、このように文字定数が期待通りに色分けされます。
> https://dl.dropboxusercontent.com/u/861457/150127-221733.png

うーむ。ちょっと私の要望とは違いますね。
上記の画面例(私が33916番の記事で投書した例)だと、
「", serif;」の部分はダブルクォートが閉じていないので、
最終行まで丸ごと複数行文字列の色(私の場合は赤文字、
IKKIさんの設定だとグレーの背景に白文字)になってほしいのです。
現に、CSSではなくHTMLではそうなっています。

複数行コメントを自分で定義すればできそうなので、とりあえずそれで
しのいでおきますが、デフォルトで対応していただけますよう、
要望事項として挙げておきます。

よろしくご検討のほどお願いします>>秀丸担当さま

[ ]
RE:33918 ダブルクォートの閉じ忘れ検出方No.33920
秀丸担当 さん 15/01/28 09:26
 

CSSの標準のカラー表示は、確かに複数行には対応していないです。
ブラウザの解釈はどのようになっているか見てみたところ、ブラウザによって違
うようです。
IEとFirefoxは次の行の「;」まで、という、おそらく独自のあいまいな判断をし
ているようです。
Chromeは複数行ではなく、改行までで、次の行は有効な記述と判断しているよう
です。
このことから、閉じ忘れ以降が全部赤色になるもの違うようでした。

複数行で文字列を書く場合は、行末に「\」を書く方法があるようです。
複数行コメントのユーザー定義する場合は、以下のようにするのが適切と思われ
ます。
・開始文字列「"」
・終了文字列「"|[^\\]\n」で正規表現
秀丸エディタの標準のカラー表示を今後変更するとしたら、行末「\」に対応し
たほうがいいと思います。

行末「\」かどうかに関われず、閉じ忘れを視覚的に分かりやすくするとしたら、
既にされていると思いますが、ユーザー定義で、
・開始文字列「"」
・終了文字列「"」
とするのがいいと思います。

[ ]
RE:33920 ダブルクォートの閉じ忘れ検出方No.33921
いいじま さん 15/01/28 09:36
 
いいじまです。

> CSSの標準のカラー表示は、確かに複数行には対応していないです。
> ブラウザの解釈はどのようになっているか見てみたところ、ブラウザによって違
> うようです。
> IEとFirefoxは次の行の「;」まで、という、おそらく独自のあいまいな判断をし
> ているようです。
> Chromeは複数行ではなく、改行までで、次の行は有効な記述と判断しているよう
> です。
> このことから、閉じ忘れ以降が全部赤色になるもの違うようでした。

わざわざ調査していただき、ありがとうございました。

> 行末「\」かどうかに関われず、閉じ忘れを視覚的に分かりやすくするとしたら、
> 既にされていると思いますが、ユーザー定義で、
> ・開始文字列「"」
> ・終了文字列「"」
> とするのがいいと思います。

はい。しばらくこれでやってみようと思います。

[ ]