[解決済み] Markdownのパースはどのように行うのですか?[クローズド]
質問
編集部:最近、CommonMarkというプロジェクトについて知りました。 このプロジェクトは、元のMarkdown仕様の曖昧さを正しく識別し、対処します。 Markdownの仕様にある曖昧さを正しく識別し、対処しています。 http://commonmark.org/ これは素晴らしいC#ライブラリ のサポートがあります。
構文がわかります はこちら .
ダウンロードで続くソースは、以下のように書かれています。 パール で書かれており、私はこれを尊重するつもりはありません。正規表現が多用されており、そのために MD5 ハッシュを利用して特定の文字をエスケープしています。何かが間違っているのです!
のパーサをハードコードするところです。 マークダウン . これについての経験は何ですか?
あなたがMarkdownの実際のパージングについて言う意味のあることを何も持っていない場合、私に時間を割いてください。(これは厳しく聞こえるかもしれませんが、そうです、私は洞察力を探しているのであって、ソリューション、つまりサードパーティライブラリを探しているのではありません。).
答えのために少し手助けをすると、正規表現は以下のことを意味します。 パターンを識別する ! 文法全体を解析するためのものではありません。人々がそうすることを考慮することはfoobarです。
- Markdownについて考えるなら、それは基本的に段落の概念に基づくものです。
- そのため、合理的なアプローチは入力を段落に分割することかもしれません。
- 段落には多くの種類があり、例えば、見出し、テキスト、リスト、ブロッククオート、コードなどがあります。
- したがって、課題はこれらの段落を識別し、どのような文脈で発生するのかを特定することです。
共有する価値があるとわかったら、解決策をまた提示します。
どのように解決するのですか?
私が知っている唯一のマークダウンの実装で、実際のパーサーを使用しているのは Jon MacFarleane 's ペグマークダウン . そのパーサー は パース式文法 というパーサ生成器です。 ペグ .
EDITです。 マウリシオ フェルナンデス は、最近 シンプルなマークアップ Markdown パーサ の一部として書いた OcsiBlog Weblog Engine の一部として書かれたものです.パーサは OCaml で書かれているので、それは は極めて はシンプルで短く(268 SLOCで パーサー には 43 SLOC。 HTML エミッター ) に比べて、まだ 爛々として 速い (よりも20%速い)。 割引 (手作業で最適化された C 言語で書かれています) と sixhundred よりも 6 倍速く ブルークロス ( ルビー )) で、まだパフォーマンスの最適化もされていないにもかかわらず、です。これは、Mauricio自身が自分のウェブログのために内部的に使用することだけを目的としているため、いくつかの逸脱があります。 公式のMarkdown仕様 からの逸脱がありますが、Mauricioが作成した ブランチを作成し、その変更のほとんどを戻しました。 .
関連
-
[解決済み] GitHubのREADME.mdに画像を追加する方法とは?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] Markdownのコメント
-
[解決済み] Markdownで画像サイズを変更する
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] Markdownで同じドキュメントの一部にリンクする方法は?
-
[解決済み] Markdownで色を適用する方法は?
-
[解決済み] Markdown: 番号付きリストの継続
-
[解決済み】Markdownファイル内のGitHub相対リンク
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例