配布サイトからダウンロード。EUC/LF版とSJIS/CRLF版があるが、今回はEUC/LF版をダウンロード
$ wget 'http://openlab.ring.gr.jp/k16/htmllint/archives/htmllint.zip' --2011-10-28 23:22:39-- http://openlab.ring.gr.jp/k16/htmllint/archives/htmllint.zip Resolving openlab.ring.gr.jp... 133.243.237.36 Connecting to openlab.ring.gr.jp|133.243.237.36|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 773491 (755K) [application/zip] Saving to: “htmllint.zip” 100%[===========================================>] 773,491 --.-K/s in 0.1s 2011-10-28 23:22:44 (4.96 MB/s) - “htmllint.zip” saved [773491/773491]
unzipで解凍。
$ unzip -d htmllint htmllint.zip Archive: htmllint.zip inflating: htmllint/htmllint.history.txt inflating: htmllint/htmllint inflating: htmllint/httpreq.pl inflating: htmllint/htmllint.pm inflating: htmllint/tagslist.cgi inflating: htmllint/RFC2396.pm inflating: htmllint/htmllintrc inflating: htmllint/htmllintenv inflating: htmllint/htmllint.cgi inflating: htmllint/readme.txt inflating: htmllint/mailinglist.html inflating: htmllint/use-htmllintcgi.html inflating: htmllint/top.gif inflating: htmllint/rulefile.html inflating: htmllint/htmllinte.html inflating: htmllint/close.gif inflating: htmllint/colors.html inflating: htmllint/explain-omake.html inflating: htmllint/htmllint.html inflating: htmllint/faq.html inflating: htmllint/open.gif inflating: htmllint/explain.html inflating: htmllint/htmllint.css inflating: htmllint/notice.html inflating: htmllint/index.html inflating: htmllint/introduction.html inflating: htmllint/fight.gif inflating: htmllint/normal.gif inflating: htmllint/colorsbk.html inflating: htmllint/sitemap.html inflating: htmllint/use-htmllint.html inflating: htmllint/htmllintl.html inflating: htmllint/tagslist.html inflating: htmllint/explain-score.html inflating: htmllint/good.gif inflating: htmllint/download.html inflating: htmllint/reference.html inflating: htmllint/explain-wai.html inflating: htmllint/verygood.gif inflating: htmllint/ie40.rul inflating: htmllint/html40-strict.rul inflating: htmllint/imode20.rul inflating: htmllint/jskystation.rul inflating: htmllint/mozilla20.rul inflating: htmllint/html40-frameset.rul inflating: htmllint/html20.rul inflating: htmllint/html401-frameset.rul inflating: htmllint/html40-transitional.rul inflating: htmllint/ie50.rul inflating: htmllint/15445-preparation.rul inflating: htmllint/compact-html.rul inflating: htmllint/imode-xhtml.rul inflating: htmllint/imode-xhtml11.rul inflating: htmllint/xhtml-rdfa-1.rul inflating: htmllint/doti10.rul inflating: htmllint/imode50.rul inflating: htmllint/xhtml1-strict.rul inflating: htmllint/html401-strict.rul inflating: htmllint/xhtml-basic.rul inflating: htmllint/html40-mobile.rul inflating: htmllint/xhtml1-transitional.rul inflating: htmllint/webexp.rul inflating: htmllint/jpo.rul inflating: htmllint/mozilla40.rul inflating: htmllint/charsets.rul inflating: htmllint/html401-transitional.rul inflating: htmllint/xhtml-mp.rul inflating: htmllint/wilbur.rul inflating: htmllint/imode40.rul inflating: htmllint/ie55.rul inflating: htmllint/colortable.rul inflating: htmllint/html10.rul inflating: htmllint/xhtml1-frameset.rul inflating: htmllint/imode30.rul inflating: htmllint/15445.rul inflating: htmllint/htmlplus.rul inflating: htmllint/htmlplus-old.rul inflating: htmllint/jskyweb.rul inflating: htmllint/i18n.rul inflating: htmllint/xhtml11.rul inflating: htmllint/imode.rul inflating: htmllint/mozilla30.rul inflating: htmllint/common.rul inflating: htmllint/arena.rul inflating: htmllint/ie30.rul inflating: htmllint/ie30b.rul inflating: htmllint/imode-xhtml11.dtd inflating: htmllint/html40-mobile.dtd inflating: htmllint/html40-strict.dtd inflating: htmllint/htmlplus-old.dtd inflating: htmllint/jskyweb.dtd inflating: htmllint/imode50.dtd inflating: htmllint/html401-loose.dtd inflating: htmllint/imode30.dtd inflating: htmllint/html20.dtd inflating: htmllint/isonum.ent inflating: htmllint/imode20.dtd inflating: htmllint/jskystation.dtd inflating: htmllint/imode40.dtd inflating: htmllint/ie30b.dtd inflating: htmllint/isolat1.ent inflating: htmllint/ISOlat1HTML.ent inflating: htmllint/html40-frameset.dtd inflating: htmllint/HTMLsymbol.ent inflating: htmllint/HTMLspecial.ent inflating: htmllint/ie55.dtd inflating: htmllint/compact-html.dtd inflating: htmllint/parsedtd.pl inflating: htmllint/mozilla30.dtd inflating: htmllint/imode-xhtml.dtd inflating: htmllint/ie40.dtd inflating: htmllint/html401-strict.dtd inflating: htmllint/arena.dtd inflating: htmllint/html40-loose.dtd inflating: htmllint/html401-frameset.dtd inflating: htmllint/ie50.dtd inflating: htmllint/jpo.dtd inflating: htmllint/mozilla.dtd inflating: htmllint/15445.dtd inflating: htmllint/webexp.dtd inflating: htmllint/htmlplus.dtd inflating: htmllint/doti10.dtd inflating: htmllint/15445-preparation.dtd inflating: htmllint/html10.dtd inflating: htmllint/isolat2.ent inflating: htmllint/isodia.ent inflating: htmllint/mozilla40.dtd inflating: htmllint/HTMLlat1.ent inflating: htmllint/i18n.dtd inflating: htmllint/ie30.dtd inflating: htmllint/wilbur.dtd inflating: htmllint/imode.dtd
ここで起動してみる。jcode.plが見つからないといわれる。Another HTML-lint : Downloadによれば、jcode.plかJcode.pmのどちらかが必要であるとのこと。Jcode.pm 2.07のソースを読むと、はEncodeモジュールのラッパーになっているので、Jcode.pmをインストールすることにする。。
$ perl htmllint Can't locate jcode.pl in @INC (@INC contains: ./ /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl . ./) at htmllint.pm line 123. Compilation failed in require at htmllint line 15.
rootになって、Jcodeモジュールをシステムにインストールする。
$ su - Password: # cpan -i Jcode CPAN: Storable loaded ok (v2.30) Reading '/root/.cpan/Metadata' Database was generated on Wed, 26 Oct 2011 19:37:14 GMT CPAN: LWP::UserAgent loaded ok (v6.03) CPAN: Time::HiRes loaded ok (v1.9724) Fetching with LWP: http://www.perl.org/CPAN/authors/01mailrc.txt.gz CPAN: YAML loaded ok (v0.77) Reading '/root/.cpan/sources/authors/01mailrc.txt.gz' CPAN: Compress::Zlib loaded ok (v2.037) ............................................................................DONE Fetching with LWP: http://www.perl.org/CPAN/modules/02packages.details.txt.gz Reading '/root/.cpan/sources/modules/02packages.details.txt.gz' Database was generated on Fri, 28 Oct 2011 14:32:15 GMT ............................................................................DONE Fetching with LWP: http://www.perl.org/CPAN/modules/03modlist.data.gz Reading '/root/.cpan/sources/modules/03modlist.data.gz' ............................................................................DONE Writing /root/.cpan/Metadata Running install for module 'Jcode' Running make for D/DA/DANKOGAI/Jcode-2.07.tar.gz Fetching with LWP: http://www.perl.org/CPAN/authors/id/D/DA/DANKOGAI/Jcode-2.07.tar.gz CPAN: Digest::SHA loaded ok (v5.62) Checksum for /root/.cpan/sources/authors/id/D/DA/DANKOGAI/Jcode-2.07.tar.gz ok CPAN: Archive::Tar loaded ok (v1.80) Jcode-2.07/ Jcode-2.07/Changes Jcode-2.07/Changes.ver0X Jcode-2.07/Jcode/ Jcode-2.07/Jcode/_Classic.pm Jcode-2.07/Jcode/Constants.pm Jcode-2.07/Jcode/H2Z.pm Jcode-2.07/Jcode/Nihongo.pod Jcode-2.07/Jcode/Tr.pm Jcode-2.07/Jcode/Unicode/ Jcode-2.07/Jcode/Unicode/Constants.pm Jcode-2.07/Jcode/Unicode/NoXS.pm Jcode-2.07/Jcode.pm Jcode-2.07/Makefile.PL Jcode-2.07/MANIFEST Jcode-2.07/META.yml Jcode-2.07/README Jcode-2.07/t/ Jcode-2.07/t/_test_unicode.pl Jcode-2.07/t/ambiguous.pl Jcode-2.07/t/append.t Jcode-2.07/t/benchmark.pl Jcode-2.07/t/convert.t Jcode-2.07/t/fun.pl Jcode-2.07/t/getcode.t Jcode-2.07/t/h2z.t Jcode-2.07/t/hankaku.euc Jcode-2.07/t/hiragana.euc Jcode-2.07/t/jfold.t Jcode-2.07/t/length.t Jcode-2.07/t/mime.t Jcode-2.07/t/new.t Jcode-2.07/t/perl581.t Jcode-2.07/t/regex.t Jcode-2.07/t/stripped.euc Jcode-2.07/t/table.euc Jcode-2.07/t/table.jis Jcode-2.07/t/table.sjis Jcode-2.07/t/table.ucs2 Jcode-2.07/t/table.utf8 Jcode-2.07/t/tr.t Jcode-2.07/t/unibench.pl Jcode-2.07/t/x0212.euc Jcode-2.07/t/x0212.jis Jcode-2.07/t/x0212.ucs2 Jcode-2.07/t/x0212.utf8 Jcode-2.07/t/zenkaku.euc Jcode-2.07/Unicode/ Jcode-2.07/Unicode/euc2uni.h Jcode-2.07/Unicode/Makefile.PL Jcode-2.07/Unicode/uni.c Jcode-2.07/Unicode/uni2euc.h Jcode-2.07/Unicode/Unicode.pm Jcode-2.07/Unicode/Unicode.xs CPAN: File::Temp loaded ok (v0.22) CPAN: Parse::CPAN::Meta loaded ok (v1.4401) CPAN: CPAN::Meta loaded ok (v2.112621) CPAN.pm: Building D/DA/DANKOGAI/Jcode-2.07.tar.gz Checking if your kit is complete... Looks good Writing Makefile for Jcode Writing MYMETA.yml and MYMETA.json CPAN: Module::CoreList loaded ok (v2.57) cp Jcode/Nihongo.pod blib/lib/Jcode/Nihongo.pod cp Jcode.pm blib/lib/Jcode.pm Manifying blib/man3/Jcode::Nihongo.3pm Manifying blib/man3/Jcode.3pm DANKOGAI/Jcode-2.07.tar.gz /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/append.t ... ok t/convert.t .. ok t/getcode.t .. ok t/h2z.t ...... ok t/jfold.t .... ok t/length.t ... ok t/mime.t ..... ok t/new.t ...... ok t/perl581.t .. ok t/regex.t .... ok t/tr.t ....... ok All tests successful. Files=11, Tests=244, 4 wallclock secs ( 0.08 usr 0.04 sys + 1.20 cusr 0.07 csys = 1.39 CPU) Result: PASS DANKOGAI/Jcode-2.07.tar.gz /usr/bin/make test -- OK Running make install Prepending /root/.cpan/build/Jcode-2.07-c9tmPR/blib/arch /root/.cpan/build/Jcode-2.07-c9tmPR/blib/lib to PERL5LIB for 'install' Installing /usr/local/share/perl/5.10.1/Jcode.pm Installing /usr/local/share/perl/5.10.1/Jcode/Nihongo.pod Installing /usr/local/man/man3/Jcode.3pm Installing /usr/local/man/man3/Jcode::Nihongo.3pm Appending installation info to /usr/lib/perl/5.10/perllocal.pod DANKOGAI/Jcode-2.07.tar.gz /usr/bin/make install -- OK
出力がEUCになっているので、これをnkf -wでutf8にする。使い方とオプション等の説明が表示される。
$ perl htmllint | nkf -w Another HTML-lint ver3.58 Copyright (c) 1997-2007 by ISHINO Keiichiro <k16@chiba.email.ne.jp>. All rights reserved. usage: perl5 htmllint options file.html... options: (*=default) -d <warn> : 指定された警告を無効にする。(各警告はコンマで区切る) -e <warn> : 指定された警告を有効にする。(各警告はコンマで区切る) -f <file> : 設定ファイル(htmllintrc)を指定する。 -pedantic : すべての警告を有効にする。(このとき -d -e の指定無効) -nopedantic : すべての警告を有効にすることはしない。(*) -religious : 宗教的な警告を有効にする。(*) -noreligious : 宗教的な警告を無効にする。 -accessibility : アクセス性向上に関する警告を有効にする。(*) -noaccessibility : アクセス性向上に関する警告を無効にする。 -banner : 処理開始と終了メッセージを表示する。(*) -nobanner : 処理開始と終了メッセージを表示しない。 -echoname : チェックする HTML ファイル名を標準エラー出力する。 -noechoname : チェックする HTML ファイル名を標準エラー出力しない。(*) -score : チェックした HTML の点数を表示する。(*) -scorenowhines: チェックした HTML の点数を警告ありのときのみ表示する。 -scoreonly : チェックした HTML の点数のみを表示する。 -noscore : チェックした HTML の点数を表示しない。 -prune : ディレクトリ指定のとき下位ディレクトリを探さない。 -noprune : ディレクトリ指定のとき下位ディレクトリを探す。(*) -warnings : チェックによる警告を表示する。(*) -nowarnings : チェックだけして何も警告を表示しない。 -linklist : HTML に含まれるリンク先を表示する。 -nolinklist : HTML に含まれるリンク先を表示しない。(*) -lc : 警告中の要素名や属性名を小文字で表示する。XHTMLは無効。 -uc : 警告中の要素名や属性名を大文字で表示する。XHTMLは無効。(*) -listwarnings : サポートされているすべての警告を表示する。 -w <style> : 警告メッセージのスタイルを指定する。 <style> = lint file(#): warning-message (*) = short #: warning-message = long #: warning-id: warning-message = terse file:#:warning-id = verbose file: #: warning-id: warning-message -limit <n> : 警告の打ち切り個数を指定する。(999) -omit <n> : 無減点同一警告の打ち切り数を指定する。(20) -x <html> : 指定された HTML ヴァージョンでチェックする。 <html> = html10 = html20 | RFC1866 = html2x | RFC2070 | i18n = html+ | htmlplus = html30 | arena = html32 | wilbur = html40 | html40s | html40-strict = html40t | html40-transitional = html40f | html40-frameset = html40m | html40-mobile = html401 | html401s | html401-strict = html401t | html401-transitional (*) = html401f | html401-frameset = xhtml1 | xhtml1s | xhtml1-strict = xhtml1t | xhtml1-transitional = xhtml1f | xhtml1-frameset = xhtml11 = xhtml-rdfa = xhtmlb = xhtmlmp = 15445 | iso-html = 15445p | 15445-preparation | iso-html-preparation = mozilla20 = mozilla30 = mozilla40 | navigator | netscape = ie30b | msie30b = ie30 | msie30 = ie40 | msie40 = ie50 | msie50 = ie55 | msie55 | microsoft = webexp = compact-html | compact = imode10 = imode20 = imode30 = imode40 = imode-xhtml | ixhtml = imode-xhtml11 | ixhtml11 = jskyweb = jskystation = doti10 = jpo 大文字小文字の区別なし。 -igndoctype : HTML 中の DOCTYPE 宣言を無視する。 -usedoctype : HTML 中の DOCTYPE 宣言を無視しない。(*) -igncharset : CHARSET の指定とコードの一致性を無視する。 -usecharset : CHARSET の指定とコードの一致性を無視しない。(*) -local : HTML 中のローカルファイルの参照を許可する。(*) -nolocal : HTML 中のローカルファイルの参照を禁止する。 -after <date> : 指定日以降のファイルのみチェックする。 <date> = YYYY-MM-DD-hh-mm-ss (区切りは任意、途中までで可) = @file (このファイルのタイムスタンプを基準) -r <dir> : 規則ファイルのディレクトリを指定する。 指定がなければ htmllint と同じ場所とみなされる。 -v | -version : ヴァージョンを表示する。 -u | -help : このメッセージを表示する。 return: 何もエラーがなければエラーステータス 0 で終了する。
テストのために、htmllintと同じディレクトリに含まれるindex.htmlをチェックしてみる。結果良好。
$ perl htmllint index.html | nkf -w index.html を HTML4.01 Transitional としてチェックします。 index.html(10): 0: <HEAD>〜</HEAD> 内に <LINK REV="MADE" HREF="mailto:〜"> が含まれていません。 index.html(13): 0: <DIV> の属性 `ALIGN` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(42): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(53): 0: <P> の属性 `ALIGN` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(60): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(61): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(62): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(63): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(64): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(65): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(66): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(67): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(68): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(69): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(70): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(73): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(73): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(74): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(74): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(75): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(75): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(78): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(78): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(79): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(79): 0: <TD> の属性 `NOWRAP` はあまり薦められない属性です。スタイルシートを使いましょう。 index.html(91): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(92): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(93): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(94): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(97): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(100): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(101): 0: コメント中に `<` や `>` を書くと、いくつかのブラウザを混乱させることがあります。 index.html(108): 0: <DIV> の属性 `ALIGN` はあまり薦められない属性です。スタイルシートを使いましょう。これ以降この警告は表示しません。 33個のエラーがありましたが、このHTMLは 100点です。タグが 26種類 181組使われています。文字コードは UTF-8 のようです。