CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメントに日本語が書かれていたらエラーにする

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

ソースコード中に日本語禁止な事があるので、nkfやperlを使って make でエラーにする。

まず、日本語検出にお手軽なのは nkf

$ echo "aa" | nkf -g
ASCII
$ echo "ああ" | nkf -g
UTF-8

しかしcygwinのnkfには -g オプションが無い。perlで試す。

$ echo "aaa" | perl -MEncode::Guess -e 'print guess_encoding(join("",<>),qw/utf8 sjis/)->name . "\n"'
ascii
$ echo "あああ" | perl -MEncode::Guess -e 'print guess_encoding(join("",<>),qw/utf8 sjis/)->name . "\n"'
utf8

makefileに入れてみる。

.cpp.o:
	cat $? | perl -MEncode::Guess -ne '$$l++;if (guess_encoding($$_,qw/utf8 sjis cp932/)->name ne "ascii"){print $$l.":".$$_;}'
	$(CC) ${CFLAGS} -o $@ -c $<

依存関係がテキトウだとチェックされなかったり、何回もチェックしちゃったりする問題はあるけど、なんとか使えるかな。

こんな手もありか?

.PHONEY: all
all: check $(TARGET)
	$(CC) ${CFLAGS} -o $@ -c $<

.PHONY: check
check: hoge.c hoge.h
	cat $? | perl -MEncode::Guess -ne '$$l++;if (guess_encoding($$_,qw/utf8 sjis cp932/)->name ne "ascii"){print $$l.":".$$_;}'

あ、複数のファイルだと2番目以降がちゃんと行番号でないな。

とりあえず、ビルドする度にチェックするもよし、nightlyビルドに含めるもよし。 困ったらもうちょっとよくしよう。


«  | HOME |  »

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。