任务单 #27846

waitregex, strmatch は長音符号「ー」とマッチしない。

开放日期: 2012-03-16 13:35 最后更新: 2013-06-01 11:58

报告人:
属主:
类型:
状态:
关闭
组件:
里程碑:
(无)
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
Fixed
文件:
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

Tera Term Version 4.73 (SVN# 4845) を Windows XP Professional Version 2002 SP3 で使用しています。 2 waitregex で 'パスワード' に引っかからないので、strmatch を使用して文字を分解して確認してみたところ、下記の結果(; より右側)となりました。Tera Term 側の理由なのか、Oniguruma 側の理由なのか、バグなのか、仕様なのかをご確認頂けないでしょうか。

string = 'ー'
strmatch string '(ー)'
messagebox result 'result' ; 0
messagebox matchstr 'matchstr' ; (n/a)
messagebox groupmatchstr1 'groupmatchstr1' ; (n/a)

対策として、長音部を .* へ置き換えることでマッチしていますので、緊急性は無いのですが。

string = 'パスワード:'
strmatch string '(^[Pp]assw\w+:|^パスワ.*ド:)'
messagebox result 'result' ; 1
messagebox matchstr 'matchstr' ; パスワード:
messagebox groupmatchstr1 'groupmatchstr1' ; パスワード:

任务单历史 (3/11 Histories)

2012-03-16 13:35 Updated by: keishim
  • New Ticket "waitregex, strmatch は長音符号「ー」とマッチしない。" created
2012-03-16 18:22 Updated by: doda
  • 处理结果 Update from to Accepted
  • 组件 Update from (无) to Tera Term Macro
评论

onig_newでONIG_ENCODING_ASCIIを指定しているため、CP932で2バイト目が正規表現のメタ文字にあたる文字を正しく扱えていないです。 日本語環境ならばONIG_ENCODING_SJISを指定するようにすれば大丈夫ですが、そうすると今度はWindows-1252な環境で問題が出るはずです。 どうしましょうか?

2012-03-16 20:17 Updated by: (del#24082)
评论
- teraterm.iniの CodePage を見て、自動判別する。 - エンコードを指定するマクロコマンドを新設する。

あたりでしょうかね。 ただ、ttpmacro.exe 自体が多言語対応していないので、どんなCodePageでも動くとも 思えないですが...。

2012-03-20 22:17 Updated by: (del#1144)
评论

CodePage からエンコードを導けるでしょうか?コードが UTF-8 だと別の処理が必要になったりするでしょうか?

エンコードを明示的に指定したとしても、OS のロケール?と適合していないと動かない、ということでしょうか?

# たとえば ttl を EUC で書いて、REG_POSIX_ENCODING_EUC_JP にしたとして、日本語 Windows やその他の言語の Windows で正しくマッチするものでしょうか?

2012-03-26 17:50 Updated by: doda
评论

yutakapon への返信

- teraterm.iniの CodePage を見て、自動判別する。 - エンコードを指定するマクロコマンドを新設する。

CodePageは現在使っていない設定なので、使うならばLocaleの方ですね。ただ、

  • マクロは単独でも動かす事が出来る
  • TERATERM.INIの設定と実際にLinkしているTera Termの設定が違う可能性がある

あたりから、コマンドの方ですかね。

ただ、ttpmacro.exe 自体が多言語対応していないので、どんなCodePageでも動くとも 思えないですが...。

鬼車が対応しているエンコーディングに対応できればいいので、全部に対応する必要は無いです。

2012-03-26 19:03 Updated by: doda
评论

maya への返信

CodePage からエンコードを導けるでしょうか?コードが UTF-8 だと別の処理が必要になったりするでしょうか?
エンコードを明示的に指定したとしても、OS のロケール?と適合していないと動かない、ということでしょうか?
# たとえば ttl を EUC で書いて、REG_POSIX_ENCODING_EUC_JP にしたとして、日本語 Windows やその他の言語の Windows で正しくマッチするものでしょうか?

これは幾つかの部分に分けて考える必要があります。大雑把に分けると、

  • マクロのパーサ部分 (ttmparse.c)
  • Tera Termとの通信部分 (wait系コマンドやsend系コマンドとか)
  • str系コマンド
  • その他コマンド(messageboxとか)

が有ります。

まずパーサ部分ですが、一部のエンコーディング以外ならば問題が出ないと思います。問題が出るのは、おそらく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系コマンドは各コマンドの実装次第ですね。

  • エンコーディングの考慮をまったくしていない物 (CP932では問題が出る可能性あり)
  • mbstring系関数を使っているもの (OSのロケールに対応したエンコーディングを使っていれば問題なし)
  • 鬼車使用 (strmatch)

という状況でしょうか。ttlをEUCで書いた場合、onig_newでONIG_ENCODING_EUC_JPを指定できればstrmatchに関しては動くはずです。

その他コマンドはOSのロケールに依存するのが大半です。messagebox等はダイアログのフォントの問題もありますね。

まとめますと、ttlをOSのコードページ以外のエンコーディング(EUC-JPとか)で書くのは、 パーサは問題なくstr系コマンドは実装を修正すればなんとかなるが、 Tera Termとの通信部分やその他コマンドが対応していない(対応が難しい)ので現実的では無いと思います。

2013-04-03 13:02 Updated by: doda
评论

エンコーディングをEUC-JP等で書けるようにするのは置いておくとして、長音符号以外にも"タ"や"ゾ","運"などのCP932での2バイト目が正規表現のメタ文字になる文字が使えないというのはかなり問題だと思います。

前のコメント(1年前orz)でも書きましたが、デフォルトの挙動を変更するのは問題があるので、エンコードを設定するコマンドを新設するのが良いでしょうね。 他にもIGNORECASEなどのオプションや文法も指定出来るといいかもしれません。

正規表現オプション指定用コマンドを新設する方向でちょっと検討してみます。

2013-04-12 19:38 Updated by: doda
评论

regexoptionコマンドを実装してみました。

regexoption "SJIS"
strmatch "対象データ" "データ"

でちゃんとマッチします。

2013-04-12 19:38 Updated by: doda
  • 处理结果 Update from Accepted to Fixed
2013-06-01 09:01 Updated by: None
2013-06-01 11:58 Updated by: (del#1144)
  • 状态 Update from 开启 to 关闭
  • 里程碑 Update from Tera Term 4.78 (关闭) to (无)
  • Ticket Close date is changed to 2013-06-01 11:58

Attachment File List

No attachments

编辑

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登录名