Linux Memo 2017年7~12月分

Home First Prev Next Last
【青空テキストファイルからの epub 作成】11-6-2017
【Readium を使ってみる】10-30-2017
【EPUB ファイル作成の工夫】10-23-2017
【傍点の処理】10-16-2017 というように、<em class="sesame_dot">○○</em> を <ruby>○</ruby><ruby>○</ruby> に置き換えたわけです。
  • もとのスタイルでは複数の文字を でくくればいいのですが、ルビにする場合は、 でくくられた中に何文字あるかを調べて、ひとつひとつに「丶」をつけていくようにしなければなりません。
  • 日本語の文字列の場合、Shift_JIS ですと、扱いが面倒ですので、まずはもとの HTML を nkf を使って Shift_JIS から UTF-8 に変換しました。
    $ nkf -w -Lu shiftjis.html > utf8.html
    
    オプション -Lu で改行コードを CRLF から LF にしておきました。もちろん、HTML 内の Shift_JIS も UTF-8 に変えました。
  • 私は perl で文字列から一文字づつを取り出すのに
    @letters = split //, $word;
    
    を使っていますが、これを日本語の文字列にはそのまま使えません。日本語文字は一文字 3バイトから成り立ちますので、工夫が必要です。私は
    utf8::decode($word);
    @letters = split //, $word;
    
    として、split を使う前に utf8::decode を使って、文字列を日本語として処理できるようにしました。
  • こうした方法で書いたのが、次のサブルーチンです。
    sub boten
    {
    # <em class="sesame_dot"> がある文字列を取り込む
    my ($line) = @_;
    # もとの文字列を保存しておく
    $original_line = $line;
    # 一行に複数の <em class="sesame_dot"> があることを想定
    @parts = split /<\/em>/, $line;
    foreach $part (@parts) {
    	if ($part =~ /<em class="[^ ]+">/) {
    		# 傍点の対象となる文字を取り出す
    		$word = $';
    		utf8::decode($word);
    		@letter = split //,$word;
    		utf8::encode($letter);
    		# 一文字づつにルビをつける
    		$string = "";
    		foreach $letter (@letter) {
    			utf8::decode($word);
    			$replace = $string . "<ruby><rb>$letter</rb><rt>丶</rt></ruby>";
    			}
    		$original_line =~ s/<em [^ ]+<\/em>/$replace/;
    		}
    	}
    return "$original_line";
    }		
    
  • 【縦書き CSS】10-9-2017
    【青空文庫の傍点処理】10-2-2017
    【青空文庫の外字画像】9-25-2017
    【複数ファイルから短編集をつくる】9-18-2017
    【epub の縦書き】9-11-2017
    【kindlegen での変換】9-4-2017
    【AozoraEpub3.jar】8-28-2017
    【All DRM Removal for Linux】8-21-2017
    【Kindle DRM Removal】8-14-2017
    【Sigil で ebook を作成】8-7-2017
    【Calibre でつくる eBook】7-31-2017
    【Kindle for PC】7-24-2017
    【Anbox を試す】7-17-2017
    【メールヘッダーの長さ】7-10-2017
    【Xubuntu 17.04 と Dropbox】7-3-2017
    Home First Prev Next Last