Scrapbox はシンプルな記法で WYSIWYG を実現した稀有なサービスです。プレビューなしにサクサク書けるのです。
Scrapbox で作成した文書を Wiki などに転記するために本文を Markdown 形式に変換してクリップボードにコピーする機能を追加しました。
見出し
Scrapbox には見出しという概念がなく、文字サイズの修飾を使ってます。文字サイズを決め打ちで Markdown の見出しレベルにマッピングするようにしました。
箇条書き
Scrapbox はインデントが箇条書きになるので、Markdown への変換は容易です。
リンク
Scrapbox のリンクは Markdown より簡易な記法になっていますのでこれも変換します。
コードブロック
Scrapbox のコードブロックは code:index.html
のような形式なので、ファイル名を出力してから拡張子をそのままコードブロックの開始部分に追加しています。拡張子ではコードハイライトされない言語もあるかもしれません。
表
Scrapbox の表はタブ区切りになっているので、|
で join しています。
イメージ
Gyazo の 画像は一律 png として変換するようにしてます。HTML を scraping すればフォーマットが分かりますがそこまではしてません。
Scrapbox の記法がシンプルなため、正規表現と少しのコードで実装できました。他にも数式などの記法もありますが変換はしてません。
以下は上記のページの変換例です。
Sandbox page
Heading1
Heading2
Heading3
Heading4
- Item1
- Item1-1
- Item1-2
- links
goroutines.go
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
metasyntactic variables
lang | 1st | 2nd | 3rd |
---|---|---|---|
us | foo | bar | baz |
jp | hoge | huga | piyo |
python | spam | ham | eggs |