• 作成:

HTML Tidy version 5.8.0はol要素のtype属性を許可しませんが、実際のHTML規格では許可されています

問題

htacg/tidy-html5: The granddaddy of HTML tools, with support for modern standards が擬陽性の警告を発生させるようになりました。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>ol</title>
  </head>
  <body>
    <ol type="i">
      <li>hoge</li>
    </ol>
  </body>
</html>
$ tidy ol-type.html
line 8 column 5 - Warning: <ol> attribute "type" not allowed for HTML5
Info: Document content looks like HTML5
Tidy found 1 warning and 0 errors!

<!DOCTYPE html>
<html lang="ja">
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Linux version 5.8.0">
<meta charset="utf-8">
<title>ol</title>
</head>
<body>
<ol type="i">
<li>hoge</li>
</ol>
</body>
</html>

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md

確かにtypeは、

注: (法律文書や技術文書の箇条書きなどのように) リスト番号の種類に重要性がない限り、代わりに CSS の list-style-type プロパティを使用してください。

<ol>: 順序付きリスト要素 - HTML: HyperText Markup Language | MDN

と書かれているのであまり使われて欲しくないことが分かります。でも日本語版だけかもしれませんが、 HTML5の項目に、

reversed および start 属性を追加、type の非推奨を解除

って書いてありますね。

Pandocがtypeを含んだolの出力をするので仕方がない。規定値のtype="1"をわざわざ設定するんですよね。最新版のPandocでもこれを吐き出します。 tidyの警告を抹消するしかなさそうです。

ちょっと前のtidy-html5ではこんな警告は無かったのですが…

調査

HTML Tidy 5.8.0 Options Quick Reference 見ても該当しそうなやつが即座に分からない。

ソース見るのが一番早いか。

Search · attribute "type" not allowed for HTML5

ol直指定ではなくHTMLの規格書から属性を取ってきてそれと照合しているんですね。そうなるとolだけ許可じゃなくて全部の属性を検査しないようにするしかない? しかしそれはあまりに無チェック過ぎてイヤですね。

でも、 MDNも、 HTML Standard も見たけどtypeありますね…

ソースを読んでみたけどC言語と大量のマクロで読み解くのが大変難しい。いやもうちょっと頑張って読んでみよう。 C言語自体はそこまで難しいわけでは無いのですが、 C言語の繰り返しの冗長性を排除するために大抵の中規模以上のプロジェクトだと、 CPPマクロが大量に書かれていることが多くて、マクロの表現力が乏しいのとCプリプロセッサが実行してみないと内容が分からないのでcclsも混乱してそう。ある程度はripgrepでカバーするしか無い。

慣れたらそんなに読みにくかったわけでは無かった。ジャンプがあんまり動いてくれませんでしたけど。

https://github.com/htacg/tidy-html5/blob/2d15699ccf1564d11e764fb955e83c64d963d5ad/src/attrdict.c#L2324 で定義されて確かにHTML5だとダメだと誤って設定されていることが分かりました。 issueを建てます。

建てました。

The type attribute of the ol element is allowed in the actual HTML, but tidy-html5 does not allow it · Issue #1012 · htacg/tidy-html5