Turndownを書き換えて好きなhtmlパーサを作ろう
Turndownのsrcフォルダのcommonmark-rules.jsを書き換える。まずheading styleから青空文庫だと見出し。青空文庫だと見出しだけではなく字下げとセットだから字下げも行う。heading styleはh1をトップに指定してないサイトのほかにもあるので、h1以外も大見出しに対応できるようにした。optionでheadingでh1以外を指定する。
見出し
option={ "headingStyle": "h1" } rules.heading = { filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], replacement: function (content, node, options) { var hLevel = Number(node.nodeName.charAt(1)) const midashi=[{'start':'[#大見出し]','end':'[#大見出し終わり]'}, {'start':'[#中見出し]','end':'[#中見出し終わり]'}, {'start':'[#小見出し]','end':'[#小見出し終わり]'}] var tophLevel = Number(options.headingStyle.charAt(1)) if (tophLevel< hLevel+1 && hLevel< tophLevel+3) { var underline = repeat((hLevel === 1 ? '=' : '-'), content.length) return '\n\n[#5字下げ]' + midashi[hLevel-1].start + content + midashi[hLevel-1].end + '\n\n' } else { return ( '\n\n[#3字下げ]' + content + '\n\n' ) } } }
ふりがな
rules.kakko = { filter: 'rp', replacement: function (content) { return '' //ルビタグの互換のための()を除去 } } rules.furigana = { filter: 'rt', replacement: function (content) { return '《' + content + '》' //ふりがな部分を《》で囲む } } rules.kanji = { filter: 'ruby', replacement: function (content) { return '|' + content //ふりがなをつける部分を|で区切る } }
挿絵
rules.image = { filter: 'img', replacement: function (content, node) { var alt = cleanAttribute(node.getAttribute('alt'))//[#画像(image.jpg)入る] var src = node.getAttribute('src') || '' var title = cleanAttribute(node.getAttribute('title')) var titlePart = title ? ' "' + title + '"' : '' return src ? '[#' + alt +'(' + src + titlePart + ')入る]' : '' } }