waitregex, strmatch は長音符号「ー」とマッチしない。
onig_newでONIG_ENCODING_ASCIIを指定しているため、CP932で2バイト目が正規表現のメタ文字にあたる文字を正しく扱えていないです。 日本語環境ならばONIG_ENCODING_SJISを指定するようにすれば大丈夫ですが、そうすると今度はWindows-1252な環境で問題が出るはずです。 どうしましょうか?
あたりでしょうかね。 ただ、ttpmacro.exe 自体が多言語対応していないので、どんなCodePageでも動くとも 思えないですが...。
CodePage からエンコードを導けるでしょうか?コードが UTF-8 だと別の処理が必要になったりするでしょうか?
エンコードを明示的に指定したとしても、OS のロケール?と適合していないと動かない、ということでしょうか?
# たとえば ttl を EUC で書いて、REG_POSIX_ENCODING_EUC_JP にしたとして、日本語 Windows やその他の言語の Windows で正しくマッチするものでしょうか?
yutakapon への返信
- teraterm.iniの CodePage を見て、自動判別する。 - エンコードを指定するマクロコマンドを新設する。
CodePageは現在使っていない設定なので、使うならばLocaleの方ですね。ただ、
あたりから、コマンドの方ですかね。
ただ、ttpmacro.exe 自体が多言語対応していないので、どんなCodePageでも動くとも 思えないですが...。
鬼車が対応しているエンコーディングに対応できればいいので、全部に対応する必要は無いです。
maya への返信
CodePage からエンコードを導けるでしょうか?コードが UTF-8 だと別の処理が必要になったりするでしょうか?
エンコードを明示的に指定したとしても、OS のロケール?と適合していないと動かない、ということでしょうか?
# たとえば ttl を EUC で書いて、REG_POSIX_ENCODING_EUC_JP にしたとして、日本語 Windows やその他の言語の Windows で正しくマッチするものでしょうか?
これは幾つかの部分に分けて考える必要があります。大雑把に分けると、
が有ります。
まずパーサ部分ですが、一部のエンコーディング以外ならば問題が出ないと思います。問題が出るのは、おそらくUTF-16/32系だけだと思います。
次にTera Termとの通信部分ですが、これはLinkしているTera Termに合わせる必要が有ります。
UTF-8設定の時はTera Term側で "UTF-8⇔Locale設定に対応したエンコーディング" の変換を行っているのでLocale設定に合わせる必要が有りますし、
それ以外の場合はLanguageの設定、例えばLanguage=JapaneseならばCP932, KoreanならばCP949, RussianならばRusClientの設定次第になります。
str系コマンドは各コマンドの実装次第ですね。
という状況でしょうか。ttlをEUCで書いた場合、onig_newでONIG_ENCODING_EUC_JPを指定できればstrmatchに関しては動くはずです。
その他コマンドはOSのロケールに依存するのが大半です。messagebox等はダイアログのフォントの問題もありますね。
まとめますと、ttlをOSのコードページ以外のエンコーディング(EUC-JPとか)で書くのは、 パーサは問題なくstr系コマンドは実装を修正すればなんとかなるが、 Tera Termとの通信部分やその他コマンドが対応していない(対応が難しい)ので現実的では無いと思います。
エンコーディングをEUC-JP等で書けるようにするのは置いておくとして、長音符号以外にも"タ"や"ゾ","運"などのCP932での2バイト目が正規表現のメタ文字になる文字が使えないというのはかなり問題だと思います。
前のコメント(1年前orz)でも書きましたが、デフォルトの挙動を変更するのは問題があるので、エンコードを設定するコマンドを新設するのが良いでしょうね。 他にもIGNORECASEなどのオプションや文法も指定出来るといいかもしれません。
正規表現オプション指定用コマンドを新設する方向でちょっと検討してみます。
regexoptionコマンドを実装してみました。
regexoption "SJIS" strmatch "対象データ" "データ"
でちゃんとマッチします。
Tera Term Version 4.73 (SVN# 4845) を Windows XP Professional Version 2002 SP3 で使用しています。 2 waitregex で 'パスワード' に引っかからないので、strmatch を使用して文字を分解して確認してみたところ、下記の結果(; より右側)となりました。Tera Term 側の理由なのか、Oniguruma 側の理由なのか、バグなのか、仕様なのかをご確認頂けないでしょうか。
対策として、長音部を .* へ置き換えることでマッチしていますので、緊急性は無いのですが。