t-sin / inquisitor

Encoding/end-of-line detection and external-format abstraction for Common Lisp
34 stars 3 forks source link

adjust bom code #41

Closed cxxxr closed 7 years ago

cxxxr commented 7 years ago

それぞれのguess-*関数でbomのコードがありますがguess-jpとguess-twの二つとそれ以外で少しだけ違う形になってたので揃えました

差分周りで少し不安があるのですが、 変更前のコードでバッファの先頭で#xffだったら次が#xefかを確認する部分ですが、ここで変数cに二番目の値を入れたときの影響がループ全体になっているところが気になりました

一つ目はバッファの先頭が#xffでcに二番目の値が入ったときに、それが#xef以外の場合にbomの二つ目の条件式が真になってしまう部分です

二つ目はcに二番目の値が入った後にbomの条件式が偽の場合、ループの最後のdfa-processcに依存するので判定に影響するかです

このbomの判定はバッファの先頭だけなのでループの外に出せそうです これを外に出せるとbufferを最後まで走査した後にread-sequenceで次のbufferを走査できるので *detect-buffer-size*等の問題も解決できそうです

cxxxr commented 7 years ago

http://lispuser.net/commonlisp/japanese.htmlにあるguessがgaucheから移植された最初のコードなんですね このコードでは変数cがletでその範囲だけに使われてて、その次のlibguessでは今と同じ書き方になってました

t-sin commented 7 years ago

歴史まで紐解いてもらってしまった。手で移植していて、つい入っちゃったのでしょうね。

LGTMだと思うので、マージします。ありがとうございます! :+1:

たしかにByte order markの処理(やエスケープシーケンスの処理も)はloopの外に出しちゃってよさそうですね! いままで気付きませんでした :sunglasses:

loopのところのインデントが地味に合っていなかったりするので、そこらへんも含めていじってみようと思いますー。

cxxxr commented 7 years ago

ありがとうございました