KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

でんでんコンバーター互換機製作4回目

 npmにでんでんコンバーターのルビ変換があるなら、node.jsにすればいいじゃないと思いついて迷走中。

 node.jsの本は何冊か読んでいたのだけれど、chromeで動かすjavascriptとの違いに困惑している。同じV8ではないか、わかるはずだろ思ったがなんか違う気がする。

  • jszip.min.js
  • FileSaver.js
  • uuid.js
  • vkbeautify.js

 ライブラリとして前はこれらを使ってたがnode.jsだとxmlの生成はもっとましなライブラリがあるかも。テンプレートエンジンを使ったほうが楽できるかもしれない。などといろいろ考えた。さくっと作ったほうが早い気がする。

 今までだと、XHTMLテンプレートをDOMパーサーでパースしてから書き換えて、シリアライズしていたが。テンプレートエンジンで、XMLに出力するほうが早いかもしれない。

でんでんコンバーターのライブラリ

  でんでんコンバーターのルビ変換ライブラリをインストールする

npm install markdown-it --save

npm install markdown-it-ruby --save

npm install ejs

これ、マークダウンパーサーを書き換えるためには、こまごまと追加しないといけないパターンかな。

var md = require('markdown-it')()

var md = require('markdown-it')()

            .use(require('markdown-it-ruby'));

 var origin = fs.readFileSync(__dirname + '/kurofune/kurofune/kurofunezengo.txt', 'utf-8'); 

var pagetemplete = fs.readFileSync(__dirname + '/ejs/page.ejs', 'utf-8');

 var markFO=[]; markFO = origin.split(/^={3,}$/gm);

var result = md.render(markFO[1]) 

var data =ejs.render(pagetemplete,{ title: "title" , body: result })

page.ejs

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="ja" lang="ja">
<head>
<meta charset="utf-8" />

<link rel="stylesheet" href="style.css" type="text/css" />

<title><%= title %></title>
</head>
<body class="bodymatter" epub:type="bodymatter">
<%- body %>
</body>
</html>

 

黒船読み込んで、マークダウンパーサーでhtmlに変換してejsテンプレートから、page.htmlを生成までをやった。

 

 jszipがnode.jsで動かないのかなと思ったが、下のページにnode.jsでのファイル生成の仕方があったので使ってみた。

How to write a file / give it to the user

var JSZip = require("jszip");
var zip = new JSZip();
zip.file("mimetype", "application/epub+zip");
var meta = zip.folder("META-INF");
meta.file("container.xml", containerXML);
var item = zip.folder("OEBPS");

zip
.generateNodeStream({type:'nodebuffer',streamFiles:true})
.pipe(fs.createWriteStream('out.zip'))
.on('finish', function () {
// JSZip generates a readable stream with a "end" event,
// but is piped here in a writable stream which emits a "finish" event.
console.log("out.zip written.");
});

 こうやるだけで、EPUBのフォルダー構造が作成できたので、簡単な気がする。

 

github.com

github.com

github.com

Node.js超入門

Node.js超入門

 

  node.jsの勉強と思ってこの本やってみたんだけで、いきなり文字化けしてしまったのでよくわからない。はじめは文字コードがshift-jisだったのがいけなかったのかなと思って、utf-8にしたのいまだに文字化けしておるは。

 

github.com

ほかのnode.jsでどうやってEPUBに圧縮しているのかを調べると。epub-genでachiverjsを使っておった。テンプレートエンジンでXML生成したり編集しているようだ。

github.com