質問:プレーンテキストリストをHTMLに解析する賢い方法はありますか?
それとも、難解な再帰的手法に頼らなければならないのでしょうか、それとも総当たり攻撃に頼らなければならないのでしょうか。
私はこれをしばらくの間疑問に思っていました。私自身の反芻では、私は何度もブルートフォース、そして奇妙な再帰的な方法に戻ってきました...しかし、それはいつもとても不格好なようです。もっと良い方法があるはずですよね?
それで、賢い方法は何ですか?
仮定
シナリオを設定する必要があるので、これらは私の仮定です。
リストは、順序付けされていないリストまたは順序付けられたリストのいずれかで、(少なくとも)3レベルの深さでネストできます。リストのタイプと深さは、プレフィックスによって制御されます。
- プレフィックスの後に必須のスペースがあります。
- リストの深さは、プレフィックスにスペースなしの文字がいくつあるかによって制御されます。
*****
5つのリストの深さでネストされます。 - リストタイプは、文字タイプ、
*
または-
順序付けされていないリスト、無秩序なリストによって強制され#
ます。
\n
アイテムは1文字だけで区切られます。(2つの連続する新しい行が「グループ」、段落、div、またはMarkdownやTextileのような他のHTMLタグとして適格であるとしましょう。)リストタイプは自由に混在させることができます。
出力は有効なHTML4である必要があり、できれば末尾に
</li>
sが付いている必要があります。解析は、必要に応じて正規表現を使用して、または使用せずに実行できます。
サンプルマークアップ
* List
*# List
** List
**# List
** List
# List
#* List
## List
##* List
## List
必要な出力
読みやすさのために少し分割しましたが、これの有効なバリエーションである必要があります(私はちょうどそれをうまく間隔を空けていることを覚えておいてください!):
<ul>
<li>List</li>
<li>
<ol><li>list</li></ol>
<ul><li>List</li></ul>
</li>
<li>List</li>
<li>
<ol><li>List</li></ol>
</li>
<li>List</li>
</ul>
<ol>
<li>List</li>
<li>
<ul><li>list</li></ul>
<ol><li>List</li></ol>
</li>
<li>List</li>
<li>
<ul><li>List</li></ul>
</li>
<li>List</li>
</ol>
要約すれば
どうやってこれをしますか?予想外に繰り返されるリストを処理するための良い方法を本当に理解したいと思います。なぜなら、それは誰もが絡むための醜い混乱として私を襲うからです。