作ったEPUBのソースがないときに、EPUBから原稿に戻すepub parserがあればいいのではと思ったので調べてみた。
javaで調べてみるとアンドロイド向けのが見つかり、jsを調べるとepub2向けのが見つかってepub3向けのがないなという感想を覚えた。調べたらあるのかもしれないが、あまり活発に更新されているわけではなさそう。jsのを見ていくとjszipで展開して中身を見ていく感じであった。凡庸的にepub parserを作るのは大変そうなので、aozoraepub3で作ったものをパースして青空文庫形式にできればいい。epub parserでパースしたものをマークダウンに変換したりなどというものはいくつかあるようだ。
パーサーで何を読み取りたいかというと、下のもの。
- タイトル
- 著者
- カバー画像
- 目次
- 順番
- 本文
jszipでzipファイルを展開するのに、async awaitの書き方に直した。filedataにzipファイルの中身が入る形になる。きれいな書き方ではないが、とりあえず動けば。
var filedata= []; (async function(){ const fileContent = fs.readFileSync(sample, null).buffer; const zip = new JSZip(); await zip.loadAsync(fileContent); for (const fileName in zip.files) { const file = zip.files[fileName]; if (!file.dir) { const content = await file.async('text'); filedata.push({ "FileName" : fileName , "Content" :content}) } } })();
jsdomでxmlのパースで本のタイトルを取得するのにnamespaceが必要になる。xmlをjsonに変換してから読み取るやり方をしているのも見た。DOM操作のほうが慣れているのでnode.jsのjsdomを使っている。
//<dc:title id="title">表題</dc:title> const dc="http://purl.org/dc/elements/1.1/" document.getElementsByTagNameNS(dc,'title')
html markdown converter github.com
webpack,react,browserifyなどnode.jsをウェブページ向けに変換するのはどれがいいのやら。
zipファイルからファイル名が.opfのものを検索して、domparserに読み込む。
Node.jsでDOMを触るtorimemoblog.wordpress.com
developer.mozilla.org How To Create Html Nested Lists In JavaScript techindetail.com
How to parse nested elements using DOM stackoverflow.com
EPUB制作: 目次Navigation Documentのよくある間違い techracho.bpsinc.jp
再起処理でdom
DOMを再帰関数で深さを取得 stackoverflow.com
Node.jsからVOICEVOXを使ってみる。 qiita.com
VOICEVOX(音声合成)をREST-APIで利用する qiita.com