1
1

はじめに

前回まではRustとWebAssembly使ってFavicon生成などの画像処理を学習していたが、

今回はユーティリティ系アプリの作成もしてみたいので、pulldown_cmarkを使ってマークダウンエディタを作ってみる。

以前作成したfaviconツールについて

pulldown_cmarkについて

プロジェクトの作成

pulldown_cmarkを使うと簡単にマークダウンの処理が可能。

下記のようにOptionと入力文字でParserを作成し、

Parserをpush_htmlのメソッドにいれるだけでHTMLに変換される(便利すぎる😎)

lib.rs
// 省略

#[wasm_bindgen]
pub fn md_preview(input: String) -> String {
    let mut options = Options::empty();
    options.insert(Options::ENABLE_TABLES);
    options.insert(Options::ENABLE_FOOTNOTES);
    options.insert(Options::ENABLE_STRIKETHROUGH);
    options.insert(Options::ENABLE_TASKLISTS);
    options.insert(Options::ENABLE_SMART_PUNCTUATION);
    options.insert(Options::ENABLE_HEADING_ATTRIBUTES);
    options.insert(Options::ENABLE_YAML_STYLE_METADATA_BLOCKS);
    options.insert(Options::ENABLE_PLUSES_DELIMITED_METADATA_BLOCKS);
    options.insert(Options::ENABLE_OLD_FOOTNOTES);
    options.insert(Options::ENABLE_MATH);
    options.insert(Options::ENABLE_GFM);
    let parser = Parser::new_ext(&*input,options);
    let mut result = String::new();
    html::push_html(&mut result, parser);
    result
}

// 省略

次に上記の関数を呼び出す処理を実装する。

JavascriptでtextareaをinputしたタイミングでリアルタイムにPreviewできるようにイベントを付与する。

index.js
// 省略

  textArea.addEventListener("input", (event) => {
        document.getElementById("preview").innerHTML = md_preview(event.target.value);
    });

// 省略

主要機能のコーディングはこれだけ!

他に欲しい機能などを実装して完了!!

今回の成果物

デモURL

デモ画像

pulldown_cmark使ってMarkdownEditor作ってみた_001.jpg

ソース

まとめ

上記のようなMarkdownを処理するライブラリがJavascriptにも存在しているので、そちらも使ってみたい。📝

簡単に楽しくコーディングできるのでこういったライブラリ作ってくださる方々に感謝です。🙏

※間違い等ありましたら、ご指摘いただけると助かります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1