カーソル位置の言語の特定No.07531
でるもんたいいじま さん 15/03/08 22:48
 
でるもんた・いいじま(ハンドルつけました)です。

WSHでプログラミングをしていて、コメントを整形するために
自作のマクロを使っています。

が、WSHのスクリプトのうち拡張子 .wsf のものが曲者でして、
1つのファイルの中でもイチによってコメントの書式が違います。

 1.<script language="VBScript">〜</script> の内側では、コメントは
  「'」で始める
 2.<script language="JScript">〜</script> の内側では、コメントは
  「//」で始めるか、または「/* 〜 */」とする
 3.実際に使ったことはありませんが、<script language="PerlScript>〜
  </script> の内側では、コメントは「#」で始めると予想
 4.<script>タグの外側では、コメントは「<!-- 〜 -->」とする

このような事情はWSH固有ではなく、たとえばHTMLファイルの中に
JavaScriptのコードを埋め込む、PHPでコードを書く、あるいは
CGIスクリプトの中にHTMLコードを埋め込む、といったケースで
頻出する問題だと思っています。

さて、前置きが長くなりましたが。
WSHのこのような仕様を踏まえたうえで、マクロで現在のカーソル位置が
1〜4のどのルールの支配下にあるのかを簡単に知る方法はないでしょうか。
単純に「</?script」を上向きに検索すればいいのかなと思うのですが
自信がありません。どこかに既存の実装例はないでしょうか。

[ ]
RE:07531 カーソル位置の言語の特定No.07532
秀丸担当 さん 15/03/09 13:43
 

まず、本題ではないですが、WSFの中のスクリプトについては、HTMLのカラー表
示がそのまま使えます。
[その他]→[ファイルタイプ別の設定]→[デザイン]→[複数行コメント]で、「言
語指定」にして「HTML/XML」を選ぶと、そのままできると思います。
「サーバーサイドスクリプト」は「なし」で「XML」はOFFでいいです。

こうしておくと、HTMLのスクリプト同様、VBScriptは「'」をコメントとして解
釈し、JavaScriptは「//」「/*〜*/」とコメントして解釈します。
scriptタグの外は「<!--〜-->」をコメントとして解釈します。
PerlScriptは対応していません。

ここで、色によって、カーソル位置がどの支配下にあるかを示すようなキーワー
ドがあるといいのですが、そういうキーワードは無いです。
関連するものとしては、colorcodeキーワードがあります。

以下のマクロ
message str( colorcode & 0x1f );
では、HTMLの本文では0、スクリプト部分では25を返しますが、コメント部分に
あると、どちらかを判断することはできないです。
またコメント上で25を得られたとしても、VBScriptかJavaScriptかを判別するこ
ともできないです。
やはり、「</?script」などを検索するのがいいと思います。
それか、少々強引ですが、簡単には「'」や「//」をダミーで挿入してみて、
colorcodeがどう変化するかを見ると、秀丸エディタが判断しているスクリプト
の種類を知ることができると思います。

[ ]
RE:07532 カーソル位置の言語の特定No.07533
でるもんたいいじま さん 15/03/09 15:45
 
でるもんた・いいじまです。

> まず、本題ではないですが、WSFの中のスクリプトについては、HTMLのカラー表
> 示がそのまま使えます。
> [その他]→[ファイルタイプ別の設定]→[デザイン]→[複数行コメント]で、「言
> 語指定」にして「HTML/XML」を選ぶと、そのままできると思います。
> 「サーバーサイドスクリプト」は「なし」で「XML」はOFFでいいです。
>
> こうしておくと、HTMLのスクリプト同様、VBScriptは「'」をコメントとして解
> 釈し、JavaScriptは「//」「/*〜*/」とコメントして解釈します。
> scriptタグの外は「<!--〜-->」をコメントとして解釈します。
> PerlScriptは対応していません。

おお、そういう手がありましたか。それで十分です。
ありがとうございました。

[ ]
RE:07532 カーソル位置の言語の特定No.07534
でるもんたいいじま さん 15/03/09 15:51
 
でるもんた・いいじまです。

> [その他]→[ファイルタイプ別の設定]→[デザイン]→[複数行コメント]で、「言
> 語指定」にして「HTML/XML」を選ぶと、そのままできると思います。
> 「サーバーサイドスクリプト」は「なし」で「XML」はOFFでいいです。
>
> こうしておくと、HTMLのスクリプト同様、VBScriptは「'」をコメントとして解
> 釈し、JavaScriptは「//」「/*〜*/」とコメントして解釈します。
> scriptタグの外は「<!--〜-->」をコメントとして解釈します。

これですが、if (a<b) と言った感じに書いたときにwscript.exeに文句を
言われないように、スクリプトを <![CDATA[ 〜 ]]> で囲んでいます。
そうすると、その内側は認識しないようです。

以下に問題のコードの抜粋を示します。

<?xml version="1.0" encoding="Shift_JIS" ?>
<job id="test">
<script language="VBScript">
<![CDATA[
option explicit
'----------------------- MessageBox(=shell.Popup)関係 -------
public const MB_OK               = 0
public const MB_OKCANCEL         = 1
]]>
</script>
<!--********************-->
<script language="JavaScript">
<![CDATA[
WScript.Quit(0);
]]>
</script>
</job>

ぜひともご対応いただければと思います。

[ ]
RE:07534 カーソル位置の言語の特定No.07535
秀丸担当 さん 15/03/09 16:22
 

サンプルとなるソースありがとうございます。
[その他]→[ファイルタイプ別の設定]→[デザイン]→[複数行コメント]で、
「XML」をOFFにした状態では、問題は確認できませんでした。
「XML」をONにした状態では、<![CDATA[〜]]>は生データのようあプレーンテキ
ストのように扱われ、コメント等の色付けはされなくなります。
もし「XML」がONだとしたら、OFFにするといいと思います。

「XML」をOFFにすると解釈できるのは、wsfのことは実は意識していなくて、
htmlと文法が同じだから結果的に解釈できているということになっています。

[ ]
RE:07535 カーソル位置の言語の特定No.07536
でるもんたいいじま さん 15/03/09 17:31
 
でるもんた・いいじまです。

> [その他]→[ファイルタイプ別の設定]→[デザイン]→[複数行コメント]で、
> 「XML」をOFFにした状態では、問題は確認できませんでした。
> 「XML」をONにした状態では、<![CDATA[〜]]>は生データのようあプレーンテキ
> ストのように扱われ、コメント等の色付けはされなくなります。
> もし「XML」がONだとしたら、OFFにするといいと思います。

ありがとうございます。これでうまくいきました。

#VBS/JSのスクリプトが文字列とコメント以外は全文黒太字になりますが、
#それはおいおいいじります。

あと、コメント関係は

Subject: hidesoft.4:07532| RE 07531 カーソル位置の言語の特定
> それか、少々強引ですが、簡単には「'」や「//」をダミーで挿入してみて、
> colorcodeがどう変化するかを見ると、秀丸エディタが判断しているスクリプト
> の種類を知ることができると思います。

を利用させていただきます。
こちらもありがとうございました。

[ ]