Closed cxxxr closed 7 years ago
http://lispuser.net/commonlisp/japanese.html
にあるguessがgaucheから移植された最初のコードなんですね
このコードでは変数c
がletでその範囲だけに使われてて、その次のlibguessでは今と同じ書き方になってました
歴史まで紐解いてもらってしまった。手で移植していて、つい入っちゃったのでしょうね。
だと思うので、マージします。ありがとうございます! :+1:
たしかにByte order markの処理(やエスケープシーケンスの処理も)はloopの外に出しちゃってよさそうですね! いままで気付きませんでした :sunglasses:
loopのところのインデントが地味に合っていなかったりするので、そこらへんも含めていじってみようと思いますー。
ありがとうございました
それぞれのguess-*関数でbomのコードがありますがguess-jpとguess-twの二つとそれ以外で少しだけ違う形になってたので揃えました
差分周りで少し不安があるのですが、 変更前のコードでバッファの先頭で#xffだったら次が#xefかを確認する部分ですが、ここで変数
c
に二番目の値を入れたときの影響がループ全体になっているところが気になりました一つ目はバッファの先頭が#xffで
c
に二番目の値が入ったときに、それが#xef以外の場合にbomの二つ目の条件式が真になってしまう部分です二つ目は
c
に二番目の値が入った後にbomの条件式が偽の場合、ループの最後のdfa-process
がc
に依存するので判定に影響するかですこのbomの判定はバッファの先頭だけなのでループの外に出せそうです これを外に出せるとbufferを最後まで走査した後に
read-sequence
で次のbufferを走査できるので*detect-buffer-size*
等の問題も解決できそうです