青空文庫のルビや傍点をHTMLタグに変換
2015/9/25 [16:46:57] (金) 

小ネタ。
青空文庫形式で書かれたテキストをちょっといじる機会があったんで、例によってperlでごそごそと。
『青空文庫 組版案内』(http://kumihan.aozora.gr.jp)に詳細な資料や、青空記法で書かれたテキストをXHTMLに変換するrubyのスクリプトも提供されている。
青空文庫からXHTMLへはrubyのスクリプトを使わせてもらえばそれで解決なんだけど、用途・前提が青空文庫。当然ながら青空文庫用のcssが埋めこまれる。
電子書籍にするのにそのままでは使えない。
本文で青空記法が使われてるのはルビと傍点、太字程度だったので、その3つをHTMLのタグに変換するスクリプトをでっち上げ。
use strict;
use utf8;
use Encode;
my $emphasis = sub {
my ($w, $t, $tag) = @_;
$w = substr($w, 0, length($w) - length($t));
if($tag eq ’sesami’){
return $w . ’<span class="sesami">’ . $t . ’</span>’;
}
elsif($tag eq ’bold’){
return $w . ’<span style="font-weight:bold">’ . $t . ’</span>’;
}
};
while(<>){
my $line = Encode::decode(’shiftjis’, $_);
$line =~ s!([^[]+)[#「([^」]+)」に傍点]!$emphasis->($1, $2, ’sesami’)!eg;
$line =~ s[#傍点終わり]!<span class="sesami">$1</span>!g;
$line =~ s!([^[]+)[#「([^」]+)」は太字]!$emphasis->($1, $2, ’bold’)!eg;
$line =~ s[#太字終わり]!<span style="font-weight:bold;">$1</span>!g;
$line =~ s![ \||]?([\p{InCJKUnifiedIdeographs}\x{3005}]+[\p{InHiragana}\p{InKatakana}]*)《([\p{InHiragana}\p{InKatakana}]+)》!<ruby>$1<rt>$2</rt></ruby>!g;
$line =~ s!―!─!g;
$line =~ s![(#|*)[^]]+]!!g;
print Encode::encode(’utf8’, $line);
}
perlのスクリプト的には、漢字かななどの判定にUnicodeブロックが便利でおすすめ。
無名サブルーチンも便利。
意外なところで青空記法が使われててちょっとびっくりだった。
テキストデータ利用ということで、ボランティアさんが入力するのに青空記法はわかりやすくていいんだろうなあ。
青空EPUBの現バージョン3-1.1.0b45はepubcheckでエラーになる。
原因はnav.xhtmlのlandmark部、「Undefined property:title-page」で、ここを「titlepage」にすれば大丈夫。

自転車置き場の新顔…のわりに態度がデカイ。

