turndownを改造してHTMLを青空文庫形式に変換するツールを作れないか試している。HTMLからマークダウンへの変換するツールはいくつかある、それならば、少し手を加えるだけで青空文庫形式に変換できるのでは。
turndown github.com
turndownのコードを見ると、domパーサーとmarkdownに変換部分が分離されているようなので、markdown変換部分を置き換えるだけでよさそう。
forkしてみるとテスト環境がそろっているのでテストがしやすそうだった。 クローンしたフォルダーで npm install npm i domino npm test を実行すると、ビルドされてdistフォルダーにウェブ用のjsが作られるようだ。 index.htmlを実行すると動作テストができるが、読み込先をdistフォルダーに変更した
<script src="https://unpkg.com/turndown/dist/turndown.js"></script> <script src="./dist/turndown.js"></script>
マークダウンの変換はsrc/commonmark-rulesで行っているので、commonmark-rulesを書き換えてからnpm testを実行すると全体をビルドされるようだ。ビルドに時間がかかるので、lib/turndown.cjs.jsを直接書き換えて実行しつつ、たまにビルドして確認するのが早そうだ。
var TurndownService = require('./lib/turndown.cjs.js')
設定はオブジェクトを渡す
var TurndownService = require('./lib/turndown.cjs.js')
option={
"headingStyle": "atx",
"hr": "* * *",
"bulletListMarker": "*",
"codeBlockStyle": "fenced",
"fence": "```",
"emDelimiter": "_",
"strongDelimiter": "**",
"linkStyle": "inlined",
"linkReferenceStyle": "full"
}
var turndownService = new TurndownService(option)
var markdown = turndownService.turndown('<h1>Hello world!</h1><h2>Hello world!</h2><h3>Hello world!</h3>')
console.log(markdown)