こんにちは、山本です。
"<s-imai@...>"さんは書きました:
> となると、#コメントの記述で注意すべき点は、
> 1) コメントをJISやSJISで書くのは避ける
> → できれば英語で書きましょう!
日本語版以外のWindowsでTclスクリプトを動かすのであれば、
Javaのnative2ascii相当のプログラムを使って非ASCII文字を
\uXXXX形式に変換してしまう、という手もあります。
例えば、以下のスクリプトをnative2asciiしてやると:
proc test {} {
# ボ ← SJISの場合、2バイト目がopen brace
puts こんにちは、世界。
}
test
↓のようになります:
proc test {} {
# \u30dc \u2190 SJIS\u306e\u5834\u5408\u30012\u30d0\u30a4\u30c8\u76ee\u304copen brace
puts \u3053\u3093\u306b\u3061\u306f\u3001\u4e16\u754c\u3002
}
test
こうすればSJIS文字の中に含まれるbrace記号のせいで
挙動がおかしくなることは無いだろうと思います。
以下はTcl/Tk版native2ascii.tclです。私が公開している「Drop on Script」と
組み合わせて使えば、Tclスクリプトファイルにドラッグ&ドロップするだけで
変換できるようになります:
# //////////////////////////////////////////////////////////
# native2ascii.tcl
# 非ASCII文字を\uhhhhに置き換えるスクリプト
# //////////////////////////////////////////////////////////
pack [text .t -width 80 -height 20 -yscrollcommand {.sy set}] -side left -expand yes -fill both
pack [scrollbar .sy -orient vertical -command {.t yview}] -side right -expand yes -fill y
foreach filename $argv {
file rename -force -- $filename $filename.bak
.t insert end $filename...
update
set fi [open $filename.bak]
set fo [open $filename w]
while {[gets $fi line] >= 0} {
set oline ""
for {set i 0} {[set c [string index $line $i]] != ""} {incr i} {
if {$c < "\x80"} {append oline $c} {append oline \\u[format %04x [scan $c %c]]}
}
puts $fo $oline
}
close $fi
close $fo
.t insert end 終了\n
.t see end
}
tk_messageBox -message 終了しました。
exit
--
Koichi Yamamoto,
http://homepage3.nifty.com/yamakox/