sage
linkとかmetaとかHTMLでemptyなやつの小要素が正しくあつかえない。
<feed> <link>http://d.hatena.ne.jp/</link> </feed>
これが
<feed> <link /> http://d.hatena.ne.jp/ </feed>
こう解釈される。
ほんとにlibxmlのコードはとにかく動かすために書いてあるかんじ。100とかかいてあるしアルゴリズム的にはツリーなやつがNULL区切りで配列に詰めてあったりする。
/* inefficient, but not a big deal */ for (indx = 0; indx < 100; indx++) { closed = htmlStartCloseIndex[indx]; if (closed == NULL) return (0); if (xmlStrEqual(BAD_CAST * closed, newtag)) break; }
たぶん閉じ忘れた時になにを優先するかはルールがあってさらにコストも設定されてる。
static const elementPriority htmlEndPriority[] = { {"div", 150}, {"td", 160}, {"th", 160}, {"tr", 170}, {"thead", 180}, {"tbody", 180}, {"tfoot", 180}, {"table", 190}, {"head", 200}, {"body", 200}, {"html", 220}, {NULL, 100} /* Default priority */ };