Upgrade to Pro — share decks privately, control downloads, hide ads and more …

君だけの最強の markdown をつくろう / Create your strongest markdown syntax

君だけの最強の markdown をつくろう / Create your strongest markdown syntax

Masayuki Izumi

March 20, 2018
Tweet

More Decks by Masayuki Izumi

Other Decks in Programming

Transcript

  1. ### GFM (Github Flavored Markdown) いつも書いてるやつ ``` table は CommonMark

    では定義されていない | foo | bar | | --- | --- | | baz | bim | ``` 5
  2. ``` task list も CommonMark にない - [x] foo -

    [ ] bar - [x] baz - [ ] bim ``` 6
  3. ### PHP Markdown Extra ``` ``` Qiita 等で使える footnote は

    PHP Markdown Extra 由来だよ[^1] [^1]: http://blog.qiita.com/post/105484781374/qiita-markdown-supporting 7
  4. ### このスライドも Markdown からできてる(自作) ``` HTML のコメントをいい感じにパースするよ いろんな独自ディレクティブがあるよ <!-- newpage

    --> <!-- pageNumber enable="false" className="page" --> 例えばこれ↑でページ番号がなくなる このページだけページ番号ないでしょ? ```
  5. ## Custom parser with remark - remarkjs/remark - unified がベース

    - 「テキストを syntax-tree にする」やつ 13
  6. ### How to use remark ``` import remark from 'remark'

    import html from 'remark-html' remark() .use(html) .process('## Hello world!', (_, file) => { console.log(String(file)) }) // => <h2>Hello world!</h2> ``` 14
  7. ### Plugin example: remark-kbd ``` import kbd from 'remark-kbd' remark()

    .use(kbd) .use(html) .process('||enter||', (_, file) => { console.log(String(file)) }) // => <kbd>enter</kbd> ``` 15
  8. ### How to create plugins 戦略は2 パターン - parser &

    tokenizer をつくる - => `remark-kdb` - visitor + 正規表現でつかまえる - => `mdast-directive-comment` 16
  9. ### How to test plugins - input が決まれば output も決まる

    - snapshot testing が超絶相性いい - `remark-kbd` - `packages/@ohp/processor - izumin5210/OHP` 17
  10. ## REFERENCES - remarkjs/remark - plugin 集もあるよ! - izumin5210/OHP -

    このスライドつくったやつ - (ちゃんとメンテしてないのでバグまみれ) 19