見出し画像

Python + CotEditorでテキストファイルを縦書きepub風に 4

前回で、目次をリンクにできたので、今度は最後に配置されていた目次を冒頭に持ってくるようにしてみましょう。

とは言え、これはなかなかやっかいです。これまでは、テキストの内容を一行ずつ取り出して、それを出力していたのですが、そのままやってしまうと、どうしても目次は最後に来てしまいます。すべての見出しを拾ってからしか目次は作れないからです。

ということは、この流れ自体を変える必要がありますね。先にデータだけ作っておいて、後でまとめてprintという感じ。

というわけで、まず本文のテキストを格納するための変数を宣言して、

mainbody = ""

あとは、それまでprintとしていたところを、この変数に追記という形にします。

for line in sys.stdin:
	if len(line.rstrip()) == 0:
		mainbody =  mainbody + "<p><br /></p>"
	else:
	    if line[0] == "○":
	        mainbody = mainbody + '<h2 id="' + str(indexnum) +'">' + line.rstrip() + "</h2>"
	        indexlist = indexlist +"<li>" + '<a href="#' + str(indexnum) + '">'  + line.rstrip() + "</a></li>"
	        indexnum += 1
	    elif line[0] == "●":
	        mainbody =  mainbody + "<h3>" + line.rstrip() + "</h3>"
	    else:
	        mainbody =  mainbody + "<p>" + line.rstrip() + "</p>"
indexlist = indexlist +"</ul>" 

で、最後にこの変数をprintです。

print(indexlist) 
print(mainbody)
print(footer)

よし。では、実行して作成されたhtmlファイルをブラウザで開いてみると、

画像1

ばっちり冒頭に表示されておりました。いまのところ、見出しはh2だけを拾っていますが、多少コードを変えればh3も拾えるようになります。

これでかなりepubっぽくなりましたね。いろいろやれば、縦書きだけでなく、横書きもできそうです。たとえば、テキストファイルの冒頭にそれを指示する文字列を置いておき、それを読み込んで、以降の処理を変えるとか、そういうやり方もありそう。

ともあれ、その辺は実際に使いながら細かくカスタマイズを進めていきましょう。とりあえず、当初pythonでやりたかったことが、これで一つ達成できたので、いったん区切りとしておきます。

この記事が気に入ったらサポートをしてみませんか?